diff --git a/.gitignore b/.gitignore index 61ecb45ca..8d8833275 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ logs/* !.gitkeep node_modules/ - diff --git a/README.md b/README.md index 362a0e135..b5e156459 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,137 @@ -# angular-seed — the seed for AngularJS apps +# AngularJS Phone Catalog Tutorial Application -This project is an application skeleton for a typical [AngularJS](http://angularjs.org/) web app. -You can use it to quickly bootstrap your angular webapp projects and dev environment for these -projects. +## Overview -The seed contains AngularJS libraries, test libraries and a bunch of scripts all preconfigured for -instant web development gratification. Just clone the repo (or download the zip/tarball), start up -our (or yours) webserver and you are ready to develop and test your application. +This application takes the developer through the process of building a web-application using +angular. The application is loosely based on +[Google phone gallery](http://www.google.com/phone/). Each commit is a separate lesson +teaching a single aspect of angular. -The seed app doesn't do much, just shows how to wire two controllers and views together. You can -check it out by opening app/index.html in your browser (might not work file `file://` scheme in -certain browsers, see note below). -_Note: While angular is client-side-only technology and it's possible to create angular webapps that -don't require a backend server at all, we recommend hosting the project files using a local -webserver during development to avoid issues with security restrictions (sandbox) in browsers. The -sandbox implementation varies between browsers, but quite often prevents things like cookies, xhr, -etc to function properly when an html page is opened via `file://` scheme instead of `http://`._ +## Prerequisites +### Git +- A good place to learn about setting up git is [here][git-github] +- Git [home][git-home] (download, documentation) -## How to use angular-seed +### Node.js +- Generic [installation instructions][node-generic]. +- Mac DMG [here][node-mac] +- Windows download from [here][node-windows]. (You will also need [7 Zip] to unzip the node archive) + (and don't forget to add `node.exe` to your executable path) -Clone the angular-seed repository and start hacking... +## Workings of the application +- The application filesystem layout structure is based on the [angular-seed] project. +- There is no backend (no server) for this application. Instead we fake the XHRs by fetching + static json files. +- Read the Development section at the end to familiarize yourself with running and developing + an angular application. -### Running the app during development +## Commits / Tutorial Outline + +You can check out any point of the tutorial using + git checkout step-? + +To see the changes which between any two lessons use the git diff command. + git diff step-?..step-? + +### step-0 + +- Initial [angular-seed] project layout + + +### step-1 + +- We have converted the seed application by removing all of the boiler-plate code. +- We have added single static HTML file which shows a static list of phones. (we will convert this + static page into dynamic one with the help of angular) + + +### step-2 + +- Converted static page into dynamic one by: + - create a root controller for the application + - extracting the data from HTML into a the controller as a mock dataset + - convert the static document into a template with the use of `ng:` [directive] (iterate over + mock data using [ng:repeat] and render it into a view) +- Added unit test, which mostly shows how one goes about writing a unit test, rather then test + something of value on our mock dataset. + + +### step-3 + +- added a search box to demonstrate how: + - the data-binding works on input fields + - to use [$filter] function + - [ng:repeat] automatically shrinks and grows the number of phones in the view +- added an end-to-end test to: + - show how end-to-end tests are written and used + - to prove that the search box and the repeater are correctly wired together + + +### step-4 + +- replaced the mock data with data loaded from the server (in our case the JSON return is just a + static file) + - The JSON is loaded using the [$xhr] service +- Demonstrate the use of [services][service] and [dependency injection][DI] + - The [$xhr] is injected into the controller through [dependency injection][DI] -You can pick one of these options: -* serve this repository with your webserver -* install node.js and run `scripts/web-server.js` +### step-5 -Then navigate your browser to `http://localhost:/app/index.html` to see the app running in -your browser. +- adding phone image and links to phone pages +- css to style the page just a notch -### Running the app in production +### step-6 -This really depends on how complex is your app and the overall infrastructure of your system, but -the general rule is that all you need in production are all the files under the `app/` directory. -Everything else should be omitted. +- making the order predicate for catalog dynamic + - adding 'predicates' section to the view with links that control the order + - ordering defaults to 'age' property +- css sugar -Angular apps are really just a bunch of static html, css and js files that just need to be hosted -somewhere, where they can be accessed by browsers. -If your Angular app is talking to the backend server via xhr or other means, you need to figure -out what is the best way to host the static files to comply with the same origin policy if -applicable. Usually this is done by hosting the files by the backend server or through -reverse-proxying the backend server(s) and a webserver(s). +### step-7 +- Introduce the [$route] service which allows binding URLs for deep-linking with views + - Replace content of root controller PhonesCtrl with [$route] configuration + - Map `/phones' to PhoneListCtrl and partails/phones-list.html + - Map `/phones/phone-id' to PhoneDetailCtrl and partails/phones-detail.html + - Copy deep linking parameters to root controller `params` property for access in sub controllers + - Replace content of index.html with [ng:view] +- Create PhoneListCtrl view + - Move code which fetches phones data into PhoneListCtrl + - Move existing HTML from index.html to partials/phone-list.html +- Create PhoneDetailsCtrl view + - Wire [$route] service to map `/phanes/phone-id` to map to this controller. + - Empty PhoneDetailsCtrl + - Place holder partials/phane-details.html + +### step-8 + +- Fetch data for and render phone detail view + - [$xhr] to fetch details for a specific phone + - template for the phone detailed view +- CSS to make it look pretty +- Detail data for phones in JSON format + +### step-9 + +- replace [$xhr] with [$resource] + - demonstrate how a resource can be created using a [service] + +## Development with angular-seed + +The following docs apply to all angular-seed projects and since the phonecat tutorial is a project +based on angular-seed, the instructions apply to it as well. + +### Running the app during development + +1. run `./scripts/web-server.js` +2. navigate your browser to `http://localhost:8000/app/index.html` to see the app running in your + browser. ### Running unit tests @@ -56,7 +139,7 @@ We recommend using [jasmine](http://pivotal.github.com/jasmine/) and [Karma](http://karma-runner.github.io) for your unit tests/specs, but you are free to use whatever works for you. -Requires [node.js](http://nodejs.org/), Karma (`sudo npm install -g karma`) and a local +Requires [node.js](http://nodejs.org/), Karma (`sudo npm install -g karma karma-jasmine karma-chrome-launcher`) and a local or remote browser. * start `scripts/test.sh` (on windows: `scripts\test.bat`) @@ -75,6 +158,7 @@ Check out the [end-to-end runner's documentation](http://docs.angularjs.org/guide/dev_guide.e2e-testing) for more info. +* Install the Karma ng-scenario adapter with `npm install -g karma-ng-scenario` * create your end-to-end tests in `test/e2e/scenarios.js` * serve your project directory with your http/backend server or node.js + `scripts/web-server.js` * to run do one of: @@ -82,22 +166,8 @@ info. * run the tests from console with [Karma](http://karma-runner.github.io) via `scripts/e2e-test.sh` or `script/e2e-test.bat` -### Continuous Integration - -CloudBees have provided a CI/deployment setup: - - - -If you run this, you will get a cloned version of this repo to start working on in a private git repo, -along with a CI service (in Jenkins) hosted that will run unit and end to end tests in both Firefox and Chrome. -### Receiving updates from upstream - -When we upgrade angular-seed's repo with newer angular or testing library code, you can just -fetch the changes and merge them into your project with git. - - -## Directory Layout +## Application Directory Layout app/ --> all of the files to be used in production css/ --> css files @@ -149,3 +219,21 @@ fetch the changes and merge them into your project with git. ## Contact For more information on AngularJS please check out http://angularjs.org/ + +[7 Zip]: http://www.7-zip.org/ +[angular-seed]: https://github.com/angular/angular-seed +[DI]: http://docs.angularjs.org/#!guide.di +[directive]: http://docs.angularjs.org/#!angular.directive +[$filter]: http://docs.angularjs.org/#!angular.Array.filter +[git-home]: http://git-scm.com +[git-github]: http://help.github.com/set-up-git-redirect +[ng:repeat]: http://docs.angularjs.org/#!angular.widget.@ng:repeat +[ng:view]: http://docs.angularjs.org/#!angular.widget.ng:view +[node-mac]: http://code.google.com/p/rudix/downloads/detail?name=node-0.4.0-0.dmg&can=2&q= +[node-windows]: http://node-js.prcn.co.cc/ +[node-generic]: https://github.com/joyent/node/wiki/Installation +[java]: http://www.java.com +[$resource]: http://docs.angularjs.org/#!angular.service.$resource +[$rouet]: http://docs.angularjs.org/#!angular.service.$route +[service]: http://docs.angularjs.org/#!angular.service +[$xhr]: http://docs.angularjs.org/#!angular.service.$xhr diff --git a/app/css/animations.css b/app/css/animations.css new file mode 100644 index 000000000..46f3da6ec --- /dev/null +++ b/app/css/animations.css @@ -0,0 +1,97 @@ +/* + * animations css stylesheet + */ + +/* animate ngRepeat in phone listing */ + +.phone-listing.ng-enter, +.phone-listing.ng-leave, +.phone-listing.ng-move { + -webkit-transition: 0.5s linear all; + -moz-transition: 0.5s linear all; + -o-transition: 0.5s linear all; + transition: 0.5s linear all; +} + +.phone-listing.ng-enter, +.phone-listing.ng-move { + opacity: 0; + height: 0; + overflow: hidden; +} + +.phone-listing.ng-move.ng-move-active, +.phone-listing.ng-enter.ng-enter-active { + opacity: 1; + height: 120px; +} + +.phone-listing.ng-leave { + opacity: 1; + overflow: hidden; +} + +.phone-listing.ng-leave.ng-leave-active { + opacity: 0; + height: 0; + padding-top: 0; + padding-bottom: 0; +} + +/* cross fading between routes with ngView */ + +.view-container { + position: relative; +} + +.view-frame.ng-enter, +.view-frame.ng-leave { + background: white; + position: absolute; + top: 0; + left: 0; + right: 0; +} + +.view-frame.ng-enter { + -webkit-animation: 0.5s fade-in; + -moz-animation: 0.5s fade-in; + -o-animation: 0.5s fade-in; + animation: 0.5s fade-in; + z-index: 100; +} + +.view-frame.ng-leave { + -webkit-animation: 0.5s fade-out; + -moz-animation: 0.5s fade-out; + -o-animation: 0.5s fade-out; + animation: 0.5s fade-out; + z-index: 99; +} + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} +@-moz-keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} +@-webkit-keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} +@-moz-keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} +@-webkit-keyframes fade-out { + from { opacity: 1; } + to { opacity: 0; } +} + diff --git a/app/css/app.css b/app/css/app.css index c92524070..8e2ff4db1 100644 --- a/app/css/app.css +++ b/app/css/app.css @@ -1,30 +1,92 @@ /* app css stylesheet */ -.menu { +body { + padding-top: 20px; +} + + +.phone-images { + width: 450px; + height: 450px; + overflow: hidden; + position: relative; + float: left; +} + +.phones { list-style: none; - border-bottom: 0.1em solid black; +} + +.thumb { + float: left; + margin: -1em 1em 1.5em 0em; + padding-bottom: 1em; + height: 100px; + width: 100px; +} + +.phones li { + clear: both; + height: 100px; + padding-top: 15px; +} + +/** Detail View **/ +img.phone { + float: left; + margin-right: 3em; margin-bottom: 2em; - padding: 0 0 0.5em; + background-color: white; + padding: 2em; + height: 400px; + width: 400px; } -.menu:before { - content: "["; +ul.phone-thumbs { + margin: 0; + list-style: none; } -.menu:after { - content: "]"; +ul.phone-thumbs li { + border: 1px solid black; + display: inline-block; + margin: 1em; + background-color: white; } -.menu > li { - display: inline; +ul.phone-thumbs img { + height: 100px; + width: 100px; + padding: 1em; } -.menu > li:before { - content: "|"; - padding-right: 0.3em; +ul.phone-thumbs img:hover { + cursor: pointer; } -.menu > li:nth-child(1):before { - content: ""; + +ul.specs { + clear: both; + margin: 0; padding: 0; + list-style: none; +} + +ul.specs > li{ + display: inline-block; + width: 200px; + vertical-align: top; +} + +ul.specs > li > span{ + font-weight: bold; + font-size: 1.2em; +} + +ul.specs dt { + font-weight: bold; +} + +h1 { + border-bottom: 1px solid gray; } diff --git a/app/css/bootstrap-responsive.css b/app/css/bootstrap-responsive.css new file mode 100644 index 000000000..7f669d573 --- /dev/null +++ b/app/css/bootstrap-responsive.css @@ -0,0 +1,808 @@ +/*! + * Bootstrap Responsive v2.0.3 + * + * 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. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + 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: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +@media (max-width: 767px) { + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 18px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-group > label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .modal { + position: absolute; + top: 10px; + right: 10px; + left: 10px; + width: auto; + margin: 0; + } + .modal.fade.in { + top: auto; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + [class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: auto; + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + margin-left: 20px; + } + .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 28px; + margin-left: 2.762430939%; + *margin-left: 2.709239449638298%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .span12 { + width: 99.999999993%; + *width: 99.9468085036383%; + } + .row-fluid .span11 { + width: 91.436464082%; + *width: 91.38327259263829%; + } + .row-fluid .span10 { + width: 82.87292817100001%; + *width: 82.8197366816383%; + } + .row-fluid .span9 { + width: 74.30939226%; + *width: 74.25620077063829%; + } + .row-fluid .span8 { + width: 65.74585634900001%; + *width: 65.6926648596383%; + } + .row-fluid .span7 { + width: 57.182320438000005%; + *width: 57.129128948638304%; + } + .row-fluid .span6 { + width: 48.618784527%; + *width: 48.5655930376383%; + } + .row-fluid .span5 { + width: 40.055248616%; + *width: 40.0020571266383%; + } + .row-fluid .span4 { + width: 31.491712705%; + *width: 31.4385212156383%; + } + .row-fluid .span3 { + width: 22.928176794%; + *width: 22.874985304638297%; + } + .row-fluid .span2 { + width: 14.364640883%; + *width: 14.311449393638298%; + } + .row-fluid .span1 { + width: 5.801104972%; + *width: 5.747913482638298%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 714px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 652px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 590px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 528px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 466px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 404px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 342px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 280px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 218px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 156px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 94px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 32px; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + margin-left: 30px; + } + .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 28px; + margin-left: 2.564102564%; + *margin-left: 2.510911074638298%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145300001%; + *width: 91.3997999636383%; + } + .row-fluid .span10 { + width: 82.905982906%; + *width: 82.8527914166383%; + } + .row-fluid .span9 { + width: 74.358974359%; + *width: 74.30578286963829%; + } + .row-fluid .span8 { + width: 65.81196581200001%; + *width: 65.7587743226383%; + } + .row-fluid .span7 { + width: 57.264957265%; + *width: 57.2117657756383%; + } + .row-fluid .span6 { + width: 48.717948718%; + *width: 48.6647572286383%; + } + .row-fluid .span5 { + width: 40.170940171000005%; + *width: 40.117748681638304%; + } + .row-fluid .span4 { + width: 31.623931624%; + *width: 31.5707401346383%; + } + .row-fluid .span3 { + width: 23.076923077%; + *width: 23.0237315876383%; + } + .row-fluid .span2 { + width: 14.529914530000001%; + *width: 14.4767230406383%; + } + .row-fluid .span1 { + width: 5.982905983%; + *width: 5.929714493638298%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1160px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1060px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 960px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 860px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 760px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 660px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 560px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 460px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 360px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 260px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 160px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 60px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top { + position: static; + margin-bottom: 18px; + } + .navbar-fixed-top .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 9px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #999999; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 6px 15px; + font-weight: bold; + color: #999999; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .dropdown-menu a:hover { + background-color: #222222; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: block; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 9px 15px; + margin: 9px 0; + border-top: 1px solid #222222; + border-bottom: 1px solid #222222; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/app/css/bootstrap-responsive.min.css b/app/css/bootstrap-responsive.min.css new file mode 100644 index 000000000..dd134a1bd --- /dev/null +++ b/app/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.0.3 + * + * 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. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.762430939%;*margin-left:2.709239449638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.564102564%;*margin-left:2.510911074638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top{position:static;margin-bottom:18px}.navbar-fixed-top .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 9px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/app/css/bootstrap.css b/app/css/bootstrap.css new file mode 100644 index 000000000..09e2833dc --- /dev/null +++ b/app/css/bootstrap.css @@ -0,0 +1,4960 @@ +/*! + * Bootstrap v2.0.3 + * + * 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 { + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +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, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +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; +} + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + 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: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + line-height: 18px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover { + color: #005580; + text-decoration: underline; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + margin-left: 20px; +} + +.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; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 28px; + margin-left: 2.127659574%; + *margin-left: 2.0744680846382977%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .span12 { + width: 99.99999998999999%; + *width: 99.94680850063828%; +} + +.row-fluid .span11 { + width: 91.489361693%; + *width: 91.4361702036383%; +} + +.row-fluid .span10 { + width: 82.97872339599999%; + *width: 82.92553190663828%; +} + +.row-fluid .span9 { + width: 74.468085099%; + *width: 74.4148936096383%; +} + +.row-fluid .span8 { + width: 65.95744680199999%; + *width: 65.90425531263828%; +} + +.row-fluid .span7 { + width: 57.446808505%; + *width: 57.3936170156383%; +} + +.row-fluid .span6 { + width: 48.93617020799999%; + *width: 48.88297871863829%; +} + +.row-fluid .span5 { + width: 40.425531911%; + *width: 40.3723404216383%; +} + +.row-fluid .span4 { + width: 31.914893614%; + *width: 31.8617021246383%; +} + +.row-fluid .span3 { + width: 23.404255317%; + *width: 23.3510638276383%; +} + +.row-fluid .span2 { + width: 14.89361702%; + *width: 14.8404255306383%; +} + +.row-fluid .span1 { + width: 6.382978723%; + *width: 6.329787233638298%; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 9px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + line-height: 18px; +} + +p small { + font-size: 11px; + color: #999999; +} + +.lead { + margin-bottom: 18px; + font-size: 20px; + font-weight: 200; + line-height: 27px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + font-family: inherit; + font-weight: bold; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + color: #999999; +} + +h1 { + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 36px; +} + +h2 small { + font-size: 18px; +} + +h3 { + font-size: 18px; + line-height: 27px; +} + +h3 small { + font-size: 14px; +} + +h4, +h5, +h6 { + line-height: 18px; +} + +h4 { + font-size: 14px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 12px; +} + +h6 { + font-size: 11px; + color: #999999; + text-transform: uppercase; +} + +.page-header { + padding-bottom: 17px; + margin: 18px 0; + border-bottom: 1px solid #eeeeee; +} + +.page-header h1 { + line-height: 1; +} + +ul, +ol { + padding: 0; + margin: 0 0 9px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +dl { + margin-bottom: 18px; +} + +dt, +dd { + line-height: 18px; +} + +dt { + font-weight: bold; + line-height: 17px; +} + +dd { + margin-left: 9px; +} + +.dl-horizontal dt { + float: left; + width: 120px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 130px; +} + +hr { + margin: 18px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +.muted { + color: #999999; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #ddd; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 18px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 22.5px; +} + +blockquote small { + display: block; + line-height: 18px; + 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; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 18px; + font-style: normal; + line-height: 18px; +} + +small { + font-size: 100%; +} + +cite { + font-style: normal; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Menlo, Monaco, 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; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 8.5px; + margin: 0 0 9px; + font-size: 12.025px; + line-height: 18px; + 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: 18px; +} + +pre code { + padding: 0; + color: inherit; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 18px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 27px; + font-size: 19.5px; + line-height: 36px; + color: #333333; + border: 0; + border-bottom: 1px solid #eee; +} + +legend small { + font-size: 13.5px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 13px; + font-weight: normal; + line-height: 18px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; + color: #333333; +} + +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + margin-bottom: 9px; + font-size: 13px; + line-height: 18px; + color: #555555; + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +label input, +label textarea, +label select { + display: block; +} + +input[type="image"], +input[type="checkbox"], +input[type="radio"] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE7 */ + + line-height: normal; + cursor: pointer; + background-color: transparent; + border: 0 \9; + /* IE9 and down */ + + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +input[type="image"] { + border: 0; +} + +input[type="file"] { + width: auto; + padding: initial; + line-height: initial; + background-color: #ffffff; + background-color: initial; + border: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +input[type="button"], +input[type="reset"], +input[type="submit"] { + width: auto; + height: auto; +} + +select, +input[type="file"] { + height: 28px; + /* 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: 28px; +} + +input[type="file"] { + line-height: 18px \9; +} + +select { + width: 220px; + background-color: #ffffff; +} + +select[multiple], +select[size] { + height: auto; +} + +input[type="image"] { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +textarea { + height: auto; +} + +input[type="hidden"] { + display: none; +} + +.radio, +.checkbox { + min-height: 18px; + padding-left: 18px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -18px; +} + +.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, +textarea { + -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; + -ms-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; +} + +input:focus, +textarea: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="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus, +select:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.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, +textarea, +.uneditable-input { + margin-left: 0; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 930px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 850px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 770px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 690px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 610px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 530px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 450px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 370px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 290px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 210px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 130px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 50px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; + border-color: #ddd; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning > label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; + border-color: #c09853; +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: 0 0 6px #dbc59e; + -moz-box-shadow: 0 0 6px #dbc59e; + box-shadow: 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 > label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; + border-color: #b94a48; +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: 0 0 6px #d59392; + -moz-box-shadow: 0 0 6px #d59392; + box-shadow: 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 > label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; + border-color: #468847; +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: 0 0 6px #7aba7b; + -moz-box-shadow: 0 0 6px #7aba7b; + box-shadow: 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; +} + +input:focus:required:invalid, +textarea:focus:required:invalid, +select:focus:required:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:required:invalid:focus, +textarea:focus:required:invalid:focus, +select:focus:required: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: 17px 20px 18px; + margin-top: 18px; + margin-bottom: 18px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; + cursor: not-allowed; + background-color: #ffffff; + border-color: #eee; + -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); +} + +:-moz-placeholder { + color: #999999; +} + +::-webkit-input-placeholder { + color: #999999; +} + +.help-block, +.help-inline { + color: #555555; +} + +.help-block { + display: block; + margin-bottom: 9px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-prepend, +.input-append { + margin-bottom: 5px; +} + +.input-prepend input, +.input-append input, +.input-prepend select, +.input-append select, +.input-prepend .uneditable-input, +.input-append .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: middle; + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.input-prepend input:focus, +.input-append input:focus, +.input-prepend select:focus, +.input-append select:focus, +.input-prepend .uneditable-input:focus, +.input-append .uneditable-input:focus { + z-index: 2; +} + +.input-prepend .uneditable-input, +.input-append .uneditable-input { + border-left-color: #ccc; +} + +.input-prepend .add-on, +.input-append .add-on { + display: inline-block; + width: auto; + height: 18px; + min-width: 16px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + vertical-align: middle; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-prepend .add-on, +.input-append .add-on, +.input-prepend .btn, +.input-append .btn { + margin-left: -1px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend .active, +.input-append .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: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-append .uneditable-input { + border-right-color: #ccc; + border-left-color: #eee; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 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 .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.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: 14px; + -moz-border-radius: 14px; + border-radius: 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; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label { + 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: 9px; +} + +legend + .control-group { + margin-top: 18px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 18px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 140px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 160px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 160px; +} + +.form-horizontal .help-block { + margin-top: 9px; + margin-bottom: 0; +} + +.form-horizontal .form-actions { + padding-left: 160px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 18px; +} + +.table th, +.table td { + padding: 8px; + line-height: 18px; + 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-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapsed; + 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 { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; + -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 { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-striped tbody tr:nth-child(odd) td, +.table-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} + +.table tbody tr:hover td, +.table tbody tr:hover th { + background-color: #f5f5f5; +} + +table .span1 { + float: none; + width: 44px; + margin-left: 0; +} + +table .span2 { + float: none; + width: 124px; + margin-left: 0; +} + +table .span3 { + float: none; + width: 204px; + margin-left: 0; +} + +table .span4 { + float: none; + width: 284px; + margin-left: 0; +} + +table .span5 { + float: none; + width: 364px; + margin-left: 0; +} + +table .span6 { + float: none; + width: 444px; + margin-left: 0; +} + +table .span7 { + float: none; + width: 524px; + margin-left: 0; +} + +table .span8 { + float: none; + width: 604px; + margin-left: 0; +} + +table .span9 { + float: none; + width: 684px; + margin-left: 0; +} + +table .span10 { + float: none; + width: 764px; + margin-left: 0; +} + +table .span11 { + float: none; + width: 844px; + margin-left: 0; +} + +table .span12 { + float: none; + width: 924px; + margin-left: 0; +} + +table .span13 { + float: none; + width: 1004px; + margin-left: 0; +} + +table .span14 { + float: none; + width: 1084px; + margin-left: 0; +} + +table .span15 { + float: none; + width: 1164px; + margin-left: 0; +} + +table .span16 { + float: none; + width: 1244px; + margin-left: 0; +} + +table .span17 { + float: none; + width: 1324px; + margin-left: 0; +} + +table .span18 { + float: none; + width: 1404px; + margin-left: 0; +} + +table .span19 { + float: none; + width: 1484px; + margin-left: 0; +} + +table .span20 { + float: none; + width: 1564px; + margin-left: 0; +} + +table .span21 { + float: none; + width: 1644px; + margin-left: 0; +} + +table .span22 { + float: none; + width: 1724px; + margin-left: 0; +} + +table .span23 { + float: none; + width: 1804px; + margin-left: 0; +} + +table .span24 { + float: none; + width: 1884px; + margin-left: 0; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + *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; +} + +[class^="icon-"]:last-child, +[class*=" icon-"]:last-child { + *margin-left: 0; +} + +.icon-white { + 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 { + 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 { + 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: ""; + opacity: 0.3; + filter: alpha(opacity=30); +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown:hover .caret, +.open .caret { + opacity: 1; + filter: alpha(opacity=100); +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 4px 0; + margin: 1px 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: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -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: 8px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu a { + display: block; + padding: 3px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu li > a:hover, +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #0088cc; +} + +.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: "\2191"; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.typeahead { + 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 #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -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; + filter: alpha(opacity=0); + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; + filter: alpha(opacity=100); +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -ms-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: 18px; + 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 10px 4px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 13px; + line-height: 18px; + *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: -ms-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(top, #ffffff, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', 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] { + 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-color: #e6e6e6; + *background-color: #d9d9d9; + /* Buttons in IE7 don't get borders, so darken on hover */ + + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -ms-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-color: #e6e6e6; + background-color: #d9d9d9 \9; + 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-color: #e6e6e6; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 9px 14px; + font-size: 15px; + line-height: normal; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.btn-large [class^="icon-"] { + margin-top: 1px; +} + +.btn-small { + padding: 5px 9px; + font-size: 11px; + line-height: 16px; +} + +.btn-small [class^="icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 2px 6px; + font-size: 11px; + line-height: 14px; +} + +.btn-primary, +.btn-primary:hover, +.btn-warning, +.btn-warning:hover, +.btn-danger, +.btn-danger:hover, +.btn-success, +.btn-success:hover, +.btn-info, +.btn-info:hover, +.btn-inverse, +.btn-inverse:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.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: #ccc; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn-primary { + background-color: #0074cc; + *background-color: #0055cc; + background-image: -ms-linear-gradient(top, #0088cc, #0055cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); + background-image: -o-linear-gradient(top, #0088cc, #0055cc); + background-image: -moz-linear-gradient(top, #0088cc, #0055cc); + background-image: linear-gradient(top, #0088cc, #0055cc); + background-repeat: repeat-x; + border-color: #0055cc #0055cc #003580; + 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='#0088cc', endColorstr='#0055cc', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + background-color: #0055cc; + *background-color: #004ab3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #004099 \9; +} + +.btn-warning { + background-color: #faa732; + *background-color: #f89406; + background-image: -ms-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: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(top, #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='#fbb450', endColorstr='#f89406', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + background-color: #da4f49; + *background-color: #bd362f; + background-image: -ms-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: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(top, #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='#ee5f5b', endColorstr='#bd362f', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + background-color: #5bb75b; + *background-color: #51a351; + background-image: -ms-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: -moz-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(top, #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='#62c462', endColorstr='#51a351', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -ms-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: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(top, #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='#5bc0de', endColorstr='#2f96b4', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + background-color: #414141; + *background-color: #222222; + background-image: -ms-linear-gradient(top, #555555, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); + background-image: -webkit-linear-gradient(top, #555555, #222222); + background-image: -o-linear-gradient(top, #555555, #222222); + background-image: -moz-linear-gradient(top, #555555, #222222); + background-image: linear-gradient(top, #555555, #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='#555555', endColorstr='#222222', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 2px; + *padding-bottom: 2px; +} + +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-group { + position: relative; + *margin-left: .3em; + *zoom: 1; +} + +.btn-group:before, +.btn-group:after { + display: table; + content: ""; +} + +.btn-group:after { + clear: both; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 9px; + margin-bottom: 9px; +} + +.btn-toolbar .btn-group { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group > .btn { + position: relative; + float: left; + margin-left: -1px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.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 > .dropdown-toggle { + *padding-top: 4px; + padding-right: 8px; + *padding-bottom: 4px; + 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-right: 5px; + padding-left: 5px; +} + +.btn-group > .btn-small.dropdown-toggle { + *padding-top: 4px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large.dropdown-toggle { + padding-right: 12px; + 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: #0055cc; +} + +.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: 7px; + margin-left: 0; +} + +.btn:hover .caret, +.open.btn-group .caret { + opacity: 1; + filter: alpha(opacity=100); +} + +.btn-mini .caret { + margin-top: 5px; +} + +.btn-small .caret { + margin-top: 6px; +} + +.btn-large .caret { + margin-top: 6px; + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.dropup .btn-large .caret { + border-top: 0; + border-bottom: 5px solid #000000; +} + +.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; + opacity: 0.75; + filter: alpha(opacity=75); +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 18px; + color: #c09853; + 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-heading { + color: inherit; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 18px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.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: 18px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > .pull-right { + float: right; +} + +.nav .nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 18px; + 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-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 8px 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; + 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: 18px; + 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-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 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 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.nav-tabs .dropdown-toggle .caret, +.nav-pills .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav-tabs .dropdown-toggle:hover .caret, +.nav-pills .dropdown-toggle:hover .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +.nav-tabs .active .dropdown-toggle .caret, +.nav-pills .active .dropdown-toggle .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.nav > .dropdown.active > a:hover { + color: #000000; + 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; + 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; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 18px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #2c2c2c; + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; +} + +.navbar { + color: #999999; +} + +.navbar .brand:hover { + text-decoration: none; +} + +.navbar .brand { + display: block; + float: left; + padding: 8px 20px 12px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + line-height: 1; + color: #999999; +} + +.navbar .navbar-text { + margin-bottom: 0; + line-height: 40px; +} + +.navbar .navbar-link { + color: #999999; +} + +.navbar .navbar-link:hover { + color: #ffffff; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn { + margin: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + 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 { + 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: 6px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 6px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 9px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + color: #ffffff; + background-color: #626262; + border: 1px solid #151515; + -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; + -ms-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-search .search-query:focus, +.navbar-search .search-query.focused { + padding: 5px 10px; + 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-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 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-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; +} + +.navbar .nav > li { + display: block; + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 9px 10px 11px; + line-height: 19px; + color: #999999; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar .btn { + display: inline-block; + padding: 4px 10px 4px; + margin: 5px 5px 6px; + line-height: 18px; +} + +.navbar .btn-group { + padding: 5px 5px 6px; + margin: 0; +} + +.navbar .nav > li > a:hover { + color: #ffffff; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav .active > a, +.navbar .nav .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #222222; +} + +.navbar .divider-vertical { + width: 1px; + height: 40px; + margin: 0 9px; + overflow: hidden; + background-color: #222222; + border-right: 1px solid #333333; +} + +.navbar .nav.pull-right { + margin-right: 0; + margin-left: 10px; +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + background-color: #2c2c2c; + *background-color: #222222; + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + background-image: -moz-linear-gradient(top, #333333, #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='#333333', endColorstr='#222222', 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] { + background-color: #222222; + *background-color: #151515; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #080808 \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 .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 .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 .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 .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown .dropdown-toggle .caret, +.navbar .nav li.dropdown.open .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar .nav li.dropdown.active .caret { + opacity: 1; + filter: alpha(opacity=100); +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + background-color: transparent; +} + +.navbar .nav li.dropdown.active > .dropdown-toggle:hover { + color: #ffffff; +} + +.navbar .pull-right .dropdown-menu, +.navbar .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right .dropdown-menu:before, +.navbar .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right .dropdown-menu:after, +.navbar .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + list-style: none; + background-color: #fbfbfb; + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + background-repeat: repeat-x; + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.breadcrumb li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #999999; +} + +.breadcrumb .active a { + color: #333333; +} + +.pagination { + height: 36px; + margin: 18px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + *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 li { + display: inline; +} + +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + text-decoration: none; + border: 1px solid #ddd; + border-left-width: 0; +} + +.pagination a:hover, +.pagination .active a { + background-color: #f5f5f5; +} + +.pagination .active a { + color: #999999; + cursor: default; +} + +.pagination .disabled span, +.pagination .disabled a, +.pagination .disabled a:hover { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination li:first-child a { + border-left-width: 1px; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.pagination li:last-child a { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pager { + margin-bottom: 18px; + margin-left: 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager a { + 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 a:hover { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next a { + float: right; +} + +.pager .previous a { + float: left; +} + +.pager .disabled a, +.pager .disabled a:hover { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-open .dropdown-menu { + z-index: 2050; +} + +.modal-open .dropdown.open { + *z-index: 2050; +} + +.modal-open .popover { + z-index: 2060; +} + +.modal-open .tooltip { + z-index: 2070; +} + +.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: 50%; + left: 50%; + z-index: 1050; + width: 560px; + margin: -250px 0 0 -280px; + overflow: auto; + 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; + -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; + -ms-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: 50%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-body { + 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; + 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; +} + +.tooltip { + position: absolute; + z-index: 1020; + 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: -2px; +} + +.tooltip.right { + margin-left: 2px; +} + +.tooltip.bottom { + margin-top: 2px; +} + +.tooltip.left { + margin-left: -2px; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top: 5px solid #000000; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; + border-left: 5px solid transparent; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-right: 5px solid #000000; + border-bottom: 5px solid transparent; +} + +.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; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + padding: 5px; +} + +.popover.top { + margin-top: -5px; +} + +.popover.right { + margin-left: 5px; +} + +.popover.bottom { + margin-top: 5px; +} + +.popover.left { + margin-left: -5px; +} + +.popover.top .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top: 5px solid #000000; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-right: 5px solid #000000; + border-bottom: 5px solid transparent; +} + +.popover.bottom .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; + border-left: 5px solid transparent; +} + +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} + +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} + +.popover-inner { + width: 280px; + padding: 3px; + overflow: hidden; + background: #000000; + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -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); +} + +.popover-title { + padding: 9px 15px; + line-height: 1; + background-color: #f5f5f5; + border-bottom: 1px solid #eee; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} + +.popover-content { + padding: 14px; + background-color: #ffffff; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.popover-content p, +.popover-content ul, +.popover-content ol { + margin-bottom: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 18px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 1; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} + +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; +} + +.label, +.badge { + font-size: 10.998px; + 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 { + padding: 1px 4px 2px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding: 1px 9px 2px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +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; +} + +@-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: 18px; + margin-bottom: 18px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -ms-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(top, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', 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 { + width: 0; + height: 18px; + 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(top, #149bdf, #0480be); + background-image: -ms-linear-gradient(top, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', 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; + -ms-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -ms-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .bar { + background-color: #149bdf; + 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: -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: -ms-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: -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: 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 { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-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(top, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar { + 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: -ms-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 { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-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(top, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); +} + +.progress-success.progress-striped .bar { + 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: -ms-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 { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-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(top, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar { + 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: -ms-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 { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -ms-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(top, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); +} + +.progress-warning.progress-striped .bar { + 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: -ms-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: 18px; +} + +.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: 18px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -ms-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel .item > img { + display: block; + line-height: 1; +} + +.carousel .active, +.carousel .next, +.carousel .prev { + display: block; +} + +.carousel .active { + left: 0; +} + +.carousel .next, +.carousel .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel .next { + left: 100%; +} + +.carousel .prev { + left: -100%; +} + +.carousel .next.left, +.carousel .prev.right { + left: 0; +} + +.carousel .active.left { + left: -100%; +} + +.carousel .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: 10px 15px 5px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + color: #ffffff; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + 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 p { + font-size: 18px; + font-weight: 200; + line-height: 27px; + color: inherit; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} diff --git a/app/css/bootstrap.min.css b/app/css/bootstrap.min.css new file mode 100644 index 000000000..1c75d0c07 --- /dev/null +++ b/app/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.0.3 + * + * 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{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}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,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}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}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.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;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.127659574%;*margin-left:2.0744680846382977%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%}.row-fluid .span11{width:91.489361693%;*width:91.4361702036383%}.row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%}.row-fluid .span9{width:74.468085099%;*width:74.4148936096383%}.row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%}.row-fluid .span7{width:57.446808505%;*width:57.3936170156383%}.row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%}.row-fluid .span5{width:40.425531911%;*width:40.3723404216383%}.row-fluid .span4{width:31.914893614%;*width:31.8617021246383%}.row-fluid .span3{width:23.404255317%;*width:23.3510638276383%}.row-fluid .span2{width:14.89361702%;*width:14.8404255306383%}.row-fluid .span1{width:6.382978723%;*width:6.329787233638298%}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:""}.container-fluid:after{clear:both}p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px}p small{font-size:11px;color:#999}.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px}h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999}h1{font-size:30px;line-height:36px}h1 small{font-size:18px}h2{font-size:24px;line-height:36px}h2 small{font-size:18px}h3{font-size:18px;line-height:27px}h3 small{font-size:14px}h4,h5,h6{line-height:18px}h4{font-size:14px}h4 small{font-size:12px}h5{font-size:12px}h6{font-size:11px;color:#999;text-transform:uppercase}.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eee}.page-header h1{line-height:1}ul,ol{padding:0;margin:0 0 9px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}ul{list-style:disc}ol{list-style:decimal}li{line-height:18px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:18px}dt,dd{line-height:18px}dt{font-weight:bold;line-height:17px}dd{margin-left:9px}.dl-horizontal dt{float:left;width:120px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:18px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}strong{font-weight:bold}em{font-style:italic}.muted{color:#999}abbr[title]{cursor:help;border-bottom:1px dotted #ddd}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px}blockquote small{display:block;line-height:18px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:18px;font-style:normal;line-height:18px}small{font-size:100%}cite{font-style:normal}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;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:18px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 18px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333;border:0;border-bottom:1px solid #eee}legend small{font-size:13.5px;color:#999}label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px;color:#333}input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555;background-color:#fff;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.uneditable-textarea{width:auto;height:auto}label input,label textarea,label select{display:block}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;background-color:transparent;border:0 \9;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;background-color:#fff;background-color:initial;border:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto}select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px}input[type="file"]{line-height:18px \9}select{width:220px;background-color:#fff}select[multiple],select[size]{height:auto}input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}textarea{height:auto}input[type="hidden"]{display:none}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.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,textarea{-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 .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-ms-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}input:focus,textarea:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \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="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.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,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:930px}input.span11,textarea.span11,.uneditable-input.span11{width:850px}input.span10,textarea.span10,.uneditable-input.span10{width:770px}input.span9,textarea.span9,.uneditable-input.span9{width:690px}input.span8,textarea.span8,.uneditable-input.span8{width:610px}input.span7,textarea.span7,.uneditable-input.span7{width:530px}input.span6,textarea.span6,.uneditable-input.span6{width:450px}input.span5,textarea.span5,.uneditable-input.span5{width:370px}input.span4,textarea.span4,.uneditable-input.span4{width:290px}input.span3,textarea.span3,.uneditable-input.span3{width:210px}input.span2,textarea.span2,.uneditable-input.span2{width:130px}input.span1,textarea.span1,.uneditable-input.span1{width:50px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee;border-color:#ddd}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow: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>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow: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>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow: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}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required: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:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:""}.form-actions:after{clear:both}.uneditable-input{overflow:hidden;white-space:nowrap;cursor:not-allowed;background-color:#fff;border-color:#eee;-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)}:-moz-placeholder{color:#999}::-webkit-input-placeholder{color:#999}.help-block,.help-inline{color:#555}.help-block{display:block;margin-bottom:9px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-prepend,.input-append{margin-bottom:5px}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:middle;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{z-index:2}.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc}.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;height:18px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc}.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend .active,.input-append .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:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .uneditable-input{border-right-color:#ccc;border-left-color:#eee}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 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 .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius: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;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label{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:9px}legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:18px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:9px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:18px}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.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 #ddd}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.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{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-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{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*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}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0}.icon-white{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{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{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 #000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";opacity:.3;filter:alpha(opacity=30)}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100)}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-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:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#08c}.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 #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.typeahead{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 #eee;border:1px solid rgba(0,0,0,0.05);-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;filter:alpha(opacity=0);-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-ms-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1;filter:alpha(opacity=100)}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-ms-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.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 10px 4px;margin-bottom:0;*margin-left:.3em;font-size:13px;line-height:18px;*line-height:20px;color:#333;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:-ms-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(top,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#e6e6e6',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]{background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-color:#d9d9d9 \9;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-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:1px}.btn-small{padding:5px 9px;font-size:11px;line-height:16px}.btn-small [class^="icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:11px;line-height:14px}.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.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:#ccc;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.btn-primary{background-color:#0074cc;*background-color:#05c;background-image:-ms-linear-gradient(top,#08c,#05c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#05c));background-image:-webkit-linear-gradient(top,#08c,#05c);background-image:-o-linear-gradient(top,#08c,#05c);background-image:-moz-linear-gradient(top,#08c,#05c);background-image:linear-gradient(top,#08c,#05c);background-repeat:repeat-x;border-color:#05c #05c #003580;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='#0088cc',endColorstr='#0055cc',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#05c;*background-color:#004ab3}.btn-primary:active,.btn-primary.active{background-color:#004099 \9}.btn-warning{background-color:#faa732;*background-color:#f89406;background-image:-ms-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:-moz-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#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='#fbb450',endColorstr='#f89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{background-color:#da4f49;*background-color:#bd362f;background-image:-ms-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:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#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='#ee5f5b',endColorstr='#bd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{background-color:#5bb75b;*background-color:#51a351;background-image:-ms-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:-moz-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#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='#62c462',endColorstr='#51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{background-color:#49afcd;*background-color:#2f96b4;background-image:-ms-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:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#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='#5bc0de',endColorstr='#2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{background-color:#414141;*background-color:#222;background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:-moz-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#222);background-repeat:repeat-x;border-color:#222 #222 #000;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='#555555',endColorstr='#222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px}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-group{position:relative;*margin-left:.3em;*zoom:1}.btn-group:before,.btn-group:after{display:table;content:""}.btn-group:after{clear:both}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:9px;margin-bottom:9px}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.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>.dropdown-toggle{*padding-top:4px;padding-right:8px;*padding-bottom:4px;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-right:5px;padding-left:5px}.btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px}.btn-group>.btn-large.dropdown-toggle{padding-right:12px;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:#05c}.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:#222}.btn .caret{margin-top:7px;margin-left:0}.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100)}.btn-mini .caret{margin-top:5px}.btn-small .caret{margin-top:6px}.btn-large .caret{margin-top:6px;border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:.75;filter:alpha(opacity=75)}.alert{padding:8px 35px 8px 14px;margin-bottom:18px;color:#c09853;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-heading{color:inherit}.alert .close{position:relative;top:-2px;right:-21px;line-height:18px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.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:18px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999;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:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;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:18px;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:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;cursor:default;background-color:#fff;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:#fff;background-color:#08c}.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-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 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 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.nav>.dropdown.active>a:hover{color:#000;cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;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:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.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:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.navbar{*position:relative;*z-index:2;margin-bottom:18px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#333333',endColorstr='#222222',GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1)}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar{color:#999}.navbar .brand:hover{text-decoration:none}.navbar .brand{display:block;float:left;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999}.navbar .navbar-text{margin-bottom:0;line-height:40px}.navbar .navbar-link{color:#999}.navbar .navbar-link:hover{color:#fff}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;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{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:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#fff;background-color:#626262;border:1px solid #151515;-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;-ms-transition:none;-o-transition:none;transition:none}.navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;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-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom: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-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{display:block;float:left}.navbar .nav>li>a{float:none;padding:9px 10px 11px;line-height:19px;color:#999;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar .btn{display:inline-block;padding:4px 10px 4px;margin:5px 5px 6px;line-height:18px}.navbar .btn-group{padding:5px 5px 6px;margin:0}.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:transparent}.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#fff;text-decoration:none;background-color:#222}.navbar .divider-vertical{width:1px;height:40px;margin:0 9px;overflow:hidden;background-color:#222;border-right:1px solid #333}.navbar .nav.pull-right{margin-right:0;margin-left:10px}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;background-color:#2c2c2c;*background-color:#222;background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-image:-moz-linear-gradient(top,#333,#222);background-repeat:repeat-x;border-color:#222 #222 #000;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='#333333',endColorstr='#222222',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]{background-color:#222;*background-color:#151515}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#080808 \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 .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 .dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .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 .dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100)}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent}.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#fff}.navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{right:13px;left:auto}.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);background-repeat:repeat-x;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#999}.breadcrumb .active a{color:#333}.pagination{height:36px;margin:18px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*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 li{display:inline}.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0}.pagination a:hover,.pagination .active a{background-color:#f5f5f5}.pagination .active a{color:#999;cursor:default}.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999;cursor:default;background-color:transparent}.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pager{margin-bottom:18px;margin-left:0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a{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 a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next a{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover{color:#999;cursor:default;background-color:#fff}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2070}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;background-color:#fff;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;-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 .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-ms-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-body{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 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;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}.tooltip{position:absolute;z-index:1020;display:block;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{margin-top:-2px}.tooltip.right{margin-left:2px}.tooltip.bottom{margin-top:2px}.tooltip.left{margin-left:-2px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px}.popover.top{margin-top:-5px}.popover.right{margin-left:5px}.popover.bottom{margin-top:5px}.popover.left{margin-left:-5px}.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.popover .arrow{position:absolute;width:0;height:0}.popover-inner{width:280px;padding:3px;overflow:hidden;background:#000;background:rgba(0,0,0,0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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)}.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.popover-content{padding:14px;background-color:#fff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:18px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.075);box-shadow:0 1px 1px rgba(0,0,0,0.075)}a.thumbnail:hover{border-color:#08c;-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}.label,.badge{font-size:10.998px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}a.label:hover,a.badge:hover{color:#fff;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:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}@-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:18px;margin-bottom:18px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-ms-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(top,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#f9f9f9',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{width:0;height:18px;font-size:12px;color:#fff;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(top,#149bdf,#0480be);background-image:-ms-linear-gradient(top,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf',endColorstr='#0480be',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;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-ms-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .bar{background-color:#149bdf;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:-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:-ms-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:-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: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{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-ms-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(top,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35',GradientType=0)}.progress-danger.progress-striped .bar{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:-ms-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{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-ms-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(top,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#62c462',endColorstr='#57a957',GradientType=0)}.progress-success.progress-striped .bar{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:-ms-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{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-ms-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(top,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de',endColorstr='#339bb9',GradientType=0)}.progress-info.progress-striped .bar{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:-ms-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{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-ms-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(top,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450',endColorstr='#f89406',GradientType=0)}.progress-warning.progress-striped .bar{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:-ms-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:18px}.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:18px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-ms-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel .item>img{display:block;line-height:1}.carousel .active,.carousel .next,.carousel .prev{display:block}.carousel .active{left:0}.carousel .next,.carousel .prev{position:absolute;top:0;width:100%}.carousel .next{left:100%}.carousel .prev{left:-100%}.carousel .next.left,.carousel .prev.right{left:0}.carousel .active.left{left:-100%}.carousel .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:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:10px 15px 5px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff}.hero-unit{padding:60px;margin-bottom:30px;background-color:#eee;-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 p{font-size:18px;font-weight:200;line-height:27px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden} diff --git a/app/img/glyphicons-halflings-white.png b/app/img/glyphicons-halflings-white.png new file mode 100644 index 000000000..3bf6484a2 Binary files /dev/null and b/app/img/glyphicons-halflings-white.png differ diff --git a/app/img/glyphicons-halflings.png b/app/img/glyphicons-halflings.png new file mode 100644 index 000000000..79bc568c2 Binary files /dev/null and b/app/img/glyphicons-halflings.png differ diff --git a/app/img/phones/dell-streak-7.0.jpg b/app/img/phones/dell-streak-7.0.jpg new file mode 100644 index 000000000..6ed0eea18 Binary files /dev/null and b/app/img/phones/dell-streak-7.0.jpg differ diff --git a/app/img/phones/dell-streak-7.1.jpg b/app/img/phones/dell-streak-7.1.jpg new file mode 100644 index 000000000..5c14774b8 Binary files /dev/null and b/app/img/phones/dell-streak-7.1.jpg differ diff --git a/app/img/phones/dell-streak-7.2.jpg b/app/img/phones/dell-streak-7.2.jpg new file mode 100644 index 000000000..2a896c579 Binary files /dev/null and b/app/img/phones/dell-streak-7.2.jpg differ diff --git a/app/img/phones/dell-streak-7.3.jpg b/app/img/phones/dell-streak-7.3.jpg new file mode 100644 index 000000000..0f3d6505f Binary files /dev/null and b/app/img/phones/dell-streak-7.3.jpg differ diff --git a/app/img/phones/dell-streak-7.4.jpg b/app/img/phones/dell-streak-7.4.jpg new file mode 100644 index 000000000..c32f57b29 Binary files /dev/null and b/app/img/phones/dell-streak-7.4.jpg differ diff --git a/app/img/phones/dell-venue.0.jpg b/app/img/phones/dell-venue.0.jpg new file mode 100644 index 000000000..c9e2636cb Binary files /dev/null and b/app/img/phones/dell-venue.0.jpg differ diff --git a/app/img/phones/dell-venue.1.jpg b/app/img/phones/dell-venue.1.jpg new file mode 100644 index 000000000..51cd65067 Binary files /dev/null and b/app/img/phones/dell-venue.1.jpg differ diff --git a/app/img/phones/dell-venue.2.jpg b/app/img/phones/dell-venue.2.jpg new file mode 100644 index 000000000..4cd7543d7 Binary files /dev/null and b/app/img/phones/dell-venue.2.jpg differ diff --git a/app/img/phones/dell-venue.3.jpg b/app/img/phones/dell-venue.3.jpg new file mode 100644 index 000000000..4de1dd417 Binary files /dev/null and b/app/img/phones/dell-venue.3.jpg differ diff --git a/app/img/phones/dell-venue.4.jpg b/app/img/phones/dell-venue.4.jpg new file mode 100644 index 000000000..f75499740 Binary files /dev/null and b/app/img/phones/dell-venue.4.jpg differ diff --git a/app/img/phones/dell-venue.5.jpg b/app/img/phones/dell-venue.5.jpg new file mode 100644 index 000000000..cac77540d Binary files /dev/null and b/app/img/phones/dell-venue.5.jpg differ diff --git a/app/img/phones/droid-2-global-by-motorola.0.jpg b/app/img/phones/droid-2-global-by-motorola.0.jpg new file mode 100644 index 000000000..2b286ed7b Binary files /dev/null and b/app/img/phones/droid-2-global-by-motorola.0.jpg differ diff --git a/app/img/phones/droid-2-global-by-motorola.1.jpg b/app/img/phones/droid-2-global-by-motorola.1.jpg new file mode 100644 index 000000000..07aa2c2e6 Binary files /dev/null and b/app/img/phones/droid-2-global-by-motorola.1.jpg differ diff --git a/app/img/phones/droid-2-global-by-motorola.2.jpg b/app/img/phones/droid-2-global-by-motorola.2.jpg new file mode 100644 index 000000000..3ac10a351 Binary files /dev/null and b/app/img/phones/droid-2-global-by-motorola.2.jpg differ diff --git a/app/img/phones/droid-pro-by-motorola.0.jpg b/app/img/phones/droid-pro-by-motorola.0.jpg new file mode 100644 index 000000000..7e132696f Binary files /dev/null and b/app/img/phones/droid-pro-by-motorola.0.jpg differ diff --git a/app/img/phones/droid-pro-by-motorola.1.jpg b/app/img/phones/droid-pro-by-motorola.1.jpg new file mode 100644 index 000000000..ed50c5eaf Binary files /dev/null and b/app/img/phones/droid-pro-by-motorola.1.jpg differ diff --git a/app/img/phones/lg-axis.0.jpg b/app/img/phones/lg-axis.0.jpg new file mode 100644 index 000000000..fa4ec1183 Binary files /dev/null and b/app/img/phones/lg-axis.0.jpg differ diff --git a/app/img/phones/lg-axis.1.jpg b/app/img/phones/lg-axis.1.jpg new file mode 100644 index 000000000..00640be94 Binary files /dev/null and b/app/img/phones/lg-axis.1.jpg differ diff --git a/app/img/phones/lg-axis.2.jpg b/app/img/phones/lg-axis.2.jpg new file mode 100644 index 000000000..88447acbc Binary files /dev/null and b/app/img/phones/lg-axis.2.jpg differ diff --git a/app/img/phones/motorola-atrix-4g.0.jpg b/app/img/phones/motorola-atrix-4g.0.jpg new file mode 100644 index 000000000..e05531434 Binary files /dev/null and b/app/img/phones/motorola-atrix-4g.0.jpg differ diff --git a/app/img/phones/motorola-atrix-4g.1.jpg b/app/img/phones/motorola-atrix-4g.1.jpg new file mode 100644 index 000000000..df83f1c6a Binary files /dev/null and b/app/img/phones/motorola-atrix-4g.1.jpg differ diff --git a/app/img/phones/motorola-atrix-4g.2.jpg b/app/img/phones/motorola-atrix-4g.2.jpg new file mode 100644 index 000000000..0aadff3e4 Binary files /dev/null and b/app/img/phones/motorola-atrix-4g.2.jpg differ diff --git a/app/img/phones/motorola-atrix-4g.3.jpg b/app/img/phones/motorola-atrix-4g.3.jpg new file mode 100644 index 000000000..131593375 Binary files /dev/null and b/app/img/phones/motorola-atrix-4g.3.jpg differ diff --git a/app/img/phones/motorola-bravo-with-motoblur.0.jpg b/app/img/phones/motorola-bravo-with-motoblur.0.jpg new file mode 100644 index 000000000..0d8028233 Binary files /dev/null and b/app/img/phones/motorola-bravo-with-motoblur.0.jpg differ diff --git a/app/img/phones/motorola-bravo-with-motoblur.1.jpg b/app/img/phones/motorola-bravo-with-motoblur.1.jpg new file mode 100644 index 000000000..1173844db Binary files /dev/null and b/app/img/phones/motorola-bravo-with-motoblur.1.jpg differ diff --git a/app/img/phones/motorola-bravo-with-motoblur.2.jpg b/app/img/phones/motorola-bravo-with-motoblur.2.jpg new file mode 100644 index 000000000..7958d5b23 Binary files /dev/null and b/app/img/phones/motorola-bravo-with-motoblur.2.jpg differ diff --git a/app/img/phones/motorola-charm-with-motoblur.0.jpg b/app/img/phones/motorola-charm-with-motoblur.0.jpg new file mode 100644 index 000000000..21153dab1 Binary files /dev/null and b/app/img/phones/motorola-charm-with-motoblur.0.jpg differ diff --git a/app/img/phones/motorola-charm-with-motoblur.1.jpg b/app/img/phones/motorola-charm-with-motoblur.1.jpg new file mode 100644 index 000000000..0b64e59ab Binary files /dev/null and b/app/img/phones/motorola-charm-with-motoblur.1.jpg differ diff --git a/app/img/phones/motorola-charm-with-motoblur.2.jpg b/app/img/phones/motorola-charm-with-motoblur.2.jpg new file mode 100644 index 000000000..1fe79930e Binary files /dev/null and b/app/img/phones/motorola-charm-with-motoblur.2.jpg differ diff --git a/app/img/phones/motorola-defy-with-motoblur.0.jpg b/app/img/phones/motorola-defy-with-motoblur.0.jpg new file mode 100644 index 000000000..9453993b4 Binary files /dev/null and b/app/img/phones/motorola-defy-with-motoblur.0.jpg differ diff --git a/app/img/phones/motorola-defy-with-motoblur.1.jpg b/app/img/phones/motorola-defy-with-motoblur.1.jpg new file mode 100644 index 000000000..3eb190be7 Binary files /dev/null and b/app/img/phones/motorola-defy-with-motoblur.1.jpg differ diff --git a/app/img/phones/motorola-defy-with-motoblur.2.jpg b/app/img/phones/motorola-defy-with-motoblur.2.jpg new file mode 100644 index 000000000..30339208b Binary files /dev/null and b/app/img/phones/motorola-defy-with-motoblur.2.jpg differ diff --git a/app/img/phones/motorola-xoom-with-wi-fi.0.jpg b/app/img/phones/motorola-xoom-with-wi-fi.0.jpg new file mode 100644 index 000000000..5f78a0e88 Binary files /dev/null and b/app/img/phones/motorola-xoom-with-wi-fi.0.jpg differ diff --git a/app/img/phones/motorola-xoom-with-wi-fi.1.jpg b/app/img/phones/motorola-xoom-with-wi-fi.1.jpg new file mode 100644 index 000000000..e530574b9 Binary files /dev/null and b/app/img/phones/motorola-xoom-with-wi-fi.1.jpg differ diff --git a/app/img/phones/motorola-xoom-with-wi-fi.2.jpg b/app/img/phones/motorola-xoom-with-wi-fi.2.jpg new file mode 100644 index 000000000..e7a7825af Binary files /dev/null and b/app/img/phones/motorola-xoom-with-wi-fi.2.jpg differ diff --git a/app/img/phones/motorola-xoom-with-wi-fi.3.jpg b/app/img/phones/motorola-xoom-with-wi-fi.3.jpg new file mode 100644 index 000000000..7f408f00f Binary files /dev/null and b/app/img/phones/motorola-xoom-with-wi-fi.3.jpg differ diff --git a/app/img/phones/motorola-xoom-with-wi-fi.4.jpg b/app/img/phones/motorola-xoom-with-wi-fi.4.jpg new file mode 100644 index 000000000..71d8f0c58 Binary files /dev/null and b/app/img/phones/motorola-xoom-with-wi-fi.4.jpg differ diff --git a/app/img/phones/motorola-xoom-with-wi-fi.5.jpg b/app/img/phones/motorola-xoom-with-wi-fi.5.jpg new file mode 100644 index 000000000..ba44b3171 Binary files /dev/null and b/app/img/phones/motorola-xoom-with-wi-fi.5.jpg differ diff --git a/app/img/phones/motorola-xoom.0.jpg b/app/img/phones/motorola-xoom.0.jpg new file mode 100644 index 000000000..8f895552b Binary files /dev/null and b/app/img/phones/motorola-xoom.0.jpg differ diff --git a/app/img/phones/motorola-xoom.1.jpg b/app/img/phones/motorola-xoom.1.jpg new file mode 100644 index 000000000..cdca56de0 Binary files /dev/null and b/app/img/phones/motorola-xoom.1.jpg differ diff --git a/app/img/phones/motorola-xoom.2.jpg b/app/img/phones/motorola-xoom.2.jpg new file mode 100644 index 000000000..aa138d8e5 Binary files /dev/null and b/app/img/phones/motorola-xoom.2.jpg differ diff --git a/app/img/phones/nexus-s.0.jpg b/app/img/phones/nexus-s.0.jpg new file mode 100644 index 000000000..0c4b73ff0 Binary files /dev/null and b/app/img/phones/nexus-s.0.jpg differ diff --git a/app/img/phones/nexus-s.1.jpg b/app/img/phones/nexus-s.1.jpg new file mode 100644 index 000000000..7bfc751df Binary files /dev/null and b/app/img/phones/nexus-s.1.jpg differ diff --git a/app/img/phones/nexus-s.2.jpg b/app/img/phones/nexus-s.2.jpg new file mode 100644 index 000000000..84e392e99 Binary files /dev/null and b/app/img/phones/nexus-s.2.jpg differ diff --git a/app/img/phones/nexus-s.3.jpg b/app/img/phones/nexus-s.3.jpg new file mode 100644 index 000000000..872e4d8b9 Binary files /dev/null and b/app/img/phones/nexus-s.3.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.0.jpg b/app/img/phones/samsung-galaxy-tab.0.jpg new file mode 100644 index 000000000..80c403742 Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.0.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.1.jpg b/app/img/phones/samsung-galaxy-tab.1.jpg new file mode 100644 index 000000000..ea451fff4 Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.1.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.2.jpg b/app/img/phones/samsung-galaxy-tab.2.jpg new file mode 100644 index 000000000..e7f440509 Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.2.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.3.jpg b/app/img/phones/samsung-galaxy-tab.3.jpg new file mode 100644 index 000000000..9b06ef3cd Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.3.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.4.jpg b/app/img/phones/samsung-galaxy-tab.4.jpg new file mode 100644 index 000000000..e043d33f3 Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.4.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.5.jpg b/app/img/phones/samsung-galaxy-tab.5.jpg new file mode 100644 index 000000000..1f054b6d4 Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.5.jpg differ diff --git a/app/img/phones/samsung-galaxy-tab.6.jpg b/app/img/phones/samsung-galaxy-tab.6.jpg new file mode 100644 index 000000000..87d3ba80d Binary files /dev/null and b/app/img/phones/samsung-galaxy-tab.6.jpg differ diff --git a/app/img/phones/samsung-gem.0.jpg b/app/img/phones/samsung-gem.0.jpg new file mode 100644 index 000000000..3ca91415e Binary files /dev/null and b/app/img/phones/samsung-gem.0.jpg differ diff --git a/app/img/phones/samsung-gem.1.jpg b/app/img/phones/samsung-gem.1.jpg new file mode 100644 index 000000000..addd1bf2b Binary files /dev/null and b/app/img/phones/samsung-gem.1.jpg differ diff --git a/app/img/phones/samsung-gem.2.jpg b/app/img/phones/samsung-gem.2.jpg new file mode 100644 index 000000000..3d2e9b09e Binary files /dev/null and b/app/img/phones/samsung-gem.2.jpg differ diff --git a/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg new file mode 100644 index 000000000..f111c6b75 Binary files /dev/null and b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.0.jpg differ diff --git a/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.1.jpg b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.1.jpg new file mode 100644 index 000000000..8a66c7037 Binary files /dev/null and b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.1.jpg differ diff --git a/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.2.jpg b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.2.jpg new file mode 100644 index 000000000..d7f4aa7c4 Binary files /dev/null and b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.2.jpg differ diff --git a/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.3.jpg b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.3.jpg new file mode 100644 index 000000000..b584bfb83 Binary files /dev/null and b/app/img/phones/samsung-mesmerize-a-galaxy-s-phone.3.jpg differ diff --git a/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg b/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg new file mode 100644 index 000000000..f111c6b75 Binary files /dev/null and b/app/img/phones/samsung-showcase-a-galaxy-s-phone.0.jpg differ diff --git a/app/img/phones/samsung-showcase-a-galaxy-s-phone.1.jpg b/app/img/phones/samsung-showcase-a-galaxy-s-phone.1.jpg new file mode 100644 index 000000000..8a66c7037 Binary files /dev/null and b/app/img/phones/samsung-showcase-a-galaxy-s-phone.1.jpg differ diff --git a/app/img/phones/samsung-showcase-a-galaxy-s-phone.2.jpg b/app/img/phones/samsung-showcase-a-galaxy-s-phone.2.jpg new file mode 100644 index 000000000..d7f4aa7c4 Binary files /dev/null and b/app/img/phones/samsung-showcase-a-galaxy-s-phone.2.jpg differ diff --git a/app/img/phones/samsung-transform.0.jpg b/app/img/phones/samsung-transform.0.jpg new file mode 100644 index 000000000..8d1aa87b6 Binary files /dev/null and b/app/img/phones/samsung-transform.0.jpg differ diff --git a/app/img/phones/samsung-transform.1.jpg b/app/img/phones/samsung-transform.1.jpg new file mode 100644 index 000000000..6287e2539 Binary files /dev/null and b/app/img/phones/samsung-transform.1.jpg differ diff --git a/app/img/phones/samsung-transform.2.jpg b/app/img/phones/samsung-transform.2.jpg new file mode 100644 index 000000000..9daaadab3 Binary files /dev/null and b/app/img/phones/samsung-transform.2.jpg differ diff --git a/app/img/phones/samsung-transform.3.jpg b/app/img/phones/samsung-transform.3.jpg new file mode 100644 index 000000000..b0607bef9 Binary files /dev/null and b/app/img/phones/samsung-transform.3.jpg differ diff --git a/app/img/phones/samsung-transform.4.jpg b/app/img/phones/samsung-transform.4.jpg new file mode 100644 index 000000000..11584d5db Binary files /dev/null and b/app/img/phones/samsung-transform.4.jpg differ diff --git a/app/img/phones/sanyo-zio.0.jpg b/app/img/phones/sanyo-zio.0.jpg new file mode 100644 index 000000000..08aafe1a4 Binary files /dev/null and b/app/img/phones/sanyo-zio.0.jpg differ diff --git a/app/img/phones/sanyo-zio.1.jpg b/app/img/phones/sanyo-zio.1.jpg new file mode 100644 index 000000000..f4aa3c28e Binary files /dev/null and b/app/img/phones/sanyo-zio.1.jpg differ diff --git a/app/img/phones/sanyo-zio.2.jpg b/app/img/phones/sanyo-zio.2.jpg new file mode 100644 index 000000000..b7caf629b Binary files /dev/null and b/app/img/phones/sanyo-zio.2.jpg differ diff --git a/app/img/phones/t-mobile-g2.0.jpg b/app/img/phones/t-mobile-g2.0.jpg new file mode 100644 index 000000000..8b30b4a04 Binary files /dev/null and b/app/img/phones/t-mobile-g2.0.jpg differ diff --git a/app/img/phones/t-mobile-g2.1.jpg b/app/img/phones/t-mobile-g2.1.jpg new file mode 100644 index 000000000..61a3eaa65 Binary files /dev/null and b/app/img/phones/t-mobile-g2.1.jpg differ diff --git a/app/img/phones/t-mobile-g2.2.jpg b/app/img/phones/t-mobile-g2.2.jpg new file mode 100644 index 000000000..7ad28f57b Binary files /dev/null and b/app/img/phones/t-mobile-g2.2.jpg differ diff --git a/app/img/phones/t-mobile-mytouch-4g.0.jpg b/app/img/phones/t-mobile-mytouch-4g.0.jpg new file mode 100644 index 000000000..671dbb032 Binary files /dev/null and b/app/img/phones/t-mobile-mytouch-4g.0.jpg differ diff --git a/app/img/phones/t-mobile-mytouch-4g.1.jpg b/app/img/phones/t-mobile-mytouch-4g.1.jpg new file mode 100644 index 000000000..1f2a0c8d8 Binary files /dev/null and b/app/img/phones/t-mobile-mytouch-4g.1.jpg differ diff --git a/app/img/phones/t-mobile-mytouch-4g.2.jpg b/app/img/phones/t-mobile-mytouch-4g.2.jpg new file mode 100644 index 000000000..f027d21e2 Binary files /dev/null and b/app/img/phones/t-mobile-mytouch-4g.2.jpg differ diff --git a/app/img/phones/t-mobile-mytouch-4g.3.jpg b/app/img/phones/t-mobile-mytouch-4g.3.jpg new file mode 100644 index 000000000..161a340a3 Binary files /dev/null and b/app/img/phones/t-mobile-mytouch-4g.3.jpg differ diff --git a/app/img/phones/t-mobile-mytouch-4g.4.jpg b/app/img/phones/t-mobile-mytouch-4g.4.jpg new file mode 100644 index 000000000..f6ec2ed57 Binary files /dev/null and b/app/img/phones/t-mobile-mytouch-4g.4.jpg differ diff --git a/app/img/phones/t-mobile-mytouch-4g.5.jpg b/app/img/phones/t-mobile-mytouch-4g.5.jpg new file mode 100644 index 000000000..671dbb032 Binary files /dev/null and b/app/img/phones/t-mobile-mytouch-4g.5.jpg differ diff --git a/app/index-async.html b/app/index-async.html index fd3913a4f..ca9f3ae85 100644 --- a/app/index-async.html +++ b/app/index-async.html @@ -2,20 +2,24 @@ + Google Phone Gallery + + + - My AngularJS App - - - -
- -
Angular seed app: v
- +
+
+
diff --git a/app/index.html b/app/index.html index 4cf94ed75..26e294f0e 100644 --- a/app/index.html +++ b/app/index.html @@ -1,29 +1,29 @@ - + - My AngularJS App - - - - - -
+ Google Phone Gallery + + + -
Angular seed app: v
- - + + + + - + - + + + + +
+
+
+ diff --git a/app/js/animations.js b/app/js/animations.js new file mode 100644 index 000000000..8f3404265 --- /dev/null +++ b/app/js/animations.js @@ -0,0 +1,52 @@ +var phonecatAnimations = angular.module('phonecatAnimations', ['ngAnimate']); + +phonecatAnimations.animation('.phone', function() { + + var animateUp = function(element, className, done) { + if(className != 'active') { + return; + } + element.css({ + position: 'absolute', + top: 500, + left: 0, + display: 'block' + }); + + jQuery(element).animate({ + top: 0 + }, done); + + return function(cancel) { + if(cancel) { + element.stop(); + } + }; + } + + var animateDown = function(element, className, done) { + if(className != 'active') { + return; + } + element.css({ + position: 'absolute', + left: 0, + top: 0 + }); + + jQuery(element).animate({ + top: -500 + }, done); + + return function(cancel) { + if(cancel) { + element.stop(); + } + }; + } + + return { + addClass: animateUp, + removeClass: animateDown + }; +}); diff --git a/app/js/app.js b/app/js/app.js index d990ec7c9..a58955cd1 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,16 +1,28 @@ 'use strict'; +/* App Module */ -// Declare app level module which depends on filters, and services -angular.module('myApp', [ +var phonecatApp = angular.module('phonecatApp', [ 'ngRoute', - 'myApp.filters', - 'myApp.services', - 'myApp.directives', - 'myApp.controllers' -]). -config(['$routeProvider', function($routeProvider) { - $routeProvider.when('/view1', {templateUrl: 'partials/partial1.html', controller: 'MyCtrl1'}); - $routeProvider.when('/view2', {templateUrl: 'partials/partial2.html', controller: 'MyCtrl2'}); - $routeProvider.otherwise({redirectTo: '/view1'}); -}]); + 'phonecatAnimations', + + 'phonecatControllers', + 'phonecatFilters', + 'phonecatServices' +]); + +phonecatApp.config(['$routeProvider', + function($routeProvider) { + $routeProvider. + when('/phones', { + templateUrl: 'partials/phone-list.html', + controller: 'PhoneListCtrl' + }). + when('/phones/:phoneId', { + templateUrl: 'partials/phone-detail.html', + controller: 'PhoneDetailCtrl' + }). + otherwise({ + redirectTo: '/phones' + }); + }]); diff --git a/app/js/controllers.js b/app/js/controllers.js index cc9d3052c..c8ecfbba1 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -2,10 +2,21 @@ /* Controllers */ -angular.module('myApp.controllers', []). - controller('MyCtrl1', [function() { +var phonecatControllers = angular.module('phonecatControllers', []); - }]) - .controller('MyCtrl2', [function() { +phonecatControllers.controller('PhoneListCtrl', ['$scope', 'Phone', + function($scope, Phone) { + $scope.phones = Phone.query(); + $scope.orderProp = 'age'; + }]); - }]); \ No newline at end of file +phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', 'Phone', + function($scope, $routeParams, Phone) { + $scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) { + $scope.mainImageUrl = phone.images[0]; + }); + + $scope.setImage = function(imageUrl) { + $scope.mainImageUrl = imageUrl; + } + }]); diff --git a/app/js/directives.js b/app/js/directives.js index 9fc16cc4c..ebc5dd144 100644 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1,11 +1,3 @@ 'use strict'; /* Directives */ - - -angular.module('myApp.directives', []). - directive('appVersion', ['version', function(version) { - return function(scope, elm, attrs) { - elm.text(version); - }; - }]); diff --git a/app/js/filters.js b/app/js/filters.js index 259dd4ee0..4f62309ba 100644 --- a/app/js/filters.js +++ b/app/js/filters.js @@ -2,9 +2,8 @@ /* Filters */ -angular.module('myApp.filters', []). - filter('interpolate', ['version', function(version) { - return function(text) { - return String(text).replace(/\%VERSION\%/mg, version); - } - }]); +angular.module('phonecatFilters', []).filter('checkmark', function() { + return function(input) { + return input ? '\u2713' : '\u2718'; + }; +}); diff --git a/app/js/services.js b/app/js/services.js index 334d543f1..e0b81a8ac 100644 --- a/app/js/services.js +++ b/app/js/services.js @@ -2,8 +2,11 @@ /* Services */ +var phonecatServices = angular.module('phonecatServices', ['ngResource']); -// Demonstrate how to register services -// In this case it is a simple value service. -angular.module('myApp.services', []). - value('version', '0.1'); +phonecatServices.factory('Phone', ['$resource', + function($resource){ + return $resource('phones/:phoneId.json', {}, { + query: {method:'GET', params:{phoneId:'phones'}, isArray:true} + }); + }]); diff --git a/app/lib/angular/angular-animate.js b/app/lib/angular/angular-animate.js index 0bf5cbccc..27d52956c 100755 --- a/app/lib/angular/angular-animate.js +++ b/app/lib/angular/angular-animate.js @@ -1,10 +1,12 @@ /** - * @license AngularJS v1.2.0-rc.3 + * @license AngularJS v1.2.0 * (c) 2010-2012 Google, Inc. http://angularjs.org * License: MIT */ (function(window, angular, undefined) {'use strict'; +/* jshint maxlen: false */ + /** * @ngdoc overview * @name ngAnimate @@ -12,28 +14,30 @@ * * # ngAnimate * - * `ngAnimate` is an optional module that provides CSS and JavaScript animation hooks. + * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives. * * {@installModule animate} * + *
+ * * # Usage * * To see animations in action, all that is required is to define the appropriate CSS classes - * or to register a JavaScript animation via the $animation service. The directives that support animation automatically are: - * `ngRepeat`, `ngInclude`, `ngSwitch`, `ngShow`, `ngHide` and `ngView`. Custom directives can take advantage of animation + * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are: + * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation * by using the `$animate` service. * * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives: * * | Directive | Supported Animations | * |---------------------------------------------------------- |----------------------------------------------------| - * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move | - * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave | - * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave | - * | {@link ng.directive:ngSwitch#animations ngSwitch} | enter and leave | - * | {@link ng.directive:ngIf#animations ngIf} | enter and leave | - * | {@link ng.directive:ngClass#animations ngClass} | add and remove | - * | {@link ng.directive:ngShow#animations ngShow & ngHide} | add and remove (the ng-hide class value) | + * | {@link ng.directive:ngRepeat#usage_animations ngRepeat} | enter, leave and move | + * | {@link ngRoute.directive:ngView#usage_animations ngView} | enter and leave | + * | {@link ng.directive:ngInclude#usage_animations ngInclude} | enter and leave | + * | {@link ng.directive:ngSwitch#usage_animations ngSwitch} | enter and leave | + * | {@link ng.directive:ngIf#usage_animations ngIf} | enter and leave | + * | {@link ng.directive:ngClass#usage_animations ngClass} | add and remove | + * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide} | add and remove (the ng-hide class value) | * * You can find out more information about animations upon visiting each directive page. * @@ -41,11 +45,8 @@ * *
  * ');
\ No newline at end of file
+
+!angular.$$csp() && angular.element(document).find('head').prepend('');
\ No newline at end of file
diff --git a/app/lib/angular/angular.min.js b/app/lib/angular/angular.min.js
index e1fd4195d..1456067c2 100755
--- a/app/lib/angular/angular.min.js
+++ b/app/lib/angular/angular.min.js
@@ -1,197 +1,200 @@
 /*
- AngularJS v1.2.0-rc.3
+ AngularJS v1.2.0
  (c) 2010-2012 Google, Inc. http://angularjs.org
  License: MIT
 */
-(function(Y,R,s){'use strict';function D(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/undefined/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?B(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+B(b)})}catch(d){return B(c)}}function Pb(b){try{return decodeURIComponent(b)}catch(a){}}function Qb(b){var a={},c,d;p((b||"").split("&"),function(b){b&&(c=b.split("="),d=Pb(c[0]),
-w(d)&&(b=w(c[1])?Pb(c[1]):!0,a[d]?H(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Rb(b){var a=[];p(b,function(b,d){H(b)?p(b,function(b){a.push(va(d,!0)+(!0===b?"":"="+va(b,!0)))}):a.push(va(d,!0)+(!0===b?"":"="+va(b,!0)))});return a.length?a.join("&"):""}function qb(b){return va(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function va(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,
-a?"%20":"+")}function Mc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;p(g,function(a){g[a]=!0;c(R.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(p(b.querySelectorAll("."+a),c),p(b.querySelectorAll("."+a+"\\:"),c),p(b.querySelectorAll("["+a+"]"),c))});p(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,f=(b[2]||"").replace(/\s+/g,",")):p(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});
-e&&a(e,f?[f]:[])}function Sb(b,a){var c=function(){b=x(b);if(b.injector()){var c=b[0]===R?"document":ga(b);throw Ja("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=Tb(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)});e.enabled(!0)}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(Y&&!d.test(Y.name))return c();Y.name=Y.name.replace(d,"");Za.resumeBootstrap=
-function(b){p(b,function(b){a.push(b)});c()}}function $a(b,a){a=a||"_";return b.replace(Nc,function(b,d){return(d?a:"")+b.toLowerCase()})}function rb(b,a,c){if(!b)throw Ja("areq",a||"?",c||"required");return b}function La(b,a,c){c&&H(b)&&(b=b[b.length-1]);rb(E(b),a,"not a function, got "+(b&&"object"==typeof b?b.constructor.name||"Object":typeof b));return b}function pa(b,a){if("hasOwnProperty"===b)throw Ja("badname",a);}function sb(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=
-0;g "+b;a.removeChild(a.firstChild);vb(this,a.childNodes);x(R.createDocumentFragment()).append(this)}else vb(this,b)}function wb(b){return b.cloneNode(!0)}function Na(b){Ub(b);var a=0;for(b=b.childNodes||[];a=Q?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ca(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c===s&&(c=b.$$hashKey=Va()):c=b;return a+":"+c}function Pa(b){p(b,
-this.put,this)}function $b(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(Tc,""),c=c.match(Uc),p(c[1].split(Vc),function(b){b.replace(Wc,function(b,c,d){a.push(d)})})),b.$inject=a):H(b)?(c=b.length-1,La(b[c],"fn"),a=b.slice(0,c)):La(b,"fn",!0);return a}function Tb(b){function a(a){return function(b,c){if(S(b))p(b,Mb(a));else return a(b,c)}}function c(a,b){pa(a,"service");if(E(b)||H(b))b=r.instantiate(b);if(!b.$get)throw Qa("pget",a);return l[a+h]=b}function d(a,
-b){return c(a,{$get:b})}function e(a){var b=[];p(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(F(a)){var c=Ra(a);b=b.concat(e(c.requires)).concat(c._runBlocks);for(var d=c._invokeQueue,c=0,f=d.length;c 4096 bytes)!"));else{if(m.cookie!==da)for(da=m.cookie,d=da.split("; "),N={},f=0;fk&&this.remove(q.key),
-b},get:function(a){var b=l[a];if(b)return e(b),m[a]},remove:function(a){var b=l[a];b&&(b==r&&(r=b.p),b==q&&(q=b.n),f(b.n,b.p),delete l[a],delete m[a],g--)},removeAll:function(){m={};g=0;l={};r=q=null},destroy:function(){l=h=m=null;delete a[b]},info:function(){return G({},h,{size:g})}}}var a={};b.info=function(){var b={};p(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function ad(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function bc(b){var a=
-{},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^\s*(https?|ftp|mailto|tel|file):/,g=/^\s*(https?|ftp|file):|data:image\//,h=/^(on[a-z]+|formaction)$/;this.directive=function k(d,e){pa(d,"directive");F(d)?(rb(e,"directiveFactory"),a.hasOwnProperty(d)||(a[d]=[],b.factory(d+c,["$injector","$exceptionHandler",function(b,c){var e=[];p(a[d],function(a,f){try{var k=b.invoke(a);E(k)?k={compile:aa(k)}:!k.compile&&k.link&&(k.compile=aa(k.link));k.priority=
-k.priority||0;k.index=f;k.name=k.name||d;k.require=k.require||k.controller&&k.name;k.restrict=k.restrict||"A";e.push(k)}catch(g){c(g)}});return e}])),a[d].push(e)):p(d,Mb(k));return this};this.aHrefSanitizationWhitelist=function(a){return w(a)?(f=a,this):f};this.imgSrcSanitizationWhitelist=function(a){return w(a)?(g=a,this):g};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate",function(b,l,r,q,n,y,A,
-C,u,U,M){function t(a,b,c,d,e){a instanceof x||(a=x(a));p(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=x(b).wrap("").parent()[0])});var f=ca(a,b,a,c,d,e);return function(b,c){rb(b,"scope");for(var d=c?Sa.clone.call(a):a,e=0,k=d.length;eI.priority)break;if(w=I.scope)ca=ca||I,I.templateUrl||(P("new/isolated scope",u,I,L),S(w)&&(T(L,"ng-isolate-scope"),u=I),T(L,"ng-scope"));Z=I.name;!I.templateUrl&&I.controller&&(w=I.controller,v=v||{},P("'"+Z+"' controller",v[Z],I,L),v[Z]=I);if(w=I.transclude)"ngRepeat"!==Z&&(P("transclusion",g,I,L),g=I),"element"==w?(C=I.priority,w=da(b,G,D),L=c.$$element=x(R.createComment(" "+Z+": "+c[Z]+" ")),b=L[0],db(e,x(ua.call(w,0)),b),O=t(w,d,C,f&&f.name,{newIsolateScopeDirective:u,transcludeDirective:g,
-templateDirective:M})):(w=x(wb(b)).contents(),L.html(""),O=t(w,d));if(I.template)if(P("template",M,I,L),M=I,w=E(I.template)?I.template(L,c):I.template,w=cc(w),I.replace){f=I;w=x("
"+ba(w)+"
").contents();b=w[0];if(1!=w.length||1!==b.nodeType)throw ha("tplrt",Z,"");db(e,L,b);K={$attr:{}};a=a.concat(N(b,a.splice(ma+1,a.length-(ma+1)),K));ac(c,K);K=a.length}else L.html(w);if(I.templateUrl)P("template",M,I,L),M=I,I.replace&&(f=I),U=Bb(a.splice(ma,a.length-ma),L,c,e,O,k,h,{newIsolateScopeDirective:u, -transcludeDirective:g,templateDirective:M}),K=a.length;else if(I.compile)try{B=I.compile(L,c,O),E(B)?n(null,B,G,D):B&&n(B.pre,B.post,G,D)}catch(J){r(J,ga(L))}I.terminal&&(U.terminal=!0,C=Math.max(C,I.priority))}U.scope=ca&&ca.scope;U.transclude=g&&O;return U}function Z(d,e,f,g,h,l,n){if(e===h)return null;h=null;if(a.hasOwnProperty(e)){var q;e=b.get(e+c);for(var y=0,A=e.length;yq.priority)&&-1!=q.restrict.indexOf(f)&&(l&&(q=Hc(q,{$$start:l,$$end:n})),d.push(q),h=q)}catch(C){r(C)}}return h} -function ac(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;p(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});p(b,function(b,f){"class"==f?(T(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?e.attr("style",e.attr("style")+";"+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function Bb(a,b,c,d,e,f,k,g){var h=[],l,r,y=b[0],A=a.shift(),C=G({},A,{templateUrl:null,transclude:null,replace:null}),t=E(A.templateUrl)?A.templateUrl(b,c): -A.templateUrl;b.html("");q.get(U.getTrustedResourceUrl(t),{cache:n}).success(function(n){var q;n=cc(n);if(A.replace){n=x("
"+ba(n)+"
").contents();q=n[0];if(1!=n.length||1!==q.nodeType)throw ha("tplrt",A.name,t);n={$attr:{}};db(d,b,q);N(q,a,n);ac(c,n)}else q=y,b.html(n);a.unshift(C);l=L(a,q,c,e,b,A,f,k,g);p(d,function(a,c){a==q&&(d[c]=b[0])});for(r=ca(b[0].childNodes,e);h.length;){n=h.shift();var U=h.shift(),T=h.shift(),s=h.shift(),u=b[0];U!==y&&(u=wb(q),db(T,x(U),u));l(r,n,u,d,s)}h=null}).error(function(a, -b,c,d){throw ha("tpload",d.url);});return function(a,b,c,d,e){h?(h.push(b),h.push(c),h.push(d),h.push(e)):l(r,b,c,d,e)}}function O(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:r.reject(b)}var d={transformRequest:e.transformRequest,transformResponse:e.transformResponse},f=function(a){function b(a){var c;p(a,function(b, -d){E(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=G({},a.headers),f,h,c=G({},c.common,c[B(a.method)]);b(c);b(d);a:for(f in c){a=B(f);for(h in d)if(B(h)===a)continue a;d[f]=c[f]}return d}(a);G(d,a);d.headers=f;d.method=Ea(d.method);(a=Cb(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:s)&&(f[d.xsrfHeaderName||e.xsrfHeaderName]=a);var h=[function(a){f=a.headers;var b=fc(a.data,ec(f),a.transformRequest);z(a.data)&&p(f,function(a,b){"content-type"===B(b)&&delete f[b]});z(a.withCredentials)&& -!z(e.withCredentials)&&(a.withCredentials=e.withCredentials);return y(a,b,f).then(c,c)},s],k=r.when(d);for(p(u,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&h.push(a.response,a.responseError)});h.length;){a=h.shift();var g=h.shift(),k=k.then(a,g)}k.success=function(a){k.then(function(b){a(b.data,b.status,b.headers,d)});return k};k.error=function(a){k.then(null,function(b){a(b.data,b.status,b.headers,d)});return k};return k}function y(b, -c,f){function k(a,b,c){p&&(200<=a&&300>a?p.put(s,[a,b,dc(c)]):p.remove(s));g(b,a,c);d.$$phase||d.$apply()}function g(a,c,d){c=Math.max(c,0);(200<=c&&300>c?q.resolve:q.reject)({data:a,status:c,headers:ec(d),config:b})}function m(){var a=Ya(n.pendingRequests,b);-1!==a&&n.pendingRequests.splice(a,1)}var q=r.defer(),y=q.promise,p,u,s=A(b.url,b.params);n.pendingRequests.push(b);y.then(m,m);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(p=S(b.cache)?b.cache:S(e.cache)?e.cache:C);if(p)if(u=p.get(s), -w(u)){if(u.then)return u.then(m,m),u;H(u)?g(u[1],u[0],fa(u[2])):g(u,200,{})}else p.put(s,y);z(u)&&a(b.method,s,c,k,f,b.timeout,b.withCredentials,b.responseType);return y}function A(a,b){if(!b)return a;var c=[];Gc(b,function(a,b){null!=a&&a!=s&&(H(a)||(a=[a]),p(a,function(a){S(a)&&(a=oa(a));c.push(va(b)+"="+va(a))}))});return a+(-1==a.indexOf("?")?"?":"&")+c.join("&")}var C=c("$http"),u=[];p(f,function(a){u.unshift(F(a)?q.get(a):q.invoke(a))});p(g,function(a,b){var c=F(a)?q.get(a):q.invoke(a);u.splice(b, -0,{response:function(a){return c(r.when(a))},responseError:function(a){return c(r.reject(a))}})});n.pendingRequests=[];(function(a){p(arguments,function(a){n[a]=function(b,c){return n(G(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){p(arguments,function(a){n[a]=function(b,c,d){return n(G(d||{},{method:a,url:b,data:c}))}})})("post","put");n.defaults=e;return n}]}function gd(){this.$get=["$browser","$window","$document",function(b,a,c){return hd(b,id,b.defer,a.angular.callbacks, -c[0],a.location.protocol.replace(":",""))}]}function hd(b,a,c,d,e,f){function g(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;Q?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror=d;e.body.appendChild(c);return d}return function(e,m,k,l,r,q,n,y){function A(){u=-1;M&&M();t&&t.abort()}function C(a,d,e,h){var g=f||wa(m).protocol;T&&c.cancel(T);M=t=null;d="file"==g?e?200:404:d;a(1223==d?204:d, -e,h);b.$$completeOutstandingRequest(v)}var u;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==B(e)){var s="_"+(d.counter++).toString(36);d[s]=function(a){d[s].data=a};var M=g(m.replace("JSON_CALLBACK","angular.callbacks."+s),function(){d[s].data?C(l,200,d[s].data):C(l,u||-2);delete d[s]})}else{var t=new a;t.open(e,m,!0);p(r,function(a,b){w(a)&&t.setRequestHeader(b,a)});t.onreadystatechange=function(){if(4==t.readyState){var a=t.getAllResponseHeaders();C(l,u||t.status,t.responseType?t.response: -t.responseText,a)}};n&&(t.withCredentials=!0);y&&(t.responseType=y);t.send(k||null)}if(0=h&&(r.resolve(n),l(q.$$intervalId),delete e[q.$$intervalId]);y||b.$apply()},g);e[q.$$intervalId]=r;return q}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId], -!0):!1};return d}]}function ld(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "), -DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function hc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=qb(b[a]);return b.join("/")}function ic(b,a){var c=wa(b);a.$$protocol= -c.protocol;a.$$host=c.hostname;a.$$port=W(c.port)||md[c.protocol]||null}function jc(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=wa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=Qb(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function na(b,a){if(0==a.indexOf(b))return a.substr(b.length)}function Ta(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Db(b){return b.substr(0, -Ta(b).lastIndexOf("/")+1)}function kc(b,a){this.$$html5=!0;a=a||"";var c=Db(b);ic(b,this);this.$$parse=function(a){var b=na(c,a);if(!F(b))throw Eb("ipthprfx",a,c);jc(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Rb(this.$$search),b=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=hc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=na(b,d))!==s)return d=e,(e=na(a,e))!==s?c+(na("/",e)||e):b+d;if((e=na(c, -d))!==s)return c+e;if(c==d+"/")return c}}function Fb(b,a){var c=Db(b);ic(b,this);this.$$parse=function(d){var e=na(b,d)||na(c,d),e="#"==e.charAt(0)?na(a,e):this.$$html5?e:"";if(!F(e))throw Eb("ihshprfx",d,a);jc(e,this);this.$$compose()};this.$$compose=function(){var c=Rb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=hc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Ta(b)==Ta(a))return a}}function lc(b,a){this.$$html5=!0;Fb.apply(this, -arguments);var c=Db(b);this.$$rewrite=function(d){var e;if(b==Ta(d))return d;if(e=na(c,d))return b+a+e;if(c===d+"/")return c}}function eb(b){return function(){return this[b]}}function mc(b,a){return function(c){if(z(c))return this[b];this[b]=a(c);this.$$compose();return this}}function nd(){var b="",a=!1;this.hashPrefix=function(a){return w(a)?(b=a,this):b};this.html5Mode=function(b){return w(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess", -h.absUrl(),a)}var h,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?kc:lc):(m=Ta(k),e=Fb);h=new e(m,"#"+b);h.$$parse(h.$$rewrite(k));f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=x(a.target);"a"!==B(b[0].nodeName);)if(b[0]===f[0]||!(b=b.parent())[0])return;var e=b.prop("href"),g=h.$$rewrite(e);e&&(!b.attr("target")&&g&&!a.isDefaultPrevented())&&(a.preventDefault(),g!=d.url()&&(h.$$parse(g),c.$apply(),Y.angular["ff-684208-preventDefault"]= -!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$broadcast("$locationChangeStart",a,h.absUrl()).defaultPrevented?d.url(h.absUrl()):(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);g(b)}),c.$$phase||c.$digest()))});var l=0;c.$watch(function(){var a=d.url(),b=h.$$replace;l&&a==h.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),g(a))}));h.$$replace=!1;return l});return h}]} -function od(){var b=!0,a=this;this.debugEnabled=function(a){return w(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||v;return e.apply?function(){var a=[];p(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"), -info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function qa(b,a){if("constructor"===b)throw xa("isecfld",a);return b}function fb(b,a){if(b&&b.constructor===b)throw xa("isecfn",a);if(b&&b.document&&b.location&&b.alert&&b.setInterval)throw xa("isecwindow",a);if(b&&(b.nodeName||b.on&&b.find))throw xa("isecdom",a);return b}function gb(b,a,c,d,e){e=e||{};a=a.split(".");for(var f,g=0;1e?nc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var h=0,g;do g=nc(d[h++],d[h++],d[h++],d[h++],d[h++],c,a)(b,f),f=s,b=g;while(ha)for(b in g++,d)d.hasOwnProperty(b)&&!f.hasOwnProperty(b)&&(m--,delete d[b])}else d!==f&&(d=f,g++);return g},function(){b(f,d,c)})},$digest:function(){var c, -e,f,g,m=this.$$asyncQueue,p=this.$$postDigestQueue,s,w,M=b,t,x=[],v,N,da;h("$digest");do{w=!1;for(t=this;m.length;)try{da=m.shift(),da.scope.$eval(da.expression)}catch(ka){d(ka)}do{if(g=t.$$watchers)for(s=g.length;s--;)try{(c=g[s])&&((e=c.get(t))!==(f=c.last)&&!(c.eq?Aa(e,f):"number"==typeof e&&"number"==typeof f&&isNaN(e)&&isNaN(f)))&&(w=!0,c.last=c.eq?fa(e):e,c.fn(e,f===k?e:f,t),5>M&&(v=4-M,x[v]||(x[v]=[]),N=E(c.exp)?"fn: "+(c.exp.name||c.exp.toString()):c.exp,N+="; newVal: "+oa(e)+"; oldVal: "+ -oa(f),x[v].push(N)))}catch(L){d(L)}if(!(g=t.$$childHead||t!==this&&t.$$nextSibling))for(;t!==this&&!(g=t.$$nextSibling);)t=t.$parent}while(t=g);if(w&&!M--)throw l.$$phase=null,a("infdig",b,oa(x));}while(w||m.length);for(l.$$phase=null;p.length;)try{p.shift()()}catch(B){d(B)}},$destroy:function(){if(l!=this&&!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling); -this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null}},$eval:function(a,b){return e(a)(this,b)},$evalAsync:function(a){l.$$phase||l.$$asyncQueue.length||f.defer(function(){l.$$asyncQueue.length&&l.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)}, -$apply:function(a){try{return h("$apply"),this.$eval(a)}catch(b){d(b)}finally{l.$$phase=null;try{l.$digest()}catch(c){throw d(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);return function(){c[Ya(c,b)]=null}},$emit:function(a,b){var c=[],e,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=[h].concat(ua.call(arguments,1)),l,m;do{e=f.$$listeners[a]||c;h.currentScope= -f;l=0;for(m=e.length;lc))throw sa("iequirks");var e=fa(ea);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=za);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,h=e.trustAs;p(ea,function(a,b){var c=B(b);e[Ma("parse_as_"+c)]=function(b){return f(a,b)};e[Ma("get_trusted_"+ -c)]=function(b){return g(a,b)};e[Ma("trust_as_"+c)]=function(b){return h(a,b)}});return e}]}function wd(){this.$get=["$window","$document",function(b,a){var c={},d=W((/android (\d+)/.exec(B((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|O|ms)(?=[A-Z])/,m=f.body&&f.body.style,k=!1,l=!1;if(m){for(var r in m)if(k=h.exec(r)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in m&&"webkit");k=!!("transition"in m|| -g+"Transition"in m);l=!!("animation"in m||g+"Animation"in m);!d||k&&l||(k=F(f.body.style.webkitTransition),l=F(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f.documentMode||7b;b=Math.abs(b);var g=b+"",h="",m=[],k=!1;if(-1!==g.indexOf("e")){var l=g.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?g="0":(h=g,k=!0)}if(k)0b)&&(h=b.toFixed(e));else{g=(g.split(yc)[1]||"").length;z(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));g=Math.pow(10,e);b=Math.round(b*g)/g;b=(""+b).split(yc);g=b[0];b=b[1]|| -"";var k=0,l=a.lgSize,r=a.gSize;if(g.length>=l+r)for(var k=g.length-l,q=0;qb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Ib(e,a,d)}}function hb(b,a){return function(c,d){var e=c["get"+b](),f=Ea(a?"SHORT"+b:b);return d[f][e]}}function uc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=W(b[9]+b[10]),g=W(b[9]+b[11]));h.call(a,W(b[1]),W(b[2])-1,W(b[3]));f=W(b[4]||0)-f;g=W(b[5]||0)-g;h=W(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,g,h,b)}return a} -var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var f="",g=[],h,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;F(c)&&(c=Ed.test(c)?W(c):a(c));ob(c)&&(c=new Date(c));if(!Ha(c))return c;for(;e;)(m=Fd.exec(e))?(g=g.concat(ua.call(m,1)),e=g.pop()):(g.push(e),e=null);p(g,function(a){h=Gd[a];f+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function Ad(){return function(b){return oa(b,!0)}} -function Bd(){return function(b,a){if(!H(b)&&!F(b))return b;a=W(a);if(F(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||m()});a.on("change",g);if(e.hasEvent("paste"))a.on("paste cut",m)}d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var k=c.ngPattern,l=function(a,b){if(d.$isEmpty(b)||a.test(b))return d.$setValidity("pattern",!0),b;d.$setValidity("pattern",!1);return s};k&&((e=k.match(/^\/(.*)\/([gim]*)$/))?(k=RegExp(e[1], -e[2]),e=function(a){return l(k,a)}):e=function(c){var d=b.$eval(k);if(!d||!d.test)throw D("ngPattern")("noregexp",k,d,ga(a));return l(d,c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var r=W(c.ngMinlength);e=function(a){if(!d.$isEmpty(a)&&a.lengthq)return d.$setValidity("maxlength", -!1),s;d.$setValidity("maxlength",!0);return a};d.$parsers.push(e);d.$formatters.push(e)}}function Jb(b,a){b="ngClass"+b;return function(){return{restrict:"AC",link:function(c,d,e){function f(b){if(!0===a||c.$index%2===a)h&&!Aa(b,h)&&e.$removeClass(g(h)),e.$addClass(g(b));h=fa(b)}function g(a){if(H(a))return a.join(" ");if(S(a)){var b=[];p(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var h=s;c.$watch(e[b],f,!0);e.$observe("class",function(a){f(c.$eval(e[b]))});"ngClass"!==b&&c.$watch("$index", -function(d,f){var h=d&1;h!==f&1&&(h===a?(h=c.$eval(e[b]),e.$addClass(g(h))):(h=c.$eval(e[b]),e.$removeClass(g(h))))})}}}}var B=function(b){return F(b)?b.toLowerCase():b},Ea=function(b){return F(b)?b.toUpperCase():b},Q,x,Ba,ua=[].slice,Hd=[].push,Wa=Object.prototype.toString,Ja=D("ng"),Za=Y.angular||(Y.angular={}),Ra,Da,ia=["0","0","0"];Q=W((/msie (\d+)/.exec(B(navigator.userAgent))||[])[1]);isNaN(Q)&&(Q=W((/trident\/.*; rv:(\d+)/.exec(B(navigator.userAgent))||[])[1]));v.$inject=[];za.$inject=[];var ba= -function(){return String.prototype.trim?function(b){return F(b)?b.trim():b}:function(b){return F(b)?b.replace(/^\s*/,"").replace(/\s*$/,""):b}}();Da=9>Q?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ea(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Nc=/[A-Z]/g,Id={full:"1.2.0-rc.3",major:1,minor:2,dot:0,codeName:"ferocious-twitch"},Oa=J.cache={},ab=J.expando="ng-"+(new Date).getTime(),Rc=1,Ac=Y.document.addEventListener? -function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},xb=Y.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},Pc=/([\:\-\_]+(.))/g,Qc=/^moz([A-Z])/,ub=D("jqLite"),Sa=J.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===R.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),J(Y).on("load",a))},toString:function(){var b=[];p(this,function(a){b.push(""+a)});return"["+b.join(", ")+ -"]"},eq:function(b){return 0<=b?x(this[b]):x(this[this.length+b])},length:0,push:Hd,sort:[].sort,splice:[].splice},cb={};p("multiple selected checked disabled readOnly required open".split(" "),function(b){cb[B(b)]=b});var Zb={};p("input select option textarea button form details".split(" "),function(b){Zb[Ea(b)]=!0});p({data:Wb,inheritedData:bb,scope:function(b){return bb(b,"$scope")},controller:Xb,injector:function(b){return bb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:yb, -css:function(b,a,c){a=Ma(a);if(w(c))b.style[a]=c;else{var d;8>=Q&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=Q&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=B(a);if(cb[d])if(w(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:s;else if(w(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?s:b},prop:function(b,a,c){if(w(c))b[a]=c;else return b[a]}, -text:function(){function b(b,d){var e=a[b.nodeType];if(z(d))return e?b[e]:"";b[e]=d}var a=[];9>Q?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(z(a)){if("SELECT"===Da(b)&&b.multiple){var c=[];p(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(z(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a, -c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Md={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Hb=function(a){this.options=a};Hb.prototype={constructor:Hb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=w(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw xa("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(Ua.ZERO,a.fn, -this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=oc(d,this.options,this.text);return G(function(c,d,h){return e(h||a(c,d),d)},{assign:function(e,g,h){return gb(a(e,h),d,g,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return G(function(e,f){var g=a(e,f),h=d(e,f),m;if(!g)return s;(g=fb(g[h],c.text))&&(g.then&&c.options.unwrapPromises)&&(m=g,"$$v"in g||(m.$$v=s, -m.then(function(a){m.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var h=d(e,g);return fb(a(e,g),c.text)[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var h=[],m=c?c(f,g):f,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ib(Math[0=Q&&(c.href||c.name||c.$set("href",""),a.append(R.createComment("IE fix")));return function(a,c){c.on("click",function(a){c.attr("href")||a.preventDefault()})}}}),Kb={};p(cb,function(a,c){if("multiple"!=a){var d=la("ng-"+c);Kb[d]=function(){return{priority:100,compile:function(){return function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}}});p(["src","srcset","href"],function(a){var c=la("ng-"+a);Kb[c]=function(){return{priority:99, -link:function(d,e,f){f.$observe(c,function(c){c&&(f.$set(a,c),Q&&e.prop(a,f[a]))})}}}});var kb={$addControl:v,$removeControl:v,$setValidity:v,$setDirty:v,$setPristine:v};zc.$inject=["$element","$attrs","$scope"];var Bc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:zc,compile:function(){return{pre:function(a,e,f,g){if(!f.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Ac(e[0],"submit",h);e.on("$destroy",function(){c(function(){xb(e[0], -"submit",h)},0,!1)})}var m=e.parent().controller("form"),k=f.name||f.ngForm;k&&gb(a,k,g,k);if(m)e.on("$destroy",function(){m.$removeControl(g);k&&gb(a,k,s,k);G(g,kb)})}}}}}]},Od=Bc(),Pd=Bc(!0),Qd=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Rd=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/,Sd=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Cc={text:mb,number:function(a,c,d,e,f,g){mb(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Sd.test(a))return e.$setValidity("number", -!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});if(d.min){var h=parseFloat(d.min);a=function(a){if(!e.$isEmpty(a)&&am)return e.$setValidity("max",!1),s;e.$setValidity("max",!0);return a};e.$parsers.push(d);e.$formatters.push(d)}e.$formatters.push(function(a){if(e.$isEmpty(a)|| -ob(a))return e.$setValidity("number",!0),a;e.$setValidity("number",!1);return s})},url:function(a,c,d,e,f,g){mb(a,c,d,e,f,g);a=function(a){if(e.$isEmpty(a)||Qd.test(a))return e.$setValidity("url",!0),a;e.$setValidity("url",!1);return s};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,f,g){mb(a,c,d,e,f,g);a=function(a){if(e.$isEmpty(a)||Rd.test(a))return e.$setValidity("email",!0),a;e.$setValidity("email",!1);return s};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d, -e){z(d.name)&&c.attr("name",Va());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;F(f)||(f=!0);F(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a=== -f});e.$parsers.push(function(a){return a?f:g})},hidden:v,button:v,submit:v,reset:v},Dc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,f,g){g&&(Cc[B(f.type)]||Cc.text)(d,e,f,g,c,a)}}}],jb="ng-valid",ib="ng-invalid",Fa="ng-pristine",lb="ng-dirty",Td=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,f){function g(a,c){c=c?"-"+$a(c,"-"):"";e.removeClass((a?ib:jb)+c).addClass((a?jb:ib)+c)}this.$modelValue=this.$viewValue=Number.NaN; -this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var h=f(d.ngModel),m=h.assign;if(!m)throw D("ngModel")("nonassign",d.ngModel,ga(e));this.$render=v;this.$isEmpty=function(a){return z(a)||""===a||null===a||a!==a};var k=e.inheritedData("$formController")||kb,l=0,r=this.$error={};e.addClass(Fa);g(!0);this.$setValidity=function(a,c){r[a]!==!c&&(c?(r[a]&&l--,l||(g(!0),this.$valid=!0,this.$invalid=!1)):(g(!1), -this.$invalid=!0,this.$valid=!1,l++),r[a]=!c,g(c,a),k.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(lb).addClass(Fa)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,e.removeClass(Fa).addClass(lb),k.$setDirty());p(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,m(a,d),p(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var q=this;a.$watch(function(){var c= -h(a);if(q.$modelValue!==c){var d=q.$formatters,e=d.length;for(q.$modelValue=c;e--;)c=d[e](c);q.$viewValue!==c&&(q.$viewValue=c,q.$render())}})}],Ud=function(){return{require:["ngModel","^?form"],controller:Td,link:function(a,c,d,e){var f=e[0],g=e[1]||kb;g.$addControl(f);c.on("$destroy",function(){g.$removeControl(f)})}}},Vd=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Ec=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required= -!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},Wd=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!z(a)){var c=[];a&&p(a.split(f),function(a){a&&c.push(ba(a))});return c}});e.$formatters.push(function(a){return H(a)?a.join(", "): -s});e.$isEmpty=function(a){return!a||!a.length}}}},Xd=/^(true|false|\d+)$/,Yd=function(){return{priority:100,compile:function(a,c){return Xd.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},Zd=ta(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),$d=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding", -c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],ae=["$sce","$parse",function(a,c){return function(d,e,f){e.addClass("ng-binding").data("$binding",f.ngBindHtml);var g=c(f.ngBindHtml);d.$watch(function(){return(g(d)||"").toString()},function(c){e.html(a.getTrustedHtml(g(d))||"")})}}],be=Jb("",!0),ce=Jb("Odd",0),de=Jb("Even",1),ee=ta({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}),fe=[function(){return{scope:!0,controller:"@"}}],ge=["$sniffer",function(a){return{priority:1E3, -compile:function(){a.csp=!0}}}],Fc={};p("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=la("ng-"+a);Fc[c]=["$parse",function(d){return function(e,f,g){var h=d(g[c]);f.on(B(a),function(a){e.$apply(function(){h(e,{$event:a})})})}}]});var he=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",compile:function(c,d,e){return function(c,d,h){var m, -k;c.$watch(h.ngIf,function(h){m&&(a.leave(m),m=s);k&&(k.$destroy(),k=s);Ka(h)&&(k=c.$new(),e(k,function(c){m=c;a.enter(c,d.parent(),d)}))})}}}}],ie=["$http","$templateCache","$anchorScroll","$compile","$animate","$sce",function(a,c,d,e,f,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",compile:function(h,m,k){var l=m.ngInclude||m.src,p=m.onload||"",q=m.autoscroll;return function(h,m){var s=0,C,u,x=function(){C&&(C.$destroy(),C=null);u&&(f.leave(u),u=null)};h.$watch(g.parseAsResourceUrl(l), -function(g){var l=++s;g?(a.get(g,{cache:c}).success(function(a){if(l===s){var c=h.$new();k(c,function(g){x();C=c;u=g;u.html(a);f.enter(u,null,m);e(u.contents())(C);!w(q)||q&&!h.$eval(q)||d();C.$emit("$includeContentLoaded");h.$eval(p)})}}).error(function(){l===s&&x()}),h.$emit("$includeContentRequested")):x()})}}}}],je=ta({compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),ke=ta({terminal:!0,priority:1E3}),le=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA", -link:function(e,f,g){var h=g.count,m=g.$attr.when&&f.attr(g.$attr.when),k=g.offset||0,l=e.$eval(m)||{},r={},q=c.startSymbol(),n=c.endSymbol(),s=/^when(Minus)?(.+)$/;p(g,function(a,c){s.test(c)&&(l[B(c.replace("when","").replace("Minus","-"))]=f.attr(g.$attr[c]))});p(l,function(a,e){r[e]=c(a.replace(d,q+h+"-"+k+n))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-k));return r[c](e,f,!0)},function(a){f.text(a)})}}}],me=["$parse","$animate",function(a, -c){function d(a){if(a.startNode===a.endNode)return x(a.startNode);var c=a.startNode,d=[c];do{c=c.nextSibling;if(!c)break;d.push(c)}while(c!==a.endNode);return x(d)}var e=D("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,compile:function(f,g,h){return function(f,g,l){var r=l.ngRepeat,q=r.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),n,s,w,C,u,v,B,t={$id:Ca};if(!q)throw e("iexp",r);l=q[1];u=q[2];(q=q[4])?(n=a(q),s=function(a,c,d){B&&(t[B]=a);t[v]=c;t.$index=d;return n(f, -t)}):(w=function(a,c){return Ca(c)},C=function(a){return a});q=l.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!q)throw e("iidexp",l);v=q[3]||q[1];B=q[2];var F={};f.$watchCollection(u,function(a){var l,q,n=g[0],u,t={},G,D,O,P,H,K,z=[];if(nb(a))H=a,u=s||w;else{u=s||C;H=[];for(O in a)a.hasOwnProperty(O)&&"$"!=O.charAt(0)&&H.push(O);H.sort()}G=H.length;q=z.length=H.length;for(l=0;l -A;)x.pop().element.remove()}for(;w.length>z;)w.pop()[0].element.remove()}var k;if(!(k=v.match(d)))throw ve("iexp",v,ga(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],q=c(k[3]||""),p=c(k[2]?k[1]:m),r=c(k[7]),u=k[8]?c(k[8]):null,w=[[{element:f,label:""}]];C&&(a(C)(e),C.removeClass("ng-scope"),C.remove());f.html("");f.on("change",function(){e.$apply(function(){var a,c=r(e)||[],d={},g,k,l,q,t,v,x;if(y)for(k=[],q=0,v=w.length;q@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}'); +(function(W,O,s){'use strict';function L(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/undefined/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?w(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+w(b)})}catch(d){return w(c)}}function Tb(b){try{return decodeURIComponent(b)}catch(a){}} +function Ub(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Tb(c[0]),z(d)&&(b=z(c[1])?Tb(c[1]):!0,a[d]?J(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Vb(b){var a=[];q(b,function(b,d){J(b)?q(b,function(b){a.push(ua(d,!0)+(!0===b?"":"="+ua(b,!0)))}):a.push(ua(d,!0)+(!0===b?"":"="+ua(b,!0)))});return a.length?a.join("&"):""}function sb(b){return ua(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ua(b,a){return encodeURIComponent(b).replace(/%40/gi, +"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Oc(b,a){function c(a){a&&d.push(a)}var d=[b],e,f,g=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(g,function(a){g[a]=!0;c(O.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,f= +(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&g[b.name]&&(e=a,f=b.value)})}});e&&a(e,f?[f]:[])}function Wb(b,a){var c=function(){b=y(b);if(b.injector()){var c=b[0]===O?"document":ea(b);throw Ma("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=Xb(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate",function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/; +if(W&&!d.test(W.name))return c();W.name=W.name.replace(d,"");bb.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function cb(b,a){a=a||"_";return b.replace(Pc,function(b,d){return(d?a:"")+b.toLowerCase()})}function tb(b,a,c){if(!b)throw Ma("areq",a||"?",c||"required");return b}function Oa(b,a,c){c&&J(b)&&(b=b[b.length-1]);tb(B(b),a,"not a function, got "+(b&&"object"==typeof b?b.constructor.name||"Object":typeof b));return b}function na(b,a){if("hasOwnProperty"===b)throw Ma("badname", +a);}function ub(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g "+b;a.removeChild(a.firstChild);yb(this,a.childNodes);y(O.createDocumentFragment()).append(this)}else yb(this,b)}function zb(b){return b.cloneNode(!0)}function Qa(b){Yb(b);var a=0;for(b=b.childNodes||[];a=P?(c.preventDefault= +null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Ca(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c===s&&(c=b.$$hashKey=Za()):c=b;return a+":"+c}function Sa(b){q(b,this.put,this)}function dc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace(Vc,""),c=c.match(Wc),q(c[1].split(Xc),function(b){b.replace(Yc,function(b, +c,d){a.push(d)})})),b.$inject=a):J(b)?(c=b.length-1,Oa(b[c],"fn"),a=b.slice(0,c)):Oa(b,"fn",!0);return a}function Xb(b){function a(a){return function(b,c){if(T(b))q(b,Ob(a));else return a(b,c)}}function c(a,b){na(a,"service");if(B(b)||J(b))b=n.instantiate(b);if(!b.$get)throw Ta("pget",a);return l[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,f,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(D(a))for(c=Ua(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue, +f=0,h=d.length;f 4096 bytes)!"));else{if(m.cookie!==$)for($=m.cookie,d=$.split("; "),oa={},f=0;fk&&this.remove(r.key),b},get:function(a){var b=l[a];if(b)return e(b),m[a]},remove:function(a){var b=l[a];b&&(b==n&&(n=b.p),b==r&&(r=b.n),f(b.n,b.p),delete l[a],delete m[a],g--)},removeAll:function(){m={};g=0;l={};n=r=null},destroy:function(){l=h=m=null;delete a[b]}, +info:function(){return u({},h,{size:g})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function dd(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function ec(b){var a={},c="Directive",d=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,e=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^\s*(https?|ftp|mailto|tel|file):/,g=/^\s*(https?|ftp|file):|data:image\//,h=/^(on[a-z]+|formaction)$/;this.directive=function k(d,e){na(d,"directive"); +D(d)?(tb(e,"directiveFactory"),a.hasOwnProperty(d)||(a[d]=[],b.factory(d+c,["$injector","$exceptionHandler",function(b,c){var e=[];q(a[d],function(a,f){try{var h=b.invoke(a);B(h)?h={compile:aa(h)}:!h.compile&&h.link&&(h.compile=aa(h.link));h.priority=h.priority||0;h.index=f;h.name=h.name||d;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"A";e.push(h)}catch(g){c(g)}});return e}])),a[d].push(e)):q(d,Ob(k));return this};this.aHrefSanitizationWhitelist=function(a){return z(a)?(f=a,this): +f};this.imgSrcSanitizationWhitelist=function(a){return z(a)?(g=a,this):g};this.$get=["$injector","$interpolate","$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate",function(b,l,n,r,p,C,H,I,A,S,G){function v(a,b,c,d,e){a instanceof y||(a=y(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=y(b).wrap("").parent()[0])});var f=E(a,b,a,c,d,e);return function(b,c){tb(b,"scope");for(var d=c?Da.clone.call(a):a,e=0,h= +d.length;eF.priority)break;if(t=F.scope)I=I||F,F.templateUrl||(Va("new/isolated scope",G,F,M),T(t)&&(G=F));ba=F.name;!F.templateUrl&&F.controller&&(t=F.controller,A=A||{},Va("'"+ba+"' controller",A[ba],F,M),A[ba]=F);if(t=F.transclude)F.$$tlb||(Va("transclusion",g,F,M),g=F),"element"==t?(E=F.priority,t=$(b,u,Fa),M=c.$$element=y(O.createComment(" "+ba+": "+c[ba]+" ")),b=M[0],L(e,y(ta.call(t, +0)),b),wa=v(t,d,E,f&&f.name,{transcludeDirective:g})):(t=y(zb(b)).contents(),M.html(""),wa=v(t,d));if(F.template)if(Va("template",N,F,M),N=F,t=B(F.template)?F.template(M,c):F.template,t=fc(t),F.replace){f=F;t=y("
"+Y(t)+"
").contents();b=t[0];if(1!=t.length||1!==b.nodeType)throw fa("tplrt",ba,"");L(e,M,b);w={$attr:{}};t=oa(b,[],w);var P=a.splice(ga+1,a.length-(ga+1));G&&z(t);a=a.concat(t).concat(P);gb(c,w);w=a.length}else M.html(t);if(F.templateUrl)Va("template",N,F,M),N=F,F.replace&&(f= +F),S=ad(a.splice(ga,a.length-ga),M,c,e,wa,h,k,{controllerDirectives:A,newIsolateScopeDirective:G,templateDirective:N,transcludeDirective:g}),w=a.length;else if(F.compile)try{x=F.compile(M,c,wa),B(x)?p(null,x,u,Fa):x&&p(x.pre,x.post,u,Fa)}catch(ed){n(ed,ea(M))}F.terminal&&(S.terminal=!0,E=Math.max(E,F.priority))}S.scope=I&&!0===I.scope;S.transclude=g&&wa;return S}function z(a){for(var b=0,c=a.length;br.priority)&&-1!=r.restrict.indexOf(f)&&(l&&(r=Qb(r,{$$start:l,$$end:p})),d.push(r),g=r)}catch(E){n(E)}}return g}function gb(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,f){"class"==f?(Z(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?e.attr("style",e.attr("style")+";"+b):"$"==f.charAt(0)||a.hasOwnProperty(f)|| +(a[f]=b,d[f]=c[f])})}function ad(a,b,c,d,e,f,h,g){var k=[],n,l,C=b[0],H=a.shift(),v=u({},H,{templateUrl:null,transclude:null,replace:null,$$originalDirective:H}),I=B(H.templateUrl)?H.templateUrl(b,c):H.templateUrl;b.html("");r.get(S.getTrustedResourceUrl(I),{cache:p}).success(function(p){var r;p=fc(p);if(H.replace){p=y("
"+Y(p)+"
").contents();r=p[0];if(1!=p.length||1!==r.nodeType)throw fa("tplrt",H.name,I);p={$attr:{}};L(d,b,r);var S=oa(r,[],p);T(H.scope)&&z(S);a=S.concat(a);gb(c,p)}else r= +C,b.html(p);a.unshift(v);n=M(a,r,c,e,b,H,f,h,g);q(d,function(a,c){a==r&&(d[c]=b[0])});for(l=E(b[0].childNodes,e);k.length;){p=k.shift();var S=k.shift(),Z=k.shift(),G=k.shift(),A=b[0];S!==C&&(A=zb(r),L(Z,y(S),A));n(l,p,A,d,G)}k=null}).error(function(a,b,c,d){throw fa("tpload",d.url);});return function(a,b,c,d,e){k?(k.push(b),k.push(c),k.push(d),k.push(e)):n(l,b,c,d,e)}}function wa(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:n.reject(b)}var d={transformRequest:e.transformRequest,transformResponse:e.transformResponse},f=function(a){function b(a){var c;q(a,function(b,d){B(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=u({},a.headers),f,h,c=u({},c.common,c[w(a.method)]);b(c);b(d);a:for(f in c){a=w(f);for(h in d)if(w(h)===a)continue a;d[f]=c[f]}return d}(a);u(d,a);d.headers=f;d.method=Ga(d.method);(a=Eb(d.url)?b.cookies()[d.xsrfCookieName|| +e.xsrfCookieName]:s)&&(f[d.xsrfHeaderName||e.xsrfHeaderName]=a);var h=[function(a){f=a.headers;var b=ic(a.data,hc(f),a.transformRequest);x(a.data)&&q(f,function(a,b){"content-type"===w(b)&&delete f[b]});x(a.withCredentials)&&!x(e.withCredentials)&&(a.withCredentials=e.withCredentials);return C(a,b,f).then(c,c)},s],g=n.when(d);for(q(A,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&h.push(a.response,a.responseError)});h.length;){a=h.shift(); +var k=h.shift(),g=g.then(a,k)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,d)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,d)});return g};return g}function C(b,c,f){function g(a,b,c){q&&(200<=a&&300>a?q.put(s,[a,b,gc(c)]):q.remove(s));k(b,a,c);d.$$phase||d.$apply()}function k(a,c,d){c=Math.max(c,0);(200<=c&&300>c?r.resolve:r.reject)({data:a,status:c,headers:hc(d),config:b})}function m(){var a=ab(p.pendingRequests,b);-1!==a&&p.pendingRequests.splice(a, +1)}var r=n.defer(),C=r.promise,q,A,s=H(b.url,b.params);p.pendingRequests.push(b);C.then(m,m);(b.cache||e.cache)&&(!1!==b.cache&&"GET"==b.method)&&(q=T(b.cache)?b.cache:T(e.cache)?e.cache:I);if(q)if(A=q.get(s),z(A)){if(A.then)return A.then(m,m),A;J(A)?k(A[1],A[0],da(A[2])):k(A,200,{})}else q.put(s,C);x(A)&&a(b.method,s,c,g,f,b.timeout,b.withCredentials,b.responseType);return C}function H(a,b){if(!b)return a;var c=[];Jc(b,function(a,b){null===a||x(a)||(J(a)||(a=[a]),q(a,function(a){T(a)&&(a=ma(a)); +c.push(ua(b)+"="+ua(a))}))});return a+(-1==a.indexOf("?")?"?":"&")+c.join("&")}var I=c("$http"),A=[];q(f,function(a){A.unshift(D(a)?r.get(a):r.invoke(a))});q(g,function(a,b){var c=D(a)?r.get(a):r.invoke(a);A.splice(b,0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});p.pendingRequests=[];(function(a){q(arguments,function(a){p[a]=function(b,c){return p(u(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){p[a]= +function(b,c,d){return p(u(d||{},{method:a,url:b,data:c}))}})})("post","put");p.defaults=e;return p}]}function kd(){this.$get=["$browser","$window","$document",function(b,a,c){return ld(b,md,b.defer,a.angular.callbacks,c[0],a.location.protocol.replace(":",""))}]}function ld(b,a,c,d,e,f){function g(a,b){var c=e.createElement("script"),d=function(){e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;P?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&&d()}:c.onload=c.onerror= +d;e.body.appendChild(c);return d}return function(e,m,k,l,n,r,p,C){function H(){A=-1;G&&G();v&&v.abort()}function I(a,d,e,h){var g=f||xa(m).protocol;Z&&c.cancel(Z);G=v=null;d="file"==g?e?200:404:d;a(1223==d?204:d,e,h);b.$$completeOutstandingRequest(t)}var A;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==w(e)){var s="_"+(d.counter++).toString(36);d[s]=function(a){d[s].data=a};var G=g(m.replace("JSON_CALLBACK","angular.callbacks."+s),function(){d[s].data?I(l,200,d[s].data):I(l,A||-2);delete d[s]})}else{var v= +new a;v.open(e,m,!0);q(n,function(a,b){z(a)&&v.setRequestHeader(b,a)});v.onreadystatechange=function(){if(4==v.readyState){var a=v.getAllResponseHeaders();I(l,A||v.status,v.responseType?v.response:v.responseText,a)}};p&&(v.withCredentials=!0);C&&(v.responseType=C);v.send(k||null)}if(0=h&&(n.resolve(p),l(r.$$intervalId),delete e[r.$$intervalId]); +C||b.$apply()},g);e[r.$$intervalId]=n;return r}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function pd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")", +gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy", +mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function kc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=sb(b[a]);return b.join("/")}function lc(b,a){var c=xa(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=U(c.port)||qd[c.protocol]||null}function mc(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=xa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=Ub(d.search);a.$$hash=decodeURIComponent(d.hash); +a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function la(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Wa(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Fb(b){return b.substr(0,Wa(b).lastIndexOf("/")+1)}function nc(b,a){this.$$html5=!0;a=a||"";var c=Fb(b);lc(b,this);this.$$parse=function(a){var b=la(c,a);if(!D(b))throw Gb("ipthprfx",a,c);mc(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Vb(this.$$search),b=this.$$hash? +"#"+sb(this.$$hash):"";this.$$url=kc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=la(b,d))!==s)return d=e,(e=la(a,e))!==s?c+(la("/",e)||e):b+d;if((e=la(c,d))!==s)return c+e;if(c==d+"/")return c}}function Hb(b,a){var c=Fb(b);lc(b,this);this.$$parse=function(d){var e=la(b,d)||la(c,d),e="#"==e.charAt(0)?la(a,e):this.$$html5?e:"";if(!D(e))throw Gb("ihshprfx",d,a);mc(e,this);this.$$compose()};this.$$compose=function(){var c=Vb(this.$$search), +e=this.$$hash?"#"+sb(this.$$hash):"";this.$$url=kc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Wa(b)==Wa(a))return a}}function oc(b,a){this.$$html5=!0;Hb.apply(this,arguments);var c=Fb(b);this.$$rewrite=function(d){var e;if(b==Wa(d))return d;if(e=la(c,d))return b+a+e;if(c===d+"/")return c}}function hb(b){return function(){return this[b]}}function pc(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}} +function rd(){var b="",a=!1;this.hashPrefix=function(a){return z(a)?(b=a,this):b};this.html5Mode=function(b){return z(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",h.absUrl(),a)}var h,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?nc:oc):(m=Wa(k),e=Hb);h=new e(m,"#"+b);h.$$parse(h.$$rewrite(k));f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&& +2!=a.which){for(var b=y(a.target);"a"!==w(b[0].nodeName);)if(b[0]===f[0]||!(b=b.parent())[0])return;var e=b.prop("href"),g=h.$$rewrite(e);e&&(!b.attr("target")&&g&&!a.isDefaultPrevented())&&(a.preventDefault(),g!=d.url()&&(h.$$parse(g),c.$apply(),W.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$broadcast("$locationChangeStart",a,h.absUrl()).defaultPrevented?d.url(h.absUrl()):(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a); +g(b)}),c.$$phase||c.$digest()))});var l=0;c.$watch(function(){var a=d.url(),b=h.$$replace;l&&a==h.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),g(a))}));h.$$replace=!1;return l});return h}]}function sd(){var b=!0,a=this;this.debugEnabled=function(a){return z(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+ +a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||t;return e.apply?function(){var a=[];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ha(b,a,c){if("string"!==typeof b&&"[object String]"!==Ka.apply(b))return b; +if("constructor"===b&&!c)throw pa("isecfld",a);if("_"===b.charAt(0)||"_"===b.charAt(b.length-1))throw pa("isecprv",a);return b}function Xa(b,a){if(b&&b.constructor===b)throw pa("isecfn",a);if(b&&b.document&&b.location&&b.alert&&b.setInterval)throw pa("isecwindow",a);if(b&&(b.nodeName||b.on&&b.find))throw pa("isecdom",a);return b}function ib(b,a,c,d,e){e=e||{};a=a.split(".");for(var f,g=0;1e?qc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,f){var h=0,g;do g=qc(d[h++],d[h++],d[h++],d[h++],d[h++],c,a)(b,f),f=s,b=g;while(ha)for(b in h++,d)d.hasOwnProperty(b)&&!f.hasOwnProperty(b)&&(m--,delete d[b])}else d!==f&&(d=f,h++);return h},function(){b(f,d,c)})},$digest:function(){var c,e,f,g,m=this.$$asyncQueue,q=this.$$postDigestQueue,s,t,G= +b,v,y=[],E,z,$;h("$digest");do{t=!1;for(v=this;m.length;)try{$=m.shift(),$.scope.$eval($.expression)}catch(x){d(x)}do{if(g=v.$$watchers)for(s=g.length;s--;)try{(c=g[s])&&((e=c.get(v))!==(f=c.last)&&!(c.eq?Aa(e,f):"number"==typeof e&&"number"==typeof f&&isNaN(e)&&isNaN(f)))&&(t=!0,c.last=c.eq?da(e):e,c.fn(e,f===k?e:f,v),5>G&&(E=4-G,y[E]||(y[E]=[]),z=B(c.exp)?"fn: "+(c.exp.name||c.exp.toString()):c.exp,z+="; newVal: "+ma(e)+"; oldVal: "+ma(f),y[E].push(z)))}catch(M){d(M)}if(!(g=v.$$childHead||v!==this&& +v.$$nextSibling))for(;v!==this&&!(g=v.$$nextSibling);)v=v.$parent}while(v=g);if(t&&!G--)throw l.$$phase=null,a("infdig",b,ma(y));}while(t||m.length);for(l.$$phase=null;q.length;)try{q.shift()()}catch(w){d(w)}},$destroy:function(){if(l!=this&&!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling); +this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null}},$eval:function(a,b){return e(a)(this,b)},$evalAsync:function(a){l.$$phase||l.$$asyncQueue.length||f.defer(function(){l.$$asyncQueue.length&&l.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return h("$apply"),this.$eval(a)}catch(b){d(b)}finally{l.$$phase= +null;try{l.$digest()}catch(c){throw d(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);return function(){c[ab(c,b)]=null}},$emit:function(a,b){var c=[],e,f=this,h=!1,g={name:a,targetScope:f,stopPropagation:function(){h=!0},preventDefault:function(){g.defaultPrevented=!0},defaultPrevented:!1},k=[g].concat(ta.call(arguments,1)),l,m;do{e=f.$$listeners[a]||c;g.currentScope=f;l=0;for(m=e.length;lc))throw ra("iequirks");var e=da(ca);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=za);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var f=e.parseAs,g=e.getTrusted,h=e.trustAs;q(ca,function(a,b){var c=w(b);e[Pa("parse_as_"+c)]=function(b){return f(a,b)};e[Pa("get_trusted_"+c)]=function(b){return g(a,b)};e[Pa("trust_as_"+ +c)]=function(b){return h(a,b)}});return e}]}function Ad(){this.$get=["$window","$document",function(b,a){var c={},d=U((/android (\d+)/.exec(w((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|O|ms)(?=[A-Z])/,m=f.body&&f.body.style,k=!1,l=!1;if(m){for(var n in m)if(k=h.exec(n)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in m&&"webkit");k=!!("transition"in m||g+"Transition"in m);l=!!("animation"in m||g+"Animation"in +m);!d||k&&l||(k=D(f.body.style.webkitTransition),l=D(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f.documentMode||7b;b=Math.abs(b);var g=b+"",h="",m=[],k=!1;if(-1!==g.indexOf("e")){var l=g.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?g="0":(h=g,k=!0)}if(k)0b)&&(h=b.toFixed(e));else{g=(g.split(Bc)[1]||"").length;x(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));g=Math.pow(10,e);b=Math.round(b*g)/g;b=(""+b).split(Bc);g=b[0];b=b[1]||"";var l=0,n=a.lgSize,r=a.gSize;if(g.length>=n+r)for(l=g.length-n,k=0;kb&&(d="-",b=-b);for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Kb(e,a,d)}}function jb(b,a){return function(c, +d){var e=c["get"+b](),f=Ga(a?"SHORT"+b:b);return d[f][e]}}function xc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=U(b[9]+b[10]),g=U(b[9]+b[11]));h.call(a,U(b[1]),U(b[2])-1,U(b[3]));f=U(b[4]||0)-f;g=U(b[5]||0)-g;h=U(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; +return function(c,e){var f="",g=[],h,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;D(c)&&(c=Id.test(c)?U(c):a(c));qb(c)&&(c=new Date(c));if(!Ja(c))return c;for(;e;)(m=Jd.exec(e))?(g=g.concat(ta.call(m,1)),e=g.pop()):(g.push(e),e=null);q(g,function(a){h=Kd[a];f+=h?h(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return f}}function Ed(){return function(b){return ma(b,!0)}}function Fd(){return function(b,a){if(!J(b)&&!D(b))return b;a=U(a);if(D(b))return a?0<=a?b.slice(0,a):b.slice(a, +b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||m()});a.on("change",g);if(e.hasEvent("paste"))a.on("paste cut",m)}d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var k=c.ngPattern,l=function(a,b){if(d.$isEmpty(b)||a.test(b))return d.$setValidity("pattern",!0),b;d.$setValidity("pattern",!1);return s};k&&((e=k.match(/^\/(.*)\/([gim]*)$/))?(k=RegExp(e[1],e[2]),e=function(a){return l(k,a)}):e=function(c){var d=b.$eval(k); +if(!d||!d.test)throw L("ngPattern")("noregexp",k,d,ea(a));return l(d,c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var n=U(c.ngMinlength);e=function(a){if(!d.$isEmpty(a)&&a.lengthr)return d.$setValidity("maxlength",!1),s;d.$setValidity("maxlength",!0);return a};d.$parsers.push(e); +d.$formatters.push(e)}}function Lb(b,a){b="ngClass"+b;return function(){return{restrict:"AC",link:function(c,d,e){function f(b){if(!0===a||c.$index%2===a)h&&!Aa(b,h)&&e.$removeClass(g(h)),e.$addClass(g(b));h=da(b)}function g(a){if(J(a))return a.join(" ");if(T(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var h;c.$watch(e[b],f,!0);e.$observe("class",function(a){f(c.$eval(e[b]))});"ngClass"!==b&&c.$watch("$index",function(d,f){var h=d&1;h!==f&1&&(h===a?(h=c.$eval(e[b]),e.$addClass(g(h))): +(h=c.$eval(e[b]),e.$removeClass(g(h))))})}}}}var w=function(b){return D(b)?b.toLowerCase():b},Ga=function(b){return D(b)?b.toUpperCase():b},P,y,Ba,ta=[].slice,Ld=[].push,Ka=Object.prototype.toString,Ma=L("ng"),bb=W.angular||(W.angular={}),Ua,Ea,ia=["0","0","0"];P=U((/msie (\d+)/.exec(w(navigator.userAgent))||[])[1]);isNaN(P)&&(P=U((/trident\/.*; rv:(\d+)/.exec(w(navigator.userAgent))||[])[1]));t.$inject=[];za.$inject=[];var Y=function(){return String.prototype.trim?function(b){return D(b)?b.trim(): +b}:function(b){return D(b)?b.replace(/^\s*/,"").replace(/\s*$/,""):b}}();Ea=9>P?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ga(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName?b.nodeName:b[0].nodeName};var Pc=/[A-Z]/g,Md={full:"1.2.0",major:1,minor:"NG_VERSION_MINOR",dot:0,codeName:"timely-delivery"},Ra=Q.cache={},db=Q.expando="ng-"+(new Date).getTime(),Tc=1,Dc=W.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+ +a,c)},Ab=W.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},Rc=/([\:\-\_]+(.))/g,Sc=/^moz([A-Z])/,xb=L("jqLite"),Da=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===O.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),Q(W).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0, +push:Ld,sort:[].sort,splice:[].splice},fb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){fb[w(b)]=b});var cc={};q("input select option textarea button form details".split(" "),function(b){cc[Ga(b)]=!0});q({data:$b,inheritedData:eb,scope:function(b){return y(b).data("$scope")||eb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y(b).data("$isolateScope")||y(b).data("$isolateScopeNoTemplate")},controller:ac,injector:function(b){return eb(b, +"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Bb,css:function(b,a,c){a=Pa(a);if(z(c))b.style[a]=c;else{var d;8>=P&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=P&&(d=""===d?s:d);return d}},attr:function(b,a,c){var d=w(a);if(fb[d])if(z(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||t).specified?d:s;else if(z(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a, +2),null===b?s:b},prop:function(b,a,c){if(z(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(x(d))return e?b[e]:"";b[e]=d}var a=[];9>P?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent";b.$dv="";return b}(),val:function(b,a){if(x(a)){if("SELECT"===Ea(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(x(a))return b.innerHTML;for(var c=0,d=b.childNodes;c< +d.length;c++)Qa(d[c]);b.innerHTML=a}},function(b,a){Q.prototype[a]=function(a,d){var e,f;if((2==b.length&&b!==Bb&&b!==ac?a:d)===s){if(T(a)){for(e=0;e":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<= +e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Qd={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Jb=function(a){this.options=a};Jb.prototype={constructor:Jb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d= +d||this.index;c=z(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw pa("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a= +this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(Ya.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()):this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=rc(d,this.options,this.text);return u(function(c,d,h){return e(h||a(c,d),d)},{assign:function(e,g,h){return ib(a(e,h),d,g,c.text,c.options)}})},objectIndex:function(a){var c= +this,d=this.expression();this.consume("]");return u(function(e,f){var g=a(e,f),h=ha(d(e,f),c.text,!0),m;if(!g)return s;(g=Xa(g[h],c.text))&&(g.then&&c.options.unwrapPromises)&&(m=g,"$$v"in g||(m.$$v=s,m.then(function(a){m.$$v=a})),g=g.$$v);return g},{assign:function(e,f,g){var h=ha(d(e,g),c.text);return Xa(a(e,g),c.text)[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(f,g){for(var h= +[],m=c?c(f,g):f,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Kb(Math[0< +a?"floor":"ceil"](a/60),2)+Kb(Math.abs(a%60),2))}},Jd=/((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,Id=/^\-?\d+$/;xc.$inject=["$locale"];var Gd=aa(w),Hd=aa(Ga);zc.$inject=["$parse"];var Rd=aa({restrict:"E",compile:function(a,c){8>=P&&(c.href||c.name||c.$set("href",""),a.append(O.createComment("IE fix")));return function(a,c){c.on("click",function(a){c.attr("href")||a.preventDefault()})}}}),Mb={};q(fb,function(a,c){if("multiple"!=a){var d=ka("ng-"+c);Mb[d]=function(){return{priority:100, +compile:function(){return function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}}});q(["src","srcset","href"],function(a){var c=ka("ng-"+a);Mb[c]=function(){return{priority:99,link:function(d,e,f){f.$observe(c,function(c){c&&(f.$set(a,c),P&&e.prop(a,f[a]))})}}}});var mb={$addControl:t,$removeControl:t,$setValidity:t,$setDirty:t,$setPristine:t};Cc.$inject=["$element","$attrs","$scope"];var Ec=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Cc,compile:function(){return{pre:function(a, +e,f,g){if(!f.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Dc(e[0],"submit",h);e.on("$destroy",function(){c(function(){Ab(e[0],"submit",h)},0,!1)})}var m=e.parent().controller("form"),k=f.name||f.ngForm;k&&ib(a,k,g,k);if(m)e.on("$destroy",function(){m.$removeControl(g);k&&ib(a,k,s,k);u(g,mb)})}}}}}]},Sd=Ec(),Td=Ec(!0),Ud=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Vd=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/,Wd= +/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Fc={text:ob,number:function(a,c,d,e,f,g){ob(a,c,d,e,f,g);e.$parsers.push(function(a){var c=e.$isEmpty(a);if(c||Wd.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);if(!e.$isEmpty(a)&&ac)return e.$setValidity("max",!1),s;e.$setValidity("max",!0);return a},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){if(e.$isEmpty(a)||qb(a))return e.$setValidity("number",!0),a;e.$setValidity("number",!1);return s})},url:function(a,c,d,e,f,g){ob(a,c,d,e,f,g);a=function(a){if(e.$isEmpty(a)||Ud.test(a))return e.$setValidity("url",!0),a;e.$setValidity("url",!1);return s};e.$formatters.push(a);e.$parsers.push(a)}, +email:function(a,c,d,e,f,g){ob(a,c,d,e,f,g);a=function(a){if(e.$isEmpty(a)||Vd.test(a))return e.$setValidity("email",!0),a;e.$setValidity("email",!1);return s};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){x(d.name)&&c.attr("name",Za());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var f=d.ngTrueValue,g=d.ngFalseValue;D(f)|| +(f=!0);D(g)||(g=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==f};e.$formatters.push(function(a){return a===f});e.$parsers.push(function(a){return a?f:g})},hidden:t,button:t,submit:t,reset:t},Gc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel",link:function(d,e,f,g){g&&(Fc[w(f.type)]||Fc.text)(d,e,f,g,c,a)}}}],lb="ng-valid",kb="ng-invalid",Ha="ng-pristine", +nb="ng-dirty",Xd=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,f){function g(a,c){c=c?"-"+cb(c,"-"):"";e.removeClass((a?kb:lb)+c).addClass((a?lb:kb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var h=f(d.ngModel),m=h.assign;if(!m)throw L("ngModel")("nonassign",d.ngModel,ea(e));this.$render=t;this.$isEmpty=function(a){return x(a)|| +""===a||null===a||a!==a};var k=e.inheritedData("$formController")||mb,l=0,n=this.$error={};e.addClass(Ha);g(!0);this.$setValidity=function(a,c){n[a]!==!c&&(c?(n[a]&&l--,l||(g(!0),this.$valid=!0,this.$invalid=!1)):(g(!1),this.$invalid=!0,this.$valid=!1,l++),n[a]=!c,g(c,a),k.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(nb).addClass(Ha)};this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,e.removeClass(Ha).addClass(nb), +k.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,m(a,d),q(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var r=this;a.$watch(function(){var c=h(a);if(r.$modelValue!==c){var d=r.$formatters,e=d.length;for(r.$modelValue=c;e--;)c=d[e](c);r.$viewValue!==c&&(r.$viewValue=c,r.$render())}})}],Yd=function(){return{require:["ngModel","^?form"],controller:Xd,link:function(a,c,d,e){var f=e[0],g=e[1]||mb;g.$addControl(f);a.$on("$destroy",function(){g.$removeControl(f)})}}}, +Zd=aa({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Hc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var f=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(f);e.$parsers.unshift(f);d.$observe("required",function(){f(e.$viewValue)})}}}},$d=function(){return{require:"ngModel",link:function(a,c,d,e){var f=(a=/\/(.*)\//.exec(d.ngList))&& +RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!x(a)){var c=[];a&&q(a.split(f),function(a){a&&c.push(Y(a))});return c}});e.$formatters.push(function(a){return J(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},ae=/^(true|false|\d+)$/,be=function(){return{priority:100,compile:function(a,c){return ae.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},ce=sa(function(a,c,d){c.addClass("ng-binding").data("$binding", +d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),de=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],ee=["$sce","$parse",function(a,c){return function(d,e,f){e.addClass("ng-binding").data("$binding",f.ngBindHtml);var g=c(f.ngBindHtml);d.$watch(function(){return(g(d)||"").toString()},function(c){e.html(a.getTrustedHtml(g(d))||"")})}}],fe=Lb("",!0),ge= +Lb("Odd",0),he=Lb("Even",1),ie=sa({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}),je=[function(){return{scope:!0,controller:"@"}}],Ic={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ka("ng-"+a);Ic[c]=["$parse",function(d){return{compile:function(e,f){var g=d(f[c]);return function(c,d,e){d.on(w(a),function(a){c.$apply(function(){g(c,{$event:a})})})}}}}]}); +var ke=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,compile:function(c,d,e){return function(c,d,h){var m,k;c.$watch(h.ngIf,function(l){Na(l)?(k=c.$new(),e(k,function(c){m={startNode:c[0],endNode:c[c.length++]=O.createComment(" end ngIf: "+h.ngIf+" ")};a.enter(c,d.parent(),d)})):(k&&(k.$destroy(),k=null),m&&(a.leave(vb(m)),m=null))})}}}}],le=["$http","$templateCache","$anchorScroll","$compile","$animate","$sce",function(a,c,d,e,f,g){return{restrict:"ECA", +priority:400,terminal:!0,transclude:"element",compile:function(h,m,k){var l=m.ngInclude||m.src,n=m.onload||"",r=m.autoscroll;return function(h,m){var q=0,s,t,y=function(){s&&(s.$destroy(),s=null);t&&(f.leave(t),t=null)};h.$watch(g.parseAsResourceUrl(l),function(g){var l=function(){!z(r)||r&&!h.$eval(r)||d()},x=++q;g?(a.get(g,{cache:c}).success(function(a){if(x===q){var c=h.$new();k(c,function(d){y();s=c;t=d;t.html(a);f.enter(t,null,m,l);e(t.contents())(s);s.$emit("$includeContentLoaded");h.$eval(n)})}}).error(function(){x=== +q&&y()}),h.$emit("$includeContentRequested")):y()})}}}}],me=sa({compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),ne=sa({terminal:!0,priority:1E3}),oe=["$locale","$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,f,g){var h=g.count,m=g.$attr.when&&f.attr(g.$attr.when),k=g.offset||0,l=e.$eval(m)||{},n={},r=c.startSymbol(),p=c.endSymbol(),s=/^when(Minus)?(.+)$/;q(g,function(a,c){s.test(c)&&(l[w(c.replace("when","").replace("Minus","-"))]=f.attr(g.$attr[c]))}); +q(l,function(a,e){n[e]=c(a.replace(d,r+h+"-"+k+p))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-k));return n[c](e,f,!0)},function(a){f.text(a)})}}}],pe=["$parse","$animate",function(a,c){var d=L("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(e,f,g){return function(e,f,k){var l=k.ngRepeat,n=l.match(/^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/),r,p,s,t,z,A,x,G={$id:Ca};if(!n)throw d("iexp",l);k= +n[1];z=n[2];(n=n[4])?(r=a(n),p=function(a,c,d){x&&(G[x]=a);G[A]=c;G.$index=d;return r(e,G)}):(s=function(a,c){return Ca(c)},t=function(a){return a});n=k.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!n)throw d("iidexp",k);A=n[3]||n[1];x=n[2];var v={};e.$watchCollection(z,function(a){var k,n,r=f[0],z,M={},G,N,w,I,D,u,J=[];if(pb(a))D=a,z=p||s;else{z=p||t;D=[];for(w in a)a.hasOwnProperty(w)&&"$"!=w.charAt(0)&&D.push(w);D.sort()}G=D.length;n=J.length=D.length;for(k=0;kB;)x.pop().element.remove()}for(;y.length>K;)y.pop()[0].element.remove()}var k;if(!(k=u.match(d)))throw ye("iexp",u,ea(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q=c(k[2]?k[1]:m),r=c(k[7]),v=k[8]?c(k[8]):null,y=[[{element:f,label:""}]];w&&(a(w)(e),w.removeClass("ng-scope"),w.remove());f.html("");f.on("change", +function(){e.$apply(function(){var a,c=r(e)||[],d={},h,k,l,p,u,x,w;if(t)for(k=[],p=0,x=y.length;p@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}.ng-animate-start{clip:rect(0,auto,auto,0);-ms-zoom:1.0001;}.ng-animate-active{clip:rect(-1px,auto,auto,0);-ms-zoom:1;}'); //# sourceMappingURL=angular.min.js.map diff --git a/app/lib/angular/angular.min.js.map b/app/lib/angular/angular.min.js.map index 1f7eb7684..ac9a2b034 100755 --- a/app/lib/angular/angular.min.js.map +++ b/app/lib/angular/angular.min.js.map @@ -1,8 +1,8 @@ { "version":3, "file":"angular.min.js", -"lineCount":196, -"mappings":"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", +"lineCount":199, +"mappings":"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", "sources":["angular.js","MINERR_ASSET"], -"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","apply","isRegExp","location","alert","setInterval","isElement","node","nodeName","on","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","substr","equals","o1","o2","t1","t2","keySet","charAt","bind","self","fn","curryArgs","slice","startIndex","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","html","e","elemHtml","append","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","attr","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","enabled","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","setupModuleLoader","ensure","factory","$injectorMinErr","Object","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","block","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","JQLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","jqLiteMinErr","div","createElement","innerHTML","removeChild","firstChild","JQLiteAddNodes","childNodes","fragment","createDocumentFragment","JQLiteClone","cloneNode","JQLiteDealoc","JQLiteRemoveData","JQLiteOff","type","unsupported","events","JQLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","JQLiteData","isSetter","keyDefined","isSimpleGetter","JQLiteHasClass","selector","getAttribute","JQLiteRemoveClass","cssClasses","setAttribute","cssClass","trim","JQLiteAddClass","existingClasses","root","JQLiteController","JQLiteInheritedData","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","loadedModules","get","moduleFn","angularModule","_runBlocks","_invokeQueue","ii","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","$AnchorScrollProvider","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$BrowserProvider","$document","$CacheFactoryProvider","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$TemplateCacheProvider","$cacheFactory","$CompileProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","aHrefSanitizationWhitelist","imgSrcSanitizationWhitelist","EVENT_HANDLER_ATTR_REGEXP","directive","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","this.aHrefSanitizationWhitelist","regexp","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","wrap","compositeLinkFn","compileNodes","publicLinkFn","cloneConnectFn","$linkNode","JQLitePrototype","eq","safeAddClass","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","childScope","childTranscludeFn","stableNodeList","linkFns","nodeLinkFn","$new","transclude","cloneFn","transcludeScope","$$transcluded","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","j","jj","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","nodes","depth","hasAttribute","$compileMinErr","nextSibling","groupElementsLinkFnWrapper","linkFn","controllers","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","getControllers","retrievalMethod","optional","$$controller","directiveName","linkNode","$$element","newIsolateScopeDirective","LOCAL_REGEXP","parentScope","$parent","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","$$isolateBindings","$observe","$$observers","$$scope","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","terminalPriority","newScopeDirective","templateDirective","$compileNode","$template","transcludeDirective","$$start","$$end","directiveValue","templateUrl","assertNoDuplicate","createComment","replaceWith","replaceDirective","contents","template","denormalizeTemplate","newTemplateAttrs","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","a","b","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","RESOURCE_URL","attrInterpolateLinkFn","$$inter","elementsToRemove","newNode","firstElementToRemove","removeCount","parentNode","j2","replaceChild","appendChild","expando","k","kk","$addClass","classVal","$removeClass","removeClass","writeAttr","tokenDifference","str1","str2","values","tokens1","tokens2","token","current","booleanKey","prop","normalizedVal","urlResolve","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","$ControllerProvider","CNTRL_REG","register","this.register","expression","identifier","$DocumentProvider","$ExceptionHandlerProvider","exception","cause","parseHeaders","parsed","line","headersGetter","headersObj","transformData","fns","$HttpProvider","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","uppercase","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","$HttpBackendProvider","createHttpBackend","XHR","callbacks","protocol","$browserDefer","locationProtocol","jsonpReq","script","doneWrapper","body","onreadystatechange","script.onreadystatechange","readyState","onload","onerror","timeoutRequest","jsonpDone","xhr","abort","completeRequest","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","$InterpolateProvider","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","err","newErr","$interpolate.startSymbol","$interpolate.endSymbol","$IntervalProvider","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","$LocaleProvider","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","$LocationProvider","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","$LogProvider","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","getterFn","getterFnCache","pathKeys","pathKeysLength","csp","evaledFnGetter","Function","evaledFnGetter.toString","$ParseProvider","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","$QProvider","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","$RootScopeProvider","TTL","$rootScopeMinErr","digestTtl","this.digestTtl","Scope","$id","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","beginPhase","phase","compileToFn","initWatchVal","isolate","child","Child","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","oldValue","newValue","changeDetected","objGetter","internalArray","internalObject","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","expr","$$postDigest","$on","namedListeners","$emit","empty","listenerArgs","array1","currentScope","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","$SceDelegateProvider","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","HTML","CSS","URL","JS","trustAs","maybeTrusted","allowed","$SceProvider","this.enabled","$sceDelegate","documentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","literal","sceParseAsTrusted","enumValue","lName","$SnifferProvider","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","securityPolicy","isActive","$TimeoutProvider","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","host","requestUrl","originUrl","$WindowProvider","$FilterProvider","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comperator","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","predicate","v1","v2","arrayCopy","comparator","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","textInputType","ctrl","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","validate","patternValidator","patternObj","$formatters","$parsers","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","ngClassWatchAction","$index","flattenClasses","classes","old$index","mod","version","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","option","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","replaceNode","insertBefore","prepend","wrapNode","after","newElement","toggleClass","condition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","off","$animateMinErr","$AnimateProvider","$$selectors","$timeout","enter","afterNode","afterNextSibling","leave","move","XMLHttpRequest","ActiveXObject","e1","e2","e3","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","Parser.ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","htmlAnchorDirective","ngAttributeAliasDirectives","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formDirective","formElement","action","preventDefaultListener","parentFormCtrl","alias","ngFormDirective","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","inputDirective","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ngModelDirective","ctrls","modelCtrl","formCtrl","ngChangeDirective","ngChange","requiredDirective","required","validator","ngListDirective","ngList","viewValue","CONSTANT_VALUE_REGEXP","ngValueDirective","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBindDirective","ngBind","ngBindWatchAction","ngBindTemplateDirective","ngBindTemplate","ngBindHtmlDirective","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","ngClassDirective","ngClassOddDirective","ngClassEvenDirective","ngCloakDirective","ngControllerDirective","ngCspDirective","ngEventDirectives","ngIfDirective","childElement","ngIf","ngIfWatchAction","ngIncludeDirective","$anchorScroll","$compile","transclusion","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","thisChangeId","newScope","ngInitDirective","ngInit","ngNonBindableDirective","ngPluralizeDirective","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatDirective","getBlockElements","startNode","endNode","ngRepeatMinErr","linker","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","rhs","valueIdentifier","keyIdentifier","hashFnLocals","lhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","id","$first","$last","$middle","$odd","$even","ngShowDirective","ngShow","ngShowWatchAction","ngHideDirective","ngHide","ngHideWatchAction","ngStyleDirective","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchDirective","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhenDirective","ngSwitchWhen","ngSwitchDefaultDirective","ngTranscludeDirective","$transclude","$attrs","scriptDirective","ngOptionsMinErr","ngOptionsDirective","selectDirective","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","Single","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","Multiple","lastView","items","selectMultipleWatch","Options","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngRequired","requiredValidator","optionDirective","nullSelectCtrl","selectCtrlName","interpolateWatchAction","styleDirective","publishExternalAPI","ngModule"] +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","sortedKeys","keys","push","sort","forEachSorted","i","reverseParams","iteratorFn","value","nextUid","index","uid","digit","charCodeAt","join","String","fromCharCode","unshift","setHashKey","h","$$hashKey","extend","dst","arguments","int","str","parseInt","inherit","parent","extra","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","apply","isRegExp","location","alert","setInterval","isElement","node","nodeName","on","find","map","results","list","indexOf","array","arrayRemove","splice","copy","source","destination","$evalAsync","$watch","ngMinErr","Date","getTime","RegExp","shallowCopy","src","substr","equals","o1","o2","t1","t2","keySet","charAt","csp","securityPolicy","isActive","querySelector","bind","self","fn","curryArgs","slice","startIndex","concat","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","toBoolean","v","lowercase","startingTag","element","jqLite","clone","html","e","elemHtml","append","TEXT_NODE","match","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","split","toKeyValue","parts","arrayValue","encodeUriQuery","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","angularInit","bootstrap","elements","appElement","module","names","NG_APP_CLASS_REGEXP","name","getElementById","querySelectorAll","exec","className","attributes","attr","modules","doBootstrap","injector","tag","$provide","createInjector","invoke","scope","compile","animate","$apply","data","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockElements","block","startNode","endNode","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","Object","requires","configFn","invokeLater","provider","method","insertMethod","invokeQueue","moduleInstance","runBlocks","config","run","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLitePatchJQueryRemove","dispatchThis","filterElems","getterIfNoArguments","removePatch","param","filter","fireEvent","set","setIndex","setLength","childIndex","children","shift","triggerHandler","childLength","jQuery","originalJqFn","$original","JQLite","jqLiteMinErr","div","createElement","innerHTML","removeChild","firstChild","jqLiteAddNodes","childNodes","fragment","createDocumentFragment","jqLiteClone","cloneNode","jqLiteDealoc","jqLiteRemoveData","jqLiteOff","type","unsupported","events","jqLiteExpandoStore","handle","eventHandler","removeEventListenerFn","expandoId","jqName","expandoStore","jqCache","$destroy","jqId","jqLiteData","isSetter","keyDefined","isSimpleGetter","jqLiteHasClass","selector","getAttribute","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","trim","jqLiteAddClass","existingClasses","root","jqLiteController","jqLiteInheritedData","ii","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","event","preventDefault","event.preventDefault","returnValue","stopPropagation","event.stopPropagation","cancelBubble","target","srcElement","defaultPrevented","prevent","isDefaultPrevented","event.isDefaultPrevented","msie","elem","hashKey","objType","HashMap","put","annotate","$inject","fnText","STRIP_COMMENTS","argDecl","FN_ARGS","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","$get","providerCache","providerSuffix","factoryFn","loadModules","moduleFn","loadedModules","get","angularModule","_runBlocks","_invokeQueue","invokeArgs","message","stack","createInternalInjector","cache","getService","serviceName","INSTANTIATING","locals","args","Type","Constructor","returnedValue","prototype","instance","has","service","$injector","constant","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","instanceInjector","servicename","$AnchorScrollProvider","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","$window","$location","$rootScope","getFirstAnchor","result","scroll","hash","elm","scrollIntoView","getElementsByName","scrollTo","autoScrollWatch","autoScrollWatchAction","Browser","$log","$sniffer","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","setTimeout","check","pollFns","pollFn","pollTimeout","fireUrlChange","newLocation","lastBrowserUrl","url","urlChangeListeners","listener","rawDocument","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","self.url","replaceState","pushState","urlChangeInit","onUrlChange","self.onUrlChange","hashchange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","escape","warn","cookieArray","unescape","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","$BrowserProvider","$document","$CacheFactoryProvider","this.$get","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$TemplateCacheProvider","$cacheFactory","$CompileProvider","hasDirectives","Suffix","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","aHrefSanitizationWhitelist","imgSrcSanitizationWhitelist","EVENT_HANDLER_ATTR_REGEXP","directive","this.directive","registerDirective","directiveFactory","$exceptionHandler","directives","priority","require","controller","restrict","this.aHrefSanitizationWhitelist","regexp","this.imgSrcSanitizationWhitelist","$interpolate","$http","$templateCache","$parse","$controller","$sce","$animate","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","wrap","compositeLinkFn","compileNodes","publicLinkFn","cloneConnectFn","$linkNode","JQLitePrototype","eq","safeAddClass","$element","addClass","nodeList","$rootElement","boundTranscludeFn","childLinkFn","$node","childScope","stableNodeList","linkFns","nodeLinkFn","$new","childTranscludeFn","transclude","cloneFn","transcludeScope","$$transcluded","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","terminal","attrsMap","$attr","addDirective","directiveNormalize","nodeName_","nName","nAttrs","j","jj","attrStartName","attrEndName","specified","ngAttrName","NG_ATTR_BINDING","directiveNName","addAttrInterpolateDirective","addTextInterpolateDirective","byPriority","groupScan","attrStart","attrEnd","nodes","depth","hasAttribute","$compileMinErr","groupElementsLinkFnWrapper","linkFn","controllers","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","retrievalMethod","optional","$$controller","directiveName","linkNode","isolateScope","$$element","LOCAL_REGEXP","templateDirective","$$originalDirective","definition","scopeName","attrName","mode","lastValue","parentGet","parentSet","$$isolateBindings","$observe","$$observers","$$scope","assign","parentValueWatch","parentValue","controllerDirectives","controllerInstance","controllerAs","$scope","scopeToChild","template","templateUrl","terminalPriority","newScopeDirective","transcludeDirective","$compileNode","$template","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","success","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","response","code","headers","delayedNodeLinkFn","ignoreChildLinkFn","rootElement","a","b","diff","what","previousDirective","text","interpolateFn","textInterpolateLinkFn","bindings","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","RESOURCE_URL","attrInterpolatePreLinkFn","$$inter","elementsToRemove","newNode","firstElementToRemove","removeCount","parentNode","j2","replaceChild","appendChild","expando","k","kk","annotation","$addClass","classVal","$removeClass","removeClass","writeAttr","tokenDifference","str1","str2","values","tokens1","tokens2","token","current","booleanKey","prop","normalizedVal","urlResolve","removeAttr","listeners","startSymbol","endSymbol","PREFIX_REGEXP","$ControllerProvider","CNTRL_REG","register","this.register","expression","identifier","$DocumentProvider","$ExceptionHandlerProvider","exception","cause","parseHeaders","parsed","line","headersGetter","headersObj","transformData","fns","$HttpProvider","JSON_START","JSON_END","PROTECTION_PREFIX","CONTENT_TYPE_APPLICATION_JSON","defaults","d","interceptorFactories","interceptors","responseInterceptorFactories","responseInterceptors","$httpBackend","$browser","$q","requestConfig","transformResponse","resp","status","reject","transformRequest","mergeHeaders","execHeaders","headerContent","headerFn","header","defHeaders","reqHeaders","defHeaderName","reqHeaderName","common","lowercaseDefHeaderName","uppercase","xsrfValue","urlIsSameOrigin","xsrfCookieName","xsrfHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","then","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","promise.success","promise.error","done","headersString","resolvePromise","$$phase","deferred","resolve","removePendingReq","idx","pendingRequests","cachedResp","buildUrl","params","defaultCache","timeout","responseType","interceptorFactory","responseFn","createShortMethods","createShortMethodsWithData","$HttpBackendProvider","createHttpBackend","XHR","callbacks","protocol","$browserDefer","locationProtocol","jsonpReq","script","doneWrapper","body","onreadystatechange","script.onreadystatechange","readyState","onload","onerror","timeoutRequest","jsonpDone","xhr","abort","completeRequest","callbackId","counter","open","setRequestHeader","xhr.onreadystatechange","responseHeaders","getAllResponseHeaders","responseText","send","$InterpolateProvider","this.startSymbol","this.endSymbol","mustHaveExpression","trustedContext","endIndex","hasInterpolation","startSymbolLength","exp","endSymbolLength","$interpolateMinErr","part","getTrusted","valueOf","err","newErr","$interpolate.startSymbol","$interpolate.endSymbol","$IntervalProvider","count","invokeApply","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","$LocaleProvider","short","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","stripHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$rewrite","this.$$rewrite","appUrl","prevAppUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","$LocationProvider","html5Mode","this.hashPrefix","prefix","this.html5Mode","afterLocationChange","oldUrl","$broadcast","absUrl","initialUrl","LocationMode","ctrlKey","metaKey","which","absHref","rewrittenUrl","newUrl","$digest","changeCounter","$locationWatch","currentReplace","$$replace","$LogProvider","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","arg1","arg2","ensureSafeMemberName","fullExpression","allowConstructor","$parseMinErr","ensureSafeObject","setter","setValue","fullExp","propertyObj","unwrapPromises","promiseWarning","$$v","cspSafeGetterFn","key0","key1","key2","key3","key4","cspSafePromiseEnabledGetter","pathVal","cspSafeGetter","getterFn","getterFnCache","pathKeys","pathKeysLength","evaledFnGetter","Function","evaledFnGetter.toString","$ParseProvider","$parseOptions","this.unwrapPromises","logPromiseWarnings","this.logPromiseWarnings","$filter","promiseWarningCache","parsedExpression","lexer","Lexer","parser","Parser","$QProvider","qFactory","nextTick","exceptionHandler","defaultCallback","defaultErrback","pending","ref","progress","errback","progressback","wrappedCallback","wrappedErrback","wrappedProgressback","catch","finally","makePromise","resolved","handleCallback","isResolved","callbackOutput","promises","$RootScopeProvider","TTL","$rootScopeMinErr","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$destroyed","$$asyncQueue","$$postDigestQueue","$$listeners","beginPhase","phase","compileToFn","initWatchVal","isolate","child","Child","watchExp","objectEquality","watcher","listenFn","watcher.fn","newVal","oldVal","originalFn","$watchCollection","oldValue","newValue","changeDetected","objGetter","internalArray","internalObject","oldLength","$watchCollectionWatch","newLength","$watchCollectionAction","watch","watchers","asyncQueue","postDigestQueue","dirty","ttl","watchLog","logIdx","logMsg","asyncTask","$eval","isNaN","next","expr","$$postDigest","$on","namedListeners","$emit","empty","listenerArgs","array1","currentScope","adjustMatcher","matcher","$sceMinErr","adjustMatchers","matchers","adjustedMatchers","$SceDelegateProvider","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","HTML","CSS","URL","JS","trustAs","maybeTrusted","allowed","$SceProvider","enabled","this.enabled","$sceDelegate","documentMode","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","literal","sceParseAsTrusted","enumValue","lName","$SnifferProvider","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","style","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","$TimeoutProvider","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","host","requestUrl","originUrl","$WindowProvider","$FilterProvider","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","comparatorType","predicates","predicates.check","objKey","filtered","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","CURRENCY_SYM","formatNumber","PATTERNS","GROUP_SEP","DECIMAL_SEP","number","fractionSize","pattern","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","fractionLen","min","minFrac","maxFrac","pow","round","fraction","lgroup","lgSize","group","gSize","negPre","posPre","negSuf","posSuf","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","object","input","limit","out","sortPredicate","reverseOrder","reverseComparator","comp","descending","predicate","v1","v2","arrayCopy","ngDirective","FormController","toggleValidCss","isValid","validationErrorKey","INVALID_CLASS","VALID_CLASS","form","parentForm","nullFormCtrl","invalidCount","errors","$error","controls","$name","ngForm","$dirty","$pristine","$valid","$invalid","$addControl","PRISTINE_CLASS","form.$addControl","control","$removeControl","form.$removeControl","queue","validationToken","$setValidity","form.$setValidity","$setDirty","form.$setDirty","DIRTY_CLASS","$setPristine","form.$setPristine","textInputType","ctrl","ngTrim","$viewValue","$setViewValue","deferListener","keyCode","$render","ctrl.$render","$isEmpty","ngPattern","validate","patternValidator","patternObj","$formatters","$parsers","ngMinlength","minlength","minLengthValidator","ngMaxlength","maxlength","maxLengthValidator","classDirective","ngClassWatchAction","$index","flattenClasses","classes","old$index","mod","version","addEventListenerFn","addEventListener","attachEvent","removeEventListener","detachEvent","ready","trigger","fired","removeAttribute","css","currentStyle","lowercasedName","getNamedItem","ret","getText","textProp","NODE_TYPE_TEXT_PROPERTY","$dv","multiple","option","selected","onFn","eventFns","contains","compareDocumentPosition","adown","documentElement","bup","eventmap","related","relatedTarget","replaceNode","insertBefore","prepend","wrapNode","after","newElement","toggleClass","condition","nextElementSibling","getElementsByTagName","eventName","eventData","arg3","unbind","off","$animateMinErr","$AnimateProvider","$$selectors","$timeout","enter","afterNode","afterNextSibling","leave","move","XMLHttpRequest","ActiveXObject","e1","e2","e3","PATH_MATCH","paramValue","OPERATORS","null","true","false","+","-","*","/","%","^","===","!==","==","!=","<",">","<=",">=","&&","||","&","|","!","ESCAPE","lex","ch","lastCh","tokens","is","readString","peek","readNumber","isIdent","readIdent","was","isWhitespace","ch2","ch3","fn2","fn3","throwError","chars","isExpOperator","start","end","colStr","peekCh","ident","lastDot","peekIndex","methodName","quote","rawString","hex","rep","ZERO","Parser.ZERO","assignment","logicalOR","functionCall","fieldAccess","objectIndex","filterChain","this.filterChain","primary","statements","expect","consume","arrayDeclaration","msg","peekToken","e4","t","unaryFn","right","ternaryFn","left","middle","binaryFn","statement","argsFn","fnInvoke","ternary","logicalAND","equality","relational","additive","multiplicative","unary","field","indexFn","o","safe","contextGetter","fnPtr","elementFns","allConstant","elementFn","keyValues","ampmGetter","getHours","AMPMS","timeZoneGetter","zone","getTimezoneOffset","paddedZone","htmlAnchorDirective","ngAttributeAliasDirectives","propName","normalized","ngBooleanAttrWatchAction","formDirectiveFactory","isNgForm","formDirective","formElement","action","preventDefaultListener","parentFormCtrl","alias","ngFormDirective","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","inputType","numberInputType","minValidator","maxValidator","urlInputType","urlValidator","emailInputType","emailValidator","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","inputDirective","NgModelController","$modelValue","NaN","$viewChangeListeners","ngModelGet","ngModel","ngModelSet","this.$isEmpty","inheritedData","this.$setValidity","this.$setPristine","this.$setViewValue","ngModelWatch","formatters","ngModelDirective","ctrls","modelCtrl","formCtrl","ngChangeDirective","ngChange","requiredDirective","required","validator","ngListDirective","ngList","viewValue","CONSTANT_VALUE_REGEXP","ngValueDirective","tpl","tplAttr","ngValue","ngValueConstantLink","ngValueLink","valueWatchAction","ngBindDirective","ngBind","ngBindWatchAction","ngBindTemplateDirective","ngBindTemplate","ngBindHtmlDirective","ngBindHtml","getStringValue","ngBindHtmlWatchAction","getTrustedHtml","ngClassDirective","ngClassOddDirective","ngClassEvenDirective","ngCloakDirective","ngControllerDirective","ngEventDirectives","ngIfDirective","ngIf","ngIfWatchAction","ngIncludeDirective","$anchorScroll","$compile","transclusion","srcExp","ngInclude","onloadExp","autoScrollExp","autoscroll","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","newScope","ngInitDirective","ngInit","ngNonBindableDirective","ngPluralizeDirective","BRACE","numberExp","whenExp","whens","whensExpFns","isWhen","attributeName","ngPluralizeWatch","ngPluralizeWatchAction","ngRepeatDirective","ngRepeatMinErr","linker","ngRepeat","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","rhs","valueIdentifier","keyIdentifier","hashFnLocals","lhs","trackByExp","lastBlockMap","ngRepeatAction","collection","previousNode","nextNode","nextBlockMap","arrayLength","collectionKeys","nextBlockOrder","trackByIdFn","trackById","id","$first","$last","$middle","$odd","$even","ngShowDirective","ngShow","ngShowWatchAction","ngHideDirective","ngHide","ngHideWatchAction","ngStyleDirective","ngStyle","ngStyleWatchAction","newStyles","oldStyles","ngSwitchDirective","ngSwitchController","cases","selectedTranscludes","selectedElements","selectedScopes","ngSwitch","ngSwitchWatchAction","change","selectedTransclude","selectedScope","caseElement","anchor","ngSwitchWhenDirective","ngSwitchWhen","ngSwitchDefaultDirective","ngTranscludeDirective","$transclude","$attrs","scriptDirective","ngOptionsMinErr","ngOptionsDirective","selectDirective","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","items","selectMultipleWatch","setupAsOptions","render","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","modelValue","valuesFn","keyName","groupIndex","selectedSet","lastElement","trackFn","trackIndex","valueName","groupByFn","modelCast","label","displayFn","nullOption","groupLength","optionGroupsCache","optGroupTemplate","existingOption","optionTemplate","optionsExp","track","optionElement","ngOptions","ngRequired","requiredValidator","optionDirective","nullSelectCtrl","selectCtrlName","interpolateWatchAction","styleDirective","publishExternalAPI","ngModule","$$csp"] } diff --git a/app/lib/angular/docs/.htaccess b/app/lib/angular/docs/.htaccess new file mode 100755 index 000000000..6f587d3ac --- /dev/null +++ b/app/lib/angular/docs/.htaccess @@ -0,0 +1,19 @@ +## OFFLINE SUPPORT ## + +# These rules tell apache to check if there is a cookie called "offline", with value set to the +# current angular version. If this rule matches the appcache-offline.manifest will be served for +# requests to appcache.manifest +# +# This file must be processed by Grunt in order to replace %ANGULAR_VERSION% with the actual version. + +Options -Indexes +RewriteEngine on +RewriteCond %{HTTP_COOKIE} ng-offline=1.2.0-rc.2 +RewriteRule appcache.manifest appcache-offline.manifest + +## Redirect to the latest manifest +RewriteCond %{HTTP_HOST} ^docs-next\.angularjs\.org$ +RewriteRule appcache.manifest http://code.angularjs.org/next/docs/appcache.manifest [R=301] + +## HTML5 URL Support ## +RewriteRule ^(guide|api|cookbook|misc|tutorial)(/.*)?$ index.html diff --git a/app/lib/angular/docs/appcache-offline.manifest b/app/lib/angular/docs/appcache-offline.manifest new file mode 100755 index 000000000..20da2a2fb --- /dev/null +++ b/app/lib/angular/docs/appcache-offline.manifest @@ -0,0 +1,369 @@ +CACHE MANIFEST +# 2013-09-04T12:51:17.228Z + +# cache all of these +CACHE: +../angular.min.js +components/angular-bootstrap-prettify.js +components/angular-bootstrap.js +components/bootstrap/.bower.json +components/bootstrap/css/bootstrap-responsive.css +components/bootstrap/css/bootstrap-responsive.min.css +components/bootstrap/css/bootstrap.css +components/bootstrap/css/bootstrap.min.css +components/bootstrap/img/glyphicons-halflings-white.png +components/bootstrap/img/glyphicons-halflings.png +components/bootstrap/js/bootstrap.js +components/bootstrap/js/bootstrap.min.js +components/font-awesome/css/font-awesome-ie7.min.css +components/font-awesome/css/font-awesome.css +components/font-awesome/css/font-awesome.min.css +components/font-awesome/font/FontAwesome.otf +components/font-awesome/font/fontawesome-webfont.eot +components/font-awesome/font/fontawesome-webfont.svg +components/font-awesome/font/fontawesome-webfont.ttf +components/font-awesome/font/fontawesome-webfont.woff +components/google-code-prettify.js +components/jquery.js +components/jquery.min.js +components/lunr.js +components/lunr.min.js +components/marked.js +css/animations.css +css/doc_widgets.css +css/docs.css +css/prettify.css +docs-data.js +favicon.ico +img/AngularJS-small.png +img/One_Way_Data_Binding.png +img/Two_Way_Data_Binding.png +img/angular_parts.png +img/angularjs-for-header-only.svg +img/bullet.png +img/form_data_flow.png +img/glyphicons-halflings-white.png +img/glyphicons-halflings.png +img/guide/about_model_final.png +img/guide/about_view_final.png +img/guide/concepts-controller.png +img/guide/concepts-directive.png +img/guide/concepts-model.png +img/guide/concepts-module-injector.png +img/guide/concepts-runtime.png +img/guide/concepts-scope.png +img/guide/concepts-startup.png +img/guide/concepts-view.png +img/guide/di_sequence_final.png +img/guide/dom_scope_final.png +img/guide/hashbang_vs_regular_url.jpg +img/guide/scenario_runner.png +img/guide/simple_scope_final.png +img/helloworld.png +img/helloworld_2way.png +img/tutorial/catalog_screen.png +img/tutorial/tutorial_00.png +img/tutorial/tutorial_00_final.png +img/tutorial/tutorial_02.png +img/tutorial/tutorial_03.png +img/tutorial/tutorial_04.png +img/tutorial/tutorial_07_final.png +img/tutorial/tutorial_08-09_final.png +img/tutorial/tutorial_10-11_final.png +img/tutorial/xhr_service_final.png +index-debug.html +index-jq-debug.html +index-jq-nocache.html +index-jq.html +index-nocache.html +index.html +js/docs.js +notes/empty.tmp +partials/api/AUTO.$injector.html +partials/api/AUTO.$provide.html +partials/api/AUTO.html +partials/api/angular.IModule.html +partials/api/angular.bind.html +partials/api/angular.bootstrap.html +partials/api/angular.copy.html +partials/api/angular.element.html +partials/api/angular.equals.html +partials/api/angular.extend.html +partials/api/angular.forEach.html +partials/api/angular.fromJson.html +partials/api/angular.identity.html +partials/api/angular.injector.html +partials/api/angular.isArray.html +partials/api/angular.isDate.html +partials/api/angular.isDefined.html +partials/api/angular.isElement.html +partials/api/angular.isFunction.html +partials/api/angular.isNumber.html +partials/api/angular.isObject.html +partials/api/angular.isString.html +partials/api/angular.isUndefined.html +partials/api/angular.lowercase.html +partials/api/angular.mock.TzDate.html +partials/api/angular.mock.dump.html +partials/api/angular.mock.html +partials/api/angular.mock.inject.html +partials/api/angular.mock.module.html +partials/api/angular.module.html +partials/api/angular.noop.html +partials/api/angular.toJson.html +partials/api/angular.uppercase.html +partials/api/angular.version.html +partials/api/index.html +partials/api/ng.$anchorScroll.html +partials/api/ng.$animate.html +partials/api/ng.$animateProvider.html +partials/api/ng.$cacheFactory.html +partials/api/ng.$compile.directive.Attributes.html +partials/api/ng.$compile.html +partials/api/ng.$compileProvider.html +partials/api/ng.$controller.html +partials/api/ng.$controllerProvider.html +partials/api/ng.$document.html +partials/api/ng.$exceptionHandler.html +partials/api/ng.$filter.html +partials/api/ng.$filterProvider.html +partials/api/ng.$http.html +partials/api/ng.$httpBackend.html +partials/api/ng.$interpolate.html +partials/api/ng.$interpolateProvider.html +partials/api/ng.$locale.html +partials/api/ng.$location.html +partials/api/ng.$locationProvider.html +partials/api/ng.$log.html +partials/api/ng.$logProvider.html +partials/api/ng.$parse.html +partials/api/ng.$q.html +partials/api/ng.$rootElement.html +partials/api/ng.$rootScope.Scope.html +partials/api/ng.$rootScope.html +partials/api/ng.$rootScopeProvider.html +partials/api/ng.$sce.html +partials/api/ng.$sceDelegate.html +partials/api/ng.$sceDelegateProvider.html +partials/api/ng.$sceProvider.html +partials/api/ng.$templateCache.html +partials/api/ng.$timeout.html +partials/api/ng.$window.html +partials/api/ng.directive:a.html +partials/api/ng.directive:form.FormController.html +partials/api/ng.directive:form.html +partials/api/ng.directive:input.checkbox.html +partials/api/ng.directive:input.email.html +partials/api/ng.directive:input.html +partials/api/ng.directive:input.number.html +partials/api/ng.directive:input.radio.html +partials/api/ng.directive:input.text.html +partials/api/ng.directive:input.url.html +partials/api/ng.directive:ngApp.html +partials/api/ng.directive:ngBind.html +partials/api/ng.directive:ngBindHtml.html +partials/api/ng.directive:ngBindTemplate.html +partials/api/ng.directive:ngBlur.html +partials/api/ng.directive:ngChange.html +partials/api/ng.directive:ngChecked.html +partials/api/ng.directive:ngClass.html +partials/api/ng.directive:ngClassEven.html +partials/api/ng.directive:ngClassOdd.html +partials/api/ng.directive:ngClick.html +partials/api/ng.directive:ngCloak.html +partials/api/ng.directive:ngController.html +partials/api/ng.directive:ngCsp.html +partials/api/ng.directive:ngDblclick.html +partials/api/ng.directive:ngDisabled.html +partials/api/ng.directive:ngFocus.html +partials/api/ng.directive:ngForm.html +partials/api/ng.directive:ngHide.html +partials/api/ng.directive:ngHref.html +partials/api/ng.directive:ngIf.html +partials/api/ng.directive:ngInclude.html +partials/api/ng.directive:ngInit.html +partials/api/ng.directive:ngKeydown.html +partials/api/ng.directive:ngKeypress.html +partials/api/ng.directive:ngKeyup.html +partials/api/ng.directive:ngList.html +partials/api/ng.directive:ngModel.NgModelController.html +partials/api/ng.directive:ngModel.html +partials/api/ng.directive:ngMousedown.html +partials/api/ng.directive:ngMouseenter.html +partials/api/ng.directive:ngMouseleave.html +partials/api/ng.directive:ngMousemove.html +partials/api/ng.directive:ngMouseover.html +partials/api/ng.directive:ngMouseup.html +partials/api/ng.directive:ngNonBindable.html +partials/api/ng.directive:ngOpen.html +partials/api/ng.directive:ngPluralize.html +partials/api/ng.directive:ngReadonly.html +partials/api/ng.directive:ngRepeat.html +partials/api/ng.directive:ngSelected.html +partials/api/ng.directive:ngShow.html +partials/api/ng.directive:ngSrc.html +partials/api/ng.directive:ngSrcset.html +partials/api/ng.directive:ngStyle.html +partials/api/ng.directive:ngSubmit.html +partials/api/ng.directive:ngSwitch.html +partials/api/ng.directive:ngTransclude.html +partials/api/ng.directive:script.html +partials/api/ng.directive:select.html +partials/api/ng.directive:textarea.html +partials/api/ng.filter:currency.html +partials/api/ng.filter:date.html +partials/api/ng.filter:filter.html +partials/api/ng.filter:json.html +partials/api/ng.filter:limitTo.html +partials/api/ng.filter:lowercase.html +partials/api/ng.filter:number.html +partials/api/ng.filter:orderBy.html +partials/api/ng.filter:uppercase.html +partials/api/ng.html +partials/api/ngAnimate.$animate.html +partials/api/ngAnimate.$animateProvider.html +partials/api/ngAnimate.html +partials/api/ngCookies.$cookieStore.html +partials/api/ngCookies.$cookies.html +partials/api/ngCookies.html +partials/api/ngMock.$exceptionHandler.html +partials/api/ngMock.$exceptionHandlerProvider.html +partials/api/ngMock.$httpBackend.html +partials/api/ngMock.$log.html +partials/api/ngMock.$timeout.html +partials/api/ngMock.html +partials/api/ngMockE2E.$httpBackend.html +partials/api/ngMockE2E.html +partials/api/ngResource.$resource.html +partials/api/ngResource.html +partials/api/ngRoute.$route.html +partials/api/ngRoute.$routeParams.html +partials/api/ngRoute.$routeProvider.html +partials/api/ngRoute.directive:ngView.html +partials/api/ngRoute.html +partials/api/ngSanitize.$sanitize.html +partials/api/ngSanitize.filter:linky.html +partials/api/ngSanitize.html +partials/api/ngTouch.$swipe.html +partials/api/ngTouch.directive:ngClick.html +partials/api/ngTouch.directive:ngSwipeLeft.html +partials/api/ngTouch.directive:ngSwipeRight.html +partials/api/ngTouch.html +partials/cookbook/advancedform.html +partials/cookbook/buzz.html +partials/cookbook/deeplinking.html +partials/cookbook/form.html +partials/cookbook/helloworld.html +partials/cookbook/index.html +partials/cookbook/mvc.html +partials/error/$animate:notcsel.html +partials/error/$cacheFactory:iid.html +partials/error/$compile:ctreq.html +partials/error/$compile:iscp.html +partials/error/$compile:multidir.html +partials/error/$compile:nodomevents.html +partials/error/$compile:nonassign.html +partials/error/$compile:selmulti.html +partials/error/$compile:tpload.html +partials/error/$compile:tplrt.html +partials/error/$compile:uterdir.html +partials/error/$controller:noscp.html +partials/error/$httpBackend:noxhr.html +partials/error/$injector:cdep.html +partials/error/$injector:itkn.html +partials/error/$injector:modulerr.html +partials/error/$injector:nomod.html +partials/error/$injector:pget.html +partials/error/$injector:unpr.html +partials/error/$interpolate:interr.html +partials/error/$interpolate:noconcat.html +partials/error/$location:ihshprfx.html +partials/error/$location:ipthprfx.html +partials/error/$location:isrcharg.html +partials/error/$parse:isecfld.html +partials/error/$parse:isecfn.html +partials/error/$parse:lexerr.html +partials/error/$parse:syntax.html +partials/error/$parse:ueoe.html +partials/error/$resource:badargs.html +partials/error/$resource:badcfg.html +partials/error/$rootScope:infdig.html +partials/error/$rootScope:inprog.html +partials/error/$sanitize:badparse.html +partials/error/$sce:icontext.html +partials/error/$sce:iequirks.html +partials/error/$sce:insecurl.html +partials/error/$sce:itype.html +partials/error/$sce:unsafe.html +partials/error/index.html +partials/error/jqLite:nosel.html +partials/error/jqLite:offargs.html +partials/error/jqLite:onargs.html +partials/error/ng:areq.html +partials/error/ng:btstrpd.html +partials/error/ng:cpi.html +partials/error/ng:cpws.html +partials/error/ngModel:nonassign.html +partials/error/ngOptions:iexp.html +partials/error/ngPattern:noregexp.html +partials/error/ngRepeat:dupes.html +partials/error/ngRepeat:iexp.html +partials/error/ngRepeat:iidexp.html +partials/guide/bootstrap.html +partials/guide/compiler.html +partials/guide/concepts.html +partials/guide/dev_guide.e2e-testing.html +partials/guide/dev_guide.mvc.html +partials/guide/dev_guide.mvc.understanding_controller.html +partials/guide/dev_guide.mvc.understanding_model.html +partials/guide/dev_guide.mvc.understanding_view.html +partials/guide/dev_guide.services.$location.html +partials/guide/dev_guide.services.creating_services.html +partials/guide/dev_guide.services.html +partials/guide/dev_guide.services.injecting_controllers.html +partials/guide/dev_guide.services.managing_dependencies.html +partials/guide/dev_guide.services.testing_services.html +partials/guide/dev_guide.services.understanding_services.html +partials/guide/dev_guide.templates.css-styling.html +partials/guide/dev_guide.templates.databinding.html +partials/guide/dev_guide.templates.filters.creating_filters.html +partials/guide/dev_guide.templates.filters.html +partials/guide/dev_guide.templates.filters.using_filters.html +partials/guide/dev_guide.templates.html +partials/guide/dev_guide.unit-testing.html +partials/guide/di.html +partials/guide/directive.html +partials/guide/expression.html +partials/guide/forms.html +partials/guide/i18n.html +partials/guide/ie.html +partials/guide/index.html +partials/guide/introduction.html +partials/guide/module.html +partials/guide/overview.html +partials/guide/scope.html +partials/misc/contribute.html +partials/misc/downloading.html +partials/misc/faq.html +partials/misc/started.html +partials/tutorial/index.html +partials/tutorial/step_00.html +partials/tutorial/step_01.html +partials/tutorial/step_02.html +partials/tutorial/step_03.html +partials/tutorial/step_04.html +partials/tutorial/step_05.html +partials/tutorial/step_06.html +partials/tutorial/step_07.html +partials/tutorial/step_08.html +partials/tutorial/step_09.html +partials/tutorial/step_10.html +partials/tutorial/step_11.html +partials/tutorial/the_end.html + +FALLBACK: +/ /build/docs/index.html + +# allow access to google analytics and twitter when we are online +NETWORK: +* \ No newline at end of file diff --git a/app/lib/angular/docs/appcache.manifest b/app/lib/angular/docs/appcache.manifest new file mode 100755 index 000000000..4264eed71 --- /dev/null +++ b/app/lib/angular/docs/appcache.manifest @@ -0,0 +1,20 @@ +CACHE MANIFEST +# 2013-09-04T12:51:15.973Z + +# cache all of these +CACHE: +syntaxhighlighter/syntaxhighlighter-combined.js +../angular.min.js +docs-combined.js +docs-data.js +docs-combined.css +syntaxhighlighter/syntaxhighlighter-combined.css +img/texture_1.png +img/yellow_bkgnd.jpg + +FALLBACK: +/ /build/docs/offline.html + +# allow access to google analytics and twitter when we are online +NETWORK: +* \ No newline at end of file diff --git a/app/lib/angular/docs/components/angular-bootstrap-prettify.js b/app/lib/angular/docs/components/angular-bootstrap-prettify.js new file mode 100755 index 000000000..c0496c2c4 --- /dev/null +++ b/app/lib/angular/docs/components/angular-bootstrap-prettify.js @@ -0,0 +1,309 @@ +'use strict'; + +var directive = {}; +var service = { value: {} }; + +var DEPENDENCIES = { + 'angular.js': 'http://code.angularjs.org/' + angular.version.full + '/angular.min.js', + 'angular-resource.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-resource.min.js', + 'angular-route.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-route.min.js', + 'angular-animate.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-animate.min.js', + 'angular-sanitize.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-sanitize.min.js', + 'angular-cookies.js': 'http://code.angularjs.org/' + angular.version.full + '/angular-cookies.min.js' +}; + + +function escape(text) { + return text. + replace(/\&/g, '&'). + replace(/\/g, '>'). + replace(/"/g, '"'); +} + +/** + * http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie + * http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript + */ +function setHtmlIe8SafeWay(element, html) { + var newElement = angular.element('
' + html + '
'); + + element.html(''); + element.append(newElement.contents()); + return element; +} + + +directive.jsFiddle = function(getEmbeddedTemplate, escape, script) { + return { + terminal: true, + link: function(scope, element, attr) { + var name = '', + stylesheet = '\n', + fields = { + html: '', + css: '', + js: '' + }; + + angular.forEach(attr.jsFiddle.split(' '), function(file, index) { + var fileType = file.split('.')[1]; + + if (fileType == 'html') { + if (index == 0) { + fields[fileType] += + '
\n' + + getEmbeddedTemplate(file, 2); + } else { + fields[fileType] += '\n\n\n \n' + + ' \n'; + } + } else { + fields[fileType] += getEmbeddedTemplate(file) + '\n'; + } + }); + + fields.html += '
\n'; + + setHtmlIe8SafeWay(element, + '
' + + hiddenField('title', 'AngularJS Example: ' + name) + + hiddenField('css', ' \n' + + stylesheet + + script.angular + + (attr.resource ? script.resource : '') + + ' + + + + + AngularJS + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ + + +
Loading...
+ +
+ +
+

Discussion

+
+
+
+
+
+ + + + + + + +
+ + + diff --git a/app/lib/angular/docs/index-jq-debug.html b/app/lib/angular/docs/index-jq-debug.html new file mode 100755 index 000000000..963af35ff --- /dev/null +++ b/app/lib/angular/docs/index-jq-debug.html @@ -0,0 +1,407 @@ + + + + + + + + + + + + AngularJS + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ + + +
Loading...
+ +
+ +
+

Discussion

+
+
+
+
+
+ + + + + + + +
+ + + diff --git a/app/lib/angular/docs/index-jq-nocache.html b/app/lib/angular/docs/index-jq-nocache.html new file mode 100755 index 000000000..963af35ff --- /dev/null +++ b/app/lib/angular/docs/index-jq-nocache.html @@ -0,0 +1,407 @@ + + + + + + + + + + + + AngularJS + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ + + +
Loading...
+ +
+ +
+

Discussion

+
+
+
+
+
+ + + + + + + +
+ + + diff --git a/app/lib/angular/docs/index-jq.html b/app/lib/angular/docs/index-jq.html new file mode 100755 index 000000000..963af35ff --- /dev/null +++ b/app/lib/angular/docs/index-jq.html @@ -0,0 +1,407 @@ + + + + + + + + + + + + AngularJS + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ + + +
Loading...
+ +
+ +
+

Discussion

+
+
+
+
+
+ + + + + + + +
+ + + diff --git a/app/lib/angular/docs/index-nocache.html b/app/lib/angular/docs/index-nocache.html new file mode 100755 index 000000000..963af35ff --- /dev/null +++ b/app/lib/angular/docs/index-nocache.html @@ -0,0 +1,407 @@ + + + + + + + + + + + + AngularJS + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ + + +
Loading...
+ +
+ +
+

Discussion

+
+
+
+
+
+ + + + + + + +
+ + + diff --git a/app/lib/angular/docs/index.html b/app/lib/angular/docs/index.html new file mode 100755 index 000000000..963af35ff --- /dev/null +++ b/app/lib/angular/docs/index.html @@ -0,0 +1,407 @@ + + + + + + + + + + + + AngularJS + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+ + + +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ + + +
Loading...
+ +
+ +
+

Discussion

+
+
+
+
+
+ + + + + + + +
+ + + diff --git a/app/lib/angular/docs/js/docs.js b/app/lib/angular/docs/js/docs.js new file mode 100755 index 000000000..9b38313b5 --- /dev/null +++ b/app/lib/angular/docs/js/docs.js @@ -0,0 +1,875 @@ +var docsApp = { + controller: {}, + directive: {}, + serviceFactory: {} +}; + +docsApp.controller.DocsVersionsCtrl = ['$scope', '$window', 'NG_VERSIONS', 'NG_VERSION', function($scope, $window, NG_VERSIONS, NG_VERSION) { + $scope.docs_versions = NG_VERSIONS; + $scope.docs_version = NG_VERSIONS[0]; + $scope.jumpToDocsVersion = function(version) { + $window.location = version.url; + }; +}]; + +docsApp.controller.DocsNavigationCtrl = ['$scope', '$location', 'docsSearch', function($scope, $location, docsSearch) { + function clearResults() { + $scope.results = []; + $scope.colClassName = null; + $scope.hasResults = false; + } + + $scope.search = function(q) { + var MIN_SEARCH_LENGTH = 3; + if(q.length >= MIN_SEARCH_LENGTH) { + var results = docsSearch(q); + var totalSections = 0; + for(var i in results) { + ++totalSections; + } + if(totalSections > 0) { + $scope.colClassName = 'cols-' + totalSections; + } + $scope.hasResults = totalSections > 0; + $scope.results = results; + } + else { + clearResults(); + } + if(!$scope.$$phase) $scope.$apply(); + }; + $scope.submit = function() { + var result; + for(var i in $scope.results) { + result = $scope.results[i][0]; + if(result) { + break; + } + } + if(result) { + $location.path(result.url); + $scope.hideResults(); + } + }; + $scope.hideResults = function() { + clearResults(); + $scope.q = ''; + }; +}]; + +docsApp.serviceFactory.lunrSearch = function() { + return function(properties) { + if (window.RUNNING_IN_NG_TEST_RUNNER) return null; + + var engine = lunr(properties); + return { + store : function(values) { + engine.add(values); + }, + search : function(q) { + return engine.search(q); + } + }; + }; +}; + +docsApp.serviceFactory.docsSearch = ['$rootScope','lunrSearch', 'NG_PAGES', + function($rootScope, lunrSearch, NG_PAGES) { + if (window.RUNNING_IN_NG_TEST_RUNNER) { + return null; + } + + var index = lunrSearch(function() { + this.ref('id'); + this.field('title', {boost: 50}); + this.field('description', { boost : 20 }); + }); + + angular.forEach(NG_PAGES, function(page, i) { + var title = page.shortName; + if(title.charAt(0) == 'n' && title.charAt(1) == 'g') { + title = title + ' ' + title.charAt(2).toLowerCase() + title.substr(3); + } + index.store({ + id: i, + title: title, + description: page.keywords + }); + }); + + return function(q) { + var results = {}; + angular.forEach(index.search(q), function(result) { + var item = NG_PAGES[result.ref]; + var section = item.section; + if(section == 'cookbook') { + section = 'tutorial'; + } + results[section] = results[section] || []; + if(results[section].length < 15) { + results[section].push(item); + } + }); + return results; + }; +}]; + +docsApp.directive.focused = function($timeout) { + return function(scope, element, attrs) { + element[0].focus(); + element.on('focus', function() { + scope.$apply(attrs.focused + '=true'); + }); + element.on('blur', function() { + // have to use $timeout, so that we close the drop-down after the user clicks, + // otherwise when the user clicks we process the closing before we process the click. + $timeout(function() { + scope.$eval(attrs.focused + '=false'); + }); + }); + scope.$eval(attrs.focused + '=true'); + }; +}; + +docsApp.directive.docsSearchInput = function() { + return function(scope, element, attrs) { + var ESCAPE_KEY_KEYCODE = 27; + element.bind('keydown', function(event) { + if(event.keyCode == ESCAPE_KEY_KEYCODE) { + event.stopPropagation(); + event.preventDefault(); + scope.$apply(function() { + scope.hideResults(); + }); + } + }); + }; +}; + + +docsApp.directive.code = function() { + return { restrict:'E', terminal: true }; +}; + + +docsApp.directive.sourceEdit = function(getEmbeddedTemplate) { + return { + template: '
' + + '' + + ' Edit' + + '' + + '' + + '
', + scope: true, + controller: function($scope, $attrs, openJsFiddle, openPlunkr) { + var sources = { + module: $attrs.sourceEdit, + deps: read($attrs.sourceEditDeps), + html: read($attrs.sourceEditHtml), + css: read($attrs.sourceEditCss), + js: read($attrs.sourceEditJs), + json: read($attrs.sourceEditJson), + unit: read($attrs.sourceEditUnit), + scenario: read($attrs.sourceEditScenario) + }; + $scope.fiddle = function(e) { + e.stopPropagation(); + openJsFiddle(sources); + }; + $scope.plunkr = function(e) { + e.stopPropagation(); + openPlunkr(sources); + }; + } + }; + + function read(text) { + var files = []; + angular.forEach(text ? text.split(' ') : [], function(refId) { + // refId is index.html-343, so we need to strip the unique ID when exporting the name + files.push({name: refId.replace(/-\d+$/, ''), content: getEmbeddedTemplate(refId)}); + }); + return files; + } +}; + + +docsApp.directive.docTutorialNav = function(templateMerge) { + var pages = [ + '', + 'step_00', 'step_01', 'step_02', 'step_03', 'step_04', + 'step_05', 'step_06', 'step_07', 'step_08', 'step_09', + 'step_10', 'step_11', 'the_end' + ]; + return { + compile: function(element, attrs) { + var seq = 1 * attrs.docTutorialNav, + props = { + seq: seq, + prev: pages[seq], + next: pages[2 + seq], + diffLo: seq ? (seq - 1): '0~1', + diffHi: seq + }; + + element.addClass('btn-group'); + element.addClass('tutorial-nav'); + element.append(templateMerge( + '
  • Previous
  • \n' + + '
  • Live Demo
  • \n' + + '
  • Code Diff
  • \n' + + '
  • Next
  • ', props)); + } + }; +}; + + +docsApp.directive.docTutorialReset = function() { + function tab(name, command, id, step) { + return '' + + '
    \n' + + '
      \n' + + '
    1. Reset the workspace to step ' + step + '.

      ' + + '
      ' + command + '
    2. \n' + + '
    3. Refresh your browser or check the app out on Angular\'s server.

    4. \n' + + '
    \n' + + '
    \n'; + } + + return { + compile: function(element, attrs) { + var step = attrs.docTutorialReset; + element.html( + '\n' + + '
    \n' + + tab('Git on Mac/Linux', 'git checkout -f step-' + step, 'gitUnix', step) + + tab('Git on Windows', 'git checkout -f step-' + step, 'gitWin', step) + + '
    \n'); + } + }; +}; + + +docsApp.directive.errorDisplay = ['$location', function ($location) { + var interpolate = function (formatString) { + var formatArgs = arguments; + return formatString.replace(/\{\d+\}/g, function (match) { + // Drop the braces and use the unary plus to convert to an integer. + // The index will be off by one because of the formatString. + var index = +match.slice(1, -1); + if (index + 1 >= formatArgs.length) { + return match; + } + return formatArgs[index+1]; + }); + }; + + return { + link: function (scope, element, attrs) { + var search = $location.search(), + formatArgs = [attrs.errorDisplay], + i; + + for (i = 0; angular.isDefined(search['p'+i]); i++) { + formatArgs.push(search['p'+i]); + } + element.text(interpolate.apply(null, formatArgs)); + } + }; +}]; + + +docsApp.serviceFactory.angularUrls = function($document) { + var urls = {}; + + angular.forEach($document.find('script'), function(script) { + var match = script.src.match(/^.*\/(angular[^\/]*\.js)$/); + if (match) { + urls[match[1].replace(/(\-\d.*)?(\.min)?\.js$/, '.js')] = match[0]; + } + }); + + return urls; +}; + + +docsApp.serviceFactory.formPostData = function($document) { + return function(url, fields) { + var form = angular.element('
    '); + angular.forEach(fields, function(value, name) { + var input = angular.element(''); + input.attr('value', value); + form.append(input); + }); + $document.find('body').append(form); + form[0].submit(); + form.remove(); + }; +}; + + +docsApp.serviceFactory.prepareDefaultAppModule = function() { + return function(content) { + var deps = []; + angular.forEach(content.deps, function(file) { + if(file.name == 'angular-animate.js') { + deps.push('ngAnimate'); + } + }); + + var moduleName = 'App'; + return { + module : moduleName, + script : "angular.module('" + moduleName + "', ['" + deps.join("','") + "']);\n\n" + }; + }; +}; + +docsApp.serviceFactory.prepareEditorAssetTags = function(angularUrls) { + return function(content, options) { + options = options || {}; + var includeLocalFiles = options.includeLocalFiles; + var html = makeScriptTag(angularUrls['angular.js']); + + var allFiles = [].concat(content.js, content.css, content.html, content.json); + angular.forEach(content.deps, function(file) { + if (file.name !== 'angular.js') { + var isLocal = false; + for(var i=0;i\n'; + }; + + function makeCssLinkTag(src) { + return '\n'; + }; + }; +}; + + +docsApp.serviceFactory.openPlunkr = function(templateMerge, formPostData, prepareEditorAssetTags, prepareDefaultAppModule) { + return function(content) { + var hasRouting = false; + angular.forEach(content.deps, function(file) { + hasRouting = hasRouting || file.name == 'angular-route.js'; + }); + var indexHtmlContent = '\n' + + '\n' + + ' \n' + + '{{scriptDeps}}'; + + if(hasRouting) { + indexHtmlContent += '\n'; + } + + indexHtmlContent += '\n' + + ' \n\n' + + '{{indexContents}}\n\n' + + ' \n' + + '\n'; + + indexProp = { + module: content.module, + scriptDeps: prepareEditorAssetTags(content, { includeLocalFiles : true }), + indexContents: content.html[0].content + }; + + var allFiles = [].concat(content.js, content.css, content.html, content.json); + + if(!content.module) { + var moduleData = prepareDefaultAppModule(content); + indexProp.module = moduleData.module; + + var found = false; + angular.forEach(content.js, function(file) { + if(file.name == 'script.js') { + file.content = moduleData.script + file.content; + found = true; + } + }); + if(!found) { + indexProp.scriptDeps += '\n'; + allFiles.push({ + name : 'script.js', + content : moduleData.script + }); + } + }; + + var postData = {}; + + angular.forEach(allFiles, function(file, index) { + if (file.content && file.name != 'index.html') { + postData['files[' + file.name + ']'] = file.content; + } + }); + + postData['files[index.html]'] = templateMerge(indexHtmlContent, indexProp); + postData['tags[]'] = "angularjs"; + + postData.private = true; + postData.description = 'AngularJS Example Plunkr'; + + formPostData('http://plnkr.co/edit/?p=preview', postData); + }; +}; + +docsApp.serviceFactory.openJsFiddle = function(templateMerge, formPostData, prepareEditorAssetTags, prepareDefaultAppModule) { + var HTML = '
    \n{{html:2}}
    ', + CSS = ' \n' + + '{{head:0}} + +
    +
    
    +
    +
    +

    Demo

    +
    +

    Animations

    +

    The example below demonstrates how to perform animations using ngClass.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    ngClass and pre-existing CSS3 Transitions/Animations

    +

    The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. +Therefore, if any CSS3 Transition/Animation styles (outside of ngAnimate) are set on the element, then, if a ngClass animation +is triggered, the ngClass animation will be skipped so that ngAnimate can allow for the pre-existing transition or animation to +take over. This restriction allows for ngClass to still work with standard CSS3 Transitions/Animations that are defined +outside of ngAnimate.

    + + diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngClassEven.html b/app/lib/angular/docs/partials/api/ng.directive:ngClassEven.html new file mode 100755 index 000000000..c9d8a042a --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngClassEven.html @@ -0,0 +1,63 @@ + View source Improve this doc

    ngClassEven +
    directive in module ng + +
    +

    +

    Description

    +

    The ngClassOdd and ngClassEven directives work exactly as +ngClass, except it works in +conjunction with ngRepeat and takes affect only on odd (even) rows.

    +

    This directive can be applied only within a scope of an +ngRepeat.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-class-even="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-class-even: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngClassEvenexpression

    Expression to eval. The +result of the evaluation can be a string representing space delimited class names or an array.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngClassOdd.html b/app/lib/angular/docs/partials/api/ng.directive:ngClassOdd.html new file mode 100755 index 000000000..471e9d9a8 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngClassOdd.html @@ -0,0 +1,63 @@ + View source Improve this doc

    ngClassOdd +
    directive in module ng + +
    +

    +

    Description

    +

    The ngClassOdd and ngClassEven directives work exactly as +ngClass, except it works in +conjunction with ngRepeat and takes affect only on odd (even) rows.

    +

    This directive can be applied only within a scope of an +ngRepeat.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-class-odd="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-class-odd: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngClassOddexpression

    Expression to eval. The result +of the evaluation can be a string representing space delimited class names or an array.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngClick.html b/app/lib/angular/docs/partials/api/ng.directive:ngClick.html new file mode 100755 index 000000000..2a36815d5 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngClick.html @@ -0,0 +1,45 @@ + View source Improve this doc

    ngClick +
    directive in module ng + +
    +

    +

    Description

    +

    The ngClick allows you to specify custom behavior when +element is clicked.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-click="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-click: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngClickexpression

    Expression to evaluate upon +click. (Event object is available as $event)

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngCloak.html b/app/lib/angular/docs/partials/api/ng.directive:ngCloak.html new file mode 100755 index 000000000..cdf993d37 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngCloak.html @@ -0,0 +1,62 @@ + View source Improve this doc

    ngCloak +
    directive in module ng + +
    +

    +

    Description

    +

    The ngCloak directive is used to prevent the Angular html template from being briefly +displayed by the browser in its raw (uncompiled) form while your application is loading. Use this +directive to avoid the undesirable flicker effect caused by the html template display.

    +

    The directive can be applied to the <body> element, but typically a fine-grained application is +preferred in order to benefit from progressive rendering of the browser view.

    +

    ngCloak works in cooperation with a css rule that is embedded within angular.js and + angular.min.js files. Following is the css rule:

    +
    +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
    +  display: none !important;
    +}
    +
    +

    When this css rule is loaded by the browser, all html elements (including their children) that +are tagged with the ng-cloak directive are hidden. When Angular comes across this directive +during the compilation of the template it deletes the ngCloak element attribute, which +makes the compiled element visible.

    +

    For the best result, angular.js script must be loaded in the head section of the html file; +alternatively, the css rule (above) must be included in the external stylesheet of the +application.

    +

    Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they +cannot match the [ng\:cloak] selector. To work around this limitation, you must add the css +class ngCloak in addition to ngCloak directive as shown in the example below.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-cloak>
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-cloak">
    +   ...
    +</ANY>
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngController.html b/app/lib/angular/docs/partials/api/ng.directive:ngController.html new file mode 100755 index 000000000..4aabc226c --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngController.html @@ -0,0 +1,193 @@ + View source Improve this doc

    ngController +
    directive in module ng + +
    +

    +

    Description

    +

    The ngController directive assigns behavior to a scope. This is a key aspect of how angular +supports the principles behind the Model-View-Controller design pattern.

    +

    MVC components in angular:

    +
      +
    • Model — The Model is data in scope properties; scopes are attached to the DOM.
    • +
    • View — The template (HTML with data bindings) is rendered into the View.
    • +
    • Controller — The ngController directive specifies a Controller class; the class has +methods that typically express the business logic behind the application.
    • +
    +

    Note that an alternative way to define controllers is via the $route service.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-controller="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-controller: {expression};">
    +   ...
    +</ANY>
    +

    Directive info

    +
    • This directive creates new scope.
    • +
    +
    +

    Parameters

    ParamTypeDetails
    ngControllerexpression

    Name of a globally accessible constructor function or an +expression that on the current scope evaluates to a +constructor function. The controller instance can further be published into the scope +by adding as localName the controller name attribute.

    +
    +

    Example

    +

    Here is a simple form for editing user contact information. Adding, removing, clearing, and +greeting are methods declared on the controller (see source tab). These methods can +easily be called from the angular markup. Notice that the scope becomes the this for the +controller's instance. This allows for easy access to the view data from the controller. Also +notice that any changes to the data are automatically reflected in the View without the need +for a manual update. The example is included in two different declaration styles based on +your style preferences. +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngCsp.html b/app/lib/angular/docs/partials/api/ng.directive:ngCsp.html new file mode 100755 index 000000000..8ed51adb7 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngCsp.html @@ -0,0 +1,40 @@ + View source Improve this doc

    ngCsp +
    directive in module ng + +
    +

    +

    Description

    +

    Enables CSP (Content Security Policy) support.

    +

    This is necessary when developing things like Google Chrome Extensions.

    +

    CSP forbids apps to use eval or Function(string) generated functions (among other things). +For us to be compatible, we just need to implement the "getterFn" in $parse without violating +any of these restrictions.

    +

    AngularJS uses Function(string) generated functions as a speed optimization. By applying ngCsp +it is be possible to opt into the CSP compatible mode. When this mode is on AngularJS will +evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will +be raised.

    +

    In order to use this feature put ngCsp directive on the root element of the application.

    +
    +

    Usage

    +
    as attribute
    <html ng-csp>
    +   ...
    +</html>
    +as class
    <html class="ng-csp">
    +   ...
    +</html>
    +

    Directive info

    +
    • This directive executes at priority level 1000.
    • +
    +
    +
    +

    Example

    +

    This example shows how to apply the ngCsp directive to the html tag. +

    +  <!doctype html>
    +  <html ng-app ng-csp>
    +  ...
    +  ...
    +  </html>
    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngDblclick.html b/app/lib/angular/docs/partials/api/ng.directive:ngDblclick.html new file mode 100755 index 000000000..114bf7e5b --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngDblclick.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngDblclick +
    directive in module ng + +
    +

    +

    Description

    +

    The ngDblclick directive allows you to specify custom behavior on dblclick event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-dblclick="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-dblclick: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngDblclickexpression

    Expression to evaluate upon +dblclick. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngDisabled.html b/app/lib/angular/docs/partials/api/ng.directive:ngDisabled.html new file mode 100755 index 000000000..307c89ea8 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngDisabled.html @@ -0,0 +1,47 @@ + View source Improve this doc

    ngDisabled +
    directive in module ng + +
    +

    +

    Description

    +

    The following markup will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: +

    +<div ng-init="scope = { isDisabled: false }">
    + <button disabled="{{scope.isDisabled}}">Disabled</button>
    +</div>
    +
    +

    The HTML specs do not require browsers to preserve the special attributes such as disabled. +(The presence of them means true and absence means false) +This prevents the angular compiler from correctly retrieving the binding expression. +To solve this problem, we introduce the ngDisabled directive.

    +
    +

    Usage

    +
    as attribute
    <INPUT ng-disabled="{expression}">
    +   ...
    +</INPUT>
    +

    Parameters

    ParamTypeDetails
    ngDisabledexpression

    Angular expression that will be evaluated.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngFocus.html b/app/lib/angular/docs/partials/api/ng.directive:ngFocus.html new file mode 100755 index 000000000..ec53b7440 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngFocus.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngFocus +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on focus event.

    +
    +

    Usage

    +
    as attribute
    <window, input, select, textarea, a ng-focus="{expression}">
    +   ...
    +</window, input, select, textarea, a>
    +as class
    <window, input, select, textarea, a class="ng-focus: {expression};">
    +   ...
    +</window, input, select, textarea, a>
    +

    Parameters

    ParamTypeDetails
    ngFocusexpression

    Expression to evaluate upon +focus. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngForm.html b/app/lib/angular/docs/partials/api/ng.directive:ngForm.html new file mode 100755 index 000000000..c833a15fe --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngForm.html @@ -0,0 +1,25 @@ + View source Improve this doc

    ngForm +
    directive in module ng + +
    +

    +

    Description

    +

    Nestable alias of form directive. HTML +does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a +sub-group of controls needs to be determined.

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <ng-form
    +       [ngForm="{string}"]>
    +</ng-form>
    +as attribute
    <ANY ng-form
    +     [name="{string}"]>
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-form [name: {string};]">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    name|ngForm
    (optional)
    string

    Name of the form. If specified, the form controller will be published into +related scope, under this name.

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngHide.html b/app/lib/angular/docs/partials/api/ng.directive:ngHide.html new file mode 100755 index 000000000..40243a0cc --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngHide.html @@ -0,0 +1,149 @@ + View source Improve this doc

    ngHide +
    directive in module ng + +
    +

    +

    Description

    +

    The ngHide directive shows and hides the given HTML element conditionally based on the expression +provided to the ngHide attribute. The show and hide mechanism is a achieved by removing and adding +the ng-hide CSS class onto the element. The .ng-hide CSS class is a predefined CSS class present +in AngularJS which sets the display style to none (using an !important flag).

    +
    +<!-- when $scope.myValue is truthy (element is hidden) -->
    +<div ng-hide="myValue"></div>
    +
    +<!-- when $scope.myValue is falsy (element is visible) -->
    +<div ng-hide="myValue" class="ng-hide"></div>
    +
    +

    When the ngHide expression evaluates to true then the .ng-hide CSS class is added to the class attribute +on the element causing it to become hidden. When false, the ng-hide CSS class is removed +from the element causing the element not to appear hidden.

    +

    Why is !important used?

    +

    You may be wondering why !important is used for the .ng-hide CSS class. This is because the .ng-hide selector +can be easily overridden by heavier selectors. For example, something as simple +as changing the display style on a HTML list item would make hidden elements appear visible. +This also becomes a bigger issue when dealing with CSS frameworks.

    +

    By using !important, the show and hide behavior will work as expected despite any clash between CSS selector +specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the +styling to change how to hide an element then it is just a matter of using !important in their own CSS code.

    +
    Overriding .ng-hide
    +

    If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by +restating the styles for the .ng-hide class in CSS: +

    +.ng-hide {
    +  
    +
    display:block!important;
    + + //this is just another form of hiding an element + position:absolute; + top:-9999px; + left:-9999px; +} +
    +

    Just remember to include the important flag so the CSS override will function.

    +

    A note about animations with ngHide

    +

    Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression +is true and false. This system works similar to the animation system present with ngClass, however, the +only difference is that you must also include the !important flag to override the display property so +that you can perform an animation when the element is hidden during the time of the animation.

    +
    +//
    +//a working example can be found at the bottom of this page
    +//
    +.my-element.ng-hide-add, .my-element.ng-hide-remove {
    +  transition:0.5s linear all;
    +  display:block!important;
    +}
    +
    +.my-element.ng-hide-add { ... }
    +.my-element.ng-hide-add.ng-hide-add-active { ... }
    +.my-element.ng-hide-remove { ... }
    +.my-element.ng-hide-remove.ng-hide-remove-active { ... }
    +
    +
    +

    Usage

    +
    as attribute
    <ANY ng-hide="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-hide: {expression};">
    +   ...
    +</ANY>
    +

    Animations

    +
    • removeClass: .ng-hide - happens after the ngHide expression evaluates to a truthy value and just before the contents are set to hidden
    • addClass: .ng-hide - happens after the ngHide expression evaluates to a non truthy value and just before the contents are set to visible
    +Click here to learn more about the steps involved in the animation.

    Parameters

    ParamTypeDetails
    ngHideexpression

    If the expression is truthy then +the element is shown or hidden respectively.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngHref.html b/app/lib/angular/docs/partials/api/ng.directive:ngHref.html new file mode 100755 index 000000000..80c40d7a6 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngHref.html @@ -0,0 +1,89 @@ + View source Improve this doc

    ngHref +
    directive in module ng + +
    +

    +

    Description

    +

    Using Angular markup like {{hash}} in an href attribute makes +the page open to a wrong URL, if the user clicks that link before +angular has a chance to replace the {{hash}} with actual URL, the +link will be broken and will most likely return a 404 error. +The ngHref directive solves this problem.

    +

    The buggy way to write it: +

    +<a href="http://www.gravatar.com/avatar/{{hash}}"/>
    +
    +

    The correct way to write it: +

    +<a ng-href="http://www.gravatar.com/avatar/{{hash}}"/>
    +
    +
    +

    Usage

    +
    as attribute
    <A ng-href="{template}">
    +   ...
    +</A>
    +

    Parameters

    ParamTypeDetails
    ngHreftemplate

    any string which can contain {{}} markup.

    +
    +

    Example

    +

    This example uses link variable inside href attribute: +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngIf.html b/app/lib/angular/docs/partials/api/ng.directive:ngIf.html new file mode 100755 index 000000000..61ec00dd5 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngIf.html @@ -0,0 +1,86 @@ + View source Improve this doc

    ngIf +
    directive in module ng + +
    +

    +

    Description

    +

    The ngIf directive removes and recreates a portion of the DOM tree (HTML) +conditionally based on "falsy" and "truthy" values, respectively, evaluated within +an {expression}. In other words, if the expression assigned to ngIf evaluates to a false +value then the element is removed from the DOM and if true then a clone of the +element is reinserted into the DOM.

    +

    ngIf differs from ngShow and ngHide in that ngIf completely removes and recreates the +element in the DOM rather than changing its visibility via the display css property. A common +case when this difference is significant is when using css selectors that rely on an element's +position within the DOM (HTML), such as the :first-child or :last-child pseudo-classes.

    +

    Note that when an element is removed using ngIf its scope is destroyed and a new scope +is created when the element is restored. The scope created within ngIf inherits from +its parent scope using +prototypal inheritance. +An important implication of this is if ngModel is used within ngIf to bind to +a javascript primitive defined in the parent scope. In this case any modifications made to the +variable within the child scope will override (hide) the value in the parent scope.

    +

    Also, ngIf recreates elements using their compiled state. An example scenario of this behavior +is if an element's class attribute is directly modified after it's compiled, using something like +jQuery's .addClass() method, and the element is later removed. When ngIf recreates the element +the added class will be lost because the original compiled state is used to regenerate the element.

    +

    Additionally, you can provide animations via the ngAnimate module to animate the enter +and leave effects.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-if="{expression}">
    +   ...
    +</ANY>
    +

    Directive info

    +
    • This directive creates new scope.
    • +
    +
    +

    Animations

    +
    • enter - happens just after the ngIf contents change and a new DOM element is created and injected into the ngIf container
    • leave - happens just before the ngIf contents are removed from the DOM
    +Click here to learn more about the steps involved in the animation.

    Parameters

    ParamTypeDetails
    ngIfexpression

    If the expression is falsy then +the element is removed from the DOM tree (HTML).

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngInclude.html b/app/lib/angular/docs/partials/api/ng.directive:ngInclude.html new file mode 100755 index 000000000..0f8798399 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngInclude.html @@ -0,0 +1,180 @@ + View source Improve this doc

    ngInclude +
    directive in module ng + +
    +

    +

    Description

    +

    Fetches, compiles and includes an external HTML fragment.

    +

    Keep in mind that:

    + +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <ng-include
    +       src="{string}"
    +       [onload="{string}"]
    +       [autoscroll="{string}"]>
    +</ng-include>
    +as attribute
    <ANY ng-include="{string}"
    +     [onload="{string}"]
    +     [autoscroll="{string}"]>
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-include: {string}; [onload: {string};] [autoscroll: {string};]">
    +   ...
    +</ANY>
    +

    Directive info

    +
    • This directive creates new scope.
    • +
    +
    +

    Animations

    +
    • enter - animation is used to bring new content into the browser.
    • leave - animation is used to animate existing content away.
    • The enter and leave animation occur concurrently.
    +Click here to learn more about the steps involved in the animation.

    Parameters

    ParamTypeDetails
    ngInclude|srcstring

    angular expression evaluating to URL. If the source is a string constant, +make sure you wrap it in quotes, e.g. src="'myPartialTemplate.html'".

    +
    onload
    (optional)
    string

    Expression to evaluate when a new partial is loaded.

    +
    autoscroll
    (optional)
    string

    Whether ngInclude should call $anchorScroll to scroll the viewport after the content is loaded.

    +
      +
    • If the attribute is not set, disable scrolling.
    • +
    • If the attribute is set without value, enable scrolling.
    • +
    • Otherwise enable scrolling only if the expression evaluates to truthy value.
    • +
    +
    +

    Events

    +
    • $includeContentLoaded

      +

      Emitted every time the ngInclude content is reloaded.

      +

      Type:

      +
      emit
      +
      +

      Target:

      +
      the current ngInclude scope
      +
      +
      +
    • +
    • $includeContentRequested

      +

      Emitted every time the ngInclude content is requested.

      +

      Type:

      +
      emit
      +
      +

      Target:

      +
      the scope ngInclude was declared in
      +
      +
      +
    • +
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngInit.html b/app/lib/angular/docs/partials/api/ng.directive:ngInit.html new file mode 100755 index 000000000..341ab493e --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngInit.html @@ -0,0 +1,42 @@ + View source Improve this doc

    ngInit +
    directive in module ng + +
    +

    +

    Description

    +

    The ngInit directive specifies initialization tasks to be executed +before the template enters execution mode during bootstrap.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-init="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-init: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngInitexpression

    Expression to eval.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngKeydown.html b/app/lib/angular/docs/partials/api/ng.directive:ngKeydown.html new file mode 100755 index 000000000..c22358990 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngKeydown.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngKeydown +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on keydown event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-keydown="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-keydown: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngKeydownexpression

    Expression to evaluate upon +keydown. (Event object is available as $event and can be interrogated for keyCode, altKey, etc.)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngKeypress.html b/app/lib/angular/docs/partials/api/ng.directive:ngKeypress.html new file mode 100755 index 000000000..61b71d8d1 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngKeypress.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngKeypress +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on keypress event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-keypress="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-keypress: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngKeypressexpression

    Expression to evaluate upon +keypress. (Event object is available as $event and can be interrogated for keyCode, altKey, etc.)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngKeyup.html b/app/lib/angular/docs/partials/api/ng.directive:ngKeyup.html new file mode 100755 index 000000000..06126ee83 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngKeyup.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngKeyup +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on keyup event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-keyup="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-keyup: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngKeyupexpression

    Expression to evaluate upon +keyup. (Event object is available as $event and can be interrogated for keyCode, altKey, etc.)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngList.html b/app/lib/angular/docs/partials/api/ng.directive:ngList.html new file mode 100755 index 000000000..8174af017 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngList.html @@ -0,0 +1,67 @@ + View source Improve this doc

    ngList +
    directive in module ng + +
    +

    +

    Description

    +

    Text input that converts between comma-separated string into an array of strings.

    +
    +

    Usage

    +
    as attribute
    <input ng-list="{string}">
    +   ...
    +</input>
    +as class
    <input class="ng-list: {string};">
    +   ...
    +</input>
    +

    Parameters

    ParamTypeDetails
    ngList
    (optional)
    string

    optional delimiter that should be used to split the value. If +specified in form /something/ then the value will be converted into a regular expression.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngModel.NgModelController.html b/app/lib/angular/docs/partials/api/ng.directive:ngModel.NgModelController.html new file mode 100755 index 000000000..a8f0c54a8 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngModel.NgModelController.html @@ -0,0 +1,192 @@ + View source Improve this doc

    NgModelController +
    type in module ng + +
    +

    +

    Description

    +

    NgModelController provides API for the ng-model directive. The controller contains +services for data-binding, validation, CSS update, value formatting and parsing. It +specifically does not contain any logic which deals with DOM rendering or listening to +DOM events. The NgModelController is meant to be extended by other directives where, the +directive provides DOM manipulation and the NgModelController provides the data-binding. +Note that you cannot use NgModelController in a directive with an isolated scope, +as, in that case, the ng-model value gets put into the isolated scope and does not get +propogated to the parent scope.

    +

    This example shows how to use NgModelController with a custom control to achieve +data-binding. Notice how different directives (contenteditable, ng-model, and required) +collaborate together to achieve the desired result.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +

    Methods

    +
    • $render()

      +

      Called when the view needs to be updated. It is expected that the user of the ng-model +directive will implement this method.

      +
      +
    • +
    • $setPristine()

      +

      Sets the control to its pristine state.

      +

      This method can be called to remove the 'ng-dirty' class and set the control to its pristine +state (ng-pristine class).

      +
      +
    • +
    • $setValidity(validationErrorKey, isValid)

      +

      Change the validity state, and notifies the form when the control changes validity. (i.e. it +does not notify form if given validator is already marked as invalid).

      +

      This method should be called by validators - i.e. the parser or formatter functions.

      +
      Parameters
      ParamTypeDetails
      validationErrorKeystring

      Name of the validator. the validationErrorKey will assign +to $error[validationErrorKey]=isValid so that it is available for data-binding. +The validationErrorKey should be in camelCase and will get converted into dash-case +for class name. Example: myError will result in ng-valid-my-error and ng-invalid-my-error +class and can be bound to as {{someForm.someControl.$error.myError}} .

      +
      isValidboolean

      Whether the current state is valid (true) or invalid (false).

      +
      +
    • +
    • $setViewValue(value)

      +

      Read a value from view.

      +

      This method should be called from within a DOM event handler. +For example input or +select directives call it.

      +

      It internally calls all $parsers (including validators) and updates the $modelValue and the actual model path. +Lastly it calls all registered change listeners.

      +
      Parameters
      ParamTypeDetails
      valuestring

      Value from the view.

      +
      +
    • +
    +
    +

    Properties

    +
    • $viewValue

      +

      Actual string value in the view.

      +
      +
    • +
    • $modelValue

      +

      The value in the model, that the control is bound to.

      +
      +
    • +
    • $parsers

      +

      Array of functions to execute, as a pipeline, whenever +the control reads value from the DOM. Each function is called, in turn, passing the value +through to the next. Used to sanitize / convert the value as well as validation. +For validation, the parsers should update the validity state using +$setValidity(), +and return undefined for invalid values.

      +
      +
    • +
    • $formatters

      +

      Array of functions to execute, as a pipeline, whenever +the model value changes. Each function is called, in turn, passing the value through to the +next. Used to format / convert values for display in the control and validation. +

      +function formatter(value) {
      +if (value) {
      +  return value.toUpperCase();
      +}
      +}
      +ngModel.$formatters.push(formatter);
      +
      +
      +
    • +
    • $error

      +

      An object hash with all errors as keys.

      +
      +
    • +
    • $pristine

      +

      True if user has not interacted with the control yet.

      +
      +
    • +
    • $dirty

      +

      True if user has already interacted with the control.

      +
      +
    • +
    • $valid

      +

      True if there is no error.

      +
      +
    • +
    • $invalid

      +

      True if at least one error on the control.

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngModel.html b/app/lib/angular/docs/partials/api/ng.directive:ngModel.html new file mode 100755 index 000000000..224a8f49e --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngModel.html @@ -0,0 +1,44 @@ + View source Improve this doc

    ngModel +
    directive in module ng + +
    +

    +

    Description

    +

    Is a directive that tells Angular to do two-way data binding. It works together with input, +select, textarea and even custom form controls that use NgModelController exposed by this directive.

    +

    ngModel is responsible for:

    +
      +
    • binding the view into the model, which other directives such as input, textarea or select +require,
    • +
    • providing validation behavior (i.e. required, number, email, url),
    • +
    • keeping state of the control (valid/invalid, dirty/pristine, validation errors),
    • +
    • setting related css class onto the element (ng-valid, ng-invalid, ng-dirty, ng-pristine),
    • +
    • register the control with parent form.
    • +
    +

    Note: ngModel will try to bind to the property given by evaluating the expression on the +current scope. If the property doesn't already exist on this scope, it will be created +implicitly and added to the scope.

    +

    For basic examples, how to use ngModel, see:

    + +
    +

    Usage

    +
    as attribute
    <input ng-model>
    +   ...
    +</input>
    +as class
    <input class="ng-model">
    +   ...
    +</input>
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngMousedown.html b/app/lib/angular/docs/partials/api/ng.directive:ngMousedown.html new file mode 100755 index 000000000..f357528c7 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngMousedown.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngMousedown +
    directive in module ng + +
    +

    +

    Description

    +

    The ngMousedown directive allows you to specify custom behavior on mousedown event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-mousedown="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-mousedown: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngMousedownexpression

    Expression to evaluate upon +mousedown. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngMouseenter.html b/app/lib/angular/docs/partials/api/ng.directive:ngMouseenter.html new file mode 100755 index 000000000..edeb765f4 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngMouseenter.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngMouseenter +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on mouseenter event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-mouseenter="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-mouseenter: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngMouseenterexpression

    Expression to evaluate upon +mouseenter. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngMouseleave.html b/app/lib/angular/docs/partials/api/ng.directive:ngMouseleave.html new file mode 100755 index 000000000..15b834ffd --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngMouseleave.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngMouseleave +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on mouseleave event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-mouseleave="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-mouseleave: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngMouseleaveexpression

    Expression to evaluate upon +mouseleave. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngMousemove.html b/app/lib/angular/docs/partials/api/ng.directive:ngMousemove.html new file mode 100755 index 000000000..b705c075d --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngMousemove.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngMousemove +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on mousemove event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-mousemove="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-mousemove: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngMousemoveexpression

    Expression to evaluate upon +mousemove. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngMouseover.html b/app/lib/angular/docs/partials/api/ng.directive:ngMouseover.html new file mode 100755 index 000000000..19e467dfe --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngMouseover.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngMouseover +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on mouseover event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-mouseover="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-mouseover: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngMouseoverexpression

    Expression to evaluate upon +mouseover. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngMouseup.html b/app/lib/angular/docs/partials/api/ng.directive:ngMouseup.html new file mode 100755 index 000000000..818bbb809 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngMouseup.html @@ -0,0 +1,22 @@ + View source Improve this doc

    ngMouseup +
    directive in module ng + +
    +

    +

    Description

    +

    Specify custom behavior on mouseup event.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-mouseup="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-mouseup: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngMouseupexpression

    Expression to evaluate upon +mouseup. (Event object is available as $event)

    +
    +

    Example

    +

    See ngClick

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngNonBindable.html b/app/lib/angular/docs/partials/api/ng.directive:ngNonBindable.html new file mode 100755 index 000000000..41462effd --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngNonBindable.html @@ -0,0 +1,45 @@ + View source Improve this doc

    ngNonBindable +
    directive in module ng + +
    +

    +

    Description

    +

    Sometimes it is necessary to write code which looks like bindings but which should be left alone +by angular. Use ngNonBindable to make angular ignore a chunk of HTML.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-non-bindable>
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-non-bindable">
    +   ...
    +</ANY>
    +

    Directive info

    +
    • This directive executes at priority level 1000.
    • +
    +
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngOpen.html b/app/lib/angular/docs/partials/api/ng.directive:ngOpen.html new file mode 100755 index 000000000..87882463e --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngOpen.html @@ -0,0 +1,44 @@ + View source Improve this doc

    ngOpen +
    directive in module ng + +
    +

    +

    Description

    +

    The HTML specs do not require browsers to preserve the special attributes such as open. +(The presence of them means true and absence means false) +This prevents the angular compiler from correctly retrieving the binding expression. +To solve this problem, we introduce the ngOpen directive.

    +
    +

    Usage

    +
    as attribute
    <DETAILS ng-open
    +     expression="{string}">
    +   ...
    +</DETAILS>
    +

    Parameters

    ParamTypeDetails
    expressionstring

    Angular expression that will be evaluated.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngPluralize.html b/app/lib/angular/docs/partials/api/ng.directive:ngPluralize.html new file mode 100755 index 000000000..7777e90ae --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngPluralize.html @@ -0,0 +1,177 @@ + View source Improve this doc

    ngPluralize +
    directive in module ng + +
    +

    +

    Description

    +

    Overview

    +

    ngPluralize is a directive that displays messages according to en-US localization rules. +These rules are bundled with angular.js, but can be overridden +(see Angular i18n dev guide). You configure ngPluralize directive +by specifying the mappings between +plural categories and the strings to be displayed.

    +

    Plural categories and explicit number rules

    +

    There are two +plural categories in Angular's default en-US locale: "one" and "other".

    +

    While a plural category may match many numbers (for example, in en-US locale, "other" can match +any number that is not 1), an explicit number rule can only match one number. For example, the +explicit number rule for "3" matches the number 3. There are examples of plural categories +and explicit number rules throughout the rest of this documentation.

    +

    Configuring ngPluralize

    +

    You configure ngPluralize by providing 2 attributes: count and when. +You can also provide an optional attribute, offset.

    +

    The value of the count attribute can be either a string or an Angular expression; these are evaluated on the current scope for its bound value.

    +

    The when attribute specifies the mappings between plural categories and the actual +string to be displayed. The value of the attribute should be a JSON object.

    +

    The following example shows how to configure ngPluralize:

    +
    +<ng-pluralize count="personCount"
    +                 when="{'0': 'Nobody is viewing.',
    +                     'one': '1 person is viewing.',
    +                     'other': '{} people are viewing.'}">
    +</ng-pluralize>
    +
    +

    In the example, "0: Nobody is viewing." is an explicit number rule. If you did not +specify this rule, 0 would be matched to the "other" category and "0 people are viewing" +would be shown instead of "Nobody is viewing". You can specify an explicit number rule for +other numbers, for example 12, so that instead of showing "12 people are viewing", you can +show "a dozen people are viewing".

    +

    You can use a set of closed braces({}) as a placeholder for the number that you want substituted +into pluralized strings. In the previous example, Angular will replace {} with +{{personCount}}. The closed braces {} is a placeholder +for {{numberExpression}}.

    +

    Configuring ngPluralize with offset

    +

    The offset attribute allows further customization of pluralized text, which can result in +a better user experience. For example, instead of the message "4 people are viewing this document", +you might display "John, Kate and 2 others are viewing this document". +The offset attribute allows you to offset a number by any desired value. +Let's take a look at an example:

    +
    +<ng-pluralize count="personCount" offset=2
    +              when="{'0': 'Nobody is viewing.',
    +                     '1': '{{person1}} is viewing.',
    +                     '2': '{{person1}} and {{person2}} are viewing.',
    +                     'one': '{{person1}}, {{person2}} and one other person are viewing.',
    +                     'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
    +</ng-pluralize>
    +
    +

    Notice that we are still using two plural categories(one, other), but we added +three explicit number rules 0, 1 and 2. +When one person, perhaps John, views the document, "John is viewing" will be shown. +When three people view the document, no explicit number rule is found, so +an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. +In this case, plural category 'one' is matched and "John, Marry and one other person are viewing" +is shown.

    +

    Note that when you specify offsets, you must provide explicit number rules for +numbers from 0 up to and including the offset. If you use an offset of 3, for example, +you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for +plural categories "one" and "other".

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <ng-pluralize
    +       count="{string|expression}"
    +       when="{string}"
    +       [offset="{number}"]>
    +</ng-pluralize>
    +as attribute
    <ANY ng-pluralize
    +     count="{string|expression}"
    +     when="{string}"
    +     [offset="{number}"]>
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    countstringexpression

    The variable to be bounded to.

    +
    whenstring

    The mapping between plural category to its corresponding strings.

    +
    offset
    (optional)
    number

    Offset to deduct from the total number.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngReadonly.html b/app/lib/angular/docs/partials/api/ng.directive:ngReadonly.html new file mode 100755 index 000000000..c7b2af37b --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngReadonly.html @@ -0,0 +1,42 @@ + View source Improve this doc

    ngReadonly +
    directive in module ng + +
    +

    +

    Description

    +

    The HTML specs do not require browsers to preserve the special attributes such as readonly. +(The presence of them means true and absence means false) +This prevents the angular compiler from correctly retrieving the binding expression. +To solve this problem, we introduce the ngReadonly directive.

    +
    +

    Usage

    +
    as attribute
    <INPUT ng-readonly
    +     expression="{string}">
    +   ...
    +</INPUT>
    +

    Parameters

    ParamTypeDetails
    expressionstring

    Angular expression that will be evaluated.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngRepeat.html b/app/lib/angular/docs/partials/api/ng.directive:ngRepeat.html new file mode 100755 index 000000000..11854164e --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngRepeat.html @@ -0,0 +1,248 @@ + View source Improve this doc

    ngRepeat +
    directive in module ng + +
    +

    +

    Description

    +

    The ngRepeat directive instantiates a template once per item from a collection. Each template +instance gets its own scope, where the given loop variable is set to the current collection item, +and $index is set to the item index or key.

    +

    Special properties are exposed on the local scope of each template instance, including:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableTypeDetails
    $indexnumberiterator offset of the repeated element (0..length-1)
    $firstbooleantrue if the repeated element is first in the iterator.
    $middlebooleantrue if the repeated element is between the first and last in the iterator.
    $lastbooleantrue if the repeated element is last in the iterator.
    $evenbooleantrue if the iterator position $index is even (otherwise false).
    $oddbooleantrue if the iterator position $index is odd (otherwise false).
    +

    Special repeat start and end points

    +

    To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending +the range of the repeater by defining explicit start and end points by using ng-repeat-start and ng-repeat-end respectively. +The ng-repeat-start directive works the same as ng-repeat, but will repeat all the HTML code (including the tag it's defined on) +up to and including the ending HTML tag where ng-repeat-end is placed.

    +

    The example below makes use of this feature: +

    +  <header ng-repeat-start="item in items">
    +    Header {{ item }}
    +  </header>
    +  <div class="body">
    +    Body {{ item }}
    +  </div>
    +  <footer ng-repeat-end>
    +    Footer {{ item }}
    +  </footer>
    +
    +

    And with an input of ['A','B'] for the items variable in the example above, the output will evaluate to: +

    +  <header>
    +    Header A
    +  </header>
    +  <div class="body">
    +    Body A
    +  </div>
    +  <footer>
    +    Footer A
    +  </footer>
    +  <header>
    +    Header B
    +  </header>
    +  <div class="body">
    +    Body B
    +  </div>
    +  <footer>
    +    Footer B
    +  </footer>
    +
    +

    The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such +as data-ng-repeat-start, x-ng-repeat-start and ng:repeat-start).

    +
    +

    Usage

    +
    as attribute
    <ANY ng-repeat="{repeat_expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-repeat: {repeat_expression};">
    +   ...
    +</ANY>
    +

    Directive info

    +
    • This directive creates new scope.
    • +
    • This directive executes at priority level 1000.
    • +
    +
    +

    Animations

    +
    • enter - when a new item is added to the list or when an item is revealed after a filter
    • leave - when an item is removed from the list or when an item is filtered out
    • move - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
    +Click here to learn more about the steps involved in the animation.

    Parameters

    ParamTypeDetails
    ngRepeatrepeat_expression

    The expression indicating how to enumerate a collection. These +formats are currently supported:

    +
      +
    • variable in expression – where variable is the user defined loop variable and expression +is a scope expression giving the collection to enumerate.

      +

      For example: album in artist.albums.

      +
    • +
    • (key, value) in expression – where key and value can be any user defined identifiers, +and expression is the scope expression giving the collection to enumerate.

      +

      For example: (name, age) in {'adam':10, 'amalie':12}.

      +
    • +
    • variable in expression track by tracking_expression – You can also provide an optional tracking function +which can be used to associate the objects in the collection with the DOM elements. If no tracking function +is specified the ng-repeat associates elements by identity in the collection. It is an error to have +more than one tracking function to resolve to the same key. (This would mean that two distinct objects are +mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, +before specifying a tracking expression.

      +

      For example: item in items is equivalent to `item in items track by $id(item)'. This implies that the DOM elements +will be associated by item identity in the array.

      +

      For example: item in items track by $id(item). A built in $id() function can be used to assign a unique +$$hashKey property to each item in the array. This property is then used as a key to associated DOM elements +with the corresponding item in the array by identity. Moving the same object in array would move the DOM +element in the same way ian the DOM.

      +

      For example: item in items track by item.id is a typical pattern when the items come from the database. In this +case the object identity does not matter. Two objects are considered equivalent as long as their id +property is same.

      +

      For example: item in items | filter:searchText track by item.id is a pattern that might be used to apply a filter +to items in conjunction with a tracking expression.

      +
    • +
    +
    +

    Example

    +

    This example initializes the scope to a list of names and +then uses ngRepeat to display every person: +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngSelected.html b/app/lib/angular/docs/partials/api/ng.directive:ngSelected.html new file mode 100755 index 000000000..eea5a63fd --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngSelected.html @@ -0,0 +1,45 @@ + View source Improve this doc

    ngSelected +
    directive in module ng + +
    +

    +

    Description

    +

    The HTML specs do not require browsers to preserve the special attributes such as selected. +(The presence of them means true and absence means false) +This prevents the angular compiler from correctly retrieving the binding expression. +To solve this problem, we introduced the ngSelected directive.

    +
    +

    Usage

    +
    as attribute
    <OPTION ng-selected
    +     expression="{string}">
    +   ...
    +</OPTION>
    +

    Parameters

    ParamTypeDetails
    expressionstring

    Angular expression that will be evaluated.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngShow.html b/app/lib/angular/docs/partials/api/ng.directive:ngShow.html new file mode 100755 index 000000000..21f32192a --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngShow.html @@ -0,0 +1,149 @@ + View source Improve this doc

    ngShow +
    directive in module ng + +
    +

    +

    Description

    +

    The ngShow directive shows and hides the given HTML element conditionally based on the expression +provided to the ngShow attribute. The show and hide mechanism is a achieved by removing and adding +the ng-hide CSS class onto the element. The .ng-hide CSS class is a predefined CSS class present +in AngularJS which sets the display style to none (using an !important flag).

    +
    +<!-- when $scope.myValue is truthy (element is visible) -->
    +<div ng-show="myValue"></div>
    +
    +<!-- when $scope.myValue is falsy (element is hidden) -->
    +<div ng-show="myValue" class="ng-hide"></div>
    +
    +

    When the ngShow expression evaluates to false then the ng-hide CSS class is added to the class attribute +on the element causing it to become hidden. When true, the ng-hide CSS class is removed +from the element causing the element not to appear hidden.

    +

    Why is !important used?

    +

    You may be wondering why !important is used for the .ng-hide CSS class. This is because the .ng-hide selector +can be easily overridden by heavier selectors. For example, something as simple +as changing the display style on a HTML list item would make hidden elements appear visible. +This also becomes a bigger issue when dealing with CSS frameworks.

    +

    By using !important, the show and hide behavior will work as expected despite any clash between CSS selector +specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the +styling to change how to hide an element then it is just a matter of using !important in their own CSS code.

    +
    Overriding .ng-hide
    +

    If you wish to change the hide behavior with ngShow/ngHide then this can be achieved by +restating the styles for the .ng-hide class in CSS: +

    +.ng-hide {
    +  
    +
    display:block!important;
    + + //this is just another form of hiding an element + position:absolute; + top:-9999px; + left:-9999px; +} +
    +

    Just remember to include the important flag so the CSS override will function.

    +

    A note about animations with ngShow

    +

    Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression +is true and false. This system works similar to the animation system present with ngClass, however, the +only difference is that you must also include the !important flag to override the display property so +that you can perform an animation when the element is hidden during the time of the animation.

    +
    +//
    +//a working example can be found at the bottom of this page
    +//
    +.my-element.ng-hide-add, .my-element.ng-hide-remove {
    +  transition:0.5s linear all;
    +  display:block!important;
    +}
    +
    +.my-element.ng-hide-add { ... }
    +.my-element.ng-hide-add.ng-hide-add-active { ... }
    +.my-element.ng-hide-remove { ... }
    +.my-element.ng-hide-remove.ng-hide-remove-active { ... }
    +
    +
    +

    Usage

    +
    as attribute
    <ANY ng-show="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-show: {expression};">
    +   ...
    +</ANY>
    +

    Animations

    +
    • addClass: .ng-hide - happens after the ngShow expression evaluates to a truthy value and the just before contents are set to visible
    • removeClass: .ng-hide - happens after the ngShow expression evaluates to a non truthy value and just before the contents are set to hidden
    +Click here to learn more about the steps involved in the animation.

    Parameters

    ParamTypeDetails
    ngShowexpression

    If the expression is truthy +then the element is shown or hidden respectively.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngSrc.html b/app/lib/angular/docs/partials/api/ng.directive:ngSrc.html new file mode 100755 index 000000000..b2b8642eb --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngSrc.html @@ -0,0 +1,26 @@ + View source Improve this doc

    ngSrc +
    directive in module ng + +
    +

    +

    Description

    +

    Using Angular markup like {{hash}} in a src attribute doesn't +work right: The browser will fetch from the URL with the literal +text {{hash}} until Angular replaces the expression inside +{{hash}}. The ngSrc directive solves this problem.

    +

    The buggy way to write it: +

    +<img src="http://www.gravatar.com/avatar/{{hash}}"/>
    +
    +

    The correct way to write it: +

    +<img ng-src="http://www.gravatar.com/avatar/{{hash}}"/>
    +
    +
    +

    Usage

    +
    as attribute
    <IMG ng-src="{template}">
    +   ...
    +</IMG>
    +

    Parameters

    ParamTypeDetails
    ngSrctemplate

    any string which can contain {{}} markup.

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngSrcset.html b/app/lib/angular/docs/partials/api/ng.directive:ngSrcset.html new file mode 100755 index 000000000..1a84c7530 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngSrcset.html @@ -0,0 +1,26 @@ + View source Improve this doc

    ngSrcset +
    directive in module ng + +
    +

    +

    Description

    +

    Using Angular markup like {{hash}} in a srcset attribute doesn't +work right: The browser will fetch from the URL with the literal +text {{hash}} until Angular replaces the expression inside +{{hash}}. The ngSrcset directive solves this problem.

    +

    The buggy way to write it: +

    +<img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
    +
    +

    The correct way to write it: +

    +<img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/>
    +
    +
    +

    Usage

    +
    as attribute
    <IMG ng-srcset="{template}">
    +   ...
    +</IMG>
    +

    Parameters

    ParamTypeDetails
    ngSrcsettemplate

    any string which can contain {{}} markup.

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngStyle.html b/app/lib/angular/docs/partials/api/ng.directive:ngStyle.html new file mode 100755 index 000000000..29cad1c93 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngStyle.html @@ -0,0 +1,56 @@ + View source Improve this doc

    ngStyle +
    directive in module ng + +
    +

    +

    Description

    +

    The ngStyle directive allows you to set CSS style on an HTML element conditionally.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-style="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-style: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngStyleexpression

    Expression which evals to an +object whose keys are CSS style names and values are corresponding values for those CSS +keys.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngSubmit.html b/app/lib/angular/docs/partials/api/ng.directive:ngSubmit.html new file mode 100755 index 000000000..ad33a39ba --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngSubmit.html @@ -0,0 +1,71 @@ + View source Improve this doc

    ngSubmit +
    directive in module ng + +
    +

    +

    Description

    +

    Enables binding angular expressions to onsubmit events.

    +

    Additionally it prevents the default action (which for form means sending the request to the +server and reloading the current page) but only if the form does not contain an action +attribute.

    +
    +

    Usage

    +
    as attribute
    <form ng-submit="{expression}">
    +   ...
    +</form>
    +as class
    <form class="ng-submit: {expression};">
    +   ...
    +</form>
    +

    Parameters

    ParamTypeDetails
    ngSubmitexpression

    Expression to eval. (Event object is available as $event)

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngSwitch.html b/app/lib/angular/docs/partials/api/ng.directive:ngSwitch.html new file mode 100755 index 000000000..ef4d8c672 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngSwitch.html @@ -0,0 +1,126 @@ + View source Improve this doc

    ngSwitch +
    directive in module ng + +
    +

    +

    Description

    +

    The ngSwitch directive is used to conditionally swap DOM structure on your template based on a scope expression. +Elements within ngSwitch but without ngSwitchWhen or ngSwitchDefault directives will be preserved at the location +as specified in the template.

    +

    The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it +from the template cache), ngSwitch simply choses one of the nested elements and makes it visible based on which element +matches the value obtained from the evaluated expression. In other words, you define a container element +(where you place the directive), place an expression on the on="..." attribute +(or the ng-switch="..." attribute), define any inner elements inside of the directive and place +a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on +expression is evaluated. If a matching expression is not found via a when attribute then an element with the default +attribute is displayed.

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    <ANY ng-switch="expression">
    +<ANY ng-switch-when="matchValue1">...</ANY>
    +<ANY ng-switch-when="matchValue2">...</ANY>
    +<ANY ng-switch-default>...</ANY>
    +</ANY>
    +
    +

    Directive info

    +
    • This directive creates new scope.
    • +
    +
    +

    Animations

    +
    • enter - happens after the ngSwtich contents change and the matched child element is placed inside the container
    • leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
    +Click here to learn more about the steps involved in the animation.

    Parameters

    ParamTypeDetails
    ngSwitch|on*

    expression to match against ng-switch-when.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:ngTransclude.html b/app/lib/angular/docs/partials/api/ng.directive:ngTransclude.html new file mode 100755 index 000000000..90aa8e4b9 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:ngTransclude.html @@ -0,0 +1,68 @@ + View source Improve this doc

    ngTransclude +
    directive in module ng + +
    +

    +

    Description

    +

    Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.

    +

    Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-transclude>
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-transclude">
    +   ...
    +</ANY>
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:script.html b/app/lib/angular/docs/partials/api/ng.directive:script.html new file mode 100755 index 000000000..9682f7ce5 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:script.html @@ -0,0 +1,42 @@ + View source Improve this doc

    script +
    directive in module ng + +
    +

    +

    Description

    +

    Load content of a script tag, with type text/ng-template, into $templateCache, so that the +template can be used by ngInclude, ngView or directive templates.

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <script
    +       type="text/ng-template">
    +</script>
    +

    Parameters

    ParamTypeDetails
    type'text/ng-template'

    must be set to 'text/ng-template'

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +  Load inlined template
    +  
    + +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:select.html b/app/lib/angular/docs/partials/api/ng.directive:select.html new file mode 100755 index 000000000..beec3cfc5 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:select.html @@ -0,0 +1,144 @@ + View source Improve this doc

    select +
    directive in module ng + +
    +

    +

    Description

    +

    HTML SELECT element with angular data-binding.

    +

    ngOptions

    +

    Optionally ngOptions attribute can be used to dynamically generate a list of <option> +elements for a <select> element using an array or an object obtained by evaluating the +ngOptions expression.

    +

    When an item in the <select> menu is selected, the value of array element or object property +represented by the selected option will be bound to the model identified by the ngModel +directive of the parent select element.

    +

    Optionally, a single hard-coded <option> element, with the value set to an empty string, can +be nested into the <select> element. This element will then represent null or "not selected" +option. See example below for demonstration.

    +

    Note: ngOptions provides iterator facility for <option> element which should be used instead +of ngRepeat when you want the +select model to be bound to a non-string value. This is because an option element can currently +be bound to string values only.

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <select
    +       ngModel="{string}"
    +       [name="{string}"]
    +       [required]
    +       [ngRequired="{string}"]
    +       [ngOptions="{comprehension_expression}"]>
    +</select>
    +

    Parameters

    ParamTypeDetails
    ngModelstring

    Assignable angular expression to data-bind to.

    +
    name
    (optional)
    string

    Property name of the form under which the control is published.

    +
    required
    (optional)
    string

    The control is considered valid only if value is entered.

    +
    ngRequired
    (optional)
    string

    Adds required attribute and required validation constraint to +the element when the ngRequired expression evaluates to true. Use ngRequired instead of +required when you want to data-bind to the required attribute.

    +
    ngOptions
    (optional)
    comprehension_expression

    in one of the following forms:

    +
      +
    • for array data sources:
        +
      • label for value in array
      • +
      • select as label for value in array
      • +
      • label group by group for value in array
      • +
      • select as label group by group for value in array track by trackexpr
      • +
      +
    • +
    • for object data sources:
        +
      • label for (key , value) in object
      • +
      • select as label for (key , value) in object
      • +
      • label group by group for (key, value) in object
      • +
      • select as label group by group + for (key, value) in object
      • +
      +
    • +
    +

    Where:

    +
      +
    • array / object: an expression which evaluates to an array / object to iterate over.
    • +
    • value: local variable which will refer to each item in the array or each property value + of object during iteration.
    • +
    • key: local variable which will refer to a property name in object during iteration.
    • +
    • label: The result of this expression will be the label for <option> element. The +expression will most likely refer to the value variable (e.g. value.propertyName).
    • +
    • select: The result of this expression will be bound to the model of the parent <select> + element. If not specified, select expression will default to value.
    • +
    • group: The result of this expression will be used to group options using the <optgroup> + DOM element.
    • +
    • trackexpr: Used when working with an array of objects. The result of this expression will be + used to identify the objects in the array. The trackexpr will most likely refer to the +value variable (e.g. value.propertyName).
    • +
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.directive:textarea.html b/app/lib/angular/docs/partials/api/ng.directive:textarea.html new file mode 100755 index 000000000..d48f885af --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.directive:textarea.html @@ -0,0 +1,38 @@ + View source Improve this doc

    textarea +
    directive in module ng + +
    +

    +

    Description

    +

    HTML textarea element control with angular data-binding. The data-binding and validation +properties of this element are exactly the same as those of the +input element.

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <textarea
    +       ngModel="{string}"
    +       [name="{string}"]
    +       [required]
    +       [ngRequired="{string}"]
    +       [ngMinlength="{number}"]
    +       [ngMaxlength="{number}"]
    +       [ngPattern="{string}"]
    +       [ngChange="{string}"]>
    +</textarea>
    +

    Parameters

    ParamTypeDetails
    ngModelstring

    Assignable angular expression to data-bind to.

    +
    name
    (optional)
    string

    Property name of the form under which the control is published.

    +
    required
    (optional)
    string

    Sets required validation error key if the value is not entered.

    +
    ngRequired
    (optional)
    string

    Adds required attribute and required validation constraint to +the element when the ngRequired expression evaluates to true. Use ngRequired instead of +required when you want to data-bind to the required attribute.

    +
    ngMinlength
    (optional)
    number

    Sets minlength validation error key if the value is shorter than +minlength.

    +
    ngMaxlength
    (optional)
    number

    Sets maxlength validation error key if the value is longer than +maxlength.

    +
    ngPattern
    (optional)
    string

    Sets pattern validation error key if the value does not match the +RegExp pattern expression. Expected value is /regexp/ for inline patterns or regexp for +patterns defined as scope expressions.

    +
    ngChange
    (optional)
    string

    Angular expression to be executed when input changes due to user +interaction with the input element.

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:currency.html b/app/lib/angular/docs/partials/api/ng.filter:currency.html new file mode 100755 index 000000000..022f241eb --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:currency.html @@ -0,0 +1,60 @@ + View source Improve this doc

    currency +
    filter in module ng + +
    +

    +

    Description

    +

    Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default +symbol for current locale is used.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ currency_expression | currency[:symbol] }} +
    +

    In JavaScript

    +
    $filter('currency')(amount[, symbol]) +
    +

    Parameters

    ParamTypeDetails
    amountnumber

    Input to filter.

    +
    symbol
    (optional)
    string

    Currency symbol or identifier to be displayed.

    +

    Returns

    string

    Formatted number.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:date.html b/app/lib/angular/docs/partials/api/ng.filter:date.html new file mode 100755 index 000000000..456300023 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:date.html @@ -0,0 +1,96 @@ + View source Improve this doc

    date +
    filter in module ng + +
    +

    +

    Description

    +

    Formats date to a string based on the requested format.

    +

    format string can be composed of the following elements:

    +
      +
    • 'yyyy': 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
    • +
    • 'yy': 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
    • +
    • 'y': 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
    • +
    • 'MMMM': Month in year (January-December)
    • +
    • 'MMM': Month in year (Jan-Dec)
    • +
    • 'MM': Month in year, padded (01-12)
    • +
    • 'M': Month in year (1-12)
    • +
    • 'dd': Day in month, padded (01-31)
    • +
    • 'd': Day in month (1-31)
    • +
    • 'EEEE': Day in Week,(Sunday-Saturday)
    • +
    • 'EEE': Day in Week, (Sun-Sat)
    • +
    • 'HH': Hour in day, padded (00-23)
    • +
    • 'H': Hour in day (0-23)
    • +
    • 'hh': Hour in am/pm, padded (01-12)
    • +
    • 'h': Hour in am/pm, (1-12)
    • +
    • 'mm': Minute in hour, padded (00-59)
    • +
    • 'm': Minute in hour (0-59)
    • +
    • 'ss': Second in minute, padded (00-59)
    • +
    • 's': Second in minute (0-59)
    • +
    • '.sss' or ',sss': Millisecond in second, padded (000-999)
    • +
    • 'a': am/pm marker
    • +
    • 'Z': 4 digit (+sign) representation of the timezone offset (-1200-+1200)
    • +
    +

    format string can also be one of the following predefined +localizable formats:

    +
      +
    • 'medium': equivalent to 'MMM d, y h:mm:ss a' for en_US locale +(e.g. Sep 3, 2010 12:05:08 pm)
    • +
    • 'short': equivalent to 'M/d/yy h:mm a' for en_US locale (e.g. 9/3/10 12:05 pm)
    • +
    • 'fullDate': equivalent to 'EEEE, MMMM d,y' for en_US locale +(e.g. Friday, September 3, 2010)
    • +
    • 'longDate': equivalent to 'MMMM d, y' for en_US locale (e.g. September 3, 2010)
    • +
    • 'mediumDate': equivalent to 'MMM d, y' for en_US locale (e.g. Sep 3, 2010)
    • +
    • 'shortDate': equivalent to 'M/d/yy' for en_US locale (e.g. 9/3/10)
    • +
    • 'mediumTime': equivalent to 'h:mm:ss a' for en_US locale (e.g. 12:05:08 pm)
    • +
    • 'shortTime': equivalent to 'h:mm a' for en_US locale (e.g. 12:05 pm)
    • +
    +

    format string can contain literal values. These need to be quoted with single quotes (e.g. +"h 'in the morning'"). In order to output single quote, use two single quotes in a sequence +(e.g. "h 'o''clock'").

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ date_expression | date[:format] }} +
    +

    In JavaScript

    +
    $filter('date')(date[, format]) +
    +

    Parameters

    ParamTypeDetails
    dateDatenumberstring

    Date to format either as Date object, milliseconds (string or +number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.SSSZ and its +shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is +specified in the string input, the time is considered to be in the local timezone.

    +
    format
    (optional)
    string

    Formatting rules (see Description). If not specified, +mediumDate is used.

    +

    Returns

    string

    Formatted string or the input if input is not recognized as date/millis.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:filter.html b/app/lib/angular/docs/partials/api/ng.filter:filter.html new file mode 100755 index 000000000..232fe87a9 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:filter.html @@ -0,0 +1,120 @@ + View source Improve this doc

    filter +
    filter in module ng + +
    +

    +

    Description

    +

    Selects a subset of items from array and returns it as a new array.

    +

    Note: This function is used to augment the Array type in Angular expressions. See +ng.$filter for more information about Angular arrays.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ filter_expression | filter:expression:comparator }} +
    +

    In JavaScript

    +
    $filter('filter')(array, expression, comparator) +
    +

    Parameters

    ParamTypeDetails
    arrayArray

    The source array.

    +
    expressionstringObjectfunction()

    The predicate to be used for selecting items from +array.

    +

    Can be one of:

    +
      +
    • string: Predicate that results in a substring match using the value of expression +string. All strings or objects with string properties in array that contain this string +will be returned. The predicate can be negated by prefixing the string with !.

      +
    • +
    • Object: A pattern object can be used to filter specific properties on objects contained +by array. For example {name:"M", phone:"1"} predicate will return an array of items +which have property name containing "M" and property phone containing "1". A special +property name $ can be used (as in {$:"text"}) to accept a match against any +property of the object. That's equivalent to the simple substring match with a string +as described above.

      +
    • +
    • function: A predicate function can be used to write arbitrary filters. The function is +called for each element of array. The final result is an array of those elements that +the predicate returned true for.

      +
    • +
    +
    comparatorfunction(expected, actual)trueundefined

    Comparator which is used in +determining if the expected value (from the filter expression) and actual value (from +the object in the array) should be considered a match.

    +

    Can be one of:

    +
      +
    • function(expected, actual): +The function will be given the object value and the predicate value to compare and +should return true if the item should be included in filtered result.

      +
    • +
    • true: A shorthand for function(expected, actual) { return angular.equals(expected, actual)}. +this is essentially strict comparison of expected and actual.

      +
    • +
    • false|undefined: A short hand for a function which will look for a substring match in case +insensitive way.

      +
    • +
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:json.html b/app/lib/angular/docs/partials/api/ng.filter:json.html new file mode 100755 index 000000000..4d2f32ca3 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:json.html @@ -0,0 +1,41 @@ + View source Improve this doc

    json +
    filter in module ng + +
    +

    +

    Description

    +

    Allows you to convert a JavaScript object into JSON string.

    +

    This filter is mostly useful for debugging. When using the double curly {{value}} notation +the binding is automatically converted to JSON.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ json_expression | json }} +
    +

    In JavaScript

    +
    $filter('json')(object) +
    +

    Parameters

    ParamTypeDetails
    object*

    Any JavaScript object (including arrays and primitive types) to filter.

    +

    Returns

    string

    JSON string.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:limitTo.html b/app/lib/angular/docs/partials/api/ng.filter:limitTo.html new file mode 100755 index 000000000..0313b4857 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:limitTo.html @@ -0,0 +1,77 @@ + View source Improve this doc

    limitTo +
    filter in module ng + +
    +

    +

    Description

    +

    Creates a new array or string containing only a specified number of elements. The elements +are taken from either the beginning or the end of the source array or string, as specified by +the value and sign (positive or negative) of limit.

    +

    Note: This function is used to augment the Array type in Angular expressions. See +ng.$filter for more information about Angular arrays.

    +
    +

    Usage

    +
    filter:limitTo(input, limit);
    +

    Parameters

    ParamTypeDetails
    inputArraystring

    Source array or string to be limited.

    +
    limitstringnumber

    The length of the returned array or string. If the limit number +is positive, limit number of items from the beginning of the source array/string are copied. +If the number is negative, limit number of items from the end of the source array/string +are copied. The limit will be trimmed if it exceeds array.length

    +

    Returns

    Array|string

    A new sub-array or substring of length limit or less if input array +had less than limit elements.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:lowercase.html b/app/lib/angular/docs/partials/api/ng.filter:lowercase.html new file mode 100755 index 000000000..d8484dd14 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:lowercase.html @@ -0,0 +1,17 @@ + View source Improve this doc

    lowercase +
    filter in module ng + +
    +

    +

    Description

    +

    Converts string to lowercase.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ lowercase_expression | lowercase }} +
    +

    In JavaScript

    +
    $filter('lowercase')() +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:number.html b/app/lib/angular/docs/partials/api/ng.filter:number.html new file mode 100755 index 000000000..d8288609a --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:number.html @@ -0,0 +1,66 @@ + View source Improve this doc

    number +
    filter in module ng + +
    +

    +

    Description

    +

    Formats a number as text.

    +

    If the input is not a number an empty string is returned.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ number_expression | number[:fractionSize] }} +
    +

    In JavaScript

    +
    $filter('number')(number[, fractionSize]) +
    +

    Parameters

    ParamTypeDetails
    numbernumberstring

    Number to format.

    +
    fractionSize
    (optional)
    numberstring

    Number of decimal places to round the number to. +If this is not provided then the fraction size is computed from the current locale's number +formatting pattern. In the case of the default locale, it will be 3.

    +

    Returns

    string

    Number rounded to decimalPlaces and places a “,” after each third digit.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:orderBy.html b/app/lib/angular/docs/partials/api/ng.filter:orderBy.html new file mode 100755 index 000000000..4347ebd60 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:orderBy.html @@ -0,0 +1,99 @@ + View source Improve this doc

    orderBy +
    filter in module ng + +
    +

    +

    Description

    +

    Orders a specified array by the expression predicate.

    +

    Note: this function is used to augment the Array type in Angular expressions. See +ng.$filter for more information about Angular arrays.

    +
    +

    Usage

    +
    filter:orderBy(array, expression[, reverse]);
    +

    Parameters

    ParamTypeDetails
    arrayArray

    The array to sort.

    +
    expressionfunction(*)stringArray.<(function(*)|string)>

    A predicate to be +used by the comparator to determine the order of elements.

    +

    Can be one of:

    +
      +
    • function: Getter function. The result of this function will be sorted using the +<, =, > operator.
    • +
    • string: An Angular expression which evaluates to an object to order by, such as 'name' +to sort by a property called 'name'. Optionally prefixed with + or - to control +ascending or descending sort order (for example, +name or -name).
    • +
    • Array: An array of function or string predicates. The first predicate in the array +is used for sorting, but when two items are equivalent, the next predicate is used.
    • +
    +
    reverse
    (optional)
    boolean

    Reverse the order the array.

    +

    Returns

    Array

    Sorted copy of the source array.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.filter:uppercase.html b/app/lib/angular/docs/partials/api/ng.filter:uppercase.html new file mode 100755 index 000000000..1ebf8489a --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.filter:uppercase.html @@ -0,0 +1,17 @@ + View source Improve this doc

    uppercase +
    filter in module ng + +
    +

    +

    Description

    +

    Converts string to uppercase.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    {{ uppercase_expression | uppercase }} +
    +

    In JavaScript

    +
    $filter('uppercase')() +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ng.html b/app/lib/angular/docs/partials/api/ng.html new file mode 100755 index 000000000..c429d9998 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ng.html @@ -0,0 +1,6 @@ + View source Improve this doc

    +
    +
    +

    +

    ng is the name of the angular module that contains all of the core angular services.

    +
    diff --git a/app/lib/angular/docs/partials/api/ngAnimate.$animate.html b/app/lib/angular/docs/partials/api/ngAnimate.$animate.html new file mode 100755 index 000000000..f38e8cfbe --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngAnimate.$animate.html @@ -0,0 +1,307 @@ + View source Improve this doc

    $animate +
    service in module ngAnimate + +
    +

    +

    Description

    +

    The $animate service provides animation detection support while performing DOM operations (enter, leave and move) +as well as during addClass and removeClass operations. When any of these operations are run, the $animate service +will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object) +as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.

    +

    The $animate service is used behind the scenes with pre-existing directives and animation with these directives +will work out of the box without any extra configuration.

    +

    Requires the ngAnimate module to be installed.

    +

    Please visit the ngAnimate module overview page learn more about how to use animations in your application.

    +
    +

    Dependencies

    + +

    Methods

    +
    • addClass(element, className, done)

      +

      Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class. +Unlike the other animation methods, the animate service will suffix the className value with -add in order to provide +the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions +or keyframes are defined on the -add CSS class).

      +

      Below is a breakdown of each step that occurs during addClass animation:

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Animation StepWhat the element class attribute looks like
      1. $animate.addClass(element, 'super') is calledclass=""
      2. $animate runs any JavaScript-defined animations on the elementclass=""
      3. the .super-add class is added to the elementclass="super-add"
      4. $animate scans the element styles to get the CSS transition/animation duration and delayclass="super-add"
      5. the .super-add-active class is added (this triggers the CSS transition/animation)class="super-add super-add-active"
      6. $animate waits for X milliseconds for the animation to completeclass="super-add super-add-active"
      7. The animation ends and both CSS classes are removed from the elementclass=""
      8. The super class is added to the elementclass="super"
      9. The done() callback is fired (if provided)class="super"
      +
      Parameters
      ParamTypeDetails
      elementjQuery/jqLite element

      the element that will be animated

      +
      classNamestring

      the CSS class that will be animated and then attached to the element

      +
      done
      (optional)
      function()

      callback function that will be called once the animation is complete

      +
      +
    • +
    • enabled(value)

      +

      Globally enables/disables animations.

      +
      Parameters
      ParamTypeDetails
      value
      (optional)
      boolean

      If provided then set the animation on or off.

      +
      Returns
      boolean

      Current animation state.

      +
      +
    • +
    • enter(element, parent, after, done)

      +

      Appends the element to the parent element that resides in the document and then runs the enter animation. Once +the animation is started, the following CSS classes will be present on the element for the duration of the animation:

      +

      Below is a breakdown of each step that occurs during enter animation:

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Animation StepWhat the element class attribute looks like
      1. $animate.enter(...) is calledclass="my-animation"
      2. element is inserted into the parent element or beside the after elementclass="my-animation"
      3. $animate runs any JavaScript-defined animations on the elementclass="my-animation"
      4. the .ng-enter class is added to the elementclass="my-animation ng-enter"
      5. $animate scans the element styles to get the CSS transition/animation duration and delayclass="my-animation ng-enter"
      6. the .ng-enter-active class is added (this triggers the CSS transition/animation)class="my-animation ng-enter ng-enter-active"
      7. $animate waits for X milliseconds for the animation to completeclass="my-animation ng-enter ng-enter-active"
      8. The animation ends and both CSS classes are removed from the elementclass="my-animation"
      9. The done() callback is fired (if provided)class="my-animation"
      +
      Parameters
      ParamTypeDetails
      elementjQuery/jqLite element

      the element that will be the focus of the enter animation

      +
      parentjQuery/jqLite element

      the parent element of the element that will be the focus of the enter animation

      +
      afterjQuery/jqLite element

      the sibling element (which is the previous element) of the element that will be the focus of the enter animation

      +
      done
      (optional)
      function()

      callback function that will be called once the animation is complete

      +
      +
    • +
    • leave(element, done)

      +

      Runs the leave animation operation and, upon completion, removes the element from the DOM. Once +the animation is started, the following CSS classes will be added for the duration of the animation:

      +

      Below is a breakdown of each step that occurs during enter animation:

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Animation StepWhat the element class attribute looks like
      1. $animate.leave(...) is calledclass="my-animation"
      2. $animate runs any JavaScript-defined animations on the elementclass="my-animation"
      3. the .ng-leave class is added to the elementclass="my-animation ng-leave"
      4. $animate scans the element styles to get the CSS transition/animation duration and delayclass="my-animation ng-leave"
      5. the .ng-leave-active class is added (this triggers the CSS transition/animation)class="my-animation ng-leave ng-leave-active
      6. $animate waits for X milliseconds for the animation to completeclass="my-animation ng-leave ng-leave-active
      7. The animation ends and both CSS classes are removed from the elementclass="my-animation"
      8. The element is removed from the DOM...
      9. The done() callback is fired (if provided)...
      +
      Parameters
      ParamTypeDetails
      elementjQuery/jqLite element

      the element that will be the focus of the leave animation

      +
      done
      (optional)
      function()

      callback function that will be called once the animation is complete

      +
      +
    • +
    • move(element, parent, after, done)

      +

      Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parent container or +add the element directly after the after element if present. Then the move animation will be run. Once +the animation is started, the following CSS classes will be added for the duration of the animation:

      +

      Below is a breakdown of each step that occurs during move animation:

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Animation StepWhat the element class attribute looks like
      1. $animate.move(...) is calledclass="my-animation"
      2. element is moved into the parent element or beside the after elementclass="my-animation"
      3. $animate runs any JavaScript-defined animations on the elementclass="my-animation"
      4. the .ng-move class is added to the elementclass="my-animation ng-move"
      5. $animate scans the element styles to get the CSS transition/animation duration and delayclass="my-animation ng-move"
      6. the .ng-move-active class is added (this triggers the CSS transition/animation)class="my-animation ng-move ng-move-active"
      7. $animate waits for X milliseconds for the animation to completeclass="my-animation ng-move ng-move-active"
      8. The animation ends and both CSS classes are removed from the elementclass="my-animation"
      9. The done() callback is fired (if provided)class="my-animation"
      +
      Parameters
      ParamTypeDetails
      elementjQuery/jqLite element

      the element that will be the focus of the move animation

      +
      parentjQuery/jqLite element

      the parent element of the element that will be the focus of the move animation

      +
      afterjQuery/jqLite element

      the sibling element (which is the previous element) of the element that will be the focus of the move animation

      +
      done
      (optional)
      function()

      callback function that will be called once the animation is complete

      +
      +
    • +
    • removeClass(element, className, done)

      +

      Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value +from the element. Unlike the other animation methods, the animate service will suffix the className value with -remove in +order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if +no CSS transitions or keyframes are defined on the -remove CSS class).

      +

      Below is a breakdown of each step that occurs during removeClass animation:

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Animation StepWhat the element class attribute looks like
      1. $animate.removeClass(element, 'super') is calledclass="super"
      2. $animate runs any JavaScript-defined animations on the elementclass="super"
      3. the .super-remove class is added to the elementclass="super super-remove"
      4. $animate scans the element styles to get the CSS transition/animation duration and delayclass="super super-remove"
      5. the .super-remove-active class is added (this triggers the CSS transition/animation)class="super super-remove super-remove-active"
      6. $animate waits for X milliseconds for the animation to completeclass="super super-remove super-remove-active"
      7. The animation ends and both CSS all three classes are removed from the elementclass=""
      8. The done() callback is fired (if provided)class=""
      +
      Parameters
      ParamTypeDetails
      elementjQuery/jqLite element

      the element that will be animated

      +
      classNamestring

      the CSS class that will be animated and then removed from the element

      +
      done
      (optional)
      function()

      callback function that will be called once the animation is complete

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngAnimate.$animateProvider.html b/app/lib/angular/docs/partials/api/ngAnimate.$animateProvider.html new file mode 100755 index 000000000..46003a1e2 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngAnimate.$animateProvider.html @@ -0,0 +1,13 @@ + View source Improve this doc

    $animateProvider +
    service in module ngAnimate + +
    +

    +

    Description

    +

    The $AnimationProvider allows developers to register and access custom JavaScript animations directly inside +of a module. When an animation is triggered, the $animate service will query the $animation function to find any +animations that match the provided name value.

    +

    Requires the ngAnimate module to be installed.

    +

    Please visit the ngAnimate module overview page learn more about how to use animations in your application.

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngAnimate.html b/app/lib/angular/docs/partials/api/ngAnimate.html new file mode 100755 index 000000000..7960656ef --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngAnimate.html @@ -0,0 +1,185 @@ + View source Improve this doc

    +
    +
    +

    +

    ngAnimate

    +

    ngAnimate is an optional module that provides CSS and JavaScript animation hooks.

    +

    Installation

    First include angular-animate.js in your HTML:

        <script src="angular.js">
    +    <script src="angular-animate.js">

    You can also find this file on the Google CDN, Bower (as angular-animate), and on code.angularjs.org.

    Then load the module in your application by adding it as a dependant module:

        angular.module('app', ['ngAnimate']);

    With that you're ready to get started!

    +

    Usage

    +

    To see animations in action, all that is required is to define the appropriate CSS classes +or to register a JavaScript animation via the $animation service. The directives that support animation automatically are: +ngRepeat, ngInclude, ngSwitch, ngShow, ngHide and ngView. Custom directives can take advantage of animation +by using the $animate service.

    +

    Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    DirectiveSupported Animations
    ngRepeatenter, leave and move
    ngViewenter and leave
    ngIncludeenter and leave
    ngSwitchenter and leave
    ngIfenter and leave
    ngClassadd and remove
    ngShow & ngHideadd and remove (the ng-hide class value)
    +

    You can find out more information about animations upon visiting each directive page.

    +

    Below is an example of how to apply animations to a directive that supports animation hooks:

    +
    +<style type="text/css">
    +.slide.ng-enter > div,
    +.slide.ng-leave > div {
    +  -webkit-transition:0.5s linear all;
    +  -moz-transition:0.5s linear all;
    +  -o-transition:0.5s linear all;
    +  transition:0.5s linear all;
    +}
    +
    +.slide.ng-enter { }        /* starting animations for enter */
    +.slide.ng-enter-active { } /* terminal animations for enter */
    +.slide.ng-leave { }        /* starting animations for leave */
    +.slide.ng-leave-active { } /* terminal animations for leave */
    +</style>
    +
    +<!--
    +the animate service will automatically add .ng-enter and .ng-leave to the element
    +to trigger the CSS transition/animations
    +-->
    +<ANY class="slide" ng-include="..."></ANY>
    +
    +

    Keep in mind that if an animation is running, any child elements cannot be animated until the parent element's +animation has completed.

    +

    CSS-defined Animations

    +The animate service will automatically apply two CSS classes to the animated element and these two CSS classes +are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported +and can be used to play along with this naming structure.

    +

    The following code below demonstrates how to perform animations using CSS transitions with Angular:

    +
    +<style type="text/css">
    +/*
    + The animate class is apart of the element and the ng-enter class
    + is attached to the element once the enter animation event is triggered
    +*/
    +.reveal-animation.ng-enter {
    + -webkit-transition: 1s linear all; /* Safari/Chrome */
    + -moz-transition: 1s linear all; /* Firefox */
    + -o-transition: 1s linear all; /* Opera */
    + transition: 1s linear all; /* IE10+ and Future Browsers */
    +
    + /* The animation preparation code */
    + opacity: 0;
    +}
    +
    +/*
    + Keep in mind that you want to combine both CSS
    + classes together to avoid any CSS-specificity
    + conflicts
    +*/
    +.reveal-animation.ng-enter.ng-enter-active {
    + /* The animation code itself */
    + opacity: 1;
    +}
    +</style>
    +
    +<div class="view-container">
    +  <div ng-view class="reveal-animation"></div>
    +</div>
    +
    +

    The following code below demonstrates how to perform animations using CSS animations with Angular:

    +
    +<style type="text/css">
    +.reveal-animation.ng-enter {
    +  -webkit-animation: enter_sequence 1s linear; /* Safari/Chrome */
    +  -moz-animation: enter_sequence 1s linear; /* Firefox */
    +  -o-animation: enter_sequence 1s linear; /* Opera */
    +  animation: enter_sequence 1s linear; /* IE10+ and Future Browsers */
    +}
    +@-webkit-keyframes enter_sequence {
    +  from { opacity:0; }
    +  to { opacity:1; }
    +}
    +@-moz-keyframes enter_sequence {
    +  from { opacity:0; }
    +  to { opacity:1; }
    +}
    +@-o-keyframes enter_sequence {
    +  from { opacity:0; }
    +  to { opacity:1; }
    +}
    +@keyframes enter_sequence {
    +  from { opacity:0; }
    +  to { opacity:1; }
    +}
    +</style>
    +
    +<div class="view-container">
    +  <div ng-view class="reveal-animation"></div>
    +</div>
    +
    +

    Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.

    +

    Upon DOM mutation, the event class is added first (something like ng-enter), then the browser prepares itself to add +the active class (in this case ng-enter-active) which then triggers the animation. The animation module will automatically +detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be +removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end +immediately resulting in a DOM element that is at its final state. This final state is when the DOM element +has no CSS transition/animation classes applied to it.

    +

    JavaScript-defined Animations

    +In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not +yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.

    +
    +var ngModule = angular.module('
    YourApp
    ', []); +ngModule.animation('.my-crazy-animation', function() { + return { + enter: function(element, done) { + //run the animation + +
    return function(element, done) {
    + //cancel the animation + } + } + leave: function(element, done) { }, + move: function(element, done) { }, + show: function(element, done) { }, + hide: function(element, done) { }, + addClass: function(element, className, done) { }, + removeClass: function(element, className, done) { }, + } +}); +
    +

    JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run +a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits +the element's CSS class attribute value and then run the matching animation event function (if found). +In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function +be executed. It should be also noted that only simple class selectors are allowed.

    +

    Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned. +As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run, +and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation +or transition code that is defined via a stylesheet).

    +
    diff --git a/app/lib/angular/docs/partials/api/ngCookies.$cookieStore.html b/app/lib/angular/docs/partials/api/ngCookies.$cookieStore.html new file mode 100755 index 000000000..c1e740311 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngCookies.$cookieStore.html @@ -0,0 +1,38 @@ + View source Improve this doc

    $cookieStore +
    service in module ngCookies + +
    +

    +

    Description

    +

    Provides a key-value (string-object) storage, that is backed by session cookies. +Objects put or retrieved from this storage are automatically serialized or +deserialized by angular's toJson/fromJson.

    +

    Requires the ngCookies module to be installed.

    +
    +

    Dependencies

    + +

    Methods

    +
    • get(key)

      +

      Returns the value of given cookie key

      +
      Parameters
      ParamTypeDetails
      keystring

      Id to use for lookup.

      +
      Returns
      Object

      Deserialized cookie value.

      +
      +
    • +
    • put(key, value)

      +

      Sets a value for given cookie key

      +
      Parameters
      ParamTypeDetails
      keystring

      Id for the value.

      +
      valueObject

      Value to be stored.

      +
      +
    • +
    • remove(key)

      +

      Remove given cookie

      +
      Parameters
      ParamTypeDetails
      keystring

      Id of the key-value pair to delete.

      +
      +
    • +
    +
    +

    Example

    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngCookies.$cookies.html b/app/lib/angular/docs/partials/api/ngCookies.$cookies.html new file mode 100755 index 000000000..812dbc65d --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngCookies.$cookies.html @@ -0,0 +1,39 @@ + View source Improve this doc

    $cookies +
    service in module ngCookies + +
    +

    +

    Description

    +

    Provides read/write access to browser's cookies.

    +

    Only a simple Object is exposed and by adding or removing properties to/from +this object, new cookies are created/deleted at the end of current $eval.

    +

    Requires the ngCookies module to be installed.

    +
    +

    Dependencies

    + +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngCookies.html b/app/lib/angular/docs/partials/api/ngCookies.html new file mode 100755 index 000000000..1dd1947a7 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngCookies.html @@ -0,0 +1,12 @@ + View source Improve this doc

    +
    +
    +

    +

    ngCookies

    +

    Provides the $cookies and +$cookieStore services.

    +

    Installation

    First include angular-cookies.js in your HTML:

        <script src="angular.js">
    +    <script src="angular-cookies.js">

    You can also find this file on the Google CDN, Bower (as angular-cookies), and on code.angularjs.org.

    Then load the module in your application by adding it as a dependant module:

        angular.module('app', ['ngCookies']);

    With that you're ready to get started!

    +

    See $cookies and +$cookieStore for usage.

    +
    diff --git a/app/lib/angular/docs/partials/api/ngMock.$exceptionHandler.html b/app/lib/angular/docs/partials/api/ngMock.$exceptionHandler.html new file mode 100755 index 000000000..a81d8f391 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMock.$exceptionHandler.html @@ -0,0 +1,33 @@ + View source Improve this doc

    $exceptionHandler +
    service in module ngMock + +
    +

    +

    Description

    +

    Mock implementation of ng.$exceptionHandler that rethrows or logs errors passed +into it. See $exceptionHandlerProvider for configuration +information.

    +
    +  describe('$exceptionHandlerProvider', function() {
    +
    +    it('should capture log messages and exceptions', function() {
    +
    +      module(function($exceptionHandlerProvider) {
    +        $exceptionHandlerProvider.mode('log');
    +      });
    +
    +      inject(function($log, $exceptionHandler, $timeout) {
    +        $timeout(function() { $log.log(1); });
    +        $timeout(function() { $log.log(2); throw 'banana peel'; });
    +        $timeout(function() { $log.log(3); });
    +        expect($exceptionHandler.errors).toEqual([]);
    +        expect($log.assertEmpty());
    +        $timeout.flush();
    +        expect($exceptionHandler.errors).toEqual(['banana peel']);
    +        expect($log.log.logs).toEqual([[1], [2], [3]]);
    +      });
    +    });
    +  });
    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngMock.$exceptionHandlerProvider.html b/app/lib/angular/docs/partials/api/ngMock.$exceptionHandlerProvider.html new file mode 100755 index 000000000..6688b445e --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMock.$exceptionHandlerProvider.html @@ -0,0 +1,27 @@ + View source Improve this doc

    $exceptionHandlerProvider +
    service in module ngMock + +
    +

    +

    Description

    +

    Configures the mock implementation of ng.$exceptionHandler to rethrow or to log errors passed +into the $exceptionHandler.

    +
    +

    Methods

    +
    • mode(mode)

      +

      Sets the logging mode.

      +
      Parameters
      ParamTypeDetails
      modestring

      Mode of operation, defaults to rethrow.

      +
        +
      • rethrow: If any errors are passed into the handler in tests, it typically
               means that there is a bug in the application or test, so this mock will
        +       make these tests fail.
        +
      • +
      • log: Sometimes it is desirable to test that an error is thrown, for this case the log mode stores an
           array of errors in `$exceptionHandler.errors`, to allow later assertion of them.
        +   See <a href="api/ngMock.$log#assertEmpty">assertEmpty()</a> and
        +    <a href="api/ngMock.$log#reset">reset()</a>
        +
      • +
      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngMock.$httpBackend.html b/app/lib/angular/docs/partials/api/ngMock.$httpBackend.html new file mode 100755 index 000000000..f0c754e50 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMock.$httpBackend.html @@ -0,0 +1,366 @@ + View source Improve this doc

    $httpBackend +
    service in module ngMock + +
    +

    +

    Description

    +

    Fake HTTP backend implementation suitable for unit testing applications that use the +$http service.

    +

    Note: For fake HTTP backend implementation suitable for end-to-end testing or backend-less +development please see e2e $httpBackend mock.

    +

    During unit testing, we want our unit tests to run quickly and have no external dependencies so +we don’t want to send XHR or +JSONP requests to a real server. All we really need is +to verify whether a certain request has been sent or not, or alternatively just let the +application make requests, respond with pre-trained responses and assert that the end result is +what we expect it to be.

    +

    This mock implementation can be used to respond with static or dynamic responses via the +expect and when apis and their shortcuts (expectGET, whenPOST, etc).

    +

    When an Angular application needs some data from a server, it calls the $http service, which +sends the request to a real server using $httpBackend service. With dependency injection, it is +easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify +the requests and respond with some testing data without sending a request to real server.

    +

    There are two ways to specify what test data should be returned as http responses by the mock +backend when the code under test makes http requests:

    +
      +
    • $httpBackend.expect - specifies a request expectation
    • +
    • $httpBackend.when - specifies a backend definition
    • +
    +

    Request Expectations vs Backend Definitions

    +

    Request expectations provide a way to make assertions about requests made by the application and +to define responses for those requests. The test will fail if the expected requests are not made +or they are made in the wrong order.

    +

    Backend definitions allow you to define a fake backend for your application which doesn't assert +if a particular request was made or not, it just returns a trained response if a request is made. +The test will pass whether or not the request gets made during testing.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Request expectationsBackend definitions
    Syntax.expect(...).respond(...).when(...).respond(...)
    Typical usagestrict unit testsloose (black-box) unit testing
    Fulfills multiple requestsNOYES
    Order of requests mattersYESNO
    Request requiredYESNO
    Response requiredoptional (see below)YES
    + +

    In cases where both backend definitions and request expectations are specified during unit +testing, the request expectations are evaluated first.

    +

    If a request expectation has no response specified, the algorithm will search your backend +definitions for an appropriate response.

    +

    If a request didn't match any expectation or if the expectation doesn't have the response +defined, the backend definitions are evaluated in sequential order to see if any of them match +the request. The response from the first matched definition is returned.

    +

    Flushing HTTP requests

    +

    The $httpBackend used in production, always responds to requests with responses asynchronously. +If we preserved this behavior in unit testing, we'd have to create async unit tests, which are +hard to write, follow and maintain. At the same time the testing mock, can't respond +synchronously because that would change the execution of the code under test. For this reason the +mock $httpBackend has a flush() method, which allows the test to explicitly flush pending +requests and thus preserving the async api of the backend, while allowing the test to execute +synchronously.

    +

    Unit testing with mock $httpBackend

    +

    The following code shows how to setup and use the mock backend in unit testing a controller. +First we create the controller under test

    +

    +  // The controller code
    +  function MyController($scope, $http) {
    +    var authToken;
    +
    +    $http.get('/auth.py').success(function(data, status, headers) {
    +      authToken = headers('A-Token');
    +      $scope.user = data;
    +    });
    +
    +    $scope.saveMessage = function(message) {
    +      var headers = { 'Authorization': authToken };
    +      $scope.status = 'Saving...';
    +
    +      $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
    +        $scope.status = '';
    +      }).error(function() {
    +        $scope.status = 'ERROR!';
    +      });
    +    };
    +  }
    +  
    +

    Now we setup the mock backend and create the test specs.

    +

    +    // testing controller
    +    describe('MyController', function() {
    +       var $httpBackend, $rootScope, createController;
    +
    +       beforeEach(inject(function($injector) {
    +         // Set up the mock http service responses
    +         $httpBackend = $injector.get('$httpBackend');
    +         // backend definition common for all tests
    +         $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'});
    +
    +         // Get hold of a scope (i.e. the root scope)
    +         $rootScope = $injector.get('$rootScope');
    +         // The $controller service is used to create instances of controllers
    +         var $controller = $injector.get('$controller');
    +
    +         createController = function() {
    +           return $controller('MyController', {'$scope' : $rootScope });
    +         };
    +       }));
    +
    +
    +       afterEach(function() {
    +         $httpBackend.verifyNoOutstandingExpectation();
    +         $httpBackend.verifyNoOutstandingRequest();
    +       });
    +
    +
    +       it('should fetch authentication token', function() {
    +         $httpBackend.expectGET('/auth.py');
    +         var controller = createController();
    +         $httpBackend.flush();
    +       });
    +
    +
    +       it('should send msg to server', function() {
    +         var controller = createController();
    +         $httpBackend.flush();
    +
    +         // now you don’t care about the authentication, but
    +         // the controller will still send the request and
    +         // $httpBackend will respond without you having to
    +         // specify the expectation and response for this request
    +
    +         $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
    +         $rootScope.saveMessage('message content');
    +         expect($rootScope.status).toBe('Saving...');
    +         $httpBackend.flush();
    +         expect($rootScope.status).toBe('');
    +       });
    +
    +
    +       it('should send auth header', function() {
    +         var controller = createController();
    +         $httpBackend.flush();
    +
    +         $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
    +           // check if the header was send, if it wasn't the expectation won't
    +           // match the request and the test will fail
    +           return headers['Authorization'] == 'xxx';
    +         }).respond(201, '');
    +
    +         $rootScope.saveMessage('whatever');
    +         $httpBackend.flush();
    +       });
    +    });
    +   
    +
    +

    Methods

    +
    • expect(method, url, data, headers)

      +

      Creates a new request expectation.

      +
      Parameters
      ParamTypeDetails
      methodstring

      HTTP method.

      +
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)Object

      HTTP request body or function that +receives data string and returns true if the data is as expected, or Object if request body +is in JSON format.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers or function that receives http header +object and returns true if the headers match the current expectation.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
        +
      • respond – {function([status,] data[, headers])|function(function(method, url, data, headers)} +– The respond method takes a set of static data to be returned or a function that can return +an array containing response status (number), response data (string) and response headers +(Object).
      • +
      +
      +
    • +
    • expectDELETE(url, headers)

      +

      Creates a new request expectation for DELETE requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Object

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • expectGET(url, headers)

      +

      Creates a new request expectation for GET requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Object

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled. See #expect for more info.

      +
      +
    • +
    • expectHEAD(url, headers)

      +

      Creates a new request expectation for HEAD requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Object

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • expectJSONP(url)

      +

      Creates a new request expectation for JSONP requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • expectPATCH(url, data, headers)

      +

      Creates a new request expectation for PATCH requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)Object

      HTTP request body or function that +receives data string and returns true if the data is as expected, or Object if request body +is in JSON format.

      +
      headers
      (optional)
      Object

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • expectPOST(url, data, headers)

      +

      Creates a new request expectation for POST requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)Object

      HTTP request body or function that +receives data string and returns true if the data is as expected, or Object if request body +is in JSON format.

      +
      headers
      (optional)
      Object

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • expectPUT(url, data, headers)

      +

      Creates a new request expectation for PUT requests. For more info see expect().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)Object

      HTTP request body or function that +receives data string and returns true if the data is as expected, or Object if request body +is in JSON format.

      +
      headers
      (optional)
      Object

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • flush(count)

      +

      Flushes all pending requests using the trained responses.

      +
      Parameters
      ParamTypeDetails
      count
      (optional)
      number

      Number of responses to flush (in the order they arrived). If undefined, +all pending requests will be flushed. If there are no pending requests when the flush method +is called an exception is thrown (as this typically a sign of programming error).

      +
      +
    • +
    • resetExpectations()

      +

      Resets all request expectations, but preserves all backend definitions. Typically, you would +call resetExpectations during a multiple-phase test when you want to reuse the same instance of +$httpBackend mock.

      +
      +
    • +
    • verifyNoOutstandingExpectation()

      +

      Verifies that all of the requests defined via the expect api were made. If any of the +requests were not made, verifyNoOutstandingExpectation throws an exception.

      +

      Typically, you would call this method following each test case that asserts requests using an +"afterEach" clause.

      +
      +  afterEach($httpBackend.verifyNoOutstandingExpectation);
      +
      +
      +
    • +
    • verifyNoOutstandingRequest()

      +

      Verifies that there are no outstanding requests that need to be flushed.

      +

      Typically, you would call this method following each test case that asserts requests using an +"afterEach" clause.

      +
      +  afterEach($httpBackend.verifyNoOutstandingRequest);
      +
      +
      +
    • +
    • when(method, url, data, headers)

      +

      Creates a new backend definition.

      +
      Parameters
      ParamTypeDetails
      methodstring

      HTTP method.

      +
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)

      HTTP request body or function that receives +data string and returns true if the data is as expected.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers or function that receives http header +object and returns true if the headers match the current definition.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
        +
      • respond – {function([status,] data[, headers])|function(function(method, url, data, headers)} +– The respond method takes a set of static data to be returned or a function that can return +an array containing response status (number), response data (string) and response headers +(Object).
      • +
      +
      +
    • +
    • whenDELETE(url, headers)

      +

      Creates a new backend definition for DELETE requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • whenGET(url, headers)

      +

      Creates a new backend definition for GET requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • whenHEAD(url, headers)

      +

      Creates a new backend definition for HEAD requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • whenJSONP(url)

      +

      Creates a new backend definition for JSONP requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • whenPOST(url, data, headers)

      +

      Creates a new backend definition for POST requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)

      HTTP request body or function that receives +data string and returns true if the data is as expected.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    • whenPUT(url, data, headers)

      +

      Creates a new backend definition for PUT requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExpfunction(string)

      HTTP request body or function that receives +data string and returns true if the data is as expected.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond method that control how a matched +request is handled.

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngMock.$log.html b/app/lib/angular/docs/partials/api/ngMock.$log.html new file mode 100755 index 000000000..d73b8d8f0 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMock.$log.html @@ -0,0 +1,75 @@ + View source Improve this doc

    $log +
    service in module ngMock + +
    +

    +

    Description

    +

    Mock implementation of ng.$log that gathers all logged messages in arrays +(one array per logging level). These arrays are exposed as logs property of each of the +level-specific log function, e.g. for level error the array is exposed as $log.error.logs.

    +
    +

    Methods

    +
    • assertEmpty()

      +

      Assert that the all of the logging methods have no logged messages. If messages present, an exception is thrown.

      +
      +
    • +
    • reset()

      +

      Reset all of the logging arrays to empty.

      +
      +
    • +
    +
    +

    Properties

    +
    • logs

      +

      Array of messages logged using ngMock.$log#debug.

      +

      Example

      +
      +$log.debug('Some Error');
      +var first = $log.debug.logs.unshift();
      +
      +
      +
      +
    • +
    • logs

      +

      Array of messages logged using ngMock.$log#error.

      +

      Example

      +
      +$log.log('Some Error');
      +var first = $log.error.logs.unshift();
      +
      +
      +
      +
    • +
    • logs

      +

      Array of messages logged using ngMock.$log#info.

      +

      Example

      +
      +$log.info('Some Info');
      +var first = $log.info.logs.unshift();
      +
      +
      +
      +
    • +
    • logs

      +

      Array of messages logged using ngMock.$log#log.

      +

      Example

      +
      +$log.log('Some Log');
      +var first = $log.log.logs.unshift();
      +
      +
      +
      +
    • +
    • logs

      +

      Array of messages logged using ngMock.$log#warn.

      +

      Example

      +
      +$log.warn('Some Warning');
      +var first = $log.warn.logs.unshift();
      +
      +
      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngMock.$timeout.html b/app/lib/angular/docs/partials/api/ngMock.$timeout.html new file mode 100755 index 000000000..bc652fcce --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMock.$timeout.html @@ -0,0 +1,30 @@ + View source Improve this doc

    $timeout +
    service in module ngMock + +
    +

    +

    Description

    +

    This service is just a simple decorator for $timeout service +that adds a "flush" and "verifyNoPendingTasks" methods.

    +
    +

    Usage

    +
    $timeout();
    +
    +

    Methods

    +
    • flush(delay)

      +

      Flushes the queue of pending tasks.

      +
      Parameters
      ParamTypeDetails
      delay
      (optional)
      number

      maximum timeout amount to flush up until

      +
      +
    • +
    • flushNext(expectedDelay)

      +

      Flushes the next timeout in the queue and compares it to the provided delay

      +
      Parameters
      ParamTypeDetails
      expectedDelay
      (optional)
      number

      the delay value that will be asserted against the delay of the next timeout function

      +
      +
    • +
    • verifyNoPendingTasks()

      +

      Verifies that there are no pending tasks that need to be flushed.

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngMock.html b/app/lib/angular/docs/partials/api/ngMock.html new file mode 100755 index 000000000..5a51a7c38 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMock.html @@ -0,0 +1,7 @@ + View source Improve this doc

    +
    +
    +

    +

    The ngMock is an angular module which is used with ng module and adds unit-test configuration as well as useful +mocks to the $injector.

    +
    diff --git a/app/lib/angular/docs/partials/api/ngMockE2E.$httpBackend.html b/app/lib/angular/docs/partials/api/ngMockE2E.$httpBackend.html new file mode 100755 index 000000000..462ff5ed7 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMockE2E.$httpBackend.html @@ -0,0 +1,124 @@ + View source Improve this doc

    $httpBackend +
    service in module ngMockE2E + +
    +

    +

    Description

    +

    Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of +applications that use the $http service.

    +

    Note: For fake http backend implementation suitable for unit testing please see +unit-testing $httpBackend mock.

    +

    This implementation can be used to respond with static or dynamic responses via the when api +and its shortcuts (whenGET, whenPOST, etc) and optionally pass through requests to the +real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch +templates from a webserver).

    +

    As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application +is being developed with the real backend api replaced with a mock, it is often desirable for +certain category of requests to bypass the mock and issue a real http request (e.g. to fetch +templates or static files from the webserver). To configure the backend with this behavior +use the passThrough request handler of when instead of respond.

    +

    Additionally, we don't want to manually have to flush mocked out requests like we do during unit +testing. For this reason the e2e $httpBackend automatically flushes mocked out requests +automatically, closely simulating the behavior of the XMLHttpRequest object.

    +

    To setup the application to run with this http backend, you have to create a module that depends +on the ngMockE2E and your application modules and defines the fake backend:

    +
    +  myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
    +  myAppDev.run(function($httpBackend) {
    +    phones = [{name: 'phone1'}, {name: 'phone2'}];
    +
    +    // returns the current list of phones
    +    $httpBackend.whenGET('/phones').respond(phones);
    +
    +    // adds a new phone to the phones array
    +    $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
    +      phones.push(angular.fromJson(data));
    +    });
    +    $httpBackend.whenGET(/^\/templates\//).passThrough();
    +    //...
    +  });
    +
    +

    Afterwards, bootstrap your app with this new module.

    +
    +

    Methods

    +
    • when(method, url, data, headers)

      +

      Creates a new backend definition.

      +
      Parameters
      ParamTypeDetails
      methodstring

      HTTP method.

      +
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExp

      HTTP request body.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers or function that receives http header +object and returns true if the headers match the current definition.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
        +
      • respond – {function([status,] data[, headers])|function(function(method, url, data, headers)} +– The respond method takes a set of static data to be returned or a function that can return +an array containing response status (number), response data (string) and response headers +(Object).
      • +
      • passThrough – {function()} – Any request matching a backend definition with passThrough +handler, will be pass through to the real backend (an XHR request will be made to the +server.
      • +
      +
      +
    • +
    • whenDELETE(url, headers)

      +

      Creates a new backend definition for DELETE requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    • whenGET(url, headers)

      +

      Creates a new backend definition for GET requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    • whenHEAD(url, headers)

      +

      Creates a new backend definition for HEAD requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    • whenJSONP(url)

      +

      Creates a new backend definition for JSONP requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    • whenPATCH(url, data, headers)

      +

      Creates a new backend definition for PATCH requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExp

      HTTP request body.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    • whenPOST(url, data, headers)

      +

      Creates a new backend definition for POST requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExp

      HTTP request body.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    • whenPUT(url, data, headers)

      +

      Creates a new backend definition for PUT requests. For more info see when().

      +
      Parameters
      ParamTypeDetails
      urlstringRegExp

      HTTP url.

      +
      data
      (optional)
      stringRegExp

      HTTP request body.

      +
      headers
      (optional)
      Objectfunction(Object)

      HTTP headers.

      +
      Returns
      requestHandler

      Returns an object with respond and passThrough methods that +control how a matched request is handled.

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngMockE2E.html b/app/lib/angular/docs/partials/api/ngMockE2E.html new file mode 100755 index 000000000..24ad8b479 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngMockE2E.html @@ -0,0 +1,8 @@ + View source Improve this doc

    +
    +
    +

    +

    The ngMockE2E is an angular module which contains mocks suitable for end-to-end testing. +Currently there is only one mock present in this module - +the e2e $httpBackend mock.

    +
    diff --git a/app/lib/angular/docs/partials/api/ngResource.$resource.html b/app/lib/angular/docs/partials/api/ngResource.$resource.html new file mode 100755 index 000000000..15a7c9da7 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngResource.$resource.html @@ -0,0 +1,248 @@ + View source Improve this doc

    $resource +
    service in module ngResource + +
    +

    +

    Description

    +

    A factory which creates a resource object that lets you interact with +RESTful server-side data sources.

    +

    The returned resource object has action methods which provide high-level behaviors without +the need to interact with the low level $http service.

    +

    Requires the ngResource module to be installed.

    +
    +

    Dependencies

    + +

    Usage

    +
    $resource(url[, paramDefaults][, actions]);
    +

    Parameters

    ParamTypeDetails
    urlstring

    A parametrized URL template with parameters prefixed by : as in +/user/:username. If you are using a URL with a port number (e.g. +http://example.com:8080/api), it will be respected.

    +

    If you are using a url with a suffix, just add the suffix, like this: +$resource('http://example.com/resource.json') or $resource('http://example.com/:id.json') +or even $resource('http://example.com/resource/:resource_id.:format') +If the parameter before the suffix is empty, :resource_id in this case, then the /. will be +collapsed down to a single .. If you need this sequence to appear and not collapse then you +can escape it with /\..

    +
    paramDefaults
    (optional)
    Object

    Default values for url parameters. These can be overridden in +actions methods. If any of the parameter value is a function, it will be executed every time +when a param value needs to be obtained for a request (unless the param was overridden).

    +

    Each key value in the parameter object is first bound to url template if present and then any +excess keys are appended to the url search query after the ?.

    +

    Given a template /path/:verb and parameter {verb:'greet', salutation:'Hello'} results in +URL /path/greet?salutation=Hello.

    +

    If the parameter value is prefixed with @ then the value of that parameter is extracted from +the data object (useful for non-GET operations).

    +
    actions
    (optional)
    Object.<Object>

    Hash with declaration of custom action that should extend the +default set of resource actions. The declaration should be created in the format of $http.config:

    +
    {action1: {method:?, params:?, isArray:?, headers:?, ...},
    + action2: {method:?, params:?, isArray:?, headers:?, ...},
    + ...}
    +

    Where:

    +
      +
    • action – {string} – The name of action. This name becomes the name of the method on your +resource object.
    • +
    • method – {string} – HTTP request method. Valid methods are: GET, POST, PUT, DELETE, +and JSONP.
    • +
    • params – {Object=} – Optional set of pre-bound parameters for this action. If any of the +parameter value is a function, it will be executed every time when a param value needs to be +obtained for a request (unless the param was overridden).
    • +
    • url – {string} – action specific url override. The url templating is supported just like +for the resource-level urls.
    • +
    • isArray – {boolean=} – If true then the returned object for this action is an array, see +returns section.
    • +
    • transformRequest{function(data, headersGetter)|Array.<function(data, headersGetter)>} – +transform function or an array of such functions. The transform function takes the http +request body and headers and returns its transformed (typically serialized) version.
    • +
    • transformResponse{function(data, headersGetter)|Array.<function(data, headersGetter)>} – +transform function or an array of such functions. The transform function takes the http +response body and headers and returns its transformed (typically deserialized) version.
    • +
    • cache{boolean|Cache} – If true, a default $http cache will be used to cache the +GET request, otherwise if a cache instance built with +$cacheFactory, this cache will be used for +caching.
    • +
    • timeout{number|Promise} – timeout in milliseconds, or promise that +should abort the request when resolved.
    • +
    • withCredentials - {boolean} - whether to to set the withCredentials flag on the +XHR object. See requests with credentials for more information.
    • +
    • responseType - {string} - see requestType.
    • +
    • interceptor - {Object=} - The interceptor object has two optional methods - +response and responseError. Both response and responseError interceptors get called +with http response object. See $http interceptors.
    • +
    +

    Returns

    Object

    A resource "class" object with methods for the default set of resource actions +optionally extended with custom actions. The default set contains these actions:

    +
    { 'get':    {method:'GET'},
    +  'save':   {method:'POST'},
    +  'query':  {method:'GET', isArray:true},
    +  'remove': {method:'DELETE'},
    +  'delete': {method:'DELETE'} };
    +

    Calling these methods invoke an ng.$http with the specified http method, +destination and parameters. When the data is returned from the server then the object is an +instance of the resource class. The actions save, remove and delete are available on it +as methods with the $ prefix. This allows you to easily perform CRUD operations (create, +read, update, delete) on server-side data like this: +

    +      var User = $resource('/user/:userId', {userId:'@id'});
    +      var user = User.get({userId:123}, function() {
    +        user.abc = true;
    +        user.$save();
    +      });
    +   
    +

    It is important to realize that invoking a $resource object method immediately returns an +empty reference (object or array depending on isArray). Once the data is returned from the +server the existing reference is populated with the actual data. This is a useful trick since +usually the resource is assigned to a model which is then rendered by the view. Having an empty +object results in no rendering, once the data arrives from the server then the object is +populated with the data and the view automatically re-renders itself showing the new data. This +means that in most case one never has to write a callback function for the action methods.

    +

    The action methods on the class object or instance object can be invoked with the following +parameters:

    +
      +
    • HTTP GET "class" actions: Resource.action([parameters], [success], [error])
    • +
    • non-GET "class" actions: Resource.action([parameters], postData, [success], [error])
    • +
    • non-GET instance actions: instance.$action([parameters], [success], [error])
    • +
    +

    Success callback is called with (value, responseHeaders) arguments. Error callback is called +with (httpResponse) argument.

    +

    Class actions return empty instance (with additional properties below). +Instance actions return promise of the action.

    +

    The Resource instances and collection have these additional properties:

    +
      +
    • $promise: the promise of the original server interaction that created this +instance or collection.

      +

      On success, the promise is resolved with the same resource instance or collection object, +updated with data from server. This makes it easy to use in +resolve section of $routeProvider.when() to defer view rendering +until the resource(s) are loaded.

      +

      On failure, the promise is resolved with the http response object, +without the resource property.

      +
    • +
    • $resolved: true after first server interaction is completed (either with success or rejection), +false before that. Knowing if the Resource has been resolved is useful in data-binding.

      +
    • +
    +
    +

    Example

    +

    Credit card resource

    +
    +     // Define CreditCard class
    +     var CreditCard = $resource('/user/:userId/card/:cardId',
    +      {userId:123, cardId:'@id'}, {
    +       charge: {method:'POST', params:{charge:true}}
    +      });
    +
    +     // We can retrieve a collection from the server
    +     var cards = CreditCard.query(function() {
    +       // GET: /user/123/card
    +       // server returns: [ {id:456, number:'1234', name:'Smith'} ];
    +
    +       var card = cards[0];
    +       // each item is an instance of CreditCard
    +       expect(card instanceof CreditCard).toEqual(true);
    +       card.name = "J. Smith";
    +       // non GET methods are mapped onto the instances
    +       card.$save();
    +       // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
    +       // server returns: {id:456, number:'1234', name: 'J. Smith'};
    +
    +       // our custom method is mapped as well.
    +       card.$charge({amount:9.99});
    +       // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
    +     });
    +
    +     // we can create an instance as well
    +     var newCard = new CreditCard({number:'0123'});
    +     newCard.name = "Mike Smith";
    +     newCard.$save();
    +     // POST: /user/123/card {number:'0123', name:'Mike Smith'}
    +     // server returns: {id:789, number:'01234', name: 'Mike Smith'};
    +     expect(newCard.id).toEqual(789);
    +
    +

    The object returned from this function execution is a resource "class" which has "static" method +for each action in the definition.

    +

    Calling these methods invoke $http on the url template with the given method, params and headers. +When the data is returned from the server then the object is an instance of the resource type and +all of the non-GET methods are available with $ prefix. This allows you to easily support CRUD +operations (create, read, update, delete) on server-side data.

    +

    +     var User = $resource('/user/:userId', {userId:'@id'});
    +     var user = User.get({userId:123}, function() {
    +       user.abc = true;
    +       user.$save();
    +     });
    +   
    +

    It's worth noting that the success callback for get, query and other method gets passed +in the response that came from the server as well as $http header getter function, so one +could rewrite the above example and get access to http headers as:

    +

    +     var User = $resource('/user/:userId', {userId:'@id'});
    +     User.get({userId:123}, function(u, getResponseHeaders){
    +       u.abc = true;
    +       u.$save(function(u, putResponseHeaders) {
    +         //u => saved user object
    +         //putResponseHeaders => $http header getter
    +       });
    +     });
    +   
    +

    Buzz client

    +

    Let's look at what a buzz client created with the $resource service looks like: +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngResource.html b/app/lib/angular/docs/partials/api/ngResource.html new file mode 100755 index 000000000..9925f8ecf --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngResource.html @@ -0,0 +1,12 @@ + View source Improve this doc

    +
    +
    +

    +

    ngResource

    +

    ngResource is the name of the optional Angular module that adds support for interacting with +RESTful server-side data sources. +ngReource provides the $resource serivce.

    +

    Installation

    First include angular-resource.js in your HTML:

        <script src="angular.js">
    +    <script src="angular-resource.js">

    You can also find this file on the Google CDN, Bower (as angular-resource), and on code.angularjs.org.

    Then load the module in your application by adding it as a dependant module:

        angular.module('app', ['ngResource']);

    With that you're ready to get started!

    +

    See $resource for usage.

    +
    diff --git a/app/lib/angular/docs/partials/api/ngRoute.$route.html b/app/lib/angular/docs/partials/api/ngRoute.$route.html new file mode 100755 index 000000000..a0482ec93 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngRoute.$route.html @@ -0,0 +1,218 @@ + View source Improve this doc

    $route +
    service in module ngRoute + +
    +

    +

    Description

    +

    $route is used for deep-linking URLs to controllers and views (HTML partials). +It watches $location.url() and tries to map the path to an existing route definition.

    +

    Requires the ngRoute module to be installed.

    +

    You can define routes through $routeProvider's API.

    +

    The $route service is typically used in conjunction with the ngView +directive and the $routeParams service.

    +
    +

    Dependencies

    + +

    Methods

    +
    • reload()

      +

      Causes $route service to reload the current route even if +$location hasn't changed.

      +

      As a result of that, ngView +creates new scope, reinstantiates the controller.

      +
      +
    • +
    +
    +

    Properties

    +
    • current

      +

      Reference to the current route definition. +The route definition contains:

      +
        +
      • controller: The controller constructor as define in route definition.
      • +
      • locals: A map of locals which is used by $controller service for +controller instantiation. The locals contain +the resolved values of the resolve map. Additionally the locals also contain:

        +
          +
        • $scope - The current route scope.
        • +
        • $template - The current route template HTML.
        • +
        +
      • +
      +
      +
    • +
    • routes

      +

      Array of all configured routes.

      +
      +
    • +
    +
    +

    Events

    +
    • $routeChangeError

      +

      Broadcasted if any of the resolve promises are rejected.

      +

      Type:

      +
      broadcast
      +
      +

      Target:

      +
      root scope
      +
      +
      Parameters
      ParamTypeDetails
      currentRoute

      Current route information.

      +
      previousRoute

      Previous route information.

      +
      rejectionRoute

      Rejection of the promise. Usually the error of the failed promise.

      +
      +
    • +
    • $routeChangeStart

      +

      Broadcasted before a route change. At this point the route services starts +resolving all of the dependencies needed for the route change to occurs. +Typically this involves fetching the view template as well as any dependencies +defined in resolve route property. Once all of the dependencies are resolved +$routeChangeSuccess is fired.

      +

      Type:

      +
      broadcast
      +
      +

      Target:

      +
      root scope
      +
      +
      Parameters
      ParamTypeDetails
      nextRoute

      Future route information.

      +
      currentRoute

      Current route information.

      +
      +
    • +
    • $routeChangeSuccess

      +

      Broadcasted after a route dependencies are resolved. +ngView listens for the directive +to instantiate the controller and render the view.

      +

      Type:

      +
      broadcast
      +
      +

      Target:

      +
      root scope
      +
      +
      Parameters
      ParamTypeDetails
      angularEventObject

      Synthetic event object.

      +
      currentRoute

      Current route information.

      +
      previousRouteUndefined

      Previous route information, or undefined if current is first route entered.

      +
      +
    • +
    • $routeUpdate

      +

      The reloadOnSearch property has been set to false, and we are reusing the same +instance of the Controller.

      +

      Type:

      +
      broadcast
      +
      +

      Target:

      +
      root scope
      +
      +
      +
    • +
    +
    +

    Example

    +

    This example shows how changing the URL hash causes the $route to match a route against the +URL, and the ngView pulls in the partial.

    +

    Note that this example is using inlined templates +to get it working on jsfiddle as well.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngRoute.$routeParams.html b/app/lib/angular/docs/partials/api/ngRoute.$routeParams.html new file mode 100755 index 000000000..3c7fc3bbd --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngRoute.$routeParams.html @@ -0,0 +1,33 @@ + View source Improve this doc

    $routeParams +
    service in module ngRoute + +
    +

    +

    Description

    +

    The $routeParams service allows you to retrieve the current set of route parameters.

    +

    Requires the ngRoute module to be installed.

    +

    The route parameters are a combination of $location's +search() and path(). +The path parameters are extracted when the $route path is matched.

    +

    In case of parameter name collision, path params take precedence over search params.

    +

    The service guarantees that the identity of the $routeParams object will remain unchanged +(but its properties will likely change) even when a route change occurs.

    +

    Note that the $routeParams are only updated after a route change completes successfully. +This means that you cannot rely on $routeParams being correct in route resolve functions. +Instead you can use $route.current.params to access the new route's parameters.

    +
    +

    Dependencies

    + +

    Example

    +
    +// Given:
    +// URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby
    +// Route: /Chapter/:chapterId/Section/:sectionId
    +//
    +// Then
    +$routeParams ==> {chapterId:1, sectionId:2, search:'moby'}
    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngRoute.$routeProvider.html b/app/lib/angular/docs/partials/api/ngRoute.$routeProvider.html new file mode 100755 index 000000000..87ce9cfff --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngRoute.$routeProvider.html @@ -0,0 +1,106 @@ + View source Improve this doc

    $routeProvider +
    service in module ngRoute + +
    +

    +

    Description

    +

    Used for configuring routes. See $route for an example.

    +

    Requires the ngRoute module to be installed.

    +
    +

    Methods

    +
    • otherwise(params)

      +

      Sets route definition that will be used on route change when no other route definition +is matched.

      +
      Parameters
      ParamTypeDetails
      paramsObject

      Mapping information to be assigned to $route.current.

      +
      Returns
      Object

      self

      +
      +
    • +
    • when(path, route)

      +

      Adds a new route definition to the $route service.

      +
      Parameters
      ParamTypeDetails
      pathstring

      Route path (matched against $location.path). If $location.path +contains redundant trailing slash or is missing one, the route will still match and the +$location.path will be updated to add or drop the trailing slash to exactly match the +route definition.

      +
        +
      • path can contain named groups starting with a colon (:name). All characters up +to the next slash are matched and stored in $routeParams under the given name +when the route matches.
      • +
      • path can contain named groups starting with a colon and ending with a star (:name*). +All characters are eagerly stored in $routeParams under the given name +when the route matches.
      • +
      • path can contain optional named groups with a question mark (:name?).
      • +
      +

      For example, routes like /color/:color/largecode/:largecode*\/edit will match +/color/brown/largecode/code/with/slashs/edit and extract:

      +
        +
      • color: brown
      • +
      • largecode: code/with/slashs.
      • +
      +
      routeObject

      Mapping information to be assigned to $route.current on route +match.

      +

      Object properties:

      +
        +
      • controller{(string|function()=} – Controller fn that should be associated with newly +created scope or the name of a registered controller +if passed as a string.
      • +
      • controllerAs{string=} – A controller alias name. If present the controller will be +published to scope under the controllerAs name.
      • +
      • template{string=|function()=} – html template as a string or a function that +returns an html template as a string which should be used by ngView or ngInclude directives. +This property takes precedence over templateUrl.

        +

        If template is a function, it will be called with the following parameters:

        +
          +
        • {Array.<Object>} - route parameters extracted from the current +$location.path() by applying the current route
        • +
        +
      • +
      • templateUrl{string=|function()=} – path or function that returns a path to an html +template that should be used by ngView.

        +

        If templateUrl is a function, it will be called with the following parameters:

        +
          +
        • {Array.<Object>} - route parameters extracted from the current +$location.path() by applying the current route
        • +
        +
      • +
      • resolve - {Object.<string, function>=} - An optional map of dependencies which should +be injected into the controller. If any of these dependencies are promises, they will be +resolved and converted to a value before the controller is instantiated and the +$routeChangeSuccess event is fired. The map object is:

        +
          +
        • key{string}: a name of a dependency to be injected into the controller.
        • +
        • factory - {string|function}: If string then it is an alias for a service. +Otherwise if function, then it is injected +and the return value is treated as the dependency. If the result is a promise, it is resolved +before its value is injected into the controller. Be aware that ngRoute.$routeParams will +still refer to the previous route within these resolve functions. Use $route.current.params +to access the new route parameters, instead.
        • +
        +
      • +
      • redirectTo – {(string|function())=} – value to update +$location path with and trigger route redirection.

        +

        If redirectTo is a function, it will be called with the following parameters:

        +
          +
        • {Object.<string>} - route parameters extracted from the current +$location.path() by applying the current route templateUrl.
        • +
        • {string} - current $location.path()
        • +
        • {Object} - current $location.search()
        • +
        +

        The custom redirectTo function is expected to return a string which will be used +to update $location.path() and $location.search().

        +
      • +
      • [reloadOnSearch=true] - {boolean=} - reload route when only $location.search() +changes.

        +

        If the option is set to false and url in the browser changes, then +$routeUpdate event is broadcasted on the root scope.

        +
      • +
      • [caseInsensitiveMatch=false] - {boolean=} - match routes without being case sensitive

        +

        If the option is set to true, then the particular route can be matched without being +case sensitive

        +
      • +
      +
      Returns
      Object

      self

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngRoute.directive:ngView.html b/app/lib/angular/docs/partials/api/ngRoute.directive:ngView.html new file mode 100755 index 000000000..947129879 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngRoute.directive:ngView.html @@ -0,0 +1,196 @@ + View source Improve this doc

    ngView +
    directive in module ngRoute + +
    +

    +

    Description

    +

    Overview

    +

    ngView is a directive that complements the $route service by +including the rendered template of the current route into the main layout (index.html) file. +Every time the current route changes, the included view changes with it according to the +configuration of the $route service.

    +

    Requires the ngRoute module to be installed.

    +
    +

    Usage

    +

    This directive can be used as custom element, but be aware of IE restrictions.

    as element:
    <ng-view>
    +</ng-view>
    +as attribute
    <ANY ng-view>
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-view">
    +   ...
    +</ANY>
    +

    Directive info

    +
    • This directive creates new scope.
    • +
    +
    +

    Animations

    +
    • enter - animation is used to bring new content into the browser.
    • leave - animation is used to animate existing content away.
    • The enter and leave animation occur concurrently.
    +Click here to learn more about the steps involved in the animation.
    +

    Events

    +
    • $viewContentLoaded

      +

      Emitted every time the ngView content is reloaded.

      +

      Type:

      +
      emit
      +
      +

      Target:

      +
      the current ngView scope
      +
      +
      +
    • +
    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngRoute.html b/app/lib/angular/docs/partials/api/ngRoute.html new file mode 100755 index 000000000..37b4af35a --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngRoute.html @@ -0,0 +1,9 @@ + View source Improve this doc

    +
    +
    +

    +

    ngRoute

    +

    The ngRoute module provides routing and deeplinking services and directives for angular apps.

    +

    Installation

    First include angular-route.js in your HTML:

        <script src="angular.js">
    +    <script src="angular-route.js">

    You can also find this file on the Google CDN, Bower (as angular-route), and on code.angularjs.org.

    Then load the module in your application by adding it as a dependant module:

        angular.module('app', ['ngRoute']);

    With that you're ready to get started!

    +
    diff --git a/app/lib/angular/docs/partials/api/ngSanitize.$sanitize.html b/app/lib/angular/docs/partials/api/ngSanitize.$sanitize.html new file mode 100755 index 000000000..9ef22c29f --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngSanitize.$sanitize.html @@ -0,0 +1,103 @@ + View source Improve this doc

    $sanitize +
    service in module ngSanitize + +
    +

    +

    Description

    +

    The input is sanitized by parsing the html into tokens. All safe tokens (from a whitelist) are +then serialized back to properly escaped html string. This means that no unsafe input can make +it into the returned string, however, since our parser is more strict than a typical browser +parser, it's possible that some obscure input, which would be recognized as valid HTML by a +browser, won't make it through the sanitizer.

    +
    +

    Usage

    +
    $sanitize(html);
    +

    Parameters

    ParamTypeDetails
    htmlstring

    Html input.

    +

    Returns

    string

    Sanitized html.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngSanitize.filter:linky.html b/app/lib/angular/docs/partials/api/ngSanitize.filter:linky.html new file mode 100755 index 000000000..4f3f73945 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngSanitize.filter:linky.html @@ -0,0 +1,114 @@ + View source Improve this doc

    linky +
    filter in module ngSanitize + +
    +

    +

    Description

    +

    Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and +plain email address links.

    +

    Requires the ngSanitize module to be installed.

    +
    +

    Usage

    +

    In HTML Template Binding

    +
    <span ng-bind-html="linky_expression | linky"></span> +
    +

    In JavaScript

    +
    $filter('linky')(text, target) +
    +

    Parameters

    ParamTypeDetails
    textstring

    Input text.

    +
    targetstring

    Window (_blank|_self|_parent|_top) or named frame to open links in.

    +

    Returns

    string

    Html-linkified text.

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngSanitize.html b/app/lib/angular/docs/partials/api/ngSanitize.html new file mode 100755 index 000000000..fe29c531a --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngSanitize.html @@ -0,0 +1,10 @@ + View source Improve this doc

    +
    +
    +

    +

    ngSanitize

    +

    The ngSanitize module provides functionality to sanitize HTML.

    +

    Installation

    First include angular-sanitize.js in your HTML:

        <script src="angular.js">
    +    <script src="angular-sanitize.js">

    You can also find this file on the Google CDN, Bower (as angular-sanitize), and on code.angularjs.org.

    Then load the module in your application by adding it as a dependant module:

        angular.module('app', ['ngSanitize']);

    With that you're ready to get started!

    +

    See $sanitize for usage.

    +
    diff --git a/app/lib/angular/docs/partials/api/ngTouch.$swipe.html b/app/lib/angular/docs/partials/api/ngTouch.$swipe.html new file mode 100755 index 000000000..f297fd443 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngTouch.$swipe.html @@ -0,0 +1,39 @@ + View source Improve this doc

    $swipe +
    service in module ngTouch + +
    +

    +

    Description

    +

    The $swipe service is a service that abstracts the messier details of hold-and-drag swipe +behavior, to make implementing swipe-related directives more convenient.

    +

    Requires the ngTouch module to be installed.

    +

    $swipe is used by the ngSwipeLeft and ngSwipeRight directives in ngTouch, and by +ngCarousel in a separate component.

    +

    Usage

    +

    The $swipe service is an object with a single method: bind. bind takes an element +which is to be watched for swipes, and an object with four handler functions. See the +documentation for bind below.

    +
    +

    Methods

    +
    • bind()

      +

      The main method of $swipe. It takes an element to be watched for swipe motions, and an +object containing event handlers.

      +

      The four events are start, move, end, and cancel. start, move, and end +receive as a parameter a coordinates object of the form { x: 150, y: 310 }.

      +

      start is called on either mousedown or touchstart. After this event, $swipe is +watching for touchmove or mousemove events. These events are ignored until the total +distance moved in either dimension exceeds a small threshold.

      +

      Once this threshold is exceeded, either the horizontal or vertical delta is greater. +- If the horizontal distance is greater, this is a swipe and move and end events follow. +- If the vertical distance is greater, this is a scroll, and we let the browser take over. + A cancel event is sent.

      +

      move is called on mousemove and touchmove after the above logic has determined that +a swipe is in progress.

      +

      end is called when a swipe is successfully completed with a touchend or mouseup.

      +

      cancel is called either on a touchcancel from the browser, or when we begin scrolling +as described above.

      +
      +
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngTouch.directive:ngClick.html b/app/lib/angular/docs/partials/api/ngTouch.directive:ngClick.html new file mode 100755 index 000000000..dc5e9915f --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngTouch.directive:ngClick.html @@ -0,0 +1,42 @@ + View source Improve this doc

    ngClick +
    directive in module ngTouch + +
    +

    +

    Description

    +

    A more powerful replacement for the default ngClick designed to be used on touchscreen +devices. Most mobile browsers wait about 300ms after a tap-and-release before sending +the click event. This version handles them immediately, and then prevents the +following click event from propagating.

    +

    Requires the ngTouch module to be installed.

    +

    This directive can fall back to using an ordinary click event, and so works on desktop +browsers as well as mobile.

    +

    This directive also sets the CSS class ng-click-active while the element is being held +down (by a mouse click or touch) so you can restyle the depressed element if you wish.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-click="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-click: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngClickexpression

    Expression to evaluate +upon tap. (Event object is available as $event)

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngTouch.directive:ngSwipeLeft.html b/app/lib/angular/docs/partials/api/ngTouch.directive:ngSwipeLeft.html new file mode 100755 index 000000000..e0beff8c0 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngTouch.directive:ngSwipeLeft.html @@ -0,0 +1,40 @@ + View source Improve this doc

    ngSwipeLeft +
    directive in module ngTouch + +
    +

    +

    Description

    +

    Specify custom behavior when an element is swiped to the left on a touchscreen device. +A leftward swipe is a quick, right-to-left slide of the finger. +Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag too.

    +

    Requires the ngTouch module to be installed.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-swipe-left="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-swipe-left: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngSwipeLeftexpression

    Expression to evaluate +upon left swipe. (Event object is available as $event)

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngTouch.directive:ngSwipeRight.html b/app/lib/angular/docs/partials/api/ngTouch.directive:ngSwipeRight.html new file mode 100755 index 000000000..9a22d10fc --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngTouch.directive:ngSwipeRight.html @@ -0,0 +1,40 @@ + View source Improve this doc

    ngSwipeRight +
    directive in module ngTouch + +
    +

    +

    Description

    +

    Specify custom behavior when an element is swiped to the right on a touchscreen device. +A rightward swipe is a quick, left-to-right slide of the finger. +Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag too.

    +

    Requires the ngTouch module to be installed.

    +
    +

    Usage

    +
    as attribute
    <ANY ng-swipe-right="{expression}">
    +   ...
    +</ANY>
    +as class
    <ANY class="ng-swipe-right: {expression};">
    +   ...
    +</ANY>
    +

    Parameters

    ParamTypeDetails
    ngSwipeRightexpression

    Expression to evaluate +upon right swipe. (Event object is available as $event)

    +
    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    +
    diff --git a/app/lib/angular/docs/partials/api/ngTouch.html b/app/lib/angular/docs/partials/api/ngTouch.html new file mode 100755 index 000000000..6ae217b52 --- /dev/null +++ b/app/lib/angular/docs/partials/api/ngTouch.html @@ -0,0 +1,13 @@ + View source Improve this doc

    +
    +
    +

    +

    ngTouch

    +

    ngTouch is the name of the optional Angular module that provides touch events and other +helpers for touch-enabled devices. +The implementation is based on jQuery Mobile touch event handling +(jquerymobile.com)

    +

    Installation

    First include angular-touch.js in your HTML:

        <script src="angular.js">
    +    <script src="angular-touch.js">

    You can also find this file on the Google CDN, Bower (as angular-touch), and on code.angularjs.org.

    Then load the module in your application by adding it as a dependant module:

        angular.module('app', ['ngTouch']);

    With that you're ready to get started!

    +

    See $swipe for usage.

    +
    diff --git a/app/lib/angular/docs/partials/cookbook/advancedform.html b/app/lib/angular/docs/partials/cookbook/advancedform.html new file mode 100755 index 000000000..0b303c19f --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/advancedform.html @@ -0,0 +1,138 @@ + Improve this doc

    +
    +
    +

    +

    Here we extend the basic form example to include common features such as reverting, dirty state +detection, and preventing invalid form submission.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Things to notice

    +
      +
    • Cancel & save buttons are only enabled if the form is dirty — there is something to cancel or +save.
    • +
    • Save button is only enabled if there are no validation errors on the form.
    • +
    • Cancel reverts the form changes back to original state.
    • +
    • Save updates the internal model of the form.
    • +
    • Debug view shows the two models. One presented to the user form and the other being the pristine +copy master.
    • +
    +
    diff --git a/app/lib/angular/docs/partials/cookbook/buzz.html b/app/lib/angular/docs/partials/cookbook/buzz.html new file mode 100755 index 000000000..253edc460 --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/buzz.html @@ -0,0 +1,74 @@ + Improve this doc

    +
    +
    +

    +

    External resources are URLs that provide JSON data, which are then rendered with the help of +templates. Angular has a resource factory that can be used to give names to the URLs and then +attach behavior to them. For example you can use the +Google Buzz API +to retrieve Buzz activity and comments.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    diff --git a/app/lib/angular/docs/partials/cookbook/deeplinking.html b/app/lib/angular/docs/partials/cookbook/deeplinking.html new file mode 100755 index 000000000..670cd8edf --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/deeplinking.html @@ -0,0 +1,164 @@ + Improve this doc

    +
    +
    +

    +

    Deep linking allows you to encode the state of the application in the URL so that it can be +bookmarked and the application can be restored from the URL to the same state.

    +

    While Angular does not force you to deal with bookmarks in any particular way, it has services +which make the common case described here very easy to implement.

    +

    Assumptions

    +

    Your application consists of a single HTML page which bootstraps the application. We will refer +to this page as the chrome. +Your application is divided into several screens (or views) which the user can visit. For example, +the home screen, settings screen, details screen, etc. For each of these screens, we would like to +assign a URL so that it can be bookmarked and later restored. Each of these screens will be +associated with a controller which define the screen's behavior. The most common case is that the +screen will be constructed from an HTML snippet, which we will refer to as the partial. Screens can +have multiple partials, but a single partial is the most common construct. This example makes the +partial boundary visible using a blue line.

    +

    You can make a routing table which shows which URL maps to which partial view template and which +controller.

    +

    Example

    +

    In this example we have a simple app which consist of two screens:

    +
      +
    • Welcome: url welcome Show the user contact information.
    • +
    • Settings: url settings Show an edit screen for user contact information.
    • +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Things to notice

    +
      +
    • Routes are defined in the AppCntl class. The initialization of the controller causes the +initialization of the $route service with the proper URL +routes.
    • +
    • The $route service then watches the URL and instantiates the +appropriate controller when the URL changes.
    • +
    • The ngView widget loads the +view when the URL changes. It also sets the view scope to the newly instantiated controller.
    • +
    • Changing the URL is sufficient to change the controller and view. It makes no difference whether +the URL is changed programatically or by the user.
    • +
    +
    diff --git a/app/lib/angular/docs/partials/cookbook/form.html b/app/lib/angular/docs/partials/cookbook/form.html new file mode 100755 index 000000000..22a96cec9 --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/form.html @@ -0,0 +1,124 @@ + Improve this doc

    +
    +
    +

    +

    A web application's main purpose is to present and gather data. For this reason Angular strives +to make both of these operations trivial. This example shows off how you can build a simple form to +allow a user to enter data.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Things to notice

    +
      +
    • The user data model is initialized controller and is +available in the scope with the initial data.
    • +
    • For debugging purposes we have included a debug view of the model to better understand what +is going on.
    • +
    • The input directives simply refer +to the model and are data-bound.
    • +
    • The inputs validate. (Try leaving them blank or entering non digits in the zip field)
    • +
    • In your application you can simply read from or write to the model and the form will be updated.
    • +
    • By clicking the 'add' link you are adding new items into the user.contacts array which are then +reflected in the view.
    • +
    +
    diff --git a/app/lib/angular/docs/partials/cookbook/helloworld.html b/app/lib/angular/docs/partials/cookbook/helloworld.html new file mode 100755 index 000000000..3fd72bf94 --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/helloworld.html @@ -0,0 +1,51 @@ + Improve this doc

    +
    +
    +

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Things to notice

    +

    Take a look through the source and note:

    +
      +
    • The script tag that bootstraps the Angular environment.
    • +
    • The text input form control which is +bound to the greeting name text.
    • +
    • There is no need for listener registration and event firing on change events.
    • +
    • The implicit presence of the name variable which is in the root scope.
    • +
    • The double curly brace {{markup}}, which binds the name variable to the greeting text.
    • +
    • The concept of data binding, which reflects any +changes to the +input field in the greeting text.
    • +
    +
    diff --git a/app/lib/angular/docs/partials/cookbook/index.html b/app/lib/angular/docs/partials/cookbook/index.html new file mode 100755 index 000000000..f1d140e86 --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/index.html @@ -0,0 +1,37 @@ + Improve this doc

    +
    +
    +

    +

    Welcome to the Angular cookbook. Here we will show you typical uses of Angular by example.

    +

    Hello World

    +

    Hello World: The simplest possible application that demonstrates the +classic Hello World!

    +

    Basic Form

    +

    Basic Form: Displaying forms to the user for editing is the bread and butter +of web applications. Angular makes forms easy through bidirectional data binding.

    +

    Advanced Form

    +

    Advanced Form: Taking the form example to the next level and +providing advanced features such as dirty detection, form reverting and submit disabling if +validation errors exist.

    +

    Model View Controller

    +

    MVC: Tic-Tac-Toe: Model View Controller (MVC) is a time-tested design pattern +to separate the behavior (JavaScript controller) from the presentation (HTML view). This +separation aids in maintainability and testability of your project.

    +

    Multi-page App and Deep Linking

    +

    Deep Linking: An AJAX application never navigates away from the +first page it loads. Instead, it changes the DOM of its single page. Eliminating full-page reloads +is what makes AJAX apps responsive, but it creates a problem in that apps with a single URL +prevent you from emailing links to a particular screen within your application.

    +

    Deep linking tries to solve this by changing the URL anchor without reloading a page, thus +allowing you to send links to specific screens in your app.

    +

    Services

    +

    Services: Services are long lived objects in your applications that are +available across controllers. A collection of useful services are pre-bundled with Angular but you +will likely add your own. Services are initialized using dependency injection, which resolves the +order of initialization. This safeguards you from the perils of global state (a common way to +implement long lived objects).

    +

    External Resources

    +

    Resources: Web applications must be able to communicate with the external +services to get and update data. Resources are the abstractions of external URLs which are +specially tailored to Angular data binding.

    +
    diff --git a/app/lib/angular/docs/partials/cookbook/mvc.html b/app/lib/angular/docs/partials/cookbook/mvc.html new file mode 100755 index 000000000..a5cc1df83 --- /dev/null +++ b/app/lib/angular/docs/partials/cookbook/mvc.html @@ -0,0 +1,136 @@ + Improve this doc

    +
    +
    +

    +

    MVC allows for a clean and testable separation between the behavior (controller) and the view +(HTML template). A Controller is just a JavaScript class which is grafted onto the scope of the +view. This makes it very easy for the controller and the view to share the model.

    +

    The model is a set of objects and primitives that are referenced from the Scope ($scope) object. +This makes it very easy to test the controller in isolation since one can simply instantiate the +controller and test without a view, because there is no connection between the controller and the +view.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Things to notice

    +
      +
    • The controller is defined in JavaScript and has no reference to the rendering logic.
    • +
    • The controller is instantiated by Angular and injected into the view.
    • +
    • The controller can be instantiated in isolation (without a view) and the code will still execute. +This makes it very testable.
    • +
    • The HTML view is a projection of the model. In the above example, the model is stored in the +board variable.
    • +
    • All of the controller's properties (such as board and nextMove) are available to the view.
    • +
    • Changing the model changes the view.
    • +
    • The view can call any controller function.
    • +
    • In this example, the setUrl() and readUrl() functions copy the game state to/from the URL's +hash so the browser's back button will undo game steps. See deep-linking. This example calls $watch() to set up a listener that invokes readUrl() when needed.
    • +
    +
    diff --git a/app/lib/angular/docs/partials/error/$animate:notcsel.html b/app/lib/angular/docs/partials/error/$animate:notcsel.html new file mode 100755 index 000000000..3eb9692a8 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$animate:notcsel.html @@ -0,0 +1,10 @@ + Improve this doc

    Not class CSS selector +
    error in component $animate + +
    +

    +
    Expecting class selector starting with '.' got '{0}'.
    +

    Description

    +

    Expecting a CSS selector for class. Class selectors must start with ., for example: .my-class-name.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$cacheFactory:iid.html b/app/lib/angular/docs/partials/error/$cacheFactory:iid.html new file mode 100755 index 000000000..5a49302e2 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$cacheFactory:iid.html @@ -0,0 +1,11 @@ + Improve this doc

    Invalid ID +
    error in component $cacheFactory + +
    +

    +
    CacheId '{0}' is already taken!
    +

    Description

    +

    This error occurs when trying to create a new cache object via api/ng.$cacheFactory with an ID that was already used to create another cache object.

    +

    To resolve the error please use a different cache ID when calling $cacheFactory.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:ctreq.html b/app/lib/angular/docs/partials/error/$compile:ctreq.html new file mode 100755 index 000000000..4538cc0bf --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:ctreq.html @@ -0,0 +1,36 @@ + Improve this doc

    Missing Required Controller +
    error in component $compile + +
    +

    +
    Controller '{0}', required by directive '{1}', can't be found!
    +

    Description

    +

    This error occurs when template compiler tries process the directive that specifies the require option in a directive definition, +but the required directive controller is not present on the current DOM element (or its ancestor element, if ^ was specified).

    +

    To resolve this error ensure that there is no typo in the required controller name and that the required directive controller is present on the current element.

    +

    If the required controller is expected to be on a ancestor element, make ensure that you prefix the controller name in the require definition with ^.

    +

    If the required controller is optionally requested, use ? or ^? to specify that.

    +

    Example of a directive that requires ngModel controller:

    +
    myApp.directive('myDirective', function() {
    +  return {
    +    require: 'ngModel',
    +    ...
    +  }
    +}
    +

    This directive can then be used as:

    +
    <input ng-model="some.path" my-directive>
    +

    Example of a directive that optionally requires a form controller from an ancestor:

    +
    myApp.directive('myDirective', function() {
    +  return {
    +    require: '^?form',
    +    ...
    +  }
    +}
    +

    This directive can then be used as:

    +
    <form name="myForm">
    +  <div>
    +    <span my-directive></span>
    +  </div>
    +</form>
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:iscp.html b/app/lib/angular/docs/partials/error/$compile:iscp.html new file mode 100755 index 000000000..dc54e8e50 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:iscp.html @@ -0,0 +1,24 @@ + Improve this doc

    Invalid Isolate Scope Definition +
    error in component $compile + +
    +

    +
    Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}
    +

    Description

    +

    When declaring isolate scope the scope definition object must be in specific format which starts with mode character (@&=) with an optional local name.

    +
    myModule.directive('directiveName', function factory() {
    +  return {
    +    ...
    +    scope: {
    +      'attrName': '@', // OK
    +      'attrName2': '=localName', // OK
    +      'attrName3': 'name',    // ERROR: missing mode @&=
    +      'attrName4': ' = name', // ERROR: extra spaces
    +      'attrName5': 'name=',   // ERROR: must be prefixed with @&=
    +    }
    +    ...
    +  }
    +});
    +

    Please refer to the directive definition docs to learn more about the api.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:multidir.html b/app/lib/angular/docs/partials/error/$compile:multidir.html new file mode 100755 index 000000000..e21375f2d --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:multidir.html @@ -0,0 +1,18 @@ + Improve this doc

    Multiple Directive Resource Contention +
    error in component $compile + +
    +

    +
    Multiple directives [{0}, {1}] asking for {2} on: {3}
    +

    Description

    +

    This error occurs when multiple directives are applied to the same DOM element, and processing them would result in an collisions or unsupported configuration.

    +

    To resolve this issue remove one of the directives which is causing the collision.

    +

    Example scenarios of multiple incompatible directives applied to the same element include:

    +
      +
    • Multiple directives requesting isolated scope.
    • +
    • Multiple directives publishing a controller under the same name.
    • +
    • Multiple directives declared with the transclusion option.
    • +
    • Multiple directives attempting to define a template or templateURL.
    • +
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:nodomevents.html b/app/lib/angular/docs/partials/error/$compile:nodomevents.html new file mode 100755 index 000000000..3bedb2164 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:nodomevents.html @@ -0,0 +1,16 @@ + Improve this doc

    Interpolated Event Attributes +
    error in component $compile + +
    +

    +
    Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.
    +

    Description

    +

    This error occurs when one tries to create a binding for event handler attributes like onclick, onload, onsubmit, etc.

    +

    There is no practical value in binding to these attributes and doing so only exposes your application to security vulnerabilities like XSS. +For these reasons binding to event handler attributes (all attributes that start with on and formaction attribute) is not supported.

    +

    An example code that would allow XSS vulnerability by evaluating user input in the window context could look like this:

    +
    <input ng-mode="username">
    +<div onclick="{{username}}">click me</div>
    +

    Since the onclick evaluates the value as JavaScript code in the window context, setting the username model to a value like javascript:alert('PWND') would result in script injection when the div is clicked.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:nonassign.html b/app/lib/angular/docs/partials/error/$compile:nonassign.html new file mode 100755 index 000000000..41b15a377 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:nonassign.html @@ -0,0 +1,27 @@ + Improve this doc

    Non-Assignable Expression +
    error in component $compile + +
    +

    +
    Expression '{0}' used with directive '{1}' is non-assignable!
    +

    Description

    +

    This error occurs when a directive defines an isolate scope property that support two-way data-binding (using the = mode in the directive definition) but the directive is used with an expression that is not-assignable.

    +

    In order for the two-way data-binding to work, it must be possible to write new values back into the path defined with the expression.

    +

    For example, given a directive:

    +
    myModule.directive('myDirective', function factory() {
    +  return {
    +    ...
    +    scope: {
    +      'bind': '=localValue'
    +    }
    +    ...
    +  }
    +});
    +

    Following are invalid uses of this directive:

    +
    <my-directive bind="1+2">    <!-- ERROR because `1+2=localValue` is an invalid statement -->
    +<my-directive bind="myFn()"> <!-- ERROR because `myFn()=localValue` is an invalid statement -->
    +

    To resolve this error, always use path expressions with scope properties that are two-way data-bound:

    +
    <my-directive bind="some.property">
    +<my-directive bind="some[3]['property']">
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:selmulti.html b/app/lib/angular/docs/partials/error/$compile:selmulti.html new file mode 100755 index 000000000..6002b3d10 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:selmulti.html @@ -0,0 +1,16 @@ + Improve this doc

    Binding to Multiple Attribute +
    error in component $compile + +
    +

    +
    Binding to the 'multiple' attribute is not supported. Element: {0}
    +

    Description

    +

    Binding to the multiple attribute of select element is not supported since switching between multiple and single mode changes the ngModel object type from instance to array of instances which breaks the model semantics.

    +

    If you need to use different types of select elements in your template based on some variable, please use ngIf or ngSwitch directives to select one of them to be used at runtime.

    +

    Example with invalid usage:

    +
    <select ng-model="some.model" multiple="{{mode}}"></select>
    +

    Example that uses ngIf to pick one of the select elements based on a variable:

    +
    <select ng-if="mode == 'multiple'" ng-model="some.model" multiple></select>
    +<select ng-if="mode != 'multiple'" ng-model="some.model"></select>
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:tpload.html b/app/lib/angular/docs/partials/error/$compile:tpload.html new file mode 100755 index 000000000..4bc0f4561 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:tpload.html @@ -0,0 +1,13 @@ + Improve this doc

    Error Loading Template +
    error in component $compile + +
    +

    +
    Failed to load template: {0}
    +

    Description

    +

    This error occurs when $compile attempts to fetch a template from some URL, and the request fails.

    +

    To resolve this error, ensure that the URL of the template is spelled correctly and resolves to correct absolute URL. +The Chrome Developer Tools might also be helpful in determining why the request failed.

    +

    If you are using api/ng.$templateCache to pre-load templates, ensure that the cache was populated with the template.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:tplrt.html b/app/lib/angular/docs/partials/error/$compile:tplrt.html new file mode 100755 index 000000000..572b17492 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:tplrt.html @@ -0,0 +1,24 @@ + Improve this doc

    Invalid Template Root +
    error in component $compile + +
    +

    +
    Template for directive '{0}' must have exactly one root element. {1}
    +

    Description

    +

    When a directive is declared with template (or templateUrl) and replace mode on, the template must have exactly one root element. +Otherwise the replacement operation would result in a single element being replaced with multiple elements or nodes, which is unsupported and not commonly needed in practice.

    +

    For example a directive with definition:

    +
    myModule.directive('myDirective', function factory() {
    +  return {
    +    ...
    +    replace: true,
    +    templateUrl: 'someUrl'
    +    ...
    +  }
    +});
    +

    And a template provided at URL someUrl. The template must be an html fragment that has only a single root element, like the div element in this template:

    +
    <div><b>Hello</b> World!</div>
    +

    An an invalid template to be used with this directive is one that defines multiple root nodes or elements. For example:

    +
    <b>Hello</b> World!
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$compile:uterdir.html b/app/lib/angular/docs/partials/error/$compile:uterdir.html new file mode 100755 index 000000000..aad56bca4 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$compile:uterdir.html @@ -0,0 +1,25 @@ + Improve this doc

    Unterminated Directive +
    error in component $compile + +
    +

    +
    Unterminated attribute, found '{0}' but no matching '{1}' found.
    +

    Description

    +

    This error occurs when using multi-element directives and a directive-start attribute fails to form a matching pair with a corresponding directive-end attribute. +A directive-start should have a matching directive-end on a sibling node in the DOM. For instance,

    +
    <table>
    +  <tr ng-repeat-start="item in list">I get repeated</tr>
    +  <tr ng-repeat-end>I also get repeated</tr>
    +</table>
    +

    is a valid example.

    +

    This error can occur in several different ways. One is by leaving out the directive-end attribute, like so:

    +
    <div>
    +  <span foo-start></span>
    +</div>
    +

    Another is by nesting a directive-end inside of directive-start, or vice versa:

    +
    <div>
    +  <span foo-start><span foo-end></span></span>
    +</div>
    +

    To avoid this error, make sure each directive-start you use has a matching directive-end on a sibling node in the DOM.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$controller:noscp.html b/app/lib/angular/docs/partials/error/$controller:noscp.html new file mode 100755 index 000000000..b01f2a1cd --- /dev/null +++ b/app/lib/angular/docs/partials/error/$controller:noscp.html @@ -0,0 +1,17 @@ + Improve this doc

    Missing $scope object +
    error in component $controller + +
    +

    +
    Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.
    +

    Description

    +

    This error occurs when $controller service is called in order to instantiate a new controller but no scope is provided via $scope property of the locals map.

    +

    Example of incorrect usage that leads to this error:

    +
    $controller(MyController);
    +//or
    +$controller(MyController, {scope: newScope});
    +

    To fix the example above please provide a scope to the $controller call:

    +
    $controller(MyController, {$scope, newScope});
    +

    Please consult the $controller service api docs to learn more.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$httpBackend:noxhr.html b/app/lib/angular/docs/partials/error/$httpBackend:noxhr.html new file mode 100755 index 000000000..24199995c --- /dev/null +++ b/app/lib/angular/docs/partials/error/$httpBackend:noxhr.html @@ -0,0 +1,13 @@ + Improve this doc

    Unsupported XHR +
    error in component $httpBackend + +
    +

    +
    This browser does not support XMLHttpRequest.
    +

    Description

    +

    This error occurs in browsers that do not support XmlHttpRequest. AngularJS +supports Safari, Chrome, Firefox, Opera, IE8 and higher, and mobile browsers +(Android, Chrome Mobile, iOS Safari). To avoid this error, use an officially +supported browser.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$injector:cdep.html b/app/lib/angular/docs/partials/error/$injector:cdep.html new file mode 100755 index 000000000..a1279d8e5 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$injector:cdep.html @@ -0,0 +1,24 @@ + Improve this doc

    Circular Dependency +
    error in component $injector + +
    +

    +
    Circular dependency found: {0}
    +

    Description

    +

    This error occurs when the $injector tries to get +a service that depends on itself, either directly or indirectly. To fix this, +construct your dependency chain such that there are no circular dependencies.

    +

    For example:

    +
    angular.module('myApp', [])
    +  .factory('myService', function (myService) {
    +    // ...
    +  })
    +  .controller('MyCtrl', function ($scope, myService) {
    +    // ...
    +  });
    +

    When an instance of MyCtrl is created, the service myService will be created +by the $injector. myService depends on itself, which causes the $injector +to detect a circular dependency and throw the error.

    +

    For more information, see the Dependency Injection Guide.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$injector:itkn.html b/app/lib/angular/docs/partials/error/$injector:itkn.html new file mode 100755 index 000000000..f715fd098 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$injector:itkn.html @@ -0,0 +1,24 @@ + Improve this doc

    Bad Injection Token +
    error in component $injector + +
    +

    +
    Incorrect injection token! Expected service name as string, got {0}
    +

    Description

    +

    This error occurs when using a bad token as a dependency injection annotation. +Dependency injection annotation tokens should always be strings. Using any other +type will cause this error to be thrown.

    +

    Examples of code with bad injection tokens include:

    +
    var myCtrl = function ($scope, $http) { /* ... */ };
    +myCtrl.$inject = ['$scope', 42];
    +
    +myAppModule.controller('MyCtrl', ['$scope', {}, function ($scope, $timeout) {
    +  // ...
    +}]);
    +

    The bad injection tokens are 42 in the first example and {} in the second. +To avoid the error, always use string literals for dependency injection annotation +tokens.

    +

    For an explanation of what injection annotations are and how to use them, refer +to the Dependency Injection Guide.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$injector:modulerr.html b/app/lib/angular/docs/partials/error/$injector:modulerr.html new file mode 100755 index 000000000..ccd934deb --- /dev/null +++ b/app/lib/angular/docs/partials/error/$injector:modulerr.html @@ -0,0 +1,13 @@ + Improve this doc

    Module Error +
    error in component $injector + +
    +

    +
    Failed to instantiate module {0} due to:
    +{1}
    +

    Description

    +

    This error occurs when a module fails to load due to some exception. The error +message above should provide additional context.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$injector:nomod.html b/app/lib/angular/docs/partials/error/$injector:nomod.html new file mode 100755 index 000000000..6076f56ae --- /dev/null +++ b/app/lib/angular/docs/partials/error/$injector:nomod.html @@ -0,0 +1,21 @@ + Improve this doc

    Module Unavailable +
    error in component $injector + +
    +

    +
    Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
    +

    Description

    +

    This error occurs when trying to "re-open" a module that has not yet been defined.

    +

    To define a new module, call angular.module with a name +and an array of dependent modules, like so:

    +
    // When defining a module with no module dependencies,
    +// the requires array should be defined and empty.
    +var myApp = angular.module('myApp', []);
    +

    To retrieve a reference to the same module for further configuration, call +angular.module without the requires array.

    +
    var myApp = angular.module('myApp');
    +

    Calling angular.module without the requires array when the module has not yet +been defined causes this error to be thrown. To fix it, define your module with +a name and an empty array, as in the first example above.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$injector:pget.html b/app/lib/angular/docs/partials/error/$injector:pget.html new file mode 100755 index 000000000..57af7155f --- /dev/null +++ b/app/lib/angular/docs/partials/error/$injector:pget.html @@ -0,0 +1,21 @@ + Improve this doc

    Provider Missing $get +
    error in component $injector + +
    +

    +
    Provider '{0}' must define $get factory method.
    +

    Description

    +

    This error occurs when attempting to register a provider that does not have a +$get method. For example:

    +
    function BadProvider() {} // No $get method!
    +angular.module("myApp", [])
    +  .provider('bad', BadProvider);  // this throws the error
    +

    To fix the error, fill in the $get method on the provider like so:

    +
    function GoodProvider() {
    +  this.$get = angular.noop;
    +}
    +angular.module("myApp", [])
    +  .provider('good', GoodProvider);
    +

    For more information, refer to the $provide.provider api doc.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$injector:unpr.html b/app/lib/angular/docs/partials/error/$injector:unpr.html new file mode 100755 index 000000000..8a948263e --- /dev/null +++ b/app/lib/angular/docs/partials/error/$injector:unpr.html @@ -0,0 +1,23 @@ + Improve this doc

    Unknown Provider +
    error in component $injector + +
    +

    +
    Unknown provider: {0}
    +

    Description

    +

    This error results from the $injector being unable to resolve a required +dependency. To fix this, make sure the dependency is defined and spelled +correctly. For example:

    +
    angular.module('myApp', [])
    +  .controller('myCtrl', ['myService', function (myService) {
    +    // Do something with myService
    +  }]);
    +

    This code will fail with $injector:unpr if myService is not defined. Making +sure each dependency is defined will fix the problem.

    +
    angular.module('myApp', [])
    +  .service('myService', function () { /* ... */ })
    +  .controller('myCtrl', ['myService', function (myService) {
    +    // Do something with myService
    +  }]);
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$interpolate:interr.html b/app/lib/angular/docs/partials/error/$interpolate:interr.html new file mode 100755 index 000000000..4c1afdf62 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$interpolate:interr.html @@ -0,0 +1,13 @@ + Improve this doc

    Interpolation Error +
    error in component $interpolate + +
    +

    +
    Can't interpolate: {0}
    +{1}
    +

    Description

    +

    This error occurs when interpolation fails due to some exception. The error +message above should provide additional context.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$interpolate:noconcat.html b/app/lib/angular/docs/partials/error/$interpolate:noconcat.html new file mode 100755 index 000000000..c869e46b3 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$interpolate:noconcat.html @@ -0,0 +1,17 @@ + Improve this doc

    Multiple Expressions +
    error in component $interpolate + +
    +

    +
    Error while interpolating: {0}
    +Strict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce
    +

    Description

    +

    This error occurs when performing an interpolation that concatenates multiple +expressions when a trusted value is required. Concatenating expressions makes +it hard to reason about whether some combination of concatenated values are +unsafe to use and could easily lead to XSS.

    +

    For more information about how AngularJS helps keep your app secure, refer to +the $sce API doc.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$location:ihshprfx.html b/app/lib/angular/docs/partials/error/$location:ihshprfx.html new file mode 100755 index 000000000..b90fa4ec7 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$location:ihshprfx.html @@ -0,0 +1,16 @@ + Improve this doc

    Missing Hash Prefix +
    error in component $location + +
    +

    +
    Invalid url "{0}", missing hash prefix "{1}".
    +

    Description

    +

    This error occurs when $location service is configured to use a hash prefix but this prefix was not present in a url that the $location service was asked to parse.

    +

    For example if you configure $location service with prefix '!':

    +
    myApp.config(function($locationProvider) {
    +  $locationProvider.prefix('!');
    +});
    +

    If you enter the app at url http:/myapp.com/#/myView this error will be throw.

    +

    The correct url for this configuration is http:/myapp.com/#!/myView (note the '!' after '#' symbol).

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$location:ipthprfx.html b/app/lib/angular/docs/partials/error/$location:ipthprfx.html new file mode 100755 index 000000000..93cd8ba11 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$location:ipthprfx.html @@ -0,0 +1,11 @@ + Improve this doc

    Invalid or Missing Path Prefix +
    error in component $location + +
    +

    +
    Invalid url "{0}", missing path prefix "{1}".
    +

    Description

    +

    This error occurs when you configure the $location service in the html5 mode, specify a base url for your application via <base> element and try to update the location with a path that doesn't match the base prefix.

    +

    To resolve this issue, please check the base url specified via the <base> tag in the head of your main html document, as well as the url that you tried to set the location to.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$location:isrcharg.html b/app/lib/angular/docs/partials/error/$location:isrcharg.html new file mode 100755 index 000000000..86e08d0f9 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$location:isrcharg.html @@ -0,0 +1,12 @@ + Improve this doc

    Wrong $location.search() argument type +
    error in component $location + +
    +

    +
    The first argument of the `$location#search()` call must be a string or an object.
    +

    Description

    +

    To resolve this error, ensure that the first argument for the $location.search call is a string or an object. +You can use the stack trace associated with this error to identify the call site that caused this issue.

    +

    To learn more, please consult the $location api docs.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$parse:isecfld.html b/app/lib/angular/docs/partials/error/$parse:isecfld.html new file mode 100755 index 000000000..d591361f0 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$parse:isecfld.html @@ -0,0 +1,16 @@ + Improve this doc

    Referencing 'constructor' Field in Expression +
    error in component $parse + +
    +

    +
    Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}
    +

    Description

    +

    Occurs when an expression attempts to access an objects constructor field.

    +

    AngularJS bans constructor access from within expressions since constructor +access is a known way to execute arbitrary Javascript code.

    +

    To resolve this error, avoid constructor access. As a last resort, alias +the constructor and access it through the alias instead.

    +

    Example expression that would result in this error:

    +
    <div>{{user.constructor.name}}</div>
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$parse:isecfn.html b/app/lib/angular/docs/partials/error/$parse:isecfn.html new file mode 100755 index 000000000..b49f61fb9 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$parse:isecfn.html @@ -0,0 +1,12 @@ + Improve this doc

    Referencing Function Disallowed +
    error in component $parse + +
    +

    +
    Referencing Function in Angular expressions is disallowed! Expression: {0}
    +

    Description

    +

    Occurs when an expression attempts to access the 'Function' object (constructor for all functions in JavaScript).

    +

    Angular bans access to Function from within expressions since constructor access is a known way to execute arbitrary Javascript code.

    +

    To resolve this error, avoid Function access.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$parse:lexerr.html b/app/lib/angular/docs/partials/error/$parse:lexerr.html new file mode 100755 index 000000000..d5be5becd --- /dev/null +++ b/app/lib/angular/docs/partials/error/$parse:lexerr.html @@ -0,0 +1,12 @@ + Improve this doc

    Lexer Error +
    error in component $parse + +
    +

    +
    Lexer Error: {0} at column{1} in expression [{2}].
    +

    Description

    +

    Occurs when an expression has a lexical error, for example a malformed number (0.5e-) or an invalid unicode escape.

    +

    The error message contains a more precise error.

    +

    To resolve, learn more about Angular expressions, identify the error and fix the expression's syntax.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$parse:syntax.html b/app/lib/angular/docs/partials/error/$parse:syntax.html new file mode 100755 index 000000000..4360e6c1a --- /dev/null +++ b/app/lib/angular/docs/partials/error/$parse:syntax.html @@ -0,0 +1,12 @@ + Improve this doc

    Syntax Error +
    error in component $parse + +
    +

    +
    Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].
    +

    Description

    +

    Occurs when there is a syntax error in an expression. These errors are thrown while compiling the expression. +The error message contains a more precise description of the error, including the location (column) in the expression where the error occurred.

    +

    To resolve, learn more about Angular expressions, identify the error and fix the expression's syntax.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$parse:ueoe.html b/app/lib/angular/docs/partials/error/$parse:ueoe.html new file mode 100755 index 000000000..90e3f1c51 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$parse:ueoe.html @@ -0,0 +1,12 @@ + Improve this doc

    Unexpected End of Expression +
    error in component $parse + +
    +

    +
    Unexpected end of expression: {0}
    +

    Description

    +

    Occurs when an expression is missing tokens at the end of the expression. +For example, forgetting a closing bracket in an expression will trigger this error.

    +

    To resolve, learn more about Angular expressions, identify the error and fix the expression's syntax.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$resource:badargs.html b/app/lib/angular/docs/partials/error/$resource:badargs.html new file mode 100755 index 000000000..00ffede64 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$resource:badargs.html @@ -0,0 +1,12 @@ + Improve this doc

    Too Many Arguments +
    error in component $resource + +
    +

    +
    Expected up to 4 arguments [params, data, success, error], got {0} arguments
    +

    Description

    +

    This error occurs when specifying too many arguments to a $resource action, such as get, query or any user-defined custom action. +These actions may take up to 4 arguments.

    +

    For more information, refer to the $resource API reference documentation.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$resource:badcfg.html b/app/lib/angular/docs/partials/error/$resource:badcfg.html new file mode 100755 index 000000000..5135816ce --- /dev/null +++ b/app/lib/angular/docs/partials/error/$resource:badcfg.html @@ -0,0 +1,13 @@ + Improve this doc

    Response does not match configured parameter +
    error in component $resource + +
    +

    +
    Error in resource configuration. Expected response to contain an {0} but got an {1}
    +

    Description

    +

    This error occurs when the $resource service expects a response that can be deserialized as an array, receives an object, or vice versa. +By default, all resource actions expect objects, except query which expects arrays.

    +

    To resolve this error, make sure your $resource configuration matches the actual format of the data returned from the server.

    +

    For more information, see the $resource API reference documentation.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$rootScope:infdig.html b/app/lib/angular/docs/partials/error/$rootScope:infdig.html new file mode 100755 index 000000000..4df6304cf --- /dev/null +++ b/app/lib/angular/docs/partials/error/$rootScope:infdig.html @@ -0,0 +1,16 @@ + Improve this doc

    Infinite $digest Loop +
    error in component $rootScope + +
    +

    +
    {0} $digest() iterations reached. Aborting!
    +Watchers fired in the last 5 iterations: {1}
    +

    Description

    +

    This error occurs when the application's model becomes unstable and each $digest cycle triggers a state change and subsequent $digest cycle. Angular detects this situation and prevents an infinite loop from causing the browser to become unresponsive.

    +

    For example, the situation can occur by setting up a watch on a path and subsequently updating the same path when the value changes.

    +
    $scope.$watch('foo', function() {
    +  $scope.foo = $scope.foo + 1;
    +});
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$rootScope:inprog.html b/app/lib/angular/docs/partials/error/$rootScope:inprog.html new file mode 100755 index 000000000..7ce3acafa --- /dev/null +++ b/app/lib/angular/docs/partials/error/$rootScope:inprog.html @@ -0,0 +1,57 @@ + Improve this doc

    Action Already In Progress +
    error in component $rootScope + +
    +

    +
    {0} already in progress
    +

    Description

    +

    At any point in time there can be only one $digest or $apply operation in progress. +The stack trace of this error allows you to trace the origin of the currently executing $apply or $digest call.

    +

    $digest or $apply are processing operational states of the Scope - data-structure in Angular that provides context for models and enables model mutation observation.

    +

    Trying to reenter a $digest or $apply while one of them is already in progress is typically a sign of programming error that needs to be fixed.

    +

    This error is often seen when interacting with an API that is sometimes sync and sometimes async.

    +

    For example:

    +
    function MyController() {
    +  thirdPartyComponent.getData(function(someData) {
    +    scope.$apply(function() {
    +      scope.someData = someData;
    +    });
    +  });
    +}
    +

    The controller constructor is always instantiated from within an $apply cycle, so if the third-party component called our callback synchronously, we'd be trying to enter the $apply again.

    +

    To resolve this type of issue, either fix the api to be always synchronous or asynchronous or wrap the call to the api with setTimeout call to make it always asynchronous.

    +

    Other situation that leads to this error is when you are trying to reuse a function to by using it as a callback for code that is called by various apis inside and outside of $apply.

    +

    For example:

    +
    myApp.directive('myDirective', function() {
    +  return {
    +    link: function($scope, $element) {
    +      function doSomeWork() {
    +        $scope.$apply(function() {
    +           // do work here, and update the model
    +        };
    +      }
    +
    +      $element.on('click', doSomeWork);
    +      doSomeWork(); // << this will throw an exception because templates are compiled within $apply
    +    }
    +  }
    +});
    +

    The fix for the example above looks like this:

    +
    myApp.directive('myDirective', function() {
    +  return {
    +    link: function($scope, $element) {
    +      function doSomeWork() {
    +           // do work here, and update the model
    +      }
    +
    +      $element.on('click', function() {
    +        $scope.$apply(doSomeWork); // <<< the $apply call was moved to the callsite that doesn't execute in $apply call already
    +      });
    +
    +      doSomeWork();
    +    }
    +  }
    +});
    +

    To learn more about Angular processing model please check out the concepts doc as well as the api doc.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$sanitize:badparse.html b/app/lib/angular/docs/partials/error/$sanitize:badparse.html new file mode 100755 index 000000000..8ff554e55 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$sanitize:badparse.html @@ -0,0 +1,13 @@ + Improve this doc

    Parsing Error while Sanitizing +
    error in component $sanitize + +
    +

    +
    The sanitizer was unable to parse the following block of html: {0}
    +

    Description

    +

    This error occurs when the HTML string passed to '$sanitize' can't be parsed by the sanitizer. +The error contains part of the html string that can't be parsed.

    +

    The parser is more strict than a typical browser parser, so it's possible that some obscure input would produce this error despite the string being recognized as valid HTML by a browser.

    +

    If a valid html code results in this error, please file a bug.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$sce:icontext.html b/app/lib/angular/docs/partials/error/$sce:icontext.html new file mode 100755 index 000000000..a5a40353c --- /dev/null +++ b/app/lib/angular/docs/partials/error/$sce:icontext.html @@ -0,0 +1,11 @@ + Improve this doc

    Invalid / Unknown SCE context +
    error in component $sce + +
    +

    +
    Attempted to trust a value in invalid context. Context: {0}; Value: {1}
    +

    Description

    +

    The context enum passed to $sce.trustAs was not recognized.

    +

    Please consult the list of supported Strict Contextual Escaping (SCE) contexts.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$sce:iequirks.html b/app/lib/angular/docs/partials/error/$sce:iequirks.html new file mode 100755 index 000000000..144ade72c --- /dev/null +++ b/app/lib/angular/docs/partials/error/$sce:iequirks.html @@ -0,0 +1,14 @@ + Improve this doc

    IE8 in quirks mode is unsupported +
    error in component $sce + +
    +

    +
    Strict Contextual Escaping does not support Internet Explorer version < 9 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.
    +

    Description

    +

    This error occurs when you are using AngularJS with Strict Contextual Escaping (SCE) mode enabled (the default) on IE8 or lower in quirks mode.

    +

    In this mode, IE8 allows one to execute arbitrary javascript by the use of the expression() syntax and is not supported. +Refer MSDN Blogs > IEBlog > Ending Expressions to learn more about them.

    +

    To resolve this error please specify the proper doctype at the top of your main html document:

    +
    <!doctype html>
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$sce:insecurl.html b/app/lib/angular/docs/partials/error/$sce:insecurl.html new file mode 100755 index 000000000..9a5c50b75 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$sce:insecurl.html @@ -0,0 +1,19 @@ + Improve this doc

    Processing of a Resource from Untrusted Source Blocked +
    error in component $sce + +
    +

    +
    Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}
    +

    Description

    +

    AngularJS' Strict Contextual Escaping (SCE) mode (enabled by default) has blocked loading a resource from an insecure URL.

    +

    Typically, this would occur if you're attempting to load an Angular template from an untrusted source. +It's also possible that a custom directive threw this error for a similar reason.

    +

    Angular only loads templates from trusted URLs (by calling $sce.getTrustedResourceUrl on the template URL).

    +

    By default, only URLs that belong to the same origin are trusted. These are urls with the same domain and protocol as the application document.

    +

    The ngInclude directive and directives that specify a templateUrl require a trusted resource URL.

    +

    To load templates from other domains and/or protocols, either adjust the whitelist/ blacklist or wrap the URL with a call to $sce.trustAsResourceUrl.

    +

    Note: The browser's Same Origin Policy and Cross-Origin Resource Sharing (CORS) policy apply +that may further restrict whether the template is successfully loaded. (e.g. neither cross-domain +requests won't work on all browsers nor file:// requests on some browsers)

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$sce:itype.html b/app/lib/angular/docs/partials/error/$sce:itype.html new file mode 100755 index 000000000..2fce547e1 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$sce:itype.html @@ -0,0 +1,11 @@ + Improve this doc

    String Value is Required for SCE Trust Call +
    error in component $sce + +
    +

    +
    Attempted to trust a non-string value in a content requiring a string: Context: {0}
    +

    Description

    +

    $sce.trustAs requires a string value.

    +

    Read more about Strict Contextual Escaping (SCE) in AngularJS.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/$sce:unsafe.html b/app/lib/angular/docs/partials/error/$sce:unsafe.html new file mode 100755 index 000000000..8a2f80b48 --- /dev/null +++ b/app/lib/angular/docs/partials/error/$sce:unsafe.html @@ -0,0 +1,15 @@ + Improve this doc

    Require a safe/trusted value +
    error in component $sce + +
    +

    +
    Attempting to use an unsafe value in a safe context.
    +

    Description

    +

    The value provided for use in a specific context was not found to be safe/trusted for use.

    +

    Angular's Strict Contextual Escaping (SCE) mode +(enabled by default), requires bindings in certain +contexts to result in a value that is trusted as safe for use in such a context. (e.g. loading an +Angular template from a URL requires that the URL is one considered safe for loading resources.)

    +

    This helps prevent XSS and other security issues. Read more at Strict Contextual Escaping (SCE)

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/index.html b/app/lib/angular/docs/partials/error/index.html new file mode 100755 index 000000000..e899474c5 --- /dev/null +++ b/app/lib/angular/docs/partials/error/index.html @@ -0,0 +1,14 @@ + Improve this doc

    +
    +
    +

    +

    Use the Error Reference manual to find information about error conditions in +your AngularJS app. Errors thrown in production builds of AngularJS will log +links to this site on the console.

    +

    Other useful references for debugging your app include:

    + +
    diff --git a/app/lib/angular/docs/partials/error/jqLite:nosel.html b/app/lib/angular/docs/partials/error/jqLite:nosel.html new file mode 100755 index 000000000..ec88c680b --- /dev/null +++ b/app/lib/angular/docs/partials/error/jqLite:nosel.html @@ -0,0 +1,13 @@ + Improve this doc

    Unsupported Selector Lookup +
    error in component jqLite + +
    +

    +
    Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element
    +

    Description

    +

    In order to keep Angular small, Angular implements only a subset of the selectors in jqLite. +This error occurs when a jqLite instance is invoked with a selector other than this subset.

    +

    In order to resolve this error, rewrite your code to only use tag name selectors and manually traverse the DOM using the APIs provided by jqLite.

    +

    Alternatively, you can include a full version of jQuery, which Angular will automatically use and that will make all selectors available.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/jqLite:offargs.html b/app/lib/angular/docs/partials/error/jqLite:offargs.html new file mode 100755 index 000000000..02614a5e4 --- /dev/null +++ b/app/lib/angular/docs/partials/error/jqLite:offargs.html @@ -0,0 +1,11 @@ + Improve this doc

    Invalid jqLite#off() parameter +
    error in component jqLite + +
    +

    +
    jqLite#off() does not support the `selector` argument
    +

    Description

    +

    This error occurs when trying to pass too many arguments to jqLite#off. Note +that jqLite#off does not support namespaces or selectors like jQuery.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/jqLite:onargs.html b/app/lib/angular/docs/partials/error/jqLite:onargs.html new file mode 100755 index 000000000..4608f0841 --- /dev/null +++ b/app/lib/angular/docs/partials/error/jqLite:onargs.html @@ -0,0 +1,12 @@ + Improve this doc

    Invalid jqLite#on() Parameters +
    error in component jqLite + +
    +

    +
    jqLite#on() does not support the `selector` or `eventData` parameters
    +

    Description

    +

    This error occurs when trying to pass too many arguments to jqLite#on. Note +that jqLite#on does not support the selector or eventData parameters as +jQuery does.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ng:areq.html b/app/lib/angular/docs/partials/error/ng:areq.html new file mode 100755 index 000000000..4b3d2e852 --- /dev/null +++ b/app/lib/angular/docs/partials/error/ng:areq.html @@ -0,0 +1,12 @@ + Improve this doc

    Bad Argument +
    error in component ng + +
    +

    +
    Argument '{0}' is {1}
    +

    Description

    +

    AngularJS often asserts that certain values will be present and truthy using a +helper function. If the assertion fails, this error is thrown. To fix this problem, +make sure that the value the assertion expects is defined and truthy.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ng:btstrpd.html b/app/lib/angular/docs/partials/error/ng:btstrpd.html new file mode 100755 index 000000000..099825ecd --- /dev/null +++ b/app/lib/angular/docs/partials/error/ng:btstrpd.html @@ -0,0 +1,26 @@ + Improve this doc

    App Already Bootstrapped with this Element +
    error in component ng + +
    +

    +
    App Already Bootstrapped with this Element '{0}'
    +

    Description

    +

    Occurs when calling angular.bootstrap on an element that has already been bootstrapped.

    +

    This usually happens when you accidentally use both ng-app and angular.bootstrap to bootstrap an application.

    +
    <html>
    +...
    +  <body ng-app="myApp">
    +    <script>
    +      angular.bootstrap(document.body, ['myApp']);
    +    </script>
    +  </body>
    +</html>
    +

    Note that for bootrapping purposes, the <html> element is the same as document, so the following will also throw an error.

    +
    <html>
    +...
    +<script>
    +  angular.bootstrap(document, ['myApp']);
    +</script>
    +</html>
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ng:cpi.html b/app/lib/angular/docs/partials/error/ng:cpi.html new file mode 100755 index 000000000..870e7ed3e --- /dev/null +++ b/app/lib/angular/docs/partials/error/ng:cpi.html @@ -0,0 +1,13 @@ + Improve this doc

    Bad Copy +
    error in component ng + +
    +

    +
    Can't copy! Source and destination are identical.
    +

    Description

    +

    This error occurs when attempting to copy an object to itself. Calling angular.copy with a destination object deletes +all of the elements or properties on destination before copying to it. Copying +an object to itself is not supported. Make sure to check your calls to +angular.copy and avoid copying objects or arrays to themselves.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ng:cpws.html b/app/lib/angular/docs/partials/error/ng:cpws.html new file mode 100755 index 000000000..df348903d --- /dev/null +++ b/app/lib/angular/docs/partials/error/ng:cpws.html @@ -0,0 +1,14 @@ + Improve this doc

    Copying Window or Scope +
    error in component ng + +
    +

    +
    Can't copy! Making copies of Window or Scope instances is not supported.
    +

    Description

    +

    Copying Window or Scope instances is not supported because of cyclical and self +references. Avoid copying windows and scopes, as well as any other cyclical or +self-referential structures. Note that trying to deep copy an object containing +cyclical references that is neither a window nor a scope will cause infinite +recursion and a stack overflow.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ngModel:nonassign.html b/app/lib/angular/docs/partials/error/ngModel:nonassign.html new file mode 100755 index 000000000..743d689a1 --- /dev/null +++ b/app/lib/angular/docs/partials/error/ngModel:nonassign.html @@ -0,0 +1,21 @@ + Improve this doc

    Non-Assignable Expression +
    error in component ngModel + +
    +

    +
    Expression '{0}' is non-assignable. Element: {1}
    +

    Description

    +

    This error occurs when expression the ngModel directive is bound to is a non-assignable expression.

    +

    Examples using assignable expressions include:

    +
    <input ng-model="namedVariable">
    +<input ng-model="myObj.someProperty">
    +<input ng-model="indexedArray[0]">
    +

    Examples of non-assignable expressions include:

    +
    <input ng-model="foo + bar">
    +<input ng-model="42">
    +<input ng-model="'oops'">
    +<input ng-model="myFunc()">
    +

    Always make sure that the expression bound via ngModel directive can be assigned to.

    +

    For more information, see the ngModel API doc.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ngOptions:iexp.html b/app/lib/angular/docs/partials/error/ngOptions:iexp.html new file mode 100755 index 000000000..1e391de2e --- /dev/null +++ b/app/lib/angular/docs/partials/error/ngOptions:iexp.html @@ -0,0 +1,13 @@ + Improve this doc

    Invalid Expression +
    error in component ngOptions + +
    +

    +
    Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}
    +

    Description

    +

    This error occurs when 'ngOptions' is passed an expression that isn't in an expected form.

    +

    Here's an example of correct syntax:

    +
    <select ng-model="color" ng-options="c.name for c in colors">
    +

    For more information on valid expression syntax, see 'ngOptions' in select directive docs.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ngPattern:noregexp.html b/app/lib/angular/docs/partials/error/ngPattern:noregexp.html new file mode 100755 index 000000000..0e00298e5 --- /dev/null +++ b/app/lib/angular/docs/partials/error/ngPattern:noregexp.html @@ -0,0 +1,11 @@ + Improve this doc

    Expected Regular Expression +
    error in component ngPattern + +
    +

    +
    Expected {0} to be a RegExp but was {1}. Element: {2}
    +

    Description

    +

    This error occurs when 'ngPattern' is passed an expression that isn't a regular expression or doesn't have the expected format.

    +

    For more information on valid expression syntax, see 'ngPattern' in input directive docs.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ngRepeat:dupes.html b/app/lib/angular/docs/partials/error/ngRepeat:dupes.html new file mode 100755 index 000000000..46bf5bafd --- /dev/null +++ b/app/lib/angular/docs/partials/error/ngRepeat:dupes.html @@ -0,0 +1,17 @@ + Improve this doc

    Duplicate Key in Repeater +
    error in component ngRepeat + +
    +

    +
    Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}
    +

    Description

    +

    Occurs if there are duplicate keys in an ngRepeat expression. Duplicate keys are banned because AngularJS uses keys to associate DOM nodes with items.

    +

    By default, collections are keyed by reference which is desirable for most common models but can be problematic for primitive types that are interned (share references).

    +

    For example the issue can be triggered by this invalid code:

    +
    <div ng-repeat="value in [4, 4]">
    +</div>
    +

    To resolve this error either ensure that the items in the collection have unique identity of use the track by syntax to specify how to track the association between models and DOM.

    +

    To resolve the example above can be resolved by using track by $index, which will cause the items to be keyed by their position in the array instead of their value:

    +
    <div ng-repeat="value in [4, 4] track by $index"></div>
    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ngRepeat:iexp.html b/app/lib/angular/docs/partials/error/ngRepeat:iexp.html new file mode 100755 index 000000000..a2758e054 --- /dev/null +++ b/app/lib/angular/docs/partials/error/ngRepeat:iexp.html @@ -0,0 +1,13 @@ + Improve this doc

    Invalid Expression +
    error in component ngRepeat + +
    +

    +
    Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.
    +

    Description

    +

    Occurs when there is a syntax error in an ngRepeat's expression. The expression should be in the form 'item in collection[ track by id]'.

    +

    Be aware, the ngRepeat directive parses the expression using a regex before sending collection and optionally id to the AngularJS parser. This error comes from the regex parsing.

    +

    To resolve, identify and fix errors in the expression, paying special attention to the 'in' and 'track by' keywords in the expression.

    +

    Please consult the api documentation of ngRepeat to learn more about valid syntax.

    +
    +
    diff --git a/app/lib/angular/docs/partials/error/ngRepeat:iidexp.html b/app/lib/angular/docs/partials/error/ngRepeat:iidexp.html new file mode 100755 index 000000000..a12287e7e --- /dev/null +++ b/app/lib/angular/docs/partials/error/ngRepeat:iidexp.html @@ -0,0 +1,20 @@ + Improve this doc

    Invalid Identifier +
    error in component ngRepeat + +
    +

    +
    '_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.
    +

    Description

    +

    Occurs when there is an error in the identifier part of ngRepeat's expression.

    +

    To resolve, use either a valid identifier or a tuple (key, value) where both key and value are valid identifiers.

    +

    Examples of invalid syntax:

    +
    <div ng-repeat="33 in users">
    +</div>
    +<div ng-repeat="someFn() in users"></div>
    +<div ng-repeat="some user in users"></div>
    +

    Examples of valid syntax:

    +
    <div ng-repeat="user in users"></div>
    +<div ng-repeat="(id, user) in userMap"></div>
    +

    Please consult the api documentation of ngRepeat to learn more about valid syntax.

    +
    +
    diff --git a/app/lib/angular/docs/partials/guide/bootstrap.html b/app/lib/angular/docs/partials/guide/bootstrap.html new file mode 100755 index 000000000..f1b4d465f --- /dev/null +++ b/app/lib/angular/docs/partials/guide/bootstrap.html @@ -0,0 +1,97 @@ + Improve this doc

    +
    +
    +

    +

    Overview

    +

    This page explains the Angular initialization process and how you can manually initialize Angular +if necessary.

    +

    Angular <script> Tag

    +

    This example shows the recommended path for integrating Angular with what we call automatic +initialization.

    +
    +<!doctype html>
    +<html xmlns:ng="http://angularjs.org" ng-app>
    +  <body>
    +    ...
    +    <script src="angular.js">
    +  </body>
    +</html>
    +
    +
      +
    • Place the script tag at the bottom of the page. Placing script tags at the end of the page +improves app load time because the HTML loading is not blocked by loading of the angular.js +script. You can get the latest bits from http://code.angularjs.org. Please don't link +your production code to this URL, as it will expose a security hole on your site. For +experimental development linking to our site is fine.
        +
      • Choose: angular-[version].js for a human-readable file, suitable for development and +debugging.
      • +
      • Choose: angular-[version].min.js for a compressed and obfuscated file, suitable for use in +production.
      • +
      +
    • +
    • Place ng-app to the root of your application, typically on the <html> tag if you want +angular to auto-bootstrap your application.

      +
      <html ng-app>
      +
    • +
    • If IE7 support is required add id="ng-app"

      +
      <html ng-app id="ng-app">
      +
    • +
    • If you choose to use the old style directive syntax ng: then include xml-namespace in html +to make IE happy. (This is here for historical reasons, and we no longer recommend use of +ng:.)

      +
      <html xmlns:ng="http://angularjs.org">
      +
    • +
    +

    Automatic Initialization

    +

    Angular initializes automatically upon DOMContentLoaded event or when the angular.js script is +evaluated if at that time document.readyState is set to 'complete'. At this point Angular looks +for the ng-app directive which designates your application root. +If the ng-app directive is found then Angular will:

    +
      +
    • load the module associated with the directive.
    • +
    • create the application injector
    • +
    • compile the DOM treating the ng-app directive as the root of the compilation. This allows you to tell it to treat only a +portion of the DOM as an Angular application.
    • +
    +
    +<!doctype html>
    +<html ng-app="optionalModuleName">
    +  <body>
    +    I can add: {{ 1+2 }}.
    +    <script src="angular.js"></script>
    +  </body>
    +</html>
    +
    +

    Manual Initialization

    +

    If you need to have more control over the initialization process, you can use a manual +bootstrapping method instead. Examples of when you'd need to do this include using script loaders +or the need to perform an operation before Angular compiles a page.

    +

    Here is an example of manually initializing Angular:

    +
    +<!doctype html>
    +<html xmlns:ng="http://angularjs.org">
    +  <body>
    +    Hello {{'World'}}!
    +    <script src="http://code.angularjs.org/angular.js"></script>
    +    <script>
    +       angular.element(document).ready(function() {
    +         angular.bootstrap(document, ['optionalModuleName']);
    +       });
    +    </script>
    +  </body>
    +</html>
    +
    +

    Note that we have provided the name of our application module to be loaded into the injector as the second +parameter of the api/angular.bootstrap function. This example is equivalent to using the +ng-app directive, with ng-app="optionalModuleName", as in the automatic +initialization example above.

    +

    This is the sequence that your code should follow:

    +
      +
    1. After the page and all of the code is loaded, find the root element of your AngularJS +application, which is typically the root of the document.

      +
    2. +
    3. Call api/angular.bootstrap to compile the element into an +executable, bi-directionally bound application.

      +
    4. +
    +
    diff --git a/app/lib/angular/docs/partials/guide/compiler.html b/app/lib/angular/docs/partials/guide/compiler.html new file mode 100755 index 000000000..316e7a748 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/compiler.html @@ -0,0 +1,125 @@ + Improve this doc

    +
    +
    +

    +

    Overview

    +

    Angular's HTML compiler allows the developer to teach the +browser new HTML syntax. The compiler allows you to attach behavior to any HTML element or attribute +and even create new HTML elements or attributes with custom behavior. Angular calls these behavior +extensions directives.

    +

    HTML has a lot of constructs for formatting the HTML for static documents in a declarative fashion. +For example if something needs to be centered, there is no need to provide instructions to the +browser how the window size needs to be divided in half so that the center is found, and that this +center needs to be aligned with the text's center. Simply add an align="center" attribute to any +element to achieve the desired behavior. Such is the power of declarative language.

    +

    But the declarative language is also limited, since it does not allow you to teach the browser new +syntax. For example there is no easy way to get the browser to align the text at 1/3 the position +instead of 1/2. What is needed is a way to teach the browser new HTML syntax.

    +

    Angular comes pre-bundled with common directives which are useful for building any app. We also +expect that you will create directives that are specific to your app. These extensions become a +Domain Specific Language for building your application.

    +

    All of this compilation takes place in the web browser; no server side or pre-compilation step is +involved.

    +

    Compiler

    +

    Compiler is an angular service which traverses the DOM looking for attributes. The compilation +process happens in two phases.

    +
      +
    1. Compile: traverse the DOM and collect all of the directives. The result is a linking +function.

      +
    2. +
    3. Link: combine the directives with a scope and produce a live view. Any changes in the +scope model are reflected in the view, and any user interactions with the view are reflected +in the scope model. This makes the scope model the single source of truth.

      +
    4. +
    +

    Some directives such as ng-repeat clone DOM elements once +for each item in a collection. Having a compile and link phase improves performance since the +cloned template only needs to be compiled once, and then linked once for each clone instance.

    +

    Directive

    +

    A directive is a behavior which should be triggered when specific HTML constructs are encountered +during the compilation process. The directives can be placed in element names, attributes, class +names, as well as comments. Here are some equivalent examples of invoking the ng-bind directive.

    +
    +  <span ng-bind="exp"></span>
    +  <span class="ng-bind: exp;"></span>
    +  <ng-bind></ng-bind>
    +  <!-- directive: ng-bind exp -->
    +
    +

    A directive is just a function which executes when the compiler encounters it in the DOM. See directive API for in-depth documentation on how +to write directives.

    +

    Here is a directive which makes any element draggable. Notice the draggable attribute on the +<span> element.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    The presence of the draggable attribute on any element gives the element new behavior. The beauty of +this approach is that we have taught the browser a new trick. We have extended the vocabulary of +what the browser understands in a way which is natural to anyone who is familiar with HTML +principles.

    +

    Understanding View

    +

    There are many templating systems out there. Most of them consume a static string template and +combine it with data, resulting in a new string. The resulting text is then innerHTMLed into +an element.

    +

    +

    This means that any changes to the data need to be re-merged with the template and then +innerHTMLed into the DOM. Some of the issues with this approach are: reading user input and merging it with data, +clobbering user input by overwriting it, managing the whole update process, and lack of behavior +expressiveness.

    +

    Angular is different. The Angular compiler consumes the DOM with directives, not string templates. +The result is a linking function, which when combined with a scope model results in a live view. The +view and scope model bindings are transparent. No action from the developer is needed to update +the view. And because no innerHTML is used there are no issues of clobbering user input. +Furthermore, Angular directives can contain not just text bindings, but behavioral constructs as +well.

    +

    +

    The Angular approach produces a stable DOM. This means that the DOM element instance bound to a model +item instance does not change for the lifetime of the binding. This means that the code can get +hold of the elements and register event handlers and know that the reference will not be destroyed +by template data merge.

    +
    diff --git a/app/lib/angular/docs/partials/guide/concepts.html b/app/lib/angular/docs/partials/guide/concepts.html new file mode 100755 index 000000000..09ffa3dea --- /dev/null +++ b/app/lib/angular/docs/partials/guide/concepts.html @@ -0,0 +1,474 @@ + Improve this doc

    +
    +
    +

    +

    Overview

    +

    This document gives a quick overview of the main angular components and how they work together. +These are:

    +
      +
    • startup - bring up hello world
    • +
    • runtime - overview of angular runtime
    • +
    • scope - the glue between the view and the controller
    • +
    • controller - application behavior
    • +
    • model - your application data
    • +
    • view - what the user sees
    • +
    • directives - extend HTML vocabulary
    • +
    • filters - format the data in user locale
    • +
    • injector - assembles your application
    • +
    • module - configures the injector
    • +
    • $ - angular namespace
    • +
    +

    +

    Startup

    +

    This is how we get the ball rolling (refer to the diagram and example below):

    +

    +
      +
    1. The browser loads the HTML and parses it into a DOM
    2. +
    3. The browser loads angular.js script
    4. +
    5. Angular waits for DOMContentLoaded event
    6. +
    7. Angular looks for ng-app +directive, which designates the application boundary
    8. +
    9. The Module specified in ng-app (if any) is used to configure +the $injector
    10. +
    11. The $injector is used to create the $compile service as well as $rootScope
    12. +
    13. The $compile service is used to compile the DOM and link +it with $rootScope
    14. +
    15. The ng-init directive assigns World to the name property on the scope
    16. +
    17. The {{name}} interpolates the expression to +Hello World!
    18. +
    +
    +
    +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    + + + +# Runtime + + + +The diagram and the example below describe how Angular interacts with the browser's event loop. + + 1. The browser's event-loop waits for an event to arrive. An event is a user interaction, timer event, + or network event (response from a server). + 2. The event's callback gets executed. This enters the JavaScript context. The callback can + modify the DOM structure. + 3. Once the callback executes, the browser leaves the JavaScript context and + re-renders the view based on DOM changes. + +Angular modifies the normal JavaScript flow by providing its own event processing loop. This +splits the JavaScript into classical and Angular execution context. Only operations which are +applied in Angular execution context will benefit from Angular data-binding, exception handling, +property watching, etc... You can also use $apply() to enter Angular execution context from JavaScript. Keep in +mind that in most places (controllers, services) $apply has already been called for you by the +directive which is handling the event. An explicit call to $apply is needed only when +implementing custom event callbacks, or when working with third-party library callbacks. + + 1. Enter Angular execution context by calling scope.$apply(stimulusFn). Where stimulusFn is + the work you wish to do in Angular execution context. + 2. Angular executes the stimulusFn(), which typically modifies application state. + 3. Angular enters the $digest loop. The + loop is made up of two smaller loops which process $evalAsync queue and the $watch list. The $digest loop keeps iterating until the model + stabilizes, which means that the $evalAsync queue is empty and the $watch list does not detect any changes. + 4. The $evalAsync queue is used to + schedule work which needs to occur outside of current stack frame, but before the browser's + view render. This is usually done with setTimeout(0), but the setTimeout(0) approach + suffers from slowness and may cause view flickering since the browser renders the view after + each event. + 5. The $watch list is a set of expressions + which may have changed since last iteration. If a change is detected then the $watch + function is called which typically updates the DOM with the new value. + 6. Once the Angular $digest loop finishes + the execution leaves the Angular and JavaScript context. This is followed by the browser + re-rendering the DOM to reflect any changes. + + +Here is the explanation of how the Hello world example achieves the data-binding effect when the +user enters text into the text field. + + 1. During the compilation phase: + 1. the ng-model and input directive set up a keydown listener on the <input> control. + 2. the {{name}} interpolation + sets up a $watch to be notified of + name changes. + 2. During the runtime phase: + 1. Pressing an 'X' key causes the browser to emit a keydown event on the input control. + 2. The input directive + captures the change to the input's value and calls $apply("name = 'X';") to update the + application model inside the Angular execution context. + 3. Angular applies the name = 'X'; to the model. + 4. The $digest loop begins + 5. The $watch list detects a change + on the name property and notifies the {{name}} interpolation, which in turn updates the DOM. + 6. Angular exits the execution context, which in turn exits the keydown event and with it + the JavaScript execution context. + 7. The browser re-renders the view with update text. + +
    +
    +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    + + +#Scope + +The scope is responsible for detecting changes to the model section and +provides the execution context for expressions. The scopes are nested in a hierarchical structure +which closely follow the DOM structure. (See individual directive documentation to see which +directives cause a creation of new scopes.) + +The following example demonstrates how the name expression will evaluate +into a different value depending on which scope it is evaluated in. The example is followed by +a diagram depicting the scope boundaries. + +
    +
    +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    + +

    +

    +

    Controller

    +

    +

    A controller is the code behind the view. Its job is to construct the model and publish it to the +view along with callback methods. The view is a projection of the scope onto the template (the +HTML). The scope is the glue which marshals the model to the view and forwards the events to the +controller.

    +

    The separation of the controller and the view is important because:

    +
      +
    • The controller is written in JavaScript. JavaScript is imperative. Imperative is a good fit +for specifying application behavior. The controller should not contain any rendering +information (DOM references or HTML fragments).
    • +
    • The view template is written in HTML. HTML is declarative. Declarative is a good fit for +specifying UI. The View should not contain any behavior.
    • +
    • Since the controller is unaware of the view, there could be many views for the same +controller. This is important for re-skinning, device specific views (i.e. mobile vs desktop), +and testability.
    • +
    +
    +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    + + + +# Model + + + +The model is the data which is merged with the template to produce the view. To be able to +render the model into the view, the model has to be able to be referenced from the scope. Unlike many +other frameworks Angular makes no restrictions or requirements on the model. There are no classes +to inherit from or special accessor methods for accessing or changing the model. The model can be +primitive, object hash, or a full object Type. In short the model is a plain JavaScript object. + + +
    +
    + + +

    +

    View

    +

    +

    The view is what the user sees. The view begins its life as a template, is merged with the +model and finally rendered into the browser DOM. Angular takes a very different approach to +rendering the view compared to most other templating systems.

    +
      +
    • Others - Most templating systems begin as an HTML string with special templating markup. +Often the template markup breaks the HTML syntax which means that the template can not be +edited by an HTML editor. The template string is then parsed by the template engine, and +merged with the data. The result of the merge is an HTML string. The HTML string is then +written to the browser using the .innerHTML, which causes the browser to render the HTML. +When the model changes the whole process needs to be repeated. The granularity of the template +is the granularity of the DOM updates. The key here is that the templating system manipulates +strings.
    • +
    • Angular - Angular is different, since its templating system works on DOM objects not on +strings. The template is still written in an HTML string, but it is HTML (not HTML with +template sprinkled in.) The browser parses the HTML into the DOM, and the DOM becomes the input to +the template engine known as the compiler. The compiler +looks for directives which in turn set up watches on the model. The result is a +continuously updating view which does not need template model re-merging. Your model becomes +the single source-of-truth for your view.
    • +
    +
    +
    + +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    +

    Directives

    +

    A directive is a behavior or DOM transformation which is triggered by the presence of a custom attribute, +element name, class name or comment. A directive allows you to extend the HTML vocabulary in a +declarative fashion. Following is an example which enables data-binding for the contenteditable +in HTML.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    +

    Filters

    +

    Filters perform data transformation. Typically +they are used in conjunction with the locale to format the data in locale specific output. +They follow the spirit of UNIX filters and use similar syntax | (pipe).

    +

    Source

    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    +

    +

    Modules and the Injector

    +

    +

    The injector is a service locator. There is a single +injector per Angular application. The injector provides a way to look up an object instance by its +name. The injector keeps an internal cache of all objects so that repeated calls to get the same +object name result in the same instance. If the object does not exist, then the injector asks the instance factory to create a new instance.

    +

    A module is a way to configure the injector's instance factory, known +as a provider.

    +

    +
    +
    +  // Create a module
    +  var myModule = angular.module('myModule', [])
    +
    +  // Configure the injector
    +  myModule.factory('serviceA', function() {
    +    return {
    +      // instead of {}, put your object creation here
    +    };
    +  });
    +
    +  // create an injector and configure it from 'myModule'
    +  var $injector = angular.injector(['myModule']);
    +
    +  // retrieve an object from the injector by name
    +  var serviceA = $injector.get('serviceA');
    +
    +  // always true because of instance cache
    +  $injector.get('serviceA') === $injector.get('serviceA');
    +
    +

    But the real magic of the injector is that it can be +used to call methods and instantiate types. This subtle feature is what +allows the methods and types to ask for their dependencies instead of having to look for them.

    +
    +  // You write functions such as this one.
    +  function doSomething(serviceA, serviceB) {
    +    // do something here.
    +  }
    +
    +  // Angular provides the injector for your application
    +  var $injector = ...;
    +
    +  ///////////////////////////////////////////////
    +  // the old-school way of getting dependencies.
    +  var serviceA = $injector.get('serviceA');
    +  var serviceB = $injector.get('serviceB');
    +
    +  // now call the function
    +  doSomething(serviceA, serviceB);
    +
    +  ///////////////////////////////////////////////
    +  // the cool way of getting dependencies.
    +  // the $injector will supply the arguments to the function automatically
    +  $injector.invoke(doSomething); // This is how the framework calls your functions
    +
    +

    Notice that the only thing you needed to write was the function, and list the dependencies in the +function arguments. When angular calls the function, it will use the call which will automatically fill the function +arguments.

    +

    Examine the ClockCtrl below, and notice how it lists the dependencies in the constructor. When the +ng-controller instantiates +the controller it automatically provides the dependencies. There is no need to create +dependencies, look for dependencies, or even get a reference to the injector.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    +

    Angular Namespace

    +

    To prevent accidental name collision, Angular prefixes names of objects which could potentially +collide with $. Please do not use the $ prefix in your code as it may accidentally collide +with Angular code.

    +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.e2e-testing.html b/app/lib/angular/docs/partials/guide/dev_guide.e2e-testing.html new file mode 100755 index 000000000..51a629bae --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.e2e-testing.html @@ -0,0 +1,253 @@ + Improve this doc

    +
    +
    +

    +

    As applications grow in size and complexity, it becomes unrealistic to rely on manual testing to +verify the correctness of new features, catch bugs and notice regressions.

    +

    To solve this problem, we have built an Angular Scenario Runner which simulates user interactions +that will help you verify the health of your Angular application.

    +

    Overview

    +

    You will write scenario tests in JavaScript, which describe how your application should behave, +given a certain interaction in a specific state. A scenario is comprised of one or more it blocks +(you can think of these as the requirements of your application), which in turn are made of +commands and expectations. Commands tell the Runner to do something with the application +(such as navigate to a page or click on a button), and expectations tell the Runner to assert +something about the state (such as the value of a field or the current URL). If any expectation +fails, the runner marks the it as "failed" and continues on to the next one. Scenarios may also +have beforeEach and afterEach blocks, which will be run before (or after) each it block, +regardless of whether they pass or fail.

    +

    +

    In addition to the above elements, scenarios may also contain helper functions to avoid duplicating +code in the it blocks.

    +

    Here is an example of a simple scenario: +

    +describe('Buzz Client', function() {
    +it('should filter results', function() {
    +  input('user').enter('jacksparrow');
    +  element(':button').click();
    +  expect(repeater('ul li').count()).toEqual(10);
    +  input('filterText').enter('Bees');
    +  expect(repeater('ul li').count()).toEqual(1);
    +});
    +});
    +
    +This scenario describes the requirements of a Buzz Client, specifically, that it should be able to +filter the stream of the user. It starts by entering a value in the 'user' input field, clicking +the only button on the page, and then it verifies that there are 10 items listed. It then enters +'Bees' in the 'filterText' input field and verifies that the list is reduced to a single item.

    +

    The API section below lists the available commands and expectations for the Runner.

    +

    API

    +

    Source: https://github.com/angular/angular.js/blob/master/src/ngScenario/dsl.js

    +

    pause()

    +

    Pauses the execution of the tests until you call resume() in the console (or click the resume +link in the Runner UI).

    +

    sleep(seconds)

    +

    Pauses the execution of the tests for the specified number of seconds.

    +

    browser().navigateTo(url)

    +

    Loads the url into the test frame.

    +

    browser().navigateTo(url, fn)

    +

    Loads the URL returned by fn into the testing frame. The given url is only used for the test +output. Use this when the destination URL is dynamic (that is, the destination is unknown when you +write the test).

    +

    browser().reload()

    +

    Refreshes the currently loaded page in the test frame.

    +

    browser().window().href()

    +

    Returns the window.location.href of the currently loaded page in the test frame.

    +

    browser().window().path()

    +

    Returns the window.location.pathname of the currently loaded page in the test frame.

    +

    browser().window().search()

    +

    Returns the window.location.search of the currently loaded page in the test frame.

    +

    browser().window().hash()

    +

    Returns the window.location.hash (without #) of the currently loaded page in the test frame.

    +

    browser().location().url()

    +

    Returns the $location.url() of the currently loaded page in +the test frame.

    +

    browser().location().path()

    +

    Returns the $location.path() of the currently loaded page in +the test frame.

    +

    browser().location().search()

    +

    Returns the $location.search() of the currently loaded page +in the test frame.

    +

    browser().location().hash()

    +

    Returns the $location.hash() of the currently loaded page in +the test frame.

    +

    expect(future).{matcher}

    +

    Asserts the value of the given future satisfies the matcher. All API statements return a +future object, which get a value assigned after they are executed. Matchers are defined using +angular.scenario.matcher, and they use the value of futures to run the expectation. For example: +expect(browser().location().href()).toEqual('http://www.google.com'). Available matchers +are presented further down this document.

    +

    expect(future).not().{matcher}

    +

    Asserts the value of the given future satisfies the negation of the matcher.

    +

    using(selector, label)

    +

    Scopes the next DSL element selection.

    +

    binding(name)

    +

    Returns the value of the first binding matching the given name.

    +

    input(name).enter(value)

    +

    Enters the given value in the text field with the corresponding ng-model name.

    +

    input(name).check()

    +

    Checks/unchecks the checkbox with the corresponding ng-model name.

    +

    input(name).select(value)

    +

    Selects the given value in the radio button with the corresponding ng-model name.

    +

    input(name).val()

    +

    Returns the current value of an input field with the corresponding ng-model name.

    +

    repeater(selector, label).count()

    +

    Returns the number of rows in the repeater matching the given jQuery selector. The label is +used for test output.

    +

    repeater(selector, label).row(index)

    +

    Returns an array with the bindings in the row at the given index in the repeater matching the +given jQuery selector. The label is used for test output.

    +

    repeater(selector, label).column(binding)

    +

    Returns an array with the values in the column with the given binding in the repeater matching +the given jQuery selector. The label is used for test output.

    +

    select(name).option(value)

    +

    Picks the option with the given value on the select with the given name.

    +

    select(name).options(value1, value2...)

    +

    Picks the options with the given values on the multi select with the given name.

    +

    element(selector, label).count()

    +

    Returns the number of elements that match the given jQuery selector. The label is used for test +output.

    +

    element(selector, label).click()

    +

    Clicks on the element matching the given jQuery selector. The label is used for test output.

    +

    element(selector, label).query(fn)

    +

    Executes the function fn(selectedElements, done), where selectedElements are the elements that +match the given jQuery selector and done is a function that is called at the end of the fn +function. The label is used for test output.

    +

    element(selector, label).{method}()

    +

    Returns the result of calling method on the element matching the given jQuery selector, where +method can be any of the following jQuery methods: val, text, html, height, +innerHeight, outerHeight, width, innerWidth, outerWidth, position, scrollLeft, +scrollTop, offset. The label is used for test output.

    +

    element(selector, label).{method}(value)

    +

    Executes the method passing in value on the element matching the given jQuery selector, where +method can be any of the following jQuery methods: val, text, html, height, +innerHeight, outerHeight, width, innerWidth, outerWidth, position, scrollLeft, +scrollTop, offset. The label is used for test output.

    +

    element(selector, label).{method}(key)

    +

    Returns the result of calling method passing in key on the element matching the given jQuery +selector, where method can be any of the following jQuery methods: attr, prop, css. The +label is used for test output.

    +

    element(selector, label).{method}(key, value)

    +

    Executes the method passing in key and value on the element matching the given jQuery +selector, where method can be any of the following jQuery methods: attr, prop, css. The +label is used for test output.

    +

    JavaScript is a dynamically typed language which comes with great power of expression, but it also +come with almost no-help from the compiler. For this reason we feel very strongly that any code +written in JavaScript needs to come with a strong set of tests. We have built many features into +angular which makes testing your angular applications easy. So there is no excuse for not testing.

    +

    Matchers

    +

    Matchers are used in combination with the expect(...) function as described above and can +be negated with not(). For instance: expect(element('h1').text()).not().toEqual('Error').

    +

    Source: https://github.com/angular/angular.js/blob/master/src/ngScenario/matchers.js

    +
    +// value and Object comparison following the rules of angular.equals().
    +expect(value).toEqual(value)
    +
    +// a simpler value comparison using ===
    +expect(value).toBe(value)
    +
    +// checks that the value is defined by checking its type.
    +expect(value).toBeDefined()
    +
    +// the following two matchers are using JavaScript's standard truthiness rules
    +expect(value).toBeTruthy()
    +expect(value).toBeFalsy()
    +
    +// verify that the value matches the given regular expression. The regular
    +// expression may be passed in form of a string or a regular expression
    +// object.
    +expect(value).toMatch(expectedRegExp)
    +
    +// a check for null using ===
    +expect(value).toBeNull()
    +
    +// Array.indexOf(...) is used internally to check whether the element is
    +// contained within the array.
    +expect(value).toContain(expected)
    +
    +// number comparison using < and >
    +expect(value).toBeLessThan(expected)
    +expect(value).toBeGreaterThan(expected)
    +
    +

    Example

    +

    See the angular-seed project for more examples.

    +

    Conditional actions with element(...).query(fn)

    +

    E2E testing with angular scenario is highly asynchronous and hides a lot of complexity by +queueing actions and expectations that can handle futures. From time to time, you might need +conditional assertions or element selection. Even though you should generally try to avoid this +(as it is can be sign for unstable tests), you can add conditional behavior with +element(...).query(fn). The following code listing shows how this function can be used to delete +added entries (where an entry is some domain object) using the application's web interface.

    +

    Imagine the application to be structured into two views:

    +
      +
    1. Overview view which lists all the added entries in a table and
    2. +
    3. a detail view which shows the entries' details and contains a delete button. When clicking the +delete button, the user is redirected back to the overview page.
    4. +
    +
    +beforeEach(function () {
    +  var deleteEntry = function () {
    +    browser().navigateTo('/entries');
    +
    +    // we need to select the <tbody> element as it might be the case that there
    +    // are no entries (and therefore no rows). When the selector does not
    +    // result in a match, the test would be marked as a failure.
    +    element('table tbody').query(function (tbody, done) {
    +      // ngScenario gives us a jQuery lite wrapped element. We call the
    +      // `children()` function to retrieve the table body's rows
    +      var children = tbody.children();
    +
    +      if (children.length > 0) {
    +        // if there is at least one entry in the table, click on the link to
    +        // the entry's detail view
    +        element('table tbody a').click();
    +        // and, after a route change, click the delete button
    +        element('.btn-danger').click();
    +      }
    +
    +      // if there is more than one entry shown in the table, queue another
    +      // delete action.
    +      if (children.length > 1) {
    +        deleteEntry();
    +      }
    +
    +      // remember to call `done()` so that ngScenario can continue
    +      // test execution.
    +      done();
    +    });
    +
    +  };
    +
    +  // start deleting entries
    +  deleteEntry();
    +});
    +
    +

    In order to understand what is happening, we should emphasize that ngScenario calls are not +immediately executed, but queued (in ngScenario terms, we would be talking about adding +future actions). If we had only one entry in our table, than the following future actions +would be queued:

    +
    +// delete entry 1
    +browser().navigateTo('/entries');
    +element('table tbody').query(function (tbody, done) { ... });
    +element('table tbody a');
    +element('.btn-danger').click();
    +
    +

    For two entries, ngScenario would have to work on the following queue:

    +
    +// delete entry 1
    +browser().navigateTo('/entries');
    +element('table tbody').query(function (tbody, done) { ... });
    +element('table tbody a');
    +element('.btn-danger').click();
    +
    +    // delete entry 2
    +    // indented to represent "recursion depth"
    +    browser().navigateTo('/entries');
    +    element('table tbody').query(function (tbody, done) { ... });
    +    element('table tbody a');
    +    element('.btn-danger').click();
    +
    +

    Caveats

    +

    ngScenario does not work with apps that manually bootstrap using angular.bootstrap. You must use the ng-app directive.

    +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.mvc.html b/app/lib/angular/docs/partials/guide/dev_guide.mvc.html new file mode 100755 index 000000000..2e2cc6fab --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.mvc.html @@ -0,0 +1,22 @@ + Improve this doc

    +
    +
    +

    +

    While Model-View-Controller (MVC) has acquired different shades of meaning over the years since it +first appeared, Angular incorporates the basic principles behind the original MVC software design pattern into its way of +building client-side web applications.

    +

    The MVC pattern summarized:

    +
      +
    • Separate applications into distinct presentation, data, and logic components
    • +
    • Encourage loose coupling between these components
    • +
    +

    Along with services and dependency injection, MVC +makes angular applications better structured, easier to maintain and more testable.

    +

    The following topics explain how angular incorporates the MVC pattern into the angular way of +developing web applications:

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_controller.html b/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_controller.html new file mode 100755 index 000000000..71c55cdda --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_controller.html @@ -0,0 +1,244 @@ + Improve this doc

    +
    +
    +

    +

    In Angular, a controller is a JavaScript function(type/class) that is used to augment instances of +angular Scope, excluding the root scope.

    +

    Use controllers to:

    +
      +
    • Set up the initial state of a scope object.
    • +
    • Add behavior to the scope object.
    • +
    +

    Setting up the initial state of a scope object

    +

    Typically, when you create an application you need to set up an initial state for an Angular scope.

    +

    Angular applies (in the sense of JavaScript's Function#apply) the controller constructor function +to a new Angular scope object, which sets up an initial scope state. This means that Angular never +creates instances of the controller type (by invoking the new operator on the controller +constructor). Constructors are always applied to an existing scope object.

    +

    You set up the initial state of a scope by creating model properties. For example:

    +
    +    function GreetingCtrl($scope) {
    +        $scope.greeting = 'Hola!';
    +    }
    +
    +

    The GreetingCtrl controller creates a greeting model which can be referred to in a template.

    +

    NOTE: Many of the examples in the documentation show the creation of functions +in the global scope. This is only for demonstration purposes - in a real +application you should use the .controller method of your Angular module for +your application as follows:

    +
    +    var myApp = angular.module('myApp',[]);
    +
    +    myApp.controller('GreetingCtrl', ['$scope', function($scope) {
    +        $scope.greeting = 'Hola!';
    +    }]);
    +
    +

    Note also that we use the array notation to explicitly specify the dependency +of the controller on the $scope service provided by Angular.

    +

    Adding Behavior to a Scope Object

    +

    Behavior on an Angular scope object is in the form of scope method properties available to the +template/view. This behavior interacts with and modifies the application model.

    +

    As discussed in the Model section of this guide, any +objects (or primitives) assigned to the scope become model properties. Any functions assigned to +the scope are available in the template/view, and can be invoked via angular expressions +and ng event handler directives (e.g. ngClick).

    +

    Using Controllers Correctly

    +

    In general, a controller shouldn't try to do too much. It should contain only the business logic +needed for a single view.

    +

    The most common way to keep controllers slim is by encapsulating work that doesn't belong to +controllers into services and then using these services in controllers via dependency injection. +This is discussed in the Dependency Injection Services sections of this guide.

    +

    Do not use controllers for:

    +
      +
    • Any kind of DOM manipulation — Controllers should contain only business logic. DOM +manipulation—the presentation logic of an application—is well known for being hard to test. +Putting any presentation logic into controllers significantly affects testability of the business +logic. Angular offers databinding for automatic DOM manipulation. If +you have to perform your own manual DOM manipulation, encapsulate the presentation logic in +directives.
    • +
    • Input formatting — Use angular form controls instead.
    • +
    • Output filtering — Use angular filters instead.
    • +
    • Sharing stateless or stateful code across controllers — Use angular services instead.
    • +
    • Managing the life-cycle of other components (for example, to create service instances).
    • +
    +

    Associating Controllers with Angular Scope Objects

    +

    You can associate controllers with scope objects implicitly via the ngController directive or $route service.

    +

    Controller Constructor and Methods Example

    +

    To illustrate how the controller component works in angular, let's create a little app with the +following components:

    +
      +
    • A template with two buttons and a simple message
    • +
    • A model consisting of a string named spice
    • +
    • A controller with two functions that set the value of spice
    • +
    +

    The message in our template contains a binding to the spice model, which by default is set to the +string "very". Depending on which button is clicked, the spice model is set to chili or +jalapeño, and the message is automatically updated by data-binding.

    +

    A Spicy Controller Example

    +
    +<body ng-controller="SpicyCtrl">
    + <button ng-click="chiliSpicy()">Chili</button>
    + <button ng-click="jalapenoSpicy()">Jalapeño</button>
    + <p>The food is {{spice}} spicy!</p>
    +</body>
    +
    +function SpicyCtrl($scope) {
    + $scope.spice = 'very';
    + $scope.chiliSpicy = function() {
    +   $scope.spice = 'chili';
    + }
    + $scope.jalapenoSpicy = function() {
    +  $scope.spice = 'jalapeño';
    + }
    +}
    +
    +
    +
    +

    Things to notice in the example above:

    +
      +
    • The ngController directive is used to (implicitly) create a scope for our template, and the +scope is augmented (managed) by the SpicyCtrl controller.
    • +
    • SpicyCtrl is just a plain JavaScript function. As an (optional) naming convention the name +starts with capital letter and ends with "Ctrl" or "Controller".
    • +
    • Assigning a property to $scope creates or updates the model.
    • +
    • Controller methods can be created through direct assignment to scope (the chiliSpicy method)
    • +
    • Both controller methods are available in the template (for the body element and and its +children).
    • +
    • NB: Previous versions of Angular (pre 1.0 RC) allowed you to use this interchangeably with +the $scope method, but this is no longer the case. Inside of methods defined on the scope +this and $scope are interchangeable (angular sets this to $scope), but not otherwise +inside your controller constructor.
    • +
    • NB: Previous versions of Angular (pre 1.0 RC) added prototype methods into the scope +automatically, but this is no longer the case; all methods need to be added manually to +the scope.
    • +
    +

    Controller methods can also take arguments, as demonstrated in the following variation of the +previous example.

    +

    Controller Method Arguments Example

    +
    +<body ng-controller="SpicyCtrl">
    + <input ng-model="customSpice" value="wasabi">
    + <button ng-click="spicy('chili')">Chili</button>
    + <button ng-click="spicy(customSpice)">Custom spice</button>
    + <p>The food is {{spice}} spicy!</p>
    +</body>
    +
    +function SpicyCtrl($scope) {
    + $scope.spice = 'very';
    + $scope.spicy = function(spice) {
    +   $scope.spice = spice;
    + }
    +}
    +
    +

    Notice that the SpicyCtrl controller now defines just one method called spicy, which takes one +argument called spice. The template then refers to this controller method and passes in a string +constant 'chili' in the binding for the first button and a model property spice (bound to an +input box) in the second button.

    +

    Controller Inheritance Example

    +

    Controller inheritance in Angular is based on Scope inheritance. Let's +have a look at an example:

    +
    +<body ng-controller="MainCtrl">
    + <p>Good {{timeOfDay}}, {{name}}!</p>
    + <div ng-controller="ChildCtrl">
    +  <p>Good {{timeOfDay}}, {{name}}!</p>
    +  <p ng-controller="BabyCtrl">Good {{timeOfDay}}, {{name}}!</p>
    + </div>
    +</body>
    +
    +function MainCtrl($scope) {
    + $scope.timeOfDay = 'morning';
    + $scope.name = 'Nikki';
    +}
    +
    +function ChildCtrl($scope) {
    + $scope.name = 'Mattie';
    +}
    +
    +function BabyCtrl($scope) {
    + $scope.timeOfDay = 'evening';
    + $scope.name = 'Gingerbreak Baby';
    +}
    +
    +

    Notice how we nested three ngController directives in our template. This template construct will +result in 4 scopes being created for our view:

    +
      +
    • The root scope
    • +
    • The MainCtrl scope, which contains timeOfDay and name models
    • +
    • The ChildCtrl scope, which shadows the name model from the previous scope and inherits the +timeOfDay model
    • +
    • The BabyCtrl scope, which shadows both the timeOfDay model defined in MainCtrl and name +model defined in the ChildCtrl
    • +
    +

    Inheritance works between controllers in the same way as it does with models. So in our previous +examples, all of the models could be replaced with controller methods that return string values.

    +

    Note: Standard prototypical inheritance between two controllers doesn't work as one might expect, +because as we mentioned earlier, controllers are not instantiated directly by Angular, but rather +are applied to the scope object.

    +

    Testing Controllers

    +

    Although there are many ways to test a controller, one of the best conventions, shown below, +involves injecting the $rootScope and $controller

    +

    Controller Function: +

    +function myController($scope) {
    +   $scope.spices = [{"name":"pasilla", "spiciness":"mild"},
    +                  {"name":"jalapeno", "spiceiness":"hot hot hot!"},
    +                  {"name":"habanero", "spiceness":"LAVA HOT!!"}];
    +
    +   $scope.spice = "habanero";
    +}
    +
    +

    Controller Test: +

    +describe('myController function', function() {
    +
    +  describe('myController', function() {
    +    var scope;
    +
    +    beforeEach(inject(function($rootScope, $controller) {
    +      scope = $rootScope.$new();
    +      var ctrl = $controller(myController, {$scope: scope});
    +    }));
    +
    +    it('should create "spices" model with 3 spices', function() {
    +      expect(scope.spices.length).toBe(3);
    +    });
    +
    +    it('should set the default value of spice', function() {
    +      expect(scope.spice).toBe('habanero');
    +    });
    +  });
    +});
    +
    +

    If you need to test a nested controller you need to create the same scope hierarchy +in your test that exists in the DOM.

    +
    +describe('state', function() {
    +    var mainScope, childScope, babyScope;
    +
    +    beforeEach(inject(function($rootScope, $controller) {
    +        mainScope = $rootScope.$new();
    +        var mainCtrl = $controller(MainCtrl, {$scope: mainScope});
    +        childScope = mainScope.$new();
    +        var childCtrl = $controller(ChildCtrl, {$scope: childScope});
    +        babyScope = childScope.$new();
    +        var babyCtrl = $controller(BabyCtrl, {$scope: babyScope});
    +    }));
    +
    +    it('should have over and selected', function() {
    +        expect(mainScope.timeOfDay).toBe('morning');
    +        expect(mainScope.name).toBe('Nikki');
    +        expect(childScope.timeOfDay).toBe('morning');
    +        expect(childScope.name).toBe('Mattie');
    +        expect(babyScope.timeOfDay).toBe('evening');
    +        expect(babyScope.name).toBe('Gingerbreak Baby');
    +    });
    +});
    +
    +

    Related Topics

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_model.html b/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_model.html new file mode 100755 index 000000000..a64399a1f --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_model.html @@ -0,0 +1,62 @@ + Improve this doc

    +
    +
    +

    +

    Depending on the context of the discussion in the Angular documentation, the term model can refer to +either a single object representing one entity (for example, a model called "phones" with its value +being an array of phones) or the entire data model for the application (all entities).

    +

    In Angular, a model is any data that is reachable as a property of an angular Scope object. The name of the property is the model identifier and the value is +any JavaScript object (including arrays and primitives).

    +

    The only requirement for a JavaScript object to be a model in Angular is that the object must be +referenced by an Angular scope as a property of that scope object. This property reference can be +created explicitly or implicitly.

    +

    You can create models by explicitly creating scope properties referencing JavaScript objects in the +following ways:

    +
      +
    • Make a direct property assignment to the scope object in JavaScript code; this most commonly +occurs in controllers:

      +
         function MyCtrl($scope) {
      +       // create property 'foo' on the MyCtrl's scope
      +       // and assign it an initial value 'bar'
      +       $scope.foo = 'bar';
      +   }
      +
    • +
    • Use an angular expression with an assignment operator in templates:

      +
         <button ng-click="{{foo='bar'}}">Click me</button>
      +
    • +
    • Use ngInit directive in templates (for toy/example apps +only, not recommended for real applications):

      +
         <body ng-init=" foo = 'bar' ">
      +
    • +
    +

    Angular creates models implicitly (by creating a scope property and assigning it a suitable value) +when processing the following template constructs:

    +
      +
    • Form input, select, textarea and other form elements:

      +
         <input ng-model="query" value="fluffy cloud">
      +

      The code above creates a model called "query" on the current scope with the value set to "fluffy +cloud".

      +
    • +
    • An iterator declaration in ngRepeater:

      +
         <p ng-repeat="phone in phones"></p>
      +

      The code above creates one child scope for each item in the "phones" array and creates a "phone" +object (model) on each of these scopes with its value set to the value of "phone" in the array.

      +
    • +
    +

    In Angular, a JavaScript object stops being a model when:

    +
      +
    • No Angular scope contains a property that references the object.

      +
    • +
    • All Angular scopes that contain a property referencing the object become stale and eligible for +garbage collection.

      +
    • +
    +

    The following illustration shows a simple data model created implicitly from a simple template:

    +

    +

    Related Topics

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_view.html b/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_view.html new file mode 100755 index 000000000..846b4d210 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.mvc.understanding_view.html @@ -0,0 +1,19 @@ + Improve this doc

    +
    +
    +

    +

    In Angular, the view is the DOM loaded and rendered in the browser, after Angular has transformed +the DOM based on information in the template, controller and model.

    +

    +

    In the Angular implementation of MVC, the view has knowledge of both the model and the controller. +The view knows about the model where two-way data-binding occurs. The view has knowledge of the +controller through Angular directives, such as ngController and ngView, and through bindings of this form: +{{someControllerFunction()}}. In these ways, the view can call functions in an associated +controller function.

    +

    Related Topics

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.$location.html b/app/lib/angular/docs/partials/guide/dev_guide.services.$location.html new file mode 100755 index 000000000..c83f2674d --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.$location.html @@ -0,0 +1,593 @@ + Improve this doc

    +
    +
    +

    +

    What does it do?

    +

    The $location service parses the URL in the browser address bar (based on the window.location) and makes the URL available to +your application. Changes to the URL in the address bar are reflected into $location service and +changes to $location are reflected into the browser address bar.

    +

    The $location service:

    +
      +
    • Exposes the current URL in the browser address bar, so you can
        +
      • Watch and observe the URL.
      • +
      • Change the URL.
      • +
      +
    • +
    • Synchronizes the URL with the browser when the user
        +
      • Changes the address bar.
      • +
      • Clicks the back or forward button (or clicks a History link).
      • +
      • Clicks on a link.
      • +
      +
    • +
    • Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
    • +
    +

    Comparing $location to window.location

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    window.location$location service
    purposeallow read/write access to the current browser locationsame
    APIexposes "raw" object with properties that can be directly modifiedexposes jQuery-style getters and setters
    integration with angular application life-cyclenoneknows about all internal life-cycle phases, integrates with $watch, ...
    seamless integration with HTML5 APInoyes (with a fallback for legacy browsers)
    aware of docroot/context from which the application is loadedno - window.location.path returns "/docroot/actual/path"yes - $location.path() returns "/actual/path"
    + +

    When should I use $location?

    +

    Any time your application needs to react to a change in the current URL or if you want to change +the current URL in the browser.

    +

    What does it not do?

    +

    It does not cause a full page reload when the browser URL is changed. To reload the page after +changing the URL, use the lower-level API, $window.location.href.

    +

    General overview of the API

    +

    The $location service can behave differently, depending on the configuration that was provided to +it when it was instantiated. The default configuration is suitable for many applications, for +others customizing the configuration can enable new features.

    +

    Once the $location service is instantiated, you can interact with it via jQuery-style getter and +setter methods that allow you to get or change the current URL in the browser.

    +

    $location service configuration

    +

    To configure the $location service, retrieve the +$locationProvider and set the parameters as follows:

    +
      +
    • html5Mode(mode): {boolean}
      +true - see HTML5 mode
      +false - see Hashbang mode
      +default: false

      +
    • +
    • hashPrefix(prefix): {string}
      +prefix used for Hashbang URLs (used in Hashbang mode or in legacy browser in Html5 mode)
      +default: ""

      +
    • +
    +

    Example configuration

    +
    +$locationProvider.html5Mode(true).hashPrefix('!');
    +
    +

    Getter and setter methods

    +

    $location service provides getter methods for read-only parts of the URL (absUrl, protocol, host, +port) and getter / setter methods for url, path, search, hash: +

    +// get the current path
    +$location.path();
    +
    +// change the path
    +$location.path('/newValue')
    +
    +

    All of the setter methods return the same $location object to allow chaining. For example, to +change multiple segments in one go, chain setters like this: +

    $location.path('/newValue').search({key: value});
    +

    There is a special replace method which can be used to tell the $location service that the next +time the $location service is synced with the browser, the last history record should be replaced +instead of creating a new one. This is useful when you want to implement redirection, which would +otherwise break the back button (navigating back would retrigger the redirection). To change the +current URL without creating a new browser history record you can call: +

    +  $location.path('/someNewPath');
    +  $location.replace();
    +  // or you can chain these as: $location.path('/someNewPath').replace();
    +
    +

    Note that the setters don't update window.location immediately. Instead, the $location service is +aware of the scope life-cycle and coalesces multiple $location +mutations into one "commit" to the window.location object during the scope $digest phase. Since +multiple changes to the $location's state will be pushed to the browser as a single change, it's +enough to call the replace() method just once to make the entire "commit" a replace operation +rather than an addition to the browser history. Once the browser is updated, the $location service +resets the flag set by replace() method and future mutations will create new history records, +unless replace() is called again.

    +

    Setters and character encoding

    +

    You can pass special characters to $location service and it will encode them according to rules +specified in RFC 3986. When you access the methods:

    +
      +
    • All values that are passed to $location setter methods, path(), search(), hash(), are +encoded.
    • +
    • Getters (calls to methods without parameters) return decoded values for the following methods +path(), search(), hash().
    • +
    • When you call the absUrl() method, the returned value is a full url with its segments encoded.
    • +
    • When you call the url() method, the returned value is path, search and hash, in the form +/path?search=a&b=c#hash. The segments are encoded as well.
    • +
    +

    Hashbang and HTML5 Modes

    +

    $location service has two configuration modes which control the format of the URL in the browser +address bar: Hashbang mode (the default) and the HTML5 mode which is based on using the +HTML5 History API. Applications use the same API in +both modes and the $location service will work with appropriate URL segments and browser APIs to +facilitate the browser URL change and history management.

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Hashbang modeHTML5 mode
    configurationthe default{ html5Mode: true }
    URL formathashbang URLs in all browsersregular URLs in modern browser, hashbang URLs in old browser
    <a href=""> link rewritingnoyes
    requires server-side configurationnoyes
    + +

    Hashbang mode (default mode)

    +

    In this mode, $location uses Hashbang URLs in all browsers.

    +

    Example

    +
    +it('should show example', inject(
    +  function($locationProvider) {
    +    $locationProvider.html5Mode(false);
    +    $locationProvider.hashPrefix('!');
    +  },
    +  function($location) {
    +    // open http://host.com/base/index.html#!/a
    +    $location.absUrl() == 'http://host.com/base/index.html#!/a'
    +    $location.path() == '/a'
    +
    +    $location.path('/foo')
    +    $location.absUrl() == 'http://host.com/base/index.html#!/foo'
    +
    +    $location.search() == {}
    +    $location.search({a: 'b', c: true});
    +    $location.absUrl() == 'http://host.com/base/index.html#!/foo?a=b&c'
    +
    +    $location.path('/new').search('x=y');
    +    $location.absUrl() == 'http://host.com/base/index.html#!/new?x=y'
    +  }
    +));
    +
    +

    Crawling your app

    +

    To allow indexing of your AJAX application, you have to add special meta tag in the head section of +your document: +

    <meta name="fragment" content="!" />
    +

    This will cause crawler bot to request links with _escaped_fragment_ param so that your server +can recognize the crawler and serve a HTML snapshots. For more information about this technique, +see Making AJAX Applications Crawlable.

    +

    HTML5 mode

    +

    In HTML5 mode, the $location service getters and setters interact with the browser URL address +through the HTML5 history API, which allows for use of regular URL path and search segments, +instead of their hashbang equivalents. If the HTML5 History API is not supported by a browser, the +$location service will fall back to using the hashbang URLs automatically. This frees you from +having to worry about whether the browser displaying your app supports the history API or not; the +$location service transparently uses the best available option.

    +
      +
    • Opening a regular URL in a legacy browser -> redirects to a hashbang URL
    • +
    • Opening hashbang URL in a modern browser -> rewrites to a regular URL
    • +
    +

    Example

    +
    +it('should show example', inject(
    +  function($locationProvider) {
    +    $locationProvider.html5Mode(true);
    +    $locationProvider.hashPrefix('!');
    +  },
    +  function($location) {
    +    // in browser with HTML5 history support:
    +    // open http://host.com/#!/a -> rewrite to http://host.com/a
    +    // (replacing the http://host.com/#!/a history record)
    +    $location.path() == '/a'
    +
    +    $location.path('/foo');
    +    $location.absUrl() == 'http://host.com/foo'
    +
    +    $location.search() == {}
    +    $location.search({a: 'b', c: true});
    +    $location.absUrl() == 'http://host.com/foo?a=b&c'
    +
    +    $location.path('/new').search('x=y');
    +    $location.url() == 'new?x=y'
    +    $location.absUrl() == 'http://host.com/new?x=y'
    +
    +    // in browser without html5 history support:
    +    // open http://host.com/new?x=y -> redirect to http://host.com/#!/new?x=y
    +    // (again replacing the http://host.com/new?x=y history item)
    +    $location.path() == '/new'
    +    $location.search() == {x: 'y'}
    +
    +    $location.path('/foo/bar');
    +    $location.path() == '/foo/bar'
    +    $location.url() == '/foo/bar?x=y'
    +    $location.absUrl() == 'http://host.com/#!/foo/bar?x=y'
    +  }
    +));
    +
    +

    Fallback for legacy browsers

    +

    For browsers that support the HTML5 history API, $location uses the HTML5 history API to write +path and search. If the history API is not supported by a browser, $location supplies a Hasbang +URL. This frees you from having to worry about whether the browser viewing your app supports the +history API or not; the $location service makes this transparent to you.

    +

    Html link rewriting

    +

    When you use HTML5 history API mode, you will need different links in different browsers, but all you +have to do is specify regular URL links, such as: <a href="/some?foo=bar">link</a>

    +

    When a user clicks on this link,

    +
      +
    • In a legacy browser, the URL changes to /index.html#!/some?foo=bar
    • +
    • In a modern browser, the URL changes to /some?foo=bar
    • +
    +

    In cases like the following, links are not rewritten; instead, the browser will perform a full page +reload to the original link.

    +
      +
    • Links that contain target element
      +Example: <a href="/ext/link?a=b" target="_self">link</a>
    • +
    • Absolute links that go to a different domain
      +Example: <a href="http://angularjs.org/">link</a>
    • +
    • Links starting with '/' that lead to a different base path when base is defined
      +Example: <a href="/not-my-base/link">link</a>
    • +
    +

    Server side

    +

    Using this mode requires URL rewriting on server side, basically you have to rewrite all your links +to entry point of your application (e.g. index.html)

    +

    Crawling your app

    +

    If you want your AJAX application to be indexed by web crawlers, you will need to add the following +meta tag to the HEAD section of your document: +

    <meta name="fragment" content="!" />
    +

    This statement causes a crawler to request links with an empty _escaped_fragment_ parameter so that +your server can recognize the crawler and serve it HTML snapshots. For more information about this +technique, see Making AJAX Applications Crawlable.

    +

    Relative links

    +

    Be sure to check all relative links, images, scripts etc. You must either specify the url base in +the head of your main html file (<base href="/my-base">) or you must use absolute urls +(starting with /) everywhere because relative urls will be resolved to absolute urls using the +initial absolute url of the document, which is often different from the root of the application.

    +

    Running Angular apps with the History API enabled from document root is strongly encouraged as it +takes care of all relative link issues.

    +

    Sending links among different browsers

    +

    Because of rewriting capability in HTML5 mode, your users will be able to open regular url links in +legacy browsers and hashbang links in modern browser:

    +
      +
    • Modern browser will rewrite hashbang URLs to regular URLs.
    • +
    • Older browsers will redirect regular URLs to hashbang URLs.
    • +
    +

    Example

    +

    Here you can see two $location instances, both in Html5 mode, but on different browsers, so +that you can see the differences. These $location services are connected to a fake browsers. Each +input represents address bar of the browser.

    +

    Note that when you type hashbang url into first browser (or vice versa) it doesn't rewrite / +redirect to regular / hashbang url, as this conversion happens only during parsing the initial URL += on page reload.

    +

    In this examples we use <base href="/base/index.html" /> +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Caveats

    +

    Page reload navigation

    +

    The $location service allows you to change only the URL; it does not allow you to reload the +page. When you need to change the URL and reload the page or navigate to a different page, please +use a lower level API, $window.location.href.

    +

    Using $location outside of the scope life-cycle

    +

    $location knows about Angular's scope life-cycle. When a URL changes in +the browser it updates the $location and calls $apply so that all $watchers / $observers are +notified. +When you change the $location inside the $digest phase everything is ok; $location will +propagate this change into browser and will notify all the $watchers / $observers. +When you want to change the $location from outside Angular (for example, through a DOM Event or +during testing) - you must call $apply to propagate the changes.

    +

    $location.path() and ! or / prefixes

    +

    A path should always begin with forward slash (/); the $location.path() setter will add the +forward slash if it is missing.

    +

    Note that the ! prefix in the hashbang mode is not part of $location.path(); it is actually +hashPrefix.

    +

    Testing with the $location service

    +

    When using $location service during testing, you are outside of the angular's scope life-cycle. This means it's your responsibility to call scope.$apply().

    +
    +describe('serviceUnderTest', function() {
    +  beforeEach(module(function($provide) {
    +    $provide.factory('serviceUnderTest', function($location){
    +      // whatever it does...
    +    });
    +  });
    +
    +  it('should...', inject(function($location, $rootScope, serviceUnderTest) {
    +    $location.path('/new/path');
    +    $rootScope.$apply();
    +
    +    // test whatever the service should do...
    +
    +  }));
    +});
    +
    +

    Migrating from earlier AngularJS releases

    +

    In earlier releases of Angular, $location used hashPath or hashSearch to process path and +search methods. With this release, the $location service processes path and search methods and +then uses the information it obtains to compose hashbang URLs (such as +http://server.com/#!/path?search=a), when necessary.

    +

    Changes to your code

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Navigation inside the appChange to
    $location.href = value
    $location.hash = value
    $location.update(value)
    $location.updateHash(value)
    $location.path(path).search(search)
    $location.hashPath = path$location.path(path)
    $location.hashSearch = search$location.search(search)
    Navigation outside the appUse lower level API
    $location.href = value
    $location.update(value)
    $window.location.href = value
    $location[protocol | host | port | path | search]$window.location[protocol | host | port | path | search]
    Read accessChange to
    $location.hashPath$location.path()
    $location.hashSearch$location.search()
    $location.href
    $location.protocol
    $location.host
    $location.port
    $location.hash
    $location.absUrl()
    $location.protocol()
    $location.host()
    $location.port()
    $location.path() + $location.search()
    $location.path
    $location.search
    $window.location.path
    $window.location.search
    + +

    Two-way binding to $location

    +

    The Angular's compiler currently does not support two-way binding for methods (see issue). If you should require two-way binding +to the $location object (using ngModel directive on an input field), you will need to specify an extra model property +(e.g. locationPath) with two watchers which push $location updates in both directions. For +example: +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.creating_services.html b/app/lib/angular/docs/partials/guide/dev_guide.services.creating_services.html new file mode 100755 index 000000000..69d5a8f42 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.creating_services.html @@ -0,0 +1,85 @@ + Improve this doc

    +
    +
    +

    +

    While Angular offers several useful services, for any nontrivial application you'll find it useful +to write your own custom services. To do this you begin by registering a service factory function +with a module either via the Module#factory api or directly +via the $provide api inside of module config function.

    +

    All Angular services participate in dependency injection (DI) by registering +themselves with Angular's DI system (injector) under a name (id) as well as by declaring +dependencies which need to be provided for the factory function of the registered service. The +ability to swap dependencies for mocks/stubs/dummies in tests allows for services to be highly +testable.

    +

    Registering Services

    +

    To register a service, you must have a module that this service will be part of. Afterwards, you +can register the service with the module either via the Module api or +by using the $provide service in the module configuration +function.The following pseudo-code shows both approaches:

    +

    Using the angular.Module api: +

    +var myModule = angular.module('myModule', []);
    +myModule.factory('serviceId', function() {
    +  var shinyNewServiceInstance;
    +  //factory function body that constructs shinyNewServiceInstance
    +  return shinyNewServiceInstance;
    +});
    +
    +

    Using the $provide service: +

    +angular.module('myModule', [], function($provide) {
    +  $provide.factory('serviceId', function() {
    +    var shinyNewServiceInstance;
    +    //factory function body that constructs shinyNewServiceInstance
    +    return shinyNewServiceInstance;
    +  });
    +});
    +
    +

    Note that you are not registering a service instance, but rather a factory function that will +create this instance when called.

    +

    Dependencies

    +

    Services can not only be depended upon, but can also have their own dependencies. These can be specified +as arguments of the factory function. Read more about dependency injection (DI) +in Angular and the use of array notation and the $inject property to make DI annotation +minification-proof.

    +

    Following is an example of a very simple service. This service depends on the $window service +(which is passed as a parameter to the factory function) and is just a function. The service simply +stores all notifications; after the third one, the service displays all of the notifications by +window alert.

    +
    +angular.module('myModule', [], function($provide) {
    +  $provide.factory('notify', ['$window', function(win) {
    +    var msgs = [];
    +    return function(msg) {
    +      msgs.push(msg);
    +      if (msgs.length == 3) {
    +        win.alert(msgs.join("\n"));
    +        msgs = [];
    +      }
    +    };
    +  }]);
    +});
    +
    +

    Instantiating Angular Services

    +

    All services in Angular are instantiated lazily. This means that a service will be created +only when it is needed for instantiation of a service or an application component that depends on it. +In other words, Angular won't instantiate services unless they are requested directly or +indirectly by the application.

    +

    Services as singletons

    +

    Lastly, it is important to realize that all Angular services are application singletons. This means +that there is only one instance of a given service per injector. Since Angular is lethally allergic +to global state, it is possible to create multiple injectors, each with its own instance of a +given service, but that is rarely needed, except in tests where this property is crucially +important.

    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.html b/app/lib/angular/docs/partials/guide/dev_guide.services.html new file mode 100755 index 000000000..bd43ca1b6 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.html @@ -0,0 +1,20 @@ + Improve this doc

    +
    +
    +

    +

    Services are a feature that Angular brings to client-side web apps from the server side, where +services have been commonly used for a long time. Services in Angular apps are substitutable +objects that are wired together using dependency injection (DI).

    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.injecting_controllers.html b/app/lib/angular/docs/partials/guide/dev_guide.services.injecting_controllers.html new file mode 100755 index 000000000..976cf976e --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.injecting_controllers.html @@ -0,0 +1,131 @@ + Improve this doc

    +
    +
    +

    +

    Using services as dependencies for controllers is very similar to using services as dependencies +for another service.

    +

    Since JavaScript is a dynamic language, DI can't figure out which services to inject by static +types (like in static typed languages). Therefore, you can specify the service name by using the +$inject property, which is an array containing strings with names of services to be injected. +The name must match the corresponding service ID registered with angular. The order of the service +IDs matters: the order of the services in the array will be used when calling the factory function +with injected parameters. The names of parameters in factory function don't matter, but by +convention they match the service IDs, which has added benefits discussed below.

    +
    +function myController($loc, $log) {
    +this.firstMethod = function() {
    + // use $location service
    + $loc.setHash();
    +};
    +this.secondMethod = function() {
    + // use $log service
    + $log.info('...');
    +};
    +}
    +// which services to inject ?
    +myController.$inject = ['$location', '$log'];
    +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Implicit Dependency Injection

    +

    A new feature of Angular DI allows it to determine the dependency from the name of the parameter. +Let's rewrite the above example to show the use of this implicit dependency injection of +$window, $scope, and our notify service:

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    However, if you plan to minify your +code, your variable names will get renamed in which case you will still need to explicitly specify +dependencies with the $inject property.

    +

    Related Topics

    +

    Understanding Angular Services +Creating Angular Services +Managing Service Dependencies +Testing Angular Services

    +

    Related API

    +

    Angular Service API

    +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.managing_dependencies.html b/app/lib/angular/docs/partials/guide/dev_guide.services.managing_dependencies.html new file mode 100755 index 000000000..697605de6 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.managing_dependencies.html @@ -0,0 +1,100 @@ + Improve this doc

    +
    +
    +

    +

    Angular allows services to declare other services as dependencies needed for construction of their +instances.

    +

    To declare dependencies, you specify them in the factory function signature and annotate the +function with the inject annotations either using by setting the $inject property, as an array of +string identifiers or using the array notation. Optionally the $inject property declaration can be +dropped (see "Inferring $inject" but note that that is currently an experimental feature).

    +

    Using the array notation:

    +
    +function myModuleCfgFn($provide) {
    +  $provide.factory('myService', ['dep1', 'dep2', function(dep1, dep2) {}]);
    +}
    +
    +

    Using the $inject property:

    +
    +function myModuleCfgFn($provide) {
    +  var myServiceFactory = function(dep1, dep2) {};
    +  myServiceFactory.$inject = ['dep1', 'dep2'];
    +  $provide.factory('myService', myServiceFactory);
    +}
    +
    +

    Using DI inference (incompatible with minifiers):

    +
    +function myModuleCfgFn($provide) {
    +  $provide.factory('myService', function(dep1, dep2) {});
    +}
    +
    +

    Here is an example of two services, one of which depends on the other and both +of which depend on other services that are provided by the Angular framework:

    +
    +/**
    + * batchLog service allows for messages to be queued in memory and flushed
    + * to the console.log every 50 seconds.
    + *
    + * @param {*} message Message to be logged.
    + */
    +  function batchLogModule($provide){
    +    $provide.factory('batchLog', ['$timeout', '$log', function($timeout, $log) {
    +      var messageQueue = [];
    +
    +      function log() {
    +        if (messageQueue.length) {
    +          $log('batchLog messages: ', messageQueue);
    +          messageQueue = [];
    +        }
    +        $timeout(log, 50000);
    +      }
    +
    +      // start periodic checking
    +      log();
    +
    +      return function(message) {
    +        messageQueue.push(message);
    +      }
    +    }]);
    +
    +    /**
    +     * routeTemplateMonitor monitors each $route change and logs the current
    +     * template via the batchLog service.
    +     */
    +    $provide.factory('routeTemplateMonitor',
    +                ['$route', 'batchLog', '$rootScope',
    +         function($route,   batchLog,   $rootScope) {
    +      $rootScope.$on('$routeChangeSuccess', function() {
    +        batchLog($route.current ? $route.current.template : null);
    +      });
    +    }]);
    +  }
    +
    +  // get the main service to kick of the application
    +  angular.injector([batchLogModule]).get('routeTemplateMonitor');
    +
    +

    Things to notice in this example:

    +
      +
    • The batchLog service depends on the built-in $timeout and +$log services, and allows messages to be logged into the +console.log in batches.
    • +
    • The routeTemplateMonitor service depends on the built-in $route service as well as our custom batchLog service.
    • +
    • Both of our services use the factory function signature and array notation for inject annotations +to declare their dependencies. It is important that the order of the string identifiers in the array +is the same as the order of argument names in the signature of the factory function. Unless the +dependencies are inferred from the function signature, it is this array with IDs and their order +that the injector uses to determine which services and in which order to inject.
    • +
    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.testing_services.html b/app/lib/angular/docs/partials/guide/dev_guide.services.testing_services.html new file mode 100755 index 000000000..7f0edabf8 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.testing_services.html @@ -0,0 +1,60 @@ + Improve this doc

    +
    +
    +

    +

    The following is a unit test for the 'notify' service in the 'Dependencies' example in Creating Angular Services. The unit test example uses Jasmine +spy (mock) instead of a real browser alert.

    +
    +var mock, notify;
    +
    +beforeEach(function() {
    +  mock = {alert: jasmine.createSpy()};
    +
    +  module(function($provide) {
    +    $provide.value('$window', mock);
    +  });
    +
    +  inject(function($injector) {
    +    notify = $injector.get('notify');
    +  });
    +});
    +
    +it('should not alert first two notifications', function() {
    +  notify('one');
    +  notify('two');
    +
    +  expect(mock.alert).not.toHaveBeenCalled();
    +});
    +
    +it('should alert all after third notification', function() {
    +  notify('one');
    +  notify('two');
    +  notify('three');
    +
    +  expect(mock.alert).toHaveBeenCalledWith("one\ntwo\nthree");
    +});
    +
    +it('should clear messages after alert', function() {
    +  notify('one');
    +  notify('two');
    +  notify('third');
    +  notify('more');
    +  notify('two');
    +  notify('third');
    +
    +  expect(mock.alert.callCount).toEqual(2);
    +  expect(mock.alert.mostRecentCall.args).toEqual(["more\ntwo\nthird"]);
    +});
    +
    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.services.understanding_services.html b/app/lib/angular/docs/partials/guide/dev_guide.services.understanding_services.html new file mode 100755 index 000000000..483c898dc --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.services.understanding_services.html @@ -0,0 +1,32 @@ + Improve this doc

    +
    +
    +

    +

    Angular services are singletons that carry out specific tasks common to web apps, such as the +$http service that provides low level access to the browser's +XMLHttpRequest object.

    +

    To use an Angular service, you identify it as a dependency for the dependent (a controller, or +another service) that depends on the service. Angular's dependency injection subsystem takes care +of the rest. The Angular injector subsystem is in charge of service instantiation, resolution of +dependencies, and provision of dependencies to factory functions as requested.

    +

    Angular injects dependencies using "constructor" injection (the service is passed in via a factory +function). Because JavaScript is a dynamically typed language, Angular's dependency injection +subsystem cannot use static types to identify service dependencies. For this reason a dependent +must explicitly define its dependencies by using the $inject property. For example:

    +
        myController.$inject = ['$location'];
    +

    The Angular web framework provides a set of services for common operations. Like other core Angular +variables and identifiers, the built-in services always start with $ (such as $http mentioned +above). You can also create your own custom services.

    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.templates.css-styling.html b/app/lib/angular/docs/partials/guide/dev_guide.templates.css-styling.html new file mode 100755 index 000000000..7698dcc92 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.templates.css-styling.html @@ -0,0 +1,27 @@ + Improve this doc

    +
    +
    +

    +

    Angular sets these CSS classes. It is up to your application to provide useful styling.

    +

    CSS classes used by angular

    +
      +
    • ng-invalid, ng-valid

      +
        +
      • Usage: angular applies this class to an input widget element if that element's input does +not pass validation. (see input directive).
      • +
      +
    • +
    • ng-pristine, ng-dirty

      +
        +
      • Usage: angular input directive applies ng-pristine class +to a new input widget element which did not have user interaction. Once the user interacts with +the input widget the class is changed to ng-dirty.
      • +
      +
    • +
    +

    Related Topics

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.templates.databinding.html b/app/lib/angular/docs/partials/guide/dev_guide.templates.databinding.html new file mode 100755 index 000000000..65db09a84 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.templates.databinding.html @@ -0,0 +1,33 @@ + Improve this doc

    +
    +
    +

    +

    Data-binding in Angular web apps is the automatic synchronization of data between the model and view +components. The way that Angular implements data-binding lets you treat the model as the +single-source-of-truth in your application. The view is a projection of the model at all times. +When the model changes, the view reflects the change, and vice versa.

    +

    Data Binding in Classical Template Systems

    +

    +Most templating systems bind data in only one direction: they merge template and model components +together into a view, as illustrated in the diagram. After the merge occurs, changes to the model +or related sections of the view are NOT automatically reflected in the view. Worse, any changes +that the user makes to the view are not reflected in the model. This means that the developer has +to write code that constantly syncs the view with the model and the model with the view.

    +

    Data Binding in Angular Templates

    +

    +The way Angular templates works is different, as illustrated in the diagram. They are different +because first the template (which is the uncompiled HTML along with any additional markup or +directives) is compiled on the browser, and second, the compilation step produces a live view. We +say live because any changes to the view are immediately reflected in the model, and any changes in +the model are propagated to the view. This makes the model always the single-source-of-truth for +the application state, greatly simplifying the programming model for the developer. You can think of +the view as simply an instant projection of your model.

    +

    Because the view is just a projection of the model, the controller is completely separated from the +view and unaware of it. This makes testing a snap because it is easy to test your controller in +isolation without the view and the related DOM/browser dependency.

    +

    Related Topics

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.creating_filters.html b/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.creating_filters.html new file mode 100755 index 000000000..0b9d4f4cf --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.creating_filters.html @@ -0,0 +1,70 @@ + Improve this doc

    +
    +
    +

    +

    Writing your own filter is very easy: just register a new filter (injectable) factory function with +your module. This factory function should return a new filter function which takes the input value +as the first argument. Any filter arguments are passed in as additional arguments to the filter +function.

    +

    The following sample filter reverses a text string. In addition, it conditionally makes the +text upper-case.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.html b/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.html new file mode 100755 index 000000000..032b18ec7 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.html @@ -0,0 +1,20 @@ + Improve this doc

    +
    +
    +

    +

    Angular filters format data for display to the user.

    +

    For example, you might have a data object that needs to be formatted according to the locale before +displaying it to the user. You can pass expressions through a chain of filters like this:

    +
        name | uppercase
    +

    The expression evaluator simply passes the value of name to +uppercase filter.

    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.using_filters.html b/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.using_filters.html new file mode 100755 index 000000000..9b0aca366 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.templates.filters.using_filters.html @@ -0,0 +1,36 @@ + Improve this doc

    +
    +
    +

    +

    Filters can be part of any api/ng.$rootScope.Scope evaluation but are typically used to format +expressions in bindings in your templates:

    +
        {{ expression | filter }}
    +

    Filters typically transform the data to a new data type, formatting the data in the process. +Filters can also be chained, and can take optional arguments.

    +

    You can chain filters using this syntax:

    +
        {{ expression | filter1 | filter2 }}
    +

    You can also pass colon-delimited arguments to filters, for example, to display the number 123 with +2 decimal points:

    +
        123 | number:2
    +

    Use the same syntax for multiple arguments:

    +
        myArray | orderBy:'timestamp':true
    +

    Here are some examples that show values before and after applying different filters to an +expression in a binding:

    +
      +
    • No filter: {{1234.5678}} => 1234.5678
    • +
    • Number filter: {{1234.5678|number}} => 1,234.57. Notice the "," and rounding to two +significant digits.
    • +
    • Filter with arguments: {{1234.5678|number:5}} => 1,234.56780. Filters can take optional +arguments, separated by colons in a binding. For example, the "number" filter takes a number +argument that specifies how many digits to display to the right of the decimal point.
    • +
    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.templates.html b/app/lib/angular/docs/partials/guide/dev_guide.templates.html new file mode 100755 index 000000000..ed8bd4a95 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.templates.html @@ -0,0 +1,52 @@ + Improve this doc

    +
    +
    +

    +

    An Angular template is the declarative specification that, along with information from the model +and controller, becomes the rendered view that a user sees in the browser. It is the static DOM, +containing HTML, CSS, and angular-specific elements and angular-specific element attributes. The +Angular elements and attributes direct angular to add behavior and transform the template DOM into +the dynamic view DOM.

    +

    These are the types of Angular elements and element attributes you can use in a template:

    +
      +
    • Directive — An attribute or element that +augments an existing DOM element or represents a reusable DOM component - a widget.
    • +
    • Markup — The double +curly brace notation {{ }} to bind expressions to elements is built-in angular markup.
    • +
    • Filter — Formats your data for display to the user.
    • +
    • Form controls — Lets you validate user input.
    • +
    +

    Note: In addition to declaring the elements above in templates, you can also access these elements +in JavaScript code.

    +

    The following code snippet shows a simple Angular template made up of standard HTML tags along with +Angular directives and curly-brace bindings +with expressions:

    +
    +<html ng-app>
    + <!-- Body tag augmented with ngController directive  -->
    + <body ng-controller="MyController">
    +   <input ng-model="foo" value="bar">
    +   <!-- Button tag with ng-click directive, and
    +          string expression 'buttonText'
    +          wrapped in "{{ }}" markup -->
    +   <button ng-click="changeFoo()">{{buttonText}}</button>
    +   <script src="angular.js">
    + </body>
    +</html>
    +
    +

    In a simple single-page app, the template consists of HTML, CSS, and angular directives contained +in just one HTML file (usually index.html). In a more complex app, you can display multiple views +within one main page using "partials", which are segments of template located in separate HTML +files. You "include" the partials in the main page using the $route service in conjunction with the ngView directive. An +example of this technique is shown in the angular tutorial, in steps seven and +eight.

    +

    Related Topics

    + +

    Related API

    + +
    diff --git a/app/lib/angular/docs/partials/guide/dev_guide.unit-testing.html b/app/lib/angular/docs/partials/guide/dev_guide.unit-testing.html new file mode 100755 index 000000000..8467e3a28 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/dev_guide.unit-testing.html @@ -0,0 +1,285 @@ + Improve this doc

    +
    +
    +

    +

    JavaScript is a dynamically typed language which comes with great power of expression, but it also +comes with almost no help from the compiler. For this reason we feel very strongly that any code +written in JavaScript needs to come with a strong set of tests. We have built many features into +Angular which makes testing your Angular applications easy. So there is no excuse for not testing.

    +

    It is all about NOT mixing concerns

    +

    Unit testing as the name implies is about testing individual units of code. Unit tests try to +answer questions such as "Did I think about the logic correctly?" or "Does the sort function order the list +in the right order?"

    +

    In order to answer such question it is very important that we can isolate the unit of code under test. +That is because when we are testing the sort function we don't want to be forced into creating +related pieces such as the DOM elements, or making any XHR calls in getting the data to sort.

    +

    While +this may seem obvious it usually is very difficult to be able to call an individual function on a +typical project. The reason is that the developers often mix concerns, and they end up with a +piece of code which does everything. It reads the data from XHR, it sorts it and then it +manipulates the DOM.

    +

    With Angular we try to make it easy for you to do the right thing, and so we +provide dependency injection for your XHR (which you can mock out) and we created abstraction which +allow you to sort your model without having to resort to manipulating the DOM. So that in the end, +it is easy to write a sort function which sorts some data, so that your test can create a data set, +apply the function, and assert that the resulting model is in the correct order. The test does not +have to wait for XHR, or create the right kind of DOM, or assert that your function has mutated the +DOM in the right way.

    +

    With great power comes great responsibility

    +

    Angular is written with testability in mind, but it still requires that you +do the right thing. We tried to make the right thing easy, but Angular is not magic, which means if +you don't follow these guidelines you may very well end up with an untestable application.

    +

    Dependency Injection

    +

    There are several ways in which you can get a hold of a dependency: +1. You could create it using the new operator. +2. You could look for it in a well known place, also known as global singleton. +3. You could ask a registry (also known as service registry) for it. (But how do you get a hold of +the registry? Most likely by looking it up in a well known place. See #2) +4. You could expect that it be handed to you.

    +

    Out of the four options in the list above, only the last one is testable. Let's look at why:

    +

    Using the new operator

    +

    While there is nothing wrong with the new operator fundamentally the issue is that calling a new +on a constructor permanently binds the call site to the type. For example lets say that we are +trying to instantiate an XHR so that we can get some data from the server.

    +
    +function MyClass() {
    +  this.doWork = function() {
    +    var xhr = new XHR();
    +    xhr.open(method, url, true);
    +    xhr.onreadystatechange = function() {...}
    +    xhr.send();
    +  }
    +}
    +
    +

    The issue becomes that in tests, we would very much like to instantiate a MockXHR which would +allow us to return fake data and simulate network failures. By calling new XHR() we are +permanently bound to the actual XHR, and there is no good way to replace it. Yes there is monkey +patching. That is a bad idea for many reasons which are outside the scope of this document.

    +

    The class above is hard to test since we have to resort to monkey patching: +

    +var oldXHR = XHR;
    +XHR = function MockXHR() {};
    +var myClass = new MyClass();
    +myClass.doWork();
    +// assert that MockXHR got called with the right arguments
    +XHR = oldXHR; // if you forget this bad things will happen
    +
    +

    Global look-up:

    +

    Another way to approach the problem is to look for the service in a well known location.

    +
    +function MyClass() {
    +  this.doWork = function() {
    +    global.xhr({
    +      method:'...',
    +      url:'...',
    +      complete:function(response){ ... }
    +    })
    +  }
    +}
    +
    +

    While no new instance of the dependency is being created, it is fundamentally the same as new, in +that there is no good way to intercept the call to global.xhr for testing purposes, other then +through monkey patching. The basic issue for testing is that a global variable needs to be mutated in +order to replace it with call to a mock method. For further explanation why this is bad see: Brittle Global State & Singletons

    +

    The class above is hard to test since we have to change global state: +

    +var oldXHR = global.xhr;
    +global.xhr = function mockXHR() {};
    +var myClass = new MyClass();
    +myClass.doWork();
    +// assert that mockXHR got called with the right arguments
    +global.xhr = oldXHR; // if you forget this bad things will happen
    +
    +

    Service Registry:

    +

    It may seem as that this can be solved by having a registry for all of the services, and then +having the tests replace the services as needed.

    +
    +function MyClass() {
    +  var serviceRegistry = ????;
    +  this.doWork = function() {
    +    var xhr = serviceRegistry.get('xhr');
    +    xhr({
    +      method:'...',
    +      url:'...',
    +      complete:function(response){ ... }
    +    })
    +}
    +
    +

    However, where does the serviceRegistry come from? if it is: + new-ed up, the the test has no chance to reset the services for testing + global look-up, then the service returned is global as well (but resetting is easier, since +there is only one global variable to be reset).

    +

    The class above is hard to test since we have to change global state: +

    +var oldServiceLocator = global.serviceLocator;
    +global.serviceLocator.set('xhr', function mockXHR() {});
    +var myClass = new MyClass();
    +myClass.doWork();
    +// assert that mockXHR got called with the right arguments
    +global.serviceLocator = oldServiceLocator; // if you forget this bad things will happen
    +
    +

    Passing in Dependencies:

    +

    Lastly the dependency can be passed in.

    +
    +function MyClass(xhr) {
    +  this.doWork = function() {
    +    xhr({
    +      method:'...',
    +      url:'...',
    +      complete:function(response){ ... }
    +    })
    +}
    +
    +

    This is the preferred way since the code makes no assumptions as to where the xhr comes from, +rather that whoever created the class was responsible for passing it in. Since the creator of the +class should be different code than the user of the class, it separates the responsibility of +creation from the logic, and that is what dependency-injection is in a nutshell.

    +

    The class above is very testable, since in the test we can write: +

    +function xhrMock(args) {...}
    +var myClass = new MyClass(xhrMock);
    +myClass.doWork();
    +// assert that xhrMock got called with the right arguments
    +
    +

    Notice that no global variables were harmed in the writing of this test.

    +

    Angular comes with dependency injection built in which makes the right thing +easy to do, but you still need to do it if you wish to take advantage of the testability story.

    +

    Controllers

    +

    What makes each application unique is its logic, which is what we would like to test. If the logic +for your application is mixed in with DOM manipulation, it will be hard to test as in the example +below:

    +
    +function PasswordCtrl() {
    +  // get references to DOM elements
    +  var msg = $('.ex1 span');
    +  var input = $('.ex1 input');
    +  var strength;
    +
    +  this.grade = function() {
    +    msg.removeClass(strength);
    +    var pwd = input.val();
    +    password.text(pwd);
    +    if (pwd.length > 8) {
    +      strength = 'strong';
    +    } else if (pwd.length > 3) {
    +      strength = 'medium';
    +    } else {
    +      strength = 'weak';
    +    }
    +    msg
    +     .addClass(strength)
    +     .text(strength);
    +  }
    +}
    +
    +

    The code above is problematic from a testability point of view, since it requires your test to have the right kind +of DOM present when the code executes. The test would look like this:

    +
    +var input = $('<input type="text"/>');
    +var span = $('<span>');
    +$('body').html('<div class="ex1">')
    +  .find('div')
    +    .append(input)
    +    .append(span);
    +var pc = new PasswordCtrl();
    +input.val('abc');
    +pc.grade();
    +expect(span.text()).toEqual('weak');
    +$('body').html('');
    +
    +

    In angular the controllers are strictly separated from the DOM manipulation logic which results in +a much easier testability story as can be seen in this example:

    +
    +function PasswordCtrl($scope) {
    +  $scope.password = '';
    +  $scope.grade = function() {
    +    var size = $scope.password.length;
    +    if (size > 8) {
    +      $scope.strength = 'strong';
    +    } else if (size > 3) {
    +      $scope.strength = 'medium';
    +    } else {
    +      $scope.strength = 'weak';
    +    }
    +  };
    +}
    +
    +

    and the test is straight forward

    +
    +var $scope = {};
    +var pc = $controller('PasswordCtrl', { $scope: $scope });
    +$scope.password = 'abc';
    +$scope.grade();
    +expect($scope.strength).toEqual('weak');
    +
    +

    Notice that the test is not only much shorter but it is easier to follow what is going on. We say +that such a test tells a story, rather then asserting random bits which don't seem to be related.

    +

    Filters

    +

    Filters are functions which transform the data into user readable +format. They are important because they remove the formatting responsibility from the application +logic, further simplifying the application logic.

    +
    +myModule.filter('length', function() {
    +  return function(text){
    +    return (''+(text||'')).length;
    +  }
    +});
    +
    +var length = $filter('length');
    +expect(length(null)).toEqual(0);
    +expect(length('abc')).toEqual(3);
    +
    +

    Directives

    +

    Directives in angular are responsible for encapsulating complex functionality within custom HTML tags, +attributes, classes or comments. Unit tests are very important for directives because the components +you create with directives may be used throughout your application and in many different contexts.

    +

    Simple HTML Element Directive

    +

    Lets start with an angular app with no dependencies.

    +
    +var app = angular.module('myApp', []);
    +
    +

    Now we can add a directive to our app.

    +
    +app.directive('aGreatEye', function () {
    +    return {
    +        restrict: 'E',
    +        replace:  true,
    +        template: '<h1>lidless, wreathed in flame, {{1 + 1}} times</h1>'
    +    };
    +});
    +
    +

    This directive is used as a tag <a-great-eye></a-great-eye>. It replaces the entire tag with the +template <h1>lidless, wreathed in flame, {{1 + 1}} times</h1>. Now we are going to write a jasmine unit test to +verify this functionality. Note that the expression {{1 + 1}} times will also be evaluated in the rendered content.

    +
    +describe('Unit testing great quotes', function() {
    +    var $compile;
    +    var $rootScope;
    +
    +    // Load the myApp module, which contains the directive
    +    beforeEach(module('myApp'));
    +
    +    // Store references to $rootScope and $compile
    +    // so they are available to all tests in this describe block
    +    beforeEach(inject(function(_$compile_, _$rootScope_){
    +      // The injector unwraps the underscores (_) from around the parameter names when matching
    +      $compile = _$compile_;
    +      $rootScope = _$rootScope_;
    +    }));
    +    
    +    it('Replaces the element with the appropriate content', function() {
    +        // Compile a piece of HTML containing the directive
    +        var element = $compile("<a-great-eye></a-great-eye>")($rootScope);
    +        // fire all the watches, so the scope expression {{1 + 1}} will be evaluated
    +        $rootScope.$digest();
    +        // Check that the compiled element contains the templated content
    +        expect(element.html()).toContain("lidless, wreathed in flame, 2 times");
    +    });
    +});
    +
    +

    We inject the $compile service and $rootScope before each jasmine test. The $compile service is used +to render the aGreatEye directive. After rendering the directive we ensure that the directive has +replaced the content and "lidless, wreathed in flame, 2 times" is present.

    +

    Sample project

    +

    See the angular-seed project for an example.

    +
    diff --git a/app/lib/angular/docs/partials/guide/di.html b/app/lib/angular/docs/partials/guide/di.html new file mode 100755 index 000000000..09e45c350 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/di.html @@ -0,0 +1,188 @@ + Improve this doc

    +
    +
    +

    +

    Dependency Injection

    +

    Dependency Injection (DI) is a software design pattern that deals with how code gets hold of its +dependencies.

    +

    For in-depth discussion about DI, see Dependency Injection at Wikipedia, Inversion of Control by Martin Fowler, or read about DI in your favorite software design pattern +book.

    +

    DI in a nutshell

    +

    There are only three ways an object or a function can get a hold of its dependencies:

    +
      +
    1. The dependency can be created, typically using the new operator.

      +
    2. +
    3. The dependency can be looked up by referring to a global variable.

      +
    4. +
    5. The dependency can be passed in to where it is needed.

      +
    6. +
    +

    The first two options of creating or looking up dependencies are not optimal because they hard +code the dependency. This makes it difficult, if not impossible, to modify the dependencies. +This is especially problematic in tests, where it is often desirable to provide mock dependencies +for test isolation.

    +

    The third option is the most viable, since it removes the responsibility of locating the +dependency from the component. The dependency is simply handed to the component.

    +
    +  function SomeClass(greeter) {
    +    this.greeter = greeter;
    +  }
    +  
    +  SomeClass.prototype.doSomething = function(name) {
    +    this.greeter.greet(name);
    +  }
    +
    +

    In the above example SomeClass is not concerned with locating the greeter dependency, it +is simply handed the greeter at runtime.

    +

    This is desirable, but it puts the responsibility of getting hold of the dependency on the +code that constructs SomeClass.

    +

    To manage the responsibility of dependency creation, each Angular application has an injector. The injector is a service locator that is responsible for +construction and lookup of dependencies.

    +

    Here is an example of using the injector service:

    +
    +  // Provide the wiring information in a module
    +  angular.module('myModule', []).
    +  
    +    // Teach the injector how to build a 'greeter'
    +    // Notice that greeter itself is dependent on '$window'
    +    factory('greeter', function($window) {
    +      // This is a factory function, and is responsible for 
    +      // creating the 'greet' service.
    +      return {
    +        greet: function(text) {
    +          $window.alert(text);
    +        }
    +      };
    +    });
    +
    +  // New injector is created from the module. 
    +  // (This is usually done automatically by angular bootstrap)
    +  var injector = angular.injector(['myModule', 'ng']);
    +  
    +  // Request any dependency from the injector
    +  var greeter = injector.get('greeter');
    +
    +

    Asking for dependencies solves the issue of hard coding, but it also means that the injector needs +to be passed throughout the application. Passing the injector breaks the Law of Demeter. To remedy this, we turn the +dependency lookup responsibility to the injector by declaring the dependencies as in this example:

    +
    +  <!-- Given this HTML -->
    +  <div ng-controller="MyController">
    +    <button ng-click="sayHello()">Hello</button>
    +  </div>
    +

    +  // And this controller definition
    +  function MyController($scope, greeter) {
    +    $scope.sayHello = function() {
    +      greeter.greet('Hello World');
    +    };
    +  }
    +  
    +  // The 'ng-controller' directive does this behind the scenes
    +  injector.instantiate(MyController);
    +
    +

    Notice that by having the ng-controller instantiate the class, it can satisfy all of the +dependencies of MyController without the controller ever knowing about the injector. This is +the best outcome. The application code simply asks for the dependencies it needs, without having to +deal with the injector. This setup does not break the Law of Demeter.

    +

    Dependency Annotation

    +

    How does the injector know what service needs to be injected?

    +

    The application developer needs to provide annotation information that the injector uses in order +to resolve the dependencies. Throughout Angular, certain API functions are invoked using the +injector, as per the API documentation. The injector needs to know what services to inject into +the function. Below are three equivalent ways of annotating your code with service name +information. These can be used interchangeably as you see fit and are equivalent.

    +

    Inferring Dependencies

    +

    The simplest way to get hold of the dependencies, is to assume that the function parameter names +are the names of the dependencies.

    +
    +  function MyController($scope, greeter) {
    +    ...
    +  }
    +
    +

    Given a function the injector can infer the names of the service to inject by examining the +function declaration and extracting the parameter names. In the above example $scope, and +greeter are two services which need to be injected into the function.

    +

    While straightforward, this method will not work with JavaScript minifiers/obfuscators as they +rename the method parameter names. This makes this way of annotating only useful for pretotyping, and demo applications.

    +

    $inject Annotation

    +

    To allow the minifers to rename the function parameters and still be able to inject right services +the function needs to be annotated with the $inject property. The $inject property is an array +of service names to inject.

    +
    +  var MyController = function(renamed$scope, renamedGreeter) {
    +    ...
    +  }
    +  MyController.$inject = ['$scope', 'greeter'];
    +
    +

    In this scenario the ordering of the values in the '$inject' array must match the ordering of the arguments to inject. +Using above code snippet as an example, '$scope' will be injected into 'renamed$scope' and 'greeter' into 'renamedGreeter'. +Care must be taken that the $inject annotation is kept in sync with the actual arguments in the +function declaration.

    +

    This method of annotation is useful for controller declarations since it assigns the annotation +information with the function.

    +

    Inline Annotation

    +

    Sometimes using the $inject annotation style is not convenient such as when annotating +directives.

    +

    For example:

    +
    +  someModule.factory('greeter', function($window) {
    +    ...
    +  });
    +
    +

    Results in code bloat due to needing a temporary variable:

    +
    +  var greeterFactory = function(renamed$window) {
    +    ...
    +  };
    +  
    +  greeterFactory.$inject = ['$window'];
    +  
    +  someModule.factory('greeter', greeterFactory);
    +
    +

    For this reason the third annotation style is provided as well.

    +
    +  someModule.factory('greeter', ['$window', function(renamed$window) {
    +    ...
    +  }]);
    +
    +

    Keep in mind that all of the annotation styles are equivalent and can be used anywhere in Angular +where injection is supported.

    +

    Where can I use DI?

    +

    DI is pervasive throughout Angular. It is typically used in controllers and factory methods.

    +

    DI in controllers

    +

    Controllers are classes which are responsible for application behavior. The recommended way of +declaring controllers is using the array notation:

    +
    +  someModule.controller('MyController', ['$scope', 'dep1', 'dep2', function($scope, dep1, dep2) {
    +    ...
    +    $scope.aMethod = function() {
    +      ...
    +    }
    +    ...
    +  }]);
    +
    +

    This avoids the creation of global functions for controllers and also protects against minification.

    +

    Factory methods

    +

    Factory methods are responsible for creating most objects in Angular. Examples are directives, +services, and filters. The factory methods are registered with the module, and the recommended way +of declaring factories is:

    +
    +  angular.module('myModule', []).
    +    config(['depProvider', function(depProvider){
    +      ...
    +    }]).
    +    factory('serviceId', ['depService', function(depService) {
    +      ...
    +    }]).
    +    directive('directiveName', ['depService', function(depService) {
    +      ...
    +    }]).
    +    filter('filterName', ['depService', function(depService) {
    +      ...
    +    }]).
    +    run(['depService', function(depService) {
    +      ...
    +    }]);
    +
    +
    diff --git a/app/lib/angular/docs/partials/guide/directive.html b/app/lib/angular/docs/partials/guide/directive.html new file mode 100755 index 000000000..5fd155a89 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/directive.html @@ -0,0 +1,701 @@ + Improve this doc

    +
    +
    +

    +

    Directives are a way to teach HTML new tricks. During DOM compilation directives are matched +against the HTML and executed. This allows directives to register behavior, or transform the DOM.

    +

    Angular comes with a built in set of directives which are useful for building web applications but +can be extended such that HTML can be turned into a declarative domain specific language (DSL).

    +

    Invoking directives from HTML

    +

    Directives have camel cased names such as ngBind. The directive can be invoked by translating +the camel case name into snake case with these special characters :, -, or _. Optionally the +directive can be prefixed with x-, or data- to make it HTML validator compliant. Here is a +list of some of the possible directive names: ng:bind, ng-bind, ng_bind, x-ng-bind and +data-ng-bind.

    +

    The directives can be placed in element names, attributes, class names, as well as comments. Here +are some equivalent examples of invoking myDir. (However, most directives are restricted to +attribute only.)

    +
    +  <span my-dir="exp"></span>
    +  <span class="my-dir: exp;"></span>
    +  <my-dir></my-dir>
    +  <!-- directive: my-dir exp -->
    +
    +

    Directives can be invoked in many different ways, but are equivalent in the end result as shown in +the following example.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Text and attribute bindings

    +

    During the compilation process the compiler matches text and +attributes using the $interpolate service to see if they +contain embedded expressions. These expressions are registered as watches and will update as part of normal digest cycle. An example of interpolation is shown +here:

    +
    +<a ng-href="img/{{username}}.jpg">Hello {{username}}!</a>
    +
    +

    ngAttr attribute bindings

    +

    If an attribute with a binding is prefixed with ngAttr prefix (denormalized prefix: 'ng-attr-', +'ng:attr-') then during the compilation the prefix will be removed and the binding will be applied +to an unprefixed attribute. This allows binding to attributes that would otherwise be eagerly +processed by browsers in their uncompiled form (e.g. img[src] or svg's circle[cx] attributes).

    +

    For example, considering template:

    +
    <svg>
    +  <circle ng-attr-cx="{{cx}}"></circle>
    +</svg>
    +

    and model cx set to 5, will result in rendering this dom:

    +
    <svg>
    +  <circle cx="5"></circle>
    +</svg>
    +

    If you were to bind {{cx}} directly to the cx attribute, you'd get the following error: +Error: Invalid value for attribute cx="{{cx}}". With ng-attr-cx you can work around this +problem.

    +

    Compilation process, and directive matching

    +

    Compilation of HTML happens in three phases:

    +
      +
    1. First the HTML is parsed into DOM using the standard browser API. This is important to +realize because the templates must be parsable HTML. This is in contrast to most templating +systems that operate on strings, rather than on DOM elements.

      +
    2. +
    3. The compilation of the DOM is performed by the call to the $compile() method. The method traverses the DOM and matches the directives. If a match is found +it is added to the list of directives associated with the given DOM element. Once all directives +for a given DOM element have been identified they are sorted by priority and their compile() +functions are executed. The directive compile function has a chance to modify the DOM structure +and is responsible for producing a link() function explained next. The $compile() method returns a combined linking function, which is a +collection of all of the linking functions returned from the individual directive compile +functions.

      +
    4. +
    5. Link the template with scope by calling the linking function returned from the previous step. +This in turn will call the linking function of the individual directives allowing them to +register any listeners on the elements and set up any watches with the scope. The result of this is a live binding between the +scope and the DOM. A change in the scope is reflected in the DOM.

      +
    6. +
    +
    +  var $compile = ...; // injected into your code
    +  var scope = ...;
    +
    +  var html = '<div ng-bind="exp"></div>';
    +
    +  // Step 1: parse HTML into DOM element
    +  var template = angular.element(html);
    +
    +  // Step 2: compile the template
    +  var linkFn = $compile(template);
    +
    +  // Step 3: link the compiled template with the scope.
    +  linkFn(scope);
    +
    +

    Reasons behind the compile/link separation

    +

    At this point you may wonder why the compile process is broken down to a compile and link phase. +To understand this, let's look at a real world example with a repeater:

    +
    +  Hello {{user}}, you have these actions:
    +  <ul>
    +    <li ng-repeat="action in user.actions">
    +      {{action.description}}
    +    </li>
    +  </ul>
    +
    +

    The short answer is that compile and link separation is needed any time a change in model causes +a change in DOM structure such as in repeaters.

    +

    When the above example is compiled, the compiler visits every node and looks for directives. The +{{user}} is an example of an interpolation directive. ngRepeat is another directive. But ngRepeat has a dilemma. It needs to be +able to quickly stamp out new lis for every action in user.actions. This means that it needs +to save a clean copy of the li element for cloning purposes and as new actions are inserted, +the template li element needs to be cloned and inserted into ul. But cloning the li element +is not enough. It also needs to compile the li so that its directives such as +{{action.description}} evaluate against the right scope. A naive method would be to simply insert a copy of the li element and then compile it. +But compiling on every li element clone would be slow, since the compilation requires that we +traverse the DOM tree and look for directives and execute them. If we put the compilation inside a +repeater which needs to unroll 100 items we would quickly run into performance problems.

    +

    The solution is to break the compilation process into two phases; the compile phase where all of +the directives are identified and sorted by priority, and a linking phase where any work which +links a specific instance of the scope and the specific +instance of an li is performed.

    +

    ngRepeat works by preventing the +compilation process from descending into the li element. Instead the ngRepeat directive compiles li +separately. The result of the li element compilation is a linking function which contains all +of the directives contained in the li element, ready to be attached to a specific clone of the li +element. At runtime the ngRepeat +watches the expression and as items are added to the array it clones the li element, creates a +new scope for the cloned li element and calls the +link function on the cloned li.

    +

    Summary:

    +
      +
    • compile function - The compile function is relatively rare in directives, since most +directives are concerned with working with a specific DOM element instance rather than +transforming the template DOM element. Any operation which can be shared among the instance of +directives should be moved to the compile function for performance reasons.

      +
    • +
    • link function - It is rare for the directive not to have a link function. A link function +allows the directive to register listeners to the specific cloned DOM element instance as well +as to copy content into the DOM from the scope.

      +
    • +
    +

    Writing directives (short version)

    +

    In this example we will build a directive that displays the current time.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Writing directives (long version)

    +

    There are different ways to declare a directive. The difference resides in the return +value of the factory function. You can either return a Directive Definition Object +(see below) that defines the directive properties, or just the postLink function +of such an object (all other properties will have the default values).

    +

    Here's an example directive declared with a Directive Definition Object:

    +
    +  var myModule = angular.module(...);
    +
    +  myModule.directive('directiveName', function factory(injectables) {
    +    var directiveDefinitionObject = {
    +      priority: 0,
    +      template: '<div></div>', // or // function(tElement, tAttrs) { ... },
    +      // or
    +      // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
    +      replace: false,
    +      transclude: false,
    +      restrict: 'A',
    +      scope: false,
    +      controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
    +      require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
    +      compile: function compile(tElement, tAttrs, transclude) {
    +        return {
    +          pre: function preLink(scope, iElement, iAttrs, controller) { ... },
    +          post: function postLink(scope, iElement, iAttrs, controller) { ... }
    +        }
    +	      // or
    +	      // return function postLink( ... ) { ... }
    +      },
    +      // or
    +      // link: {
    +      //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },
    +      //  post: function postLink(scope, iElement, iAttrs, controller) { ... }
    +      // }
    +      // or
    +      // link: function postLink( ... ) { ... }
    +    };
    +    return directiveDefinitionObject;
    +  });
    +
    +

    In most cases you will not need such fine control and so the above can be simplified. You can still +return a Directive Definition Object, but only setting the 'link' function property of the Object, +and rely on the default values for other properties.

    +

    Therefore the above can be simplified as:

    +
    +  var myModule = angular.module(...);
    +
    +  myModule.directive('directiveName', function factory(injectables) {
    +    var directiveDefinitionObject = {
    +      link: function postLink(scope, iElement, iAttrs) { ... }
    +    };
    +    return directiveDefinitionObject;
    +    // or
    +    // return function postLink(scope, iElement, iAttrs) { ... }
    +  });
    +
    +

    Factory method

    +

    The factory method is responsible for creating the directive. It is invoked only once, when the +compiler matches the directive for the first time. You can +perform any initialization work here. The method is invoked using the $injector.invoke which +makes it injectable following all of the rules of injection annotation.

    +

    Directive Definition Object

    +

    The directive definition object provides instructions to the compiler. The attributes are:

    +
      +
    • name - Name of the current scope. Optional and defaults to the name at registration.

      +
    • +
    • priority - When there are multiple directives defined on a single DOM element, sometimes it +is necessary to specify the order in which the directives are applied. The priority is used +to sort the directives before their compile functions get called. Priority is defined as a +number. Directives with greater numerical priority are compiled first. The order of directives with +the same priority is undefined. The default priority is 0.

      +
    • +
    • terminal - If set to true then the current priority will be the last set of directives +which will execute (any directives at the current priority will still execute +as the order of execution on same priority is undefined).

      +
    • +
    • scope - If set to:

      +
        +
      • true - then a new scope will be created for this directive. If multiple directives on the +same element request a new scope, only one new scope is created. The new scope rule does not +apply for the root of the template since the root of the template always gets a new scope.

        +
      • +
      • {} (object hash) - then a new 'isolate' scope is created. The 'isolate' scope differs from +normal scope in that it does not prototypically inherit from the parent scope. This is useful +when creating reusable components, which should not accidentally read or modify data in the +parent scope.
        +The 'isolate' scope takes an object hash which defines a set of local scope properties +derived from the parent scope. These local properties are useful for aliasing values for +templates. Locals definition is a hash of local scope property to its source:

        +
          +
        • @ or @attr - bind a local scope property to the value of DOM attribute. The result is +always a string since DOM attributes are strings. If no attr name is specified then the +attribute name is assumed to be the same as the local name. +Given <widget my-attr="hello {{name}}"> and widget definition +of scope: { localName:'@myAttr' }, then widget scope property localName will reflect +the interpolated value of hello {{name}}. As the name attribute changes so will the +localName property on the widget scope. The name is read from the parent scope (not +component scope).

          +
        • +
        • = or =attr - set up bi-directional binding between a local scope property and the +parent scope property of name defined via the value of the attr attribute. If no attr +name is specified then the attribute name is assumed to be the same as the local name. +Given <widget my-attr="parentModel"> and widget definition of +scope: { localModel:'=myAttr' }, then widget scope property localModel will reflect the +value of parentModel on the parent scope. Any changes to parentModel will be reflected +in localModel and any changes in localModel will reflect in parentModel. If the parent +scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You +can avoid this behavior using =? or =?attr in order to flag the property as optional.

          +
        • +
        • & or &attr - provides a way to execute an expression in the context of the parent scope. +If no attr name is specified then the attribute name is assumed to be the same as the +local name. Given <widget my-attr="count = count + value"> and widget definition of +scope: { localFn:'&myAttr' }, then isolate scope property localFn will point to +a function wrapper for the count = count + value expression. Often it's desirable to +pass data from the isolated scope via an expression and to the parent scope, this can be +done by passing a map of local variable names and values into the expression wrapper fn. +For example, if the expression is increment(amount) then we can specify the amount value +by calling the localFn as localFn({amount: 22}).

          +
        • +
        +
      • +
      +
    • +
    • controller - Controller constructor function. The controller is instantiated before the +pre-linking phase and it is shared with other directives (see +require attribute). This allows the directives to communicate with each other and augment +each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:

      +
        +
      • $scope - Current scope associated with the element
      • +
      • $element - Current element
      • +
      • $attrs - Current attributes object for the element
      • +
      • $transclude - A transclude linking function pre-bound to the correct transclusion scope: +function(cloneLinkingFn).
      • +
      +
    • +
    • require - Require another directive and inject its controller as the fourth argument to the linking function. The +require takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the injected +argument will be an array in corresponding order. If no such directive can be +found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with:

      +
        +
      • (no prefix) - Locate the required controller on the current element.
      • +
      • ? - Attempt to locate the required controller, or return null if not found.
      • +
      • ^ - Locate the required controller by searching the element's parents.
      • +
      • ?^ - Attempt to locate the required controller by searching the element's parents, or return null if not found.
      • +
      +
    • +
    • controllerAs - Controller alias at the directive scope. An alias for the controller so it +can be referenced at the directive template. The directive needs to define a scope for this +configuration to be used. Useful in the case when directive is used as component.

      +
    • +
    • restrict - String of subset of EACM which restricts the directive to a specific directive +declaration style. If omitted, the default (attributes only) is used.

      +
        +
      • E - Element name: <my-directive></my-directive>
      • +
      • A - Attribute (default): <div my-directive="exp"> +</div>
      • +
      • C - Class: <div class="my-directive: exp;"></div>
      • +
      • M - Comment: <!-- directive: my-directive exp -->
      • +
      +
    • +
    • template - replace the current element with the contents of the HTML. The replacement process +migrates all of the attributes / classes from the old element to the new one. See the +Creating Components section below for more information.

      +

      You can specify template as a string representing the template or as a function which takes +two arguments tElement and tAttrs (described in the compile function api below) and +returns a string value representing the template.

      +
    • +
    • templateUrl - Same as template but the template is loaded from the specified URL. Because +the template loading is asynchronous the compilation/linking is suspended until the template +is loaded.

      +

      You can specify templateUrl as a string representing the URL or as a function which takes two +arguments tElement and tAttrs (described in the compile function api below) and returns +a string value representing the url. In either case, the template URL is passed through $sce.getTrustedResourceUrl.

      +
    • +
    • replace - if set to true then the template will replace the current element, rather than +append the template to the element.

      +
    • +
    • transclude - compile the content of the element and make it available to the directive. +Typically used with ngTransclude. The advantage of transclusion is that the linking function receives a +transclusion function which is pre-bound to the correct scope. In a typical setup the widget +creates an isolate scope, but the transclusion is not a child, but a sibling of the isolate +scope. This makes it possible for the widget to have private state, and the transclusion to +be bound to the parent (pre-isolate) scope.

      +
        +
      • true - transclude the content of the directive.
      • +
      • 'element' - transclude the whole element including any directives defined at lower priority.
      • +
      +
    • +
    +
      +
    • compile: This is the compile function described in the section below.

      +
    • +
    • link: This is the link function described in the section below. This property is used only +if the compile property is not defined.

      +
    • +
    +

    Compile function

    +
    +  function compile(tElement, tAttrs, transclude) { ... }
    +
    +

    The compile function deals with transforming the template DOM. Since most directives do not do +template transformation, it is not used often. Examples that require compile functions are +directives that transform template DOM, such as ngRepeat, or load the contents +asynchronously, such as ngView. The +compile function takes the following arguments.

    +
      +
    • tElement - template element - The element where the directive has been declared. It is +safe to do template transformation on the element and child elements only.

      +
    • +
    • tAttrs - template attributes - Normalized list of attributes declared on this element shared +between all directive compile functions. See Attributes.

      +
    • +
    • transclude - A transclude linking function: function(scope, cloneLinkingFn).

      +
    • +
    +

    NOTE: The template instance and the link instance may not be the same objects if the template has +been cloned. For this reason it is not safe in the compile function to do anything other than DOM +transformation that applies to all DOM clones. Specifically, DOM listener registration should be +done in a linking function rather than in a compile function.

    +

    A compile function can have a return value which can be either a function or an object.

    +
      +
    • returning a (post-link) function - is equivalent to registering the linking function via the +link property of the config object when the compile function is empty.

      +
    • +
    • returning an object with function(s) registered via pre and post properties - allows you to +control when a linking function should be called during the linking phase. See info about +pre-linking and post-linking functions below.

      +
    • +
    +

    Linking function

    +
    +  function link(scope, iElement, iAttrs, controller) { ... }
    +
    +

    The link function is responsible for registering DOM listeners as well as updating the DOM. It is +executed after the template has been cloned. This is where most of the directive logic will be +put.

    +
      +
    • scope - Scope - The scope to be used by the +directive for registering watches.

      +
    • +
    • iElement - instance element - The element where the directive is to be used. It is safe to +manipulate the children of the element only in postLink function since the children have +already been linked.

      +
    • +
    • iAttrs - instance attributes - Normalized list of attributes declared on this element shared +between all directive linking functions. See Attributes.

      +
    • +
    • controller - a controller instance - A controller instance if at least one directive on the +element defines a controller. The controller is shared among all the directives, which allows +the directives to use the controllers as a communication channel.

      +
    • +
    +

    Pre-linking function

    +

    Executed before the child elements are linked. Not safe to do DOM transformation since the +compiler linking function will fail to locate the correct elements for linking.

    +

    Post-linking function

    +

    Executed after the child elements are linked. It is safe to do DOM transformation in the post-linking function.

    +

    +

    Attributes

    +

    The Attributes object - passed as a parameter in the +link() or compile() functions - is a way of accessing:

    +
      +
    • normalized attribute names: Since a directive such as 'ngBind' can be expressed in many ways +such as 'ng:bind', or 'x-ng-bind', the attributes object allows for normalized access to +the attributes.

      +
    • +
    • directive inter-communication: All directives share the same instance of the attributes +object which allows the directives to use the attributes object as inter directive +communication.

      +
    • +
    • supports interpolation: Interpolation attributes are assigned to the attribute object +allowing other directives to read the interpolated value.

      +
    • +
    • observing interpolated attributes: Use $observe to observe the value changes of attributes +that contain interpolation (e.g. src="{{bar}}"). Not only is this very efficient but it's also +the only way to easily get the actual value because during the linking phase the interpolation +hasn't been evaluated yet and so the value is at this time set to undefined.

      +
    • +
    +
    +function linkingFn(scope, elm, attrs, ctrl) {
    +  // get the attribute value
    +  console.log(attrs.ngModel);
    +
    +  // change the attribute
    +  attrs.$set('ngModel', 'new value');
    +
    +  // observe changes to interpolated attribute
    +  attrs.$observe('ngModel', function(value) {
    +    console.log('ngModel has changed value to ' + value);
    +  });
    +}
    +
    +

    Understanding Transclusion and Scopes

    +

    It is often desirable to have reusable components. Below is a pseudo code showing how a simplified +dialog component may work.

    +
    +  <div>
    +    <button ng-click="show=true">show</button>
    +    <dialog title="Hello {{username}}."
    +            visible="show"
    +            on-cancel="show = false"
    +            on-ok="show = false; doSomething()">
    +       Body goes here: {{username}} is {{title}}.
    +    </dialog>
    +  </div>
    +
    +

    Clicking on the "show" button will open the dialog. The dialog will have a title, which is +data bound to username, and it will also have a body which we would like to transclude +into the dialog.

    +

    Here is an example of what the template definition for the dialog widget may look like.

    +
    +  <div ng-show="visible">
    +    <h3>{{title}}</h3>
    +    <div class="body" ng-transclude></div>
    +    <div class="footer">
    +      <button ng-click="onOk()">Save changes</button>
    +      <button ng-click="onCancel()">Close</button>
    +    </div>
    +  </div>
    +
    +

    This will not render properly, unless we do some scope magic.

    +

    The first issue we have to solve is that the dialog box template expects title to be defined, but +the place of instantiation would like to bind to username. Furthermore the buttons expect the +onOk and onCancel functions to be present in the scope. This limits the usefulness of the +widget. To solve the mapping issue we use the locals to create local variables which the template +expects as follows:

    +
    +  scope: {
    +    title: '@',             // the title uses the data-binding from the parent scope
    +    onOk: '&',              // create a delegate onOk function
    +    onCancel: '&',          // create a delegate onCancel function
    +    visible: '='            // set up visible to accept data-binding
    +  }
    +
    +

    Creating local properties on widget scope creates two problems:

    +
      +
    1. isolation - if the user forgets to set title attribute of the dialog widget the dialog +template will bind to parent scope property. This is unpredictable and undesirable.

      +
    2. +
    3. transclusion - the transcluded DOM can see the widget locals, which may overwrite the +properties which the transclusion needs for data-binding. In our example the title +property of the widget clobbers the title property of the transclusion.

      +
    4. +
    +

    To solve the issue of lack of isolation, the directive declares a new isolated scope. An +isolated scope does not prototypically inherit from the child scope, and therefore we don't have +to worry about accidentally clobbering any properties.

    +

    However isolated scope creates a new problem: if a transcluded DOM is a child of the widget +isolated scope then it will not be able to bind to anything. For this reason the transcluded scope +is a child of the original scope, before the widget created an isolated scope for its local +variables. This makes the transcluded and widget isolated scope siblings.

    +

    This may seem to be unexpected complexity, but it gives the widget user and developer the least +surprise.

    +

    Therefore the final directive definition looks something like this:

    +
    +transclude: true,
    +scope: {
    +    title: '@',             // the title uses the data-binding from the parent scope
    +    onOk: '&',              // create a delegate onOk function
    +    onCancel: '&',          // create a delegate onCancel function
    +    visible: '='            // set up visible to accept data-binding
    +},
    +restrict: 'E',
    +replace: true
    +
    +

    +

    Creating Components

    +

    It is often desirable to replace a single directive with a more complex DOM structure. This +allows the directives to become a short hand for reusable components from which applications +can be built.

    +

    Following is an example of building a reusable widget.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    diff --git a/app/lib/angular/docs/partials/guide/expression.html b/app/lib/angular/docs/partials/guide/expression.html new file mode 100755 index 000000000..9a5c3a250 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/expression.html @@ -0,0 +1,187 @@ + Improve this doc

    +
    +
    +

    +

    Expressions are JavaScript-like code snippets that are usually placed in bindings such as {{ +expression }}. Expressions are processed by the $parse +service.

    +

    For example, these are all valid expressions in angular:

    +
      +
    • 1+2
    • +
    • 3*10 | currency
    • +
    • user.name
    • +
    +

    Angular Expressions vs. JS Expressions

    +

    It might be tempting to think of Angular view expressions as JavaScript expressions, but that is +not entirely correct, since Angular does not use a JavaScript eval() to evaluate expressions. +You can think of Angular expressions as JavaScript expressions with following differences:

    +
      +
    • Attribute Evaluation: evaluation of all properties are against the scope, doing the +evaluation, unlike in JavaScript where the expressions are evaluated against the global +window.

      +
    • +
    • Forgiving: expression evaluation is forgiving to undefined and null, unlike in JavaScript, +where trying to evaluate undefined properties can generate ReferenceError or TypeError.

      +
    • +
    • No Control Flow Statements: you cannot do any of the following in angular expression: +conditionals, loops, or throw.

      +
    • +
    • Filters: you can pass result of expression evaluations through filter chains. For example +to convert date object into a local specific human-readable format.

      +
    • +
    +

    If, on the other hand, you do want to run arbitrary JavaScript code, you should make it a +controller method and call the method. If you want to eval() an angular expression from +JavaScript, use the $eval() method.

    +

    Example

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    You can try evaluating different expressions here:

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Property Evaluation

    +

    Evaluation of all properties takes place against a scope. Unlike JavaScript, where names default +to global window properties, Angular expressions have to use $window to refer to the global window object. For example, if you want to call alert(), which is +defined on window, in an expression you must use $window.alert(). This is done intentionally to +prevent accidental access to the global state (a common source of subtle bugs).

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Forgiving

    +

    Expression evaluation is forgiving to undefined and null. In JavaScript, evaluating a.b.c throws +an exception if a is not an object. While this makes sense for a general purpose language, the +expression evaluations are primarily used for data binding, which often look like this:

    +
        {{a.b.c}}
    +

    It makes more sense to show nothing than to throw an exception if a is undefined (perhaps we are +waiting for the server response, and it will become defined soon). If expression evaluation wasn't +forgiving we'd have to write bindings that clutter the code, for example: {{((a||{}).b||{}).c}}

    +

    Similarly, invoking a function a.b.c() on undefined or null simply returns undefined.

    +

    No Control Flow Statements

    +

    You cannot write a control flow statement in an expression. The reason behind this is core to the +Angular philosophy that application logic should be in controllers, not in the view. If you need a +conditional, loop, or to throw from a view expression, delegate to a JavaScript method instead.

    +

    Filters

    +

    When presenting data to the user, you might need to convert the data from its raw format to a +user-friendly format. For example, you might have a data object that needs to be formatted +according to the locale before displaying it to the user. You can pass expressions through a chain +of filters like this:

    +
       name | uppercase
    +

    The expression evaluator simply passes the value of name to uppercase filter.

    +

    Chain filters using this syntax:

    +
       value | filter1 | filter2
    +

    You can also pass colon-delimited arguments to filters, for example, to display the number 123 +with 2 decimal points:

    +
       123 | number:2
    +

    The $

    +

    You might be wondering, what is the significance of the $ prefix? It is simply a prefix that +angular uses, to differentiate its API names from others. If angular didn't use $, then evaluating +a.length() would return undefined because neither a nor angular define such a property.

    +

    Consider that in a future version of Angular we might choose to add a length method, in which case +the behavior of the expression would change. Worse yet, you, the developer, could create a length +property and then we would have a collision. This problem exists because Angular augments existing +objects with additional behavior. By prefixing its additions with $ we are reserving our namespace +so that angular developers and developers who use Angular can develop in harmony without collisions.

    +
    diff --git a/app/lib/angular/docs/partials/guide/forms.html b/app/lib/angular/docs/partials/guide/forms.html new file mode 100755 index 000000000..b81119bce --- /dev/null +++ b/app/lib/angular/docs/partials/guide/forms.html @@ -0,0 +1,345 @@ + Improve this doc

    +
    +
    +

    +

    Controls (input, select, textarea) are ways for a user to enter data. +A Form is a collection of controls for the purpose of grouping related controls together.

    +

    Form and controls provide validation services, so that the user can be notified of invalid input. +This provides a better user experience, because the user gets instant feedback on how to correct the error. +Keep in mind that while client-side validation plays an important role in providing good user experience, it can easily be circumvented and thus can not be trusted. +Server-side validation is still necessary for a secure application.

    +

    Simple form

    +

    The key directive in understanding two-way data-binding is ngModel. +The ngModel directive provides the two-way data-binding by synchronizing the model to the view, as well as view to the model. +In addition it provides an API for other directives to augment its behavior.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Note that novalidate is used to disable browser's native form validation.

    +

    Using CSS classes

    +

    To allow styling of form as well as controls, ngModel add these CSS classes:

    +
      +
    • ng-valid
    • +
    • ng-invalid
    • +
    • ng-pristine
    • +
    • ng-dirty
    • +
    +

    The following example uses the CSS to display validity of each form control. +In the example both user.name and user.email are required, but are rendered with red background only when they are dirty. +This ensures that the user is not distracted with an error until after interacting with the control, and failing to satisfy its validity.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Binding to form and control state

    +

    A form is an instance of FormController. +The form instance can optionally be published into the scope using the name attribute. +Similarly control is an instance of NgModelController. +The control instance can similarly be published into the form instance using the name attribute. +This implies that the internal state of both the form and the control is available for binding in the view using the standard binding primitives.

    +

    This allows us to extend the above example with these features:

    +
      +
    • RESET button is enabled only if form has some changes
    • +
    • SAVE button is enabled only if form has some changes and is valid
    • +
    • custom error messages for user.email and user.agree
    • +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Custom Validation

    +

    Angular provides basic implementation for most common html5 input +types: (text, number, url, email, radio, checkbox), as well as some directives for validation (required, pattern, minlength, maxlength, min, max).

    +

    Defining your own validator can be done by defining your own directive which adds a custom validation function to the ngModel controller. +To get a hold of the controller the directive specifies a dependency as shown in the example below. +The validation can occur in two places:

    + +

    In the following example we create two directives.

    +
      +
    • The first one is integer and it validates whether the input is a valid integer. +For example 1.23 is an invalid value, since it contains a fraction. +Note that we unshift the array instead of pushing. +This is because we want to be first parser and consume the control string value, as we need to execute the validation function before a conversion to number occurs.

      +
    • +
    • The second directive is a smart-float. +It parses both 1.2 and 1,2 into a valid float number 1.2. +Note that we can't use input type number here as HTML5 browsers would not allow the user to type what it would consider an invalid number such as 1,2.

      +
    • +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Implementing custom form controls (using ngModel)

    +

    Angular implements all of the basic HTML form controls (input, select, textarea), which should be sufficient for most cases. +However, if you need more flexibility, you can write your own form control as a directive.

    +

    In order for custom control to work with ngModel and to achieve two-way data-binding it needs to:

    +
      +
    • implement $render method, which is responsible for rendering the data after it passed the NgModelController#$formatters,
    • +
    • call $setViewValue method, whenever the user interacts with the control and model needs to be updated. This is usually done inside a DOM Event listener.
    • +
    +

    See $compileProvider.directive for more info.

    +

    The following example shows how to add two-way data-binding to contentEditable elements.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +
    diff --git a/app/lib/angular/docs/partials/guide/i18n.html b/app/lib/angular/docs/partials/guide/i18n.html new file mode 100755 index 000000000..bb68fd7ab --- /dev/null +++ b/app/lib/angular/docs/partials/guide/i18n.html @@ -0,0 +1,84 @@ + Improve this doc

    +
    +
    +

    +

    I18n and L10n in AngularJS

    +

    What is i18n and l10n?

    +

    Internationalization, abbreviated i18n, is the process of developing products in such a way that +they can be localized for languages and cultures easily. Localization, abbreviated l10n, is the +process of adapting applications and text to enable their usability in a particular cultural or +linguistic market. For application developers, internationalizing an application means abstracting +all of the strings and other locale-specific bits (such as date or currency formats) out of the +application. Localizing an application means providing translations and localized formats for the +abstracted bits.

    +

    What level of support for i18n/l10n is currently in Angular?

    +

    Currently, Angular supports i18n/l10n for datetime, number and currency filters.

    +

    Additionally, Angular supports localizable pluralization support provided by the ngPluralize directive.

    +

    All localizable Angular components depend on locale-specific rule sets managed by the $locale service.

    +

    For readers who want to jump straight into examples, we have a few web pages that showcase how to +use Angular filters with various locale rule sets. You can find these examples either on Github or in the i18n/e2e folder of +Angular development package.

    +

    What is a locale id?

    +

    A locale is a specific geographical, political, or cultural region. The most commonly used locale +ID consists of two parts: language code and country code. For example, en-US, en-AU, zh-CN are all +valid locale IDs that have both language codes and country codes. Because specifying a country code +in locale ID is optional, locale IDs such as en, zh, and sk are also valid. See the ICU website for more information about using locale IDs.

    +

    Supported locales in Angular +Angular separates number and datetime format rule sets into different files, each file for a +particular locale. You can find a list of currently supported locales here

    +

    Providing locale rules to Angular

    +

    There are two approaches to providing locale rules to Angular:

    +

    1. Pre-bundled rule sets

    +

    You can pre-bundle the desired locale file with Angular by concatenating the content of the +locale-specific file to the end of angular.js or angular.min.js file.

    +

    For example on *nix, to create an angular.js file that contains localization rules for german +locale, you can do the following:

    +

    cat angular.js i18n/angular-locale_de-ge.js > angular_de-ge.js

    +

    When the application containing angular_de-ge.js script instead of the generic angular.js script +starts, Angular is automatically pre-configured with localization rules for the german locale.

    +

    2. Including locale js script in index.html page

    +

    You can also include the locale specific js file in the index.html page. For example, if one client +requires German locale, you would serve index_de-ge.html which will look something like this:

    +
    +<html ng-app>
    + <head>
    +….
    +   <script src="angular.js"></script>
    +   <script src="i18n/angular-locale_de-ge.js"></script>
    +….
    + </head>
    +</html>
    +
    +

    Comparison of the two approaches +Both approaches described above requires you to prepare different index.html pages or js files for +each locale that your app may be localized into. You also need to configure your server to serve +the correct file that correspond to the desired locale.

    +

    However, the second approach (Including locale js script in index.html page) is likely to be slower +because an extra script needs to be loaded.

    +

    "Gotchas"

    +

    Currency symbol "gotcha"

    +

    Angular's currency filter allows +you to use the default currency symbol from the locale service, +or you can provide the filter with a custom currency symbol. If your app will be used only in one +locale, it is fine to rely on the default currency symbol. However, if you anticipate that viewers +in other locales might use your app, you should provide your own currency symbol to make sure the +actual value is understood.

    +

    For example, if you want to display account balance of 1000 dollars with the following binding +containing currency filter: {{ 1000 | currency }}, and your app is currently in en-US locale. +'$1000.00' will be shown. However, if someone in a different local (say, Japan) views your app, her +browser will specify the locale as ja, and the balance of '¥1000.00' will be shown instead. This +will really upset your client.

    +

    In this case, you need to override the default currency symbol by providing the currency filter with a currency symbol as +a parameter when you configure the filter, for example, {{ 1000 | currency:"USD$"}}. This way, +Angular will always show a balance of 'USD$1000' and disregard any locale changes.

    +

    Translation length "gotcha"

    +

    Keep in mind that translated strings/datetime formats can vary greatly in length. For example, +June 3, 1977 will be translated to Spanish as 3 de junio de 1977. There are bound to be other +more extreme cases. Hence, when internationalizing your apps, you need to apply CSS rules +accordingly and do thorough testing to make sure UI components do not overlap.

    +

    Timezones

    +

    Keep in mind that Angular datetime filter uses the time zone settings of the browser. So the same +application will show different time information depending on the time zone settings of the +computer that the application is running on. Neither Javascript nor Angular currently supports +displaying the date with a timezone specified by the developer.

    +
    diff --git a/app/lib/angular/docs/partials/guide/ie.html b/app/lib/angular/docs/partials/guide/ie.html new file mode 100755 index 000000000..9db7f369a --- /dev/null +++ b/app/lib/angular/docs/partials/guide/ie.html @@ -0,0 +1,170 @@ + Improve this doc

    +
    +
    +

    +

    Overview

    +

    This document describes the Internet Explorer (IE) idiosyncrasies when dealing with custom HTML +attributes and tags. Read this document if you are planning on deploying your Angular application +on IE v8.0 or earlier.

    +

    Short Version

    +

    To make your Angular application work on IE please make sure that:

    +
      +
    1. You polyfill JSON.stringify if necessary (IE7 will need this). You can use +JSON2 or +JSON3 polyfills for this. +

      +       <!doctype html>
      +       <html xmlns:ng="http://angularjs.org">
      +         <head>
      +           <!--[if lte IE 8]>
      +             <script src="/path/to/json2.js"></script>
      +           <![endif]-->
      +         </head>
      +         <body>
      +           ...
      +         </body>
      +       </html>
      +     
      +
    2. +
    3. add id="ng-app" to the root element in conjunction with ng-app attribute +

      +       <!doctype html>
      +       <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName">
      +         ...
      +       </html>
      +     
      +
    4. +
    5. you do not use custom element tags such as <ng:view> (use the attribute version +<div ng-view> instead), or

      +
    6. +
    7. if you do use custom element tags, then you must take these steps to make IE happy: +

      +       <!doctype html>
      +       <html xmlns:ng="http://angularjs.org" id="ng-app" ng-app="optionalModuleName">
      +         <head>
      +           <!--[if lte IE 8]>
      +             <script>
      +               document.createElement('ng-include');
      +               document.createElement('ng-pluralize');
      +               document.createElement('ng-view');
      +     
      +               // Optionally these for CSS
      +               document.createElement('ng:include');
      +               document.createElement('ng:pluralize');
      +               document.createElement('ng:view');
      +             </script>
      +           <![endif]-->
      +         </head>
      +         <body>
      +           ...
      +         </body>
      +       </html>
      +     
      +
    8. +
    +

    The important parts are:

    +
      +
    • xmlns:ng - namespace - you need one namespace for each custom tag you are planning on +using.

      +
    • +
    • document.createElement(yourTagName) - creation of custom tag names - Since this is an +issue only for older version of IE you need to load it conditionally. For each tag which does +not have namespace and which is not defined in HTML you need to pre-declare it to make IE +happy.

      +
    • +
    +

    Long Version

    +

    IE has issues with element tag names which are not standard HTML tag names. These fall into two +categories, and each category has its own fix.

    +
      +
    • If the tag name starts with my: prefix than it is considered an XML namespace and must +have corresponding namespace declaration on <html xmlns:my="ignored">

      +
    • +
    • If the tag has no : but it is not a standard HTML tag, then it must be pre-created using +document.createElement('my-tag')

      +
    • +
    • If you are planning on styling the custom tag with CSS selectors, then it must be +pre-created using document.createElement('my-tag') regardless of XML namespace.

      +
    • +
    +

    The Good News

    +

    The good news is that these restrictions only apply to element tag names, and not to element +attribute names. So this requires no special handling in IE: <div my-tag your:tag> +</div>.

    +

    What happens if I fail to do this?

    +

    Suppose you have HTML with unknown tag mytag (this could also be my:tag or my-tag with same +result):

    +
    +  <html>
    +    <body>
    +      <mytag>some text</mytag>
    +    </body>
    +  </html>
    +
    +

    It should parse into the following DOM:

    +
    +#document
    +  +- HTML
    +     +- BODY
    +        +- mytag
    +           +- #text: some text
    +
    +

    The expected behavior is that the BODY element has a child element mytag, which in turn has +the text some text.

    +

    But this is not what IE does (if the above fixes are not included):

    +
    +#document
    +  +- HTML
    +     +- BODY
    +        +- mytag
    +        +- #text: some text
    +        +- /mytag
    +
    +

    In IE, the behavior is that the BODY element has three children:

    +
      +
    1. A self closing mytag. Example of self closing tag is <br/>. The trailing / is optional, +but the <br> tag is not allowed to have any children, and browsers consider <br>some +text</br> as three siblings not a <br> with some text as child.

      +
    2. +
    3. A text node with some text. This should have been a child of mytag above, not a sibling.

      +
    4. +
    5. A corrupt self closing /mytag. This is corrupt since element names are not allowed to have +the / character. Furthermore this closing element should not be part of the DOM since it is +only used to delineate the structure of the DOM.

      +
    6. +
    +

    CSS Styling of Custom Tag Names

    +

    To make CSS selectors work with custom elements, the custom element name must be pre-created with +document.createElement('my-tag') regardless of XML namespace.

    +
    +  <html xmlns:ng="needed for ng: namespace">
    +    <head>
    +      <!--[if lte IE 8]>
    +        <script>
    +          // needed to make ng-include parse properly
    +          document.createElement('ng-include');
    +
    +          // needed to enable CSS reference
    +          document.createElement('ng:view');
    +        </script>
    +      <![endif]-->
    +      <style>
    +        ng\\:view {
    +          display: block;
    +          border: 1px solid red;
    +        }
    +
    +        ng-include {
    +          display: block;
    +          border: 1px solid blue;
    +        }
    +      </style>
    +    </head>
    +    <body>
    +      <ng:view></ng:view>
    +      <ng-include></ng-include>
    +      ...
    +    </body>
    +  </html>
    +
    +
    diff --git a/app/lib/angular/docs/partials/guide/index.html b/app/lib/angular/docs/partials/guide/index.html new file mode 100755 index 000000000..9b28b6414 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/index.html @@ -0,0 +1,13 @@ + Improve this doc

    +
    +
    +

    +

    Welcome to the angular Developer Guide. If you are here to learn the details of how to use angular +to develop web apps, you've come to the right place.

    +

    If you are completely or relatively unfamiliar with angular, you may want to check out one or both +of the following documents before returning here to the Developer Guide:

    + +
    diff --git a/app/lib/angular/docs/partials/guide/introduction.html b/app/lib/angular/docs/partials/guide/introduction.html new file mode 100755 index 000000000..a6c747110 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/introduction.html @@ -0,0 +1,38 @@ + Improve this doc

    +
    +
    +

    +

    Angular is pure client-side technology, written entirely in JavaScript. It works with the +long-established technologies of the web (HTML, CSS, and JavaScript) to make the development of +web apps easier and faster than ever before.

    +

    One important way that Angular simplifies web development is by increasing the level of abstraction +between the developer and most low-level web app development tasks. Angular automatically takes +care of many of these tasks, including:

    +
      +
    • DOM Manipulation
    • +
    • Setting Up Listeners and Notifiers
    • +
    • Input Validation
    • +
    +

    Because Angular handles much of the work involved in these tasks, developers can concentrate more +on application logic and less on repetitive, error-prone, lower-level coding.

    +

    At the same time that Angular simplifies the development of web apps, it brings relatively +sophisticated techniques to the client-side, including:

    +
      +
    • Separation of data, application logic, and presentation components
    • +
    • Data Binding between data and presentation components
    • +
    • Services (common web app operations, implemented as substitutable objects)
    • +
    • Dependency Injection (used primarily for wiring together services)
    • +
    • An extensible HTML compiler (written entirely in JavaScript)
    • +
    • Ease of Testing
    • +
    +

    These techniques have been for the most part absent from the client-side for far too long.

    +

    Single-page / Round-trip Applications

    +

    You can use Angular to develop both single-page and round-trip apps, but Angular is designed +primarily for developing single-page apps. Angular supports browser history, forward and back +buttons, and bookmarking in single-page apps.

    +

    You normally wouldn't want to load Angular with every page change, as would be the case with using +Angular in a round-trip app. However, it would make sense to do so if you were adding a subset of +Angular's features (for example, templates to leverage angular's data-binding feature) to an +existing round-trip app. You might follow this course of action if you were migrating an older app +to a single-page Angular app.

    +
    diff --git a/app/lib/angular/docs/partials/guide/module.html b/app/lib/angular/docs/partials/guide/module.html new file mode 100755 index 000000000..5b27bb003 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/module.html @@ -0,0 +1,263 @@ + Improve this doc

    +
    +
    +

    +

    What is a Module?

    +

    Most applications have a main method which instantiates, wires, and bootstraps the application. +Angular apps don't have a main method. Instead modules declaratively specify how an application +should be bootstrapped. There are several advantages to this approach:

    +
      +
    • The process is more declarative which is easier to understand
    • +
    • In unit-testing there is no need to load all modules, which may aid in writing unit-tests.
    • +
    • Additional modules can be loaded in scenario tests, which can override some of the +configuration and help end-to-end test the application
    • +
    • Third party code can be packaged as reusable modules.
    • +
    • The modules can be loaded in any/parallel order (due to delayed nature of module execution).
    • +
    +

    The Basics

    +

    Ok, I'm in a hurry. How do I get a Hello World module working?

    +

    Important things to notice:

    +
      +
    • Module API
    • +
    • Notice the reference to the myApp module in the <html ng-app="myApp">, it is what +bootstraps the app using your module.
    • +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Recommended Setup

    +

    While the example above is simple, it will not scale to large applications. Instead we recommend +that you break your application to multiple modules like this:

    +
      +
    • A service module, for service declaration
    • +
    • A directive module, for directive declaration
    • +
    • A filter module, for filter declaration
    • +
    • And an application level module which depends on the above modules, and which has +initialization code.
    • +
    +

    The reason for this breakup is that in your tests, it is often necessary to ignore the +initialization code, which tends to be difficult to test. By putting it into a separate module it +can be easily ignored in tests. The tests can also be more focused by only loading the modules +that are relevant to tests.

    +

    The above is only a suggestion, so feel free to tailor it to your needs.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Module Loading & Dependencies

    +

    A module is a collection of configuration and run blocks which get applied to the application +during the bootstrap process. In its simplest form the module consist of collection of two kinds +of blocks:

    +
      +
    1. Configuration blocks - get executed during the provider registrations and configuration +phase. Only providers and constants can be injected into configuration blocks. This is to +prevent accidental instantiation of services before they have been fully configured.
    2. +
    3. Run blocks - get executed after the injector is created and are used to kickstart the +application. Only instances and constants can be injected into run blocks. This is to prevent +further system configuration during application run time.
    4. +
    +
    +angular.module('myModule', []).
    +  config(function(injectables) { // provider-injector
    +    // This is an example of config block.
    +    // You can have as many of these as you want.
    +    // You can only inject Providers (not instances)
    +    // into the config blocks.
    +  }).
    +  run(function(injectables) { // instance-injector
    +    // This is an example of a run block.
    +    // You can have as many of these as you want.
    +    // You can only inject instances (not Providers)
    +    // into the run blocks
    +  });
    +
    +

    Configuration Blocks

    +

    There are some convenience methods on the module which are equivalent to the config block. For +example:

    +
    +angular.module('myModule', []).
    +  value('a', 123).
    +  factory('a', function() { return 123; }).
    +  directive('directiveName', ...).
    +  filter('filterName', ...);
    +
    +// is same as
    +
    +angular.module('myModule', []).
    +  config(function($provide, $compileProvider, $filterProvider) {
    +    $provide.value('a', 123);
    +    $provide.factory('a', function() { return 123; });
    +    $compileProvider.directive('directiveName', ...);
    +    $filterProvider.register('filterName', ...);
    +  });
    +
    +

    The configuration blocks get applied in the order in which they are registered. The only exception +to it are constant definitions, which are placed at the beginning of all configuration blocks.

    +

    Run Blocks

    +

    Run blocks are the closest thing in Angular to the main method. A run block is the code which +needs to run to kickstart the application. It is executed after all of the service have been +configured and the injector has been created. Run blocks typically contain code which is hard +to unit-test, and for this reason should be declared in isolated modules, so that they can be +ignored in the unit-tests.

    +

    Dependencies

    +

    Modules can list other modules as their dependencies. Depending on a module implies that required +module needs to be loaded before the requiring module is loaded. In other words the configuration +blocks of the required modules execute before the configuration blocks of the requiring module. +The same is true for the run blocks. Each module can only be loaded once, even if multiple other +modules require it.

    +

    Asynchronous Loading

    +

    Modules are a way of managing $injector configuration, and have nothing to do with loading of +scripts into a VM. There are existing projects which deal with script loading, which may be used +with Angular. Because modules do nothing at load time they can be loaded into the VM in any order +and thus script loaders can take advantage of this property and parallelize the loading process.

    +

    Creation versus Retrieval

    +

    Beware that using angular.module('myModule', []) will create the module myModule and overwrite any +existing module named myModule. Use angular.module('myModule') to retrieve an existing module.

    +
    +  var myModule = angular.module('myModule', []);
    +  
    +  // add some directives and services
    +  myModule.service('myService', ...);
    +  myModule.directive('myDirective', ...);
    +
    +  // overwrites both myService and myDirective by creating a new module
    +  var myModule = angular.module('myModule', []);
    +
    +  // throws an error because myOtherModule has yet to be defined
    +  var myModule = angular.module('myOtherModule');
    +
    +

    Unit Testing

    +

    In its simplest form a unit test is a way of instantiating a subset of the application in test and +then applying a stimulus to it. It is important to realize that each module can only be loaded +once per injector. Typically an app has only one injector. But in tests, each test has its own +injector, which means that the modules are loaded multiple times per VM. Properly structured +modules can help with unit testing, as in this example:

    +

    In all of these examples we are going to assume this module definition: +

    +  angular.module('greetMod', []).
    +
    +    factory('alert', function($window) {
    +      return function(text) {
    +        $window.alert(text);
    +      }
    +    }).
    +
    +    value('salutation', 'Hello').
    +
    +    factory('greet', function(alert, salutation) {
    +      return function(name) {
    +        alert(salutation + ' ' + name + '!');
    +      }
    +    });
    +
    +

    Let's write some tests: +

    +describe('myApp', function() {
    +  // load the relevant application modules then load a special
    +  // test module which overrides the $window with a mock version,
    +  // so that calling window.alert() will not block the test
    +  // runner with a real alert box. This is an example of overriding
    +  // configuration information in tests.
    +  beforeEach(module('greetMod', function($provide) {
    +    $provide.value('$window', {
    +      alert: jasmine.createSpy('alert')
    +    });
    +  }));
    +
    +  // The inject() will create the injector and inject the greet and
    +  // $window into the tests. The test need not concern itself with
    +  // wiring of the application, only with testing it.
    +  it('should alert on $window', inject(function(greet, $window) {
    +    greet('World');
    +    expect($window.alert).toHaveBeenCalledWith('Hello World!');
    +  }));
    +
    +  // this is another way of overriding configuration in the
    +  // tests using an inline module and inject methods.
    +  it('should alert using the alert service', function() {
    +    var alertSpy = jasmine.createSpy('alert');
    +    module(function($provide) {
    +      $provide.value('alert', alertSpy);
    +    });
    +    inject(function(greet) {
    +      greet('World');
    +      expect(alertSpy).toHaveBeenCalledWith('Hello World!');
    +    });
    +  });
    +});
    +
    +
    diff --git a/app/lib/angular/docs/partials/guide/overview.html b/app/lib/angular/docs/partials/guide/overview.html new file mode 100755 index 000000000..d17d269b7 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/overview.html @@ -0,0 +1,181 @@ + Improve this doc

    +
    +
    +

    +

    What Is Angular?

    +

    AngularJS is a structural framework for dynamic web apps. It lets you use HTML as your template +language and lets you extend HTML's syntax to express your application's components clearly and +succinctly. Out of the box, it eliminates much of the code you currently write through data +binding and dependency injection. And it all happens in JavaScript within the browser, making it +an ideal partner with any server technology.

    +

    Angular is what HTML would have been had it been designed for applications. HTML is a great +declarative language for static documents. It does not contain much in the way of creating +applications, and as a result building web applications is an exercise in what do I have to do +to trick the browser into doing what I want.

    +

    The impedance mismatch between dynamic applications and static documents is often solved with:

    +
      +
    • a library - a collection of functions which are useful when writing web apps. Your code is +in charge and it calls into the library when it sees fit. E.g., jQuery.
    • +
    • frameworks - a particular implementation of a web application, where your code fills in +the details. The framework is in charge and it calls into your code when it needs something +app specific. E.g., knockout, ember, etc.
    • +
    +

    Angular takes another approach. It attempts to minimize the impedance mismatch between document +centric HTML and what an application needs by creating new HTML constructs. Angular teaches the +browser new syntax through a construct we call directives. Examples include:

    +
      +
    • Data binding, as in {{}}.
    • +
    • DOM control structures for repeating/hiding DOM fragments.
    • +
    • Support for forms and form validation.
    • +
    • Attaching code-behind to DOM elements.
    • +
    • Grouping of HTML into reusable components.
    • +
    +

    A complete client-side solution

    +

    Angular is not a single piece in the overall puzzle of building the client-side of a web +application. It handles all of the DOM and AJAX glue code you once wrote by hand and puts it in a +well-defined structure. This makes Angular opinionated about how a CRUD application should be +built. But while it is opinionated, it also tries to make sure that its opinion is just a +starting point you can easily change. Angular comes with the following out-of-the-box:

    +
      +
    • Everything you need to build a CRUD app in a cohesive set: data-binding, basic templating +directives, form validation, routing, deep-linking, reusable components, dependency injection.
    • +
    • Testability story: unit-testing, end-to-end testing, mocks, test harnesses.
    • +
    • Seed application with directory layout and test scripts as a starting point.
    • +
    +

    Angular Sweet Spot

    +

    Angular simplifies application development by presenting a higher level of abstraction to the +developer. Like any abstraction, it comes at a cost of flexibility. In other words not every app +is a good fit for Angular. Angular was built for the CRUD application in mind. Luckily CRUD +applications represent the majority of web applications. But to understand what Angular is +good at one also has to understand when an app is not a good fit for Angular.

    +

    Games and GUI editors are examples of applications with intensive and tricky DOM manipulation. +These kinds of apps are different from CRUD apps, and as a result are probably not a good fit for Angular. +In these cases it may be better to use a library with a lower level of abstraction, such as jQuery.

    +

    An Introductory Angular Example

    +

    Below is a typical CRUD application which contains a form. The form values are validated, and +are used to compute the total, which is formatted to a particular locale. These are some common +concepts which the application developer may face:

    +
      +
    • attaching data-model to the UI.
    • +
    • writing, reading and validating user input.
    • +
    • computing new values based on the model.
    • +
    • formatting output in a user specific locale.
    • +
    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Try out the Live Preview above, and then let's walk through the example and describe what's going +on.

    +

    In the <html> tag, we specify that it is an Angular +application with the ng-app directive. The ng-app will cause Angular to auto initialize your application.

    +
    <html ng-app>
    +

    We load Angular using the <script> tag:

    +
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/?.?.?/angular.min.js"></script>
    +

    From the ng-model attribute of the <input> tags, Angular automatically sets up two-way data +binding, and we also demonstrate some easy input validation:

    +
    Quantity: <input type="number" ng-pattern="/\d+/" step="1" min="0" ng-model="qty" required >
    +Cost: <input type="number" ng-model="cost" required >
    +

    These input widgets look normal enough, but consider these points:

    +
      +
    • When this page loaded, Angular bound the names of the input widgets (qty and cost) to +variables of the same name. Think of those variables as the "Model" component of the +Model-View-Controller design pattern.
    • +
    • Note that the HTML widget input +has special powers. The input invalidates itself by turning red when you enter invalid data or +leave the input fields blank. These new widget behaviors make it easier to implement field +validation common in CRUD applications.
    • +
    +

    And finally, the mysterious {{ double curly braces }}:

    +
         Total: {{qty * cost | currency}}
    +

    This notation, {{ _expression_ }}, is Angular markup for data-binding. The expression itself can +be a combination of both an expression and a filter: {{ +expression | filter }}. Angular provides filters for formatting display data.

    +

    In the example above, the expression in double-curly braces directs Angular to "bind the data we +got from the input widgets to the display, multiply them together, and format the resulting number +into output that looks like money."

    +

    Notice that we achieved this application behavior not by calling Angular methods, nor by +implementing application specific behavior as a framework. We achieved the behavior because the +browser behaved more in line with what is needed for a dynamic web application rather then what is +needed for a static document. Angular has lowered the impedance mismatch to the point where no +library/framework calls are needed.

    +

    The Zen of Angular

    +

    Angular is built around the belief that declarative code is better than imperative when it comes +to building UIs and wiring software components together, while imperative code is excellent for +expressing business logic.

    +
      +
    • It is a very good idea to decouple DOM manipulation from app logic. This dramatically improves +the testability of the code.
    • +
    • It is a really, really good idea to regard app testing as equal in importance to app +writing. Testing difficulty is dramatically affected by the way the code is structured.
    • +
    • It is an excellent idea to decouple the client side of an app from the server side. This +allows development work to progress in parallel, and allows for reuse of both sides.
    • +
    • It is very helpful indeed if the framework guides developers through the entire journey of +building an app: from designing the UI, through writing the business logic, to testing.
    • +
    • It is always good to make common tasks trivial and difficult tasks possible.
    • +
    +

    Angular frees you from the following pains:

    +
      +
    • Registering callbacks: Registering callbacks clutters your code, making it hard to see the +forest for the trees. Removing common boilerplate code such as callbacks is a good thing. It +vastly reduces the amount of JavaScript coding you have to do, and it makes it easier to see +what your application does.
    • +
    • Manipulating HTML DOM programmatically: Manipulating HTML DOM is a cornerstone of AJAX +applications, but it's cumbersome and error-prone. By declaratively describing how the UI +should change as your application state changes, you are freed from low level DOM manipulation +tasks. Most applications written with Angular never have to programmatically manipulate the +DOM, although you can if you want to.
    • +
    • Marshaling data to and from the UI: CRUD operations make up the majority of AJAX +applications. The flow of marshaling data from the server to an internal object to an HTML +form, allowing users to modify the form, validating the form, displaying validation errors, +returning to an internal model, and then back to the server, creates a lot of boilerplate +code. Angular eliminates almost all of this boilerplate, leaving code that describes the +overall flow of the application rather than all of the implementation details.
    • +
    • Writing tons of initialization code just to get started: Typically you need to write a lot +of plumbing just to get a basic "Hello World" AJAX app working. With Angular you can bootstrap +your app easily using services, which are auto-injected into your application in a Guice-like dependency-injection style. This allows you +to get started developing features quickly. As a bonus, you get full control over the +initialization process in automated tests.
    • +
    +

    Watch a Presentation About Angular

    +

    Here is a presentation on Angular from May 2012. The corresponding slides are also available.

    +
    diff --git a/app/lib/angular/docs/partials/guide/scope.html b/app/lib/angular/docs/partials/guide/scope.html new file mode 100755 index 000000000..29e0e0bc3 --- /dev/null +++ b/app/lib/angular/docs/partials/guide/scope.html @@ -0,0 +1,299 @@ + Improve this doc

    +
    +
    +

    +

    What are Scopes?

    +

    scope is an object that refers to the application +model. It is an execution context for expressions. Scopes are +arranged in hierarchical structure which mimic the DOM structure of the application. Scopes can +watch expressions and propagate events.

    +

    Scope characteristics

    +
      +
    • Scopes provide APIs ($watch) to observe +model mutations.

      +
    • +
    • Scopes provide APIs ($apply) to +propagate any model changes through the system into the view from outside of the "Angular +realm" (controllers, services, Angular event handlers).

      +
    • +
    • Scopes can be nested to isolate application components while providing access to shared model +properties. A scope (prototypically) inherits properties from its parent scope.

      +
    • +
    • Scopes provide context against which expressions are evaluated. For +example {{username}} expression is meaningless, unless it is evaluated against a specific +scope which defines the username property.

      +
    • +
    +

    Scope as Data-Model

    +

    Scope is the glue between application controller and the view. During the template linking phase the directives set up +$watch expressions on the scope. The +$watch allows the directives to be notified of property changes, which allows the directive to +render the updated value to the DOM.

    +

    Both controllers and directives have reference to the scope, but not to each other. This +arrangement isolates the controller from the directive as well as from DOM. This is an important +point since it makes the controllers view agnostic, which greatly improves the testing story of +the applications.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    In the above example notice that the MyController assigns World to the username property of +the scope. The scope then notifies the input of the assignment, which then renders the input +with username pre-filled. This demonstrates how a controller can write data into the scope.

    +

    Similarly the controller can assign behavior to scope as seen by the sayHello method, which is +invoked when the user clicks on the 'greet' button. The sayHello method can read the username +property and create a greeting property. This demonstrates that the properties on scope update +automatically when they are bound to HTML input widgets.

    +

    Logically the rendering of {{greeting}} involves:

    +
      +
    • retrieval of the scope associated with DOM node where {{greeting}} is defined in template. +In this example this is the same scope as the scope which was passed into MyController. (We +will discuss scope hierarchies later.)

      +
    • +
    • Evaluate the greeting expression against the scope retrieved above, +and assign the result to the text of the enclosing DOM element.

      +
    • +
    +

    You can think of the scope and its properties as the data which is used to render the view. The +scope is the single source-of-truth for all things view related.

    +

    From a testability point of view, the separation of the controller and the view is desirable, because it allows us +to test the behavior without being distracted by the rendering details.

    +
    +  it('should say hello', function() {
    +    var scopeMock = {};
    +    var cntl = new MyController(scopeMock);
    +
    +    // Assert that username is pre-filled
    +    expect(scopeMock.username).toEqual('World');
    +
    +    // Assert that we read new username and greet
    +    scopeMock.username = 'angular';
    +    scopeMock.sayHello();
    +    expect(scopeMock.greeting).toEqual('Hello angular!');
    +  });
    +
    +

    Scope Hierarchies

    +

    Each Angular application has exactly one root scope, but +may have several child scopes.

    +

    The application can have multiple scopes, because some directives create +new child scopes (refer to directive documentation to see which directives create new scopes). +When new scopes are created, they are added as children of their parent scope. This creates a tree +structure which parallels the DOM where they're attached

    +

    When Angular evaluates {{username}}, it first looks at the scope associated with the given +element for the username property. If no such property is found, it searches the parent scope +and so on until the root scope is reached. In JavaScript this behavior is known as prototypical +inheritance, and child scopes prototypically inherit from their parents.

    +

    This example illustrates scopes in application, and prototypical inheritance of properties.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Notice that Angular automatically places ng-scope class on elements where scopes are +attached. The <style> definition in this example highlights in red the new scope locations. The +child scopes are necessary because the repeater evaluates {{employee.name}} expression, but +depending on which scope the expression is evaluated it produces different result. Similarly the +evaluation of {{department}} prototypically inherits from root scope, as it is the only place +where the department property is defined.

    +

    Retrieving Scopes from the DOM.

    +

    Scopes are attached to the DOM as $scope data property, and can be retrieved for debugging +purposes. (It is unlikely that one would need to retrieve scopes in this way inside the +application.) The location where the root scope is attached to the DOM is defined by the location +of ng-app directive. Typically +ng-app is placed on the <html> element, but it can be placed on other elements as well, if, +for example, only a portion of the view needs to be controlled by Angular.

    +

    To examine the scope in the debugger:

    +
      +
    1. right click on the element of interest in your browser and select 'inspect element'. You +should see the browser debugger with the element you clicked on highlighted.

      +
    2. +
    3. The debugger allows you to access the currently selected element in the console as $0 +variable.

      +
    4. +
    5. To retrieve the associated scope in console execute: angular.element($0).scope()

      +
    6. +
    +

    Scope Events Propagation

    +

    Scopes can propagate events in similar fashion to DOM events. The event can be broadcasted to the scope children or emitted to scope parents.

    +

    Source

    +
    +
    +
    
    +
    +
    +
    +
    
    +
    +
    +

    Demo

    +
    +

    Scope Life Cycle

    +

    The normal flow of a browser receiving an event is that it executes a corresponding JavaScript +callback. Once the callback completes the browser re-renders the DOM and returns to waiting for +more events.

    +

    When the browser calls into JavaScript the code executes outside the Angular execution context, +which means that Angular is unaware of model modifications. To properly process model +modifications the execution has to enter the Angular execution context using the $apply method. Only model modifications which +execute inside the $apply method will be properly accounted for by Angular. For example if a +directive listens on DOM events, such as ng-click it must evaluate the +expression inside the $apply method.

    +

    After evaluating the expression, the $apply method performs a $digest. In the $digest phase the scope examines all +of the $watch expressions and compares them with the previous value. This dirty checking is done +asynchronously. This means that assignment such as $scope.username="angular" will not +immediately cause a $watch to be notified, instead the $watch notification is delayed until +the $digest phase. This delay is desirable, since it coalesces multiple model updates into one +$watch notification as well as it guarantees that during the $watch notification no other +$watches are running. If a $watch changes the value of the model, it will force additional +$digest cycle.

    +
      +
    1. Creation

      +

      The root scope is created during the application +bootstrap by the $injector. During template +linking, some directives create new child scopes.

      +
    2. +
    3. Watcher registration

      +

      During template linking directives register watches on the scope. These watches will be +used to propagate model values to the DOM.

      +
    4. +
    5. Model mutation

      +

      For mutations to be properly observed, you should make them only within the scope.$apply(). (Angular APIs do this +implicitly, so no extra $apply call is needed when doing synchronous work in controllers, +or asynchronous work with $http or $timeout services.

      +
    6. +
    7. Mutation observation

      +

      At the end $apply, Angular performs a $digest cycle on the root scope, which then propagates throughout all child scopes. During +the $digest cycle, all $watched expressions or functions are checked for model mutation +and if a mutation is detected, the $watch listener is called.

      +
    8. +
    9. Scope destruction

      +

      When child scopes are no longer needed, it is the responsibility of the child scope creator +to destroy them via scope.$destroy() +API. This will stop propagation of $digest calls into the child scope and allow for memory +used by the child scope models to be reclaimed by the garbage collector.

      +
    10. +
    +

    Scopes and Directives

    +

    During the compilation phase, the compiler matches directives against the DOM template. The directives +usually fall into one of two categories:

    +
      +
    • Observing directives, such as +double-curly expressions {{expression}}, register listeners using the $watch() method. This type of directive needs +to be notified whenever the expression changes so that it can update the view.

      +
    • +
    • Listener directives, such as ng-click, register a listener with the DOM. When the DOM listener fires, the directive +executes the associated expression and updates the view using the $apply() method.

      +
    • +
    +

    When an external event (such as a user action, timer or XHR) is received, the associated expression must be applied to the scope through the $apply() method so that all listeners are updated +correctly.

    +

    Directives that Create Scopes

    +

    In most cases, directives and scopes interact +but do not create new instances of scope. However, some directives, such as ng-controller and ng-repeat, create new child scopes +and attach the child scope to the corresponding DOM element. You can retrieve a scope for any DOM +element by using an angular.element(aDomElement).scope() method call.

    +

    Controllers and Scopes

    +

    Scopes and controllers interact with each other in the following situations:

    +
      +
    • Controllers use scopes to expose controller methods to templates (see ng-controller).

      +
    • +
    • Controllers define methods (behavior) that can mutate the model (properties on the scope).

      +
    • +
    • Controllers may register watches on +the model. These watches execute immediately after the controller behavior executes.

      +
    • +
    +

    See the ng-controller for more +information.

    +

    Scope $watch Performance Considerations

    +

    Dirty checking the scope for property changes is a common operation in Angular and for this reason +the dirty checking function must be efficient. Care should be taken that the dirty checking +function does not do any DOM access, as DOM access is orders of magnitude slower then property +access on JavaScript object.

    +
    diff --git a/app/lib/angular/docs/partials/misc/contribute.html b/app/lib/angular/docs/partials/misc/contribute.html new file mode 100755 index 000000000..127099b02 --- /dev/null +++ b/app/lib/angular/docs/partials/misc/contribute.html @@ -0,0 +1,247 @@ + Improve this doc

    +
    +
    +

    +
    +

    +

    License

    +

    AngularJS is an open source project licensed under the MIT license. Your contributions are +always welcome. When working with AngularJS code base, please follow the guidelines provided on +this page.

    +

    +

    Contributing to Source Code

    +

    We'd love for you to contribute to our source code and to make AngularJS even better than it is +today! Here are the guidelines we'd like you to follow:

    +
      +
    • Major changes that you intend to contribute to the project should be discussed first on our mailing list so that we can better +coordinate our efforts, prevent duplication of work, and help you to craft the change so that it +is successfully accepted upstream.

      +
    • +
    • Small changes and bug fixes can be crafted and submitted to Github as a pull +request.

      +
    • +
    +

    +

    Applying Code Standards

    +

    To ensure consistency throughout the source code, keep these rules in mind as you are working:

    +
      +
    • All features or bug fixes must be tested by one or more specs.

      +
    • +
    • All public API methods must be documented with ngdoc, an extended version of jsdoc (we added +support for markdown and templating via @ngdoc tag). To see how we document our APIs, please +check out the existing ngdocs.

      +
    • +
    • With the exceptions listed below, we follow the rules contained in Google's JavaScript Style Guide:

      +
        +
      • Do not use namespaces: Instead, we wrap the entire angular code base in an anonymous closure +and export our API explicitly rather than implicitly.

        +
      • +
      • Wrap all code at 100 characters.

        +
      • +
      • Instead of complex inheritance hierarchies, we prefer simple objects. We use prototypical +inheritance only when absolutely necessary.

        +
      • +
      • We love functions and closures and, whenever possible, prefer them over objects.

        +
      • +
      • To write concise code that can be better minified, internally we use aliases that map to the +external API. See our existing code to see what we mean.

        +
      • +
      • We don't go crazy with type annotations for private internal APIs unless it's an internal API +that is used throughout AngularJS. The best guidance is to do what makes the most sense.

        +
      • +
      +
    • +
    +

    +

    Checking Out and Building Angular

    +

    The AngularJS source code is hosted at Github, which we also use to +accept code contributions. The AngularJS repository can be found at https://github.com/angular/angular.js.

    +

    Several steps are needed to check out and build AngularJS:

    +

    Installation Dependencies

    +

    Before you can build AngularJS, you must install or configure the following dependencies on your +machine:

    +
      +
    • Git: The Github Guide to Installing Git is +quite a good source for information on Git.

      +
    • +
    • Node.js: We use Node to generate the documentation, run a +development web server, run tests, and generate a build. Depending on your system, you can install Node either from source or as a +pre-packaged bundle.

      +
    • +
    • Java: JavaScript is minified using +Closure Tools jar. Make sure you have Java (version 6 or higher) installed +and included in your PATH variable.

      +

      Once installed, you'll also need several npms (node packages), which you can install once you checked out a local copy +of the Angular repository (see below) with:

      +
        +
      • cd angular.js
      • +
      • npm install
      • +
      • bower install
      • +
      +
    • +
    • Grunt: We use Grunt as our build system. Install the grunt command-line tool globally with:

      +
        +
      • sudo npm install -g grunt-cli
      • +
      +
    • +
    • Bower: Bower is used to manage packages for the docs. Install the bower tool globally with:

      +
        +
      • sudo npm install -g bower
      • +
      +
    • +
    +

    Creating a Github Account and Forking Angular

    +

    To create a Github account, follow the instructions here. +Afterwards, go ahead and fork the main angular repository.

    +

    Building AngularJS

    +

    To build AngularJS, you check out the source code and use Grunt to generate the non-minified and +minified AngularJS files:

    +
      +
    1. To clone your Github repository, run:

      +
       git clone git@github.com:<github username>/angular.js.git
      +
    2. +
    3. To go to the AngularJS directory, run:

      +
       cd angular.js
      +
    4. +
    5. To add the main AngularJS repository as an upstream remote to your repository, run:

      +
       git remote add upstream https://github.com/angular/angular.js.git
      +
    6. +
    7. To add node.js dependencies

      +
       npm install
      +
    8. +
    9. To add docs components

      +
       bower install
      +
    10. +
    11. To build AngularJS, run:

      +
       grunt package
      +
    12. +
    +

    NOTE: If you're using Windows you must run your command line with administrative privileges (right click, run as +Administrator).

    +

    The build output can be located under the build directory. It consists of the following files and +directories:

    +
      +
    • angular-<version>.zip — This is the complete zip file, which contains all of the release build +artifacts.

      +
    • +
    • angular.js — The non-minified angular script.

      +
    • +
    • angular.min.js — The minified angular script.

      +
    • +
    • angular-scenario.js — The angular End2End test runner.

      +
    • +
    • docs/ — A directory that contains all of the files needed to run docs.angularjs.org.

      +
    • +
    • docs/index.html — The main page for the documentation.

      +
    • +
    • docs/docs-scenario.html — The End2End test runner for the documentation application.

      +
    • +
    +

    +

    Running a Local Development Web Server

    +

    To debug code and run end-to-end tests, it is often useful to have a local HTTP server. For this purpose, we have +made available a local web server based on Node.js.

    +
      +
    1. To start the web server, run:

      +
       grunt webserver
      +
    2. +
    3. To access the local server, go to this website:

      +
       http://localhost:8000/
      +

      By default, it serves the contents of the AngularJS project directory.

      +
    4. +
    +

    +

    Running the Unit Test Suite

    +

    Our unit and integration tests are written with Jasmine and executed with Karma. To run all of the +tests once on Chrome run:

    +
    grunt test:unit
    +

    To run the tests on other browsers (Chrome, ChromeCanary, Firefox, Opera and Safari are pre-configured) use:

    +
    grunt test:unit --browsers Opera,Firefox
    +

    Note there should be no spaces between browsers. Opera, Firefox is INVALID.

    +

    During development it's however more productive to continuously run unit tests every time the source or test files +change. To execute tests in this mode run:

    +
      +
    1. To start the Karma server, capture Chrome browser and run unit tests, run:

      +
       grunt autotest:jqlite
      +
    2. +
    3. To capture more browsers, open this url in the desired browser (url might be different if you have multiple instance +of Karma running, read Karma's console output for the correct url):

      +
       http://localhost:9876/
      +
    4. +
    5. To re-run tests just change any source or test file.

      +
    6. +
    +

    To learn more about all of the preconfigured Grunt tasks run:

    +
    grunt --help
    +

    Running the end-to-end Test Suite

    +

    To run the E2E test suite:

    +
      +
    1. Start the local web server if it's not running already.

      +
       grunt webserver
      +
    2. +
    3. In a browser, go to:

      +
       http://localhost:8000/build/docs/docs-scenario.html
      +

      or in terminal run:

      +
       grunt test:end2end
      +
    4. +
    +

    For convenience you can also simply run:

    +
        grunt test:e2e
    +

    This will start the webserver for you and run the tests.

    +

    +

    Submitting Your Changes

    +

    To create and submit a change:

    +
      +
    1. +Please sign our Contributor License Agreement (CLA) before sending pull requests. For any code changes to be +accepted, the CLA must be signed. It's a quick process, we promise!

      +

      For individuals we have a simple click-through form. For +corporations we'll need you to +print, sign and one of scan+email, fax or mail the form.

      +
    2. +
    +
      +
    1. Create and checkout a new branch off the master branch for your changes:

      +
       git checkout -b my-fix-branch master
      +
    2. +
    3. Create your patch, make sure to have plenty of tests (that pass).

      +
    4. +
    5. Commit your changes and create a descriptive commit message (the commit message is used to generate release notes, +please check out our +commit message conventions +and our commit message presubmit hook validate-commit-msg.js):

      +
       git commit -a
      +
    6. +
    7. Push your branch to Github:

      +
       git push origin my-fix-branch
      +
    8. +
    9. In Github, send a pull request to angular:master.

      +
    10. +
    +
      +
    1. When the patch is reviewed and merged, delete your branch and pull yours — and other — changes +from the main (upstream) repository:

      +
        +
      1. To delete the branch in Github, run:

        +
          git push origin :my-fix-branch
        +
      2. +
      3. To check out the master branch, run:

        +
          git checkout master
        +
      4. +
      5. To delete a local branch, run:

        +
          git branch -D my-fix-branch
        +
      6. +
      7. To update your master with the latest upstream version, run:

        +
          git pull --ff upstream master
        +
      8. +
      +
    2. +
    +

    That's it! Thank you for your contribution!

    +
    diff --git a/app/lib/angular/docs/partials/misc/downloading.html b/app/lib/angular/docs/partials/misc/downloading.html new file mode 100755 index 000000000..8f913b1f6 --- /dev/null +++ b/app/lib/angular/docs/partials/misc/downloading.html @@ -0,0 +1,72 @@ + Improve this doc

    +
    +
    +

    +

    Including angular scripts from the Google CDN

    +

    The quickest way to get started is to point your html <script> tag to a Google CDN URL. +This way, you don't have to download anything or maintain a local copy.

    +

    There are two types of angular script URLs you can point to, one for development and one for +production:

    +
      +
    • angular-.js — This is the human-readable, non-minified version, suitable for web +development.
    • +
    • angular-.min.js — This is the minified version, which we strongly suggest you use in +production.
    • +
    +

    To point your code to an angular script on the Google CDN server, use the following template. This +example points to the minified version 1.0.2:

    +
    +  <!doctype html>
    +  <html ng-app>
    +    <head>
    +      <title>My Angular App</title>
    +      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
    +    </head>
    +    <body>
    +    </body>
    +  </html>
    +
    +

    Note that only versions 1.0.1 and above are available on the CDN, if you need an earlier version +you can use the http://code.angularjs.org/ URL which was the previous recommended location for +hosted code source. If you're still using the angular server you should switch to the CDN version +for even faster loading times.

    +

    Downloading and hosting angular files locally

    +

    This option is for those who want to work with angular offline, or those who want to host the +angular files on their own servers.

    +

    If you navigate to http://code.angularjs.org/, you'll see a directory listing with all of the +angular versions since we started releasing versioned build artifacts (quite late in the project +lifetime). Each directory contains all artifacts that we released for a particular version. +Download the version you want and have fun.

    +

    Each directory under http://code.angularjs.org/ includes the following set of files:

    +
      +
    • angular.js — This file is non-obfuscated, non-minified, and human-readable by +opening it it any editor or browser. In order to get better error messages during development, you +should always use this non-minified angular script.

      +
    • +
    • angular.min.js — This is a minified and obfuscated version of +angular.js created with the Closure compiler. Use this version for production in order +to minimize the size of the application that is downloaded by your user's browser.

      +
    • +
    • angular.zip — This is a zip archive that contains all of the files released +for this angular version. Use this file to get everything in a single download.

      +
    • +
    • angular-mocks.js — This file contains an implementation of mocks that makes +testing angular apps even easier. Your unit/integration test harness should load this file after +angular-<version>.js is loaded.

      +
    • +
    • angular-scenario.js — This file is a very nifty JavaScript file that allows you +to write and execute end-to-end tests for angular applications.

      +
    • +
    • angular-loader.min.js — Module loader for Angular modules. If you are loading multiple script files containing +Angular modules, you can load them asynchronously and in any order as long as you load this file first. Often the +contents of this file are copy&pasted into the index.html to avoid even the initial request to angular-loader.min.js. +See angular-seed for an example of usage.

      +
    • +
    • angular-resource.js, angular-cookies.js, etc - extra Angular modules with additional functionality.

      +
    • +
    • docs — this directory contains all the files that compose the +http://docs.angularjs.org/ documentation app. These files are handy to see the older version of +our docs, or even more importantly, view the docs offline.

      +
    • +
    +
    diff --git a/app/lib/angular/docs/partials/misc/faq.html b/app/lib/angular/docs/partials/misc/faq.html new file mode 100755 index 000000000..92b834968 --- /dev/null +++ b/app/lib/angular/docs/partials/misc/faq.html @@ -0,0 +1,133 @@ + Improve this doc

    +
    +
    +

    +

    FAQ

    +

    Questions

    +

    Why is this project called "AngularJS"? Why is the namespace called "ng"?

    +

    Because HTML has Angular brackets and "ng" sounds like "Angular".

    +

    Is AngularJS a library, framework, plugin or a browser extension?

    +

    AngularJS fits the definition of a framework the best, even though it's much more lightweight than +a typical framework and that's why many confuse it with a library.

    +

    AngularJS is 100% JavaScript, 100% client side and compatible with both desktop and mobile browsers. +So it's definitely not a plugin or some other native browser extension.

    +

    Is AngularJS a templating system?

    +

    At the highest level, Angular does look like a just another templating system. But there is one +important reason why the Angular templating system is different, that makes it very good fit for +application development: bidirectional data binding. The template is compiled in the browser and +the compilation step produces a live view. This means you, the developers, don't need to write +code to constantly sync the view with the model and the model with the view as in other +templating systems.

    +

    Do I need to worry about security holes in AngularJS?

    +

    Like any other technology, AngularJS is not impervious to attack. Angular does, however, provide +built-in protection from basic security holes including cross-site scripting and HTML injection +attacks. AngularJS does round-trip escaping on all strings for you and even offers XSRF protection +for server-side communication.

    +

    AngularJS was designed to be compatible with other security measures like Content Security Policy +(CSP), HTTPS (SSL/TLS) and server-side authentication and authorization that greatly reduce the +possible attack vectors and we highly recommended their use.

    +

    Can I download the source, build, and host the AngularJS environment locally?

    +

    Yes. See instructions in downloading.

    +

    What browsers does Angular work with?

    +

    We run our extensive test suite against the following browsers: Safari, Chrome, Firefox, Opera, +IE8, IE9 and mobile browsers (Android, Chrome Mobile, iOS Safari). See Internet Explorer Compatibility for more details in supporting legacy IE browsers.

    +

    What's Angular's performance like?

    +

    The startup time heavily depends on your network connection, state of the cache, browser used and +available hardware, but typically we measure bootstrap time in tens or hundreds of milliseconds.

    +

    The runtime performance will vary depending on the number and complexity of bindings on the page +as well as the speed of your backend (for apps that fetch data from the backend). Just for an +illustration we typically build snappy apps with hundreds or thousands of active bindings.

    +

    How big is the angular.js file that I need to include?

    +

    The size of the file is < 29KB compressed and minified.

    +

    Can I use the open-source Closure Library with Angular?

    +

    Yes, you can use widgets from the Closure Library +in Angular.

    +

    Does Angular use the jQuery library?

    +

    Yes, Angular can use jQuery if it's present in your app when the +application is being bootstrapped. If jQuery is not present in your script path, Angular falls back +to its own implementation of the subset of jQuery that we call jQLite.

    +

    What is testability like in Angular?

    +

    Very testable and designed this way from ground up. It has an integrated dependency injection +framework, provides mocks for many heavy dependencies (server-side communication). See +service for details.

    +

    How can I learn more about Angular?

    +

    Watch the July 17, 2012 talk +"AngularJS Intro + Dependency Injection".

    +

    How is Angular licensed?

    +

    The MIT License.

    +

    Can I download and use the Angular logo artwork?

    +

    Yes! You can find design files in our github repository, under "angular.js/images/logo" +The logo design is licensed under a "Creative Commons Attribution-ShareAlike 3.0 Unported License". If you have some other use in mind, contact us.

    +

    How can I get some AngularJS schwag?

    +

    We often bring a few t-shirts and stickers to events where we're presenting. If you want to order your own, the folks who +make our schwag will be happy to do a custom run for you, based on our existing template. By using the design they have on file, +they'll waive the setup costs, and you can order any quantity you need.

    +

    Stickers +Contact Tom Witting (or anyone in sales) via email at tom@stickergiant.com, and tell him you want to order some AngularJS +stickers just like the ones in job #42711. You'll have to give them your own info for billing and shipping.

    +

    As long as the design stays exactly the same, StickerGiant will give you a reorder discount.

    +

    Common Pitfalls

    +

    The Angular support channel (#angularjs on Freenode) sees a number of recurring pitfalls that new users of Angular fall into. +This document aims to point them out before you discover them the hard way.

    +

    DOM Manipulation

    +

    Stop trying to use jQuery to modify the DOM in controllers. Really. +That includes adding elements, removing elements, retrieving their contents, showing and hiding them. +Use built-in directives, or write your own where necessary, to do your DOM manipulation. +See below about duplicating functionality.

    +

    If you're struggling to break the habit, consider removing jQuery from your app. +Really. Angular has the $http service and powerful directives that make it almost always unnecessary. +Angular's bundled jQLite has a handful of the features most commonly used in writing Angular directives, especially binding to events.

    +

    Trying to duplicate functionality that already exists

    +

    There's a good chance that your app isn't the first to require certain functionality. +There are a few pieces of Angular that are particularly likely to be reimplemented out of old habits.

    +

    ng-repeat

    +

    ng-repeat gets this a lot. +People try to use jQuery (see above) to add more elements to some container as they're fetched from the server. +No, bad dog. +This is what ng-repeat is for, and it does its job very well. +Store the data from the server in an array on your $scope, and bind it to the DOM with ng-repeat.

    +

    ng-show

    +

    ng-show gets this frequently too. +Conditionally showing and hiding things using jQuery is a common pattern in other apps, but Angular has a better way. +ng-show (and ng-hide) conditionally show and hide elements based on boolean expressions. +Describe the conditions for showing and hiding an element in terms of $scope variables:

    +
    <div ng-show="!loggedIn">Click <a href="#/login">here</a> to log in</div>
    +

    Note also the counterpart ng-hide and similar ng-disabled. +Note especially the powerful ng-switch that should be used instead of several mutually exclusive ng-shows.

    +

    ng-class

    +

    ng-class is the last of the big three. +Conditionally applying classes to elements is another thing commonly done manually using jQuery. +Angular, of course, has a better way. +You can give ng-class a whitespace-separated set of class names, and then it's identical to ordinary class. +That's not very exciting, so there's a second syntax:

    +
    <div ng-class="{ errorClass: isError, warningClass: isWarning, okClass: !isError && !isWarning }">...</div>
    +

    Where you give ng-class an object, whose keys are CSS class names and whose values are conditional expressions using $scope variables. +The element will then have all the classes whose conditions are truthy, and none of those whose conditions are falsy.

    +

    Note also the handy ng-class-even and ng-class-odd, and the related though somewhat different ng-style.

    +

    $watch and $apply

    +

    Angular's two-way data binding is the root of all awesome in Angular. +However, it's not magic, and there are some situations where you need to give it a nudge in the right direction.

    +

    When you bind a value to an element in Angular using ng-model, ng-repeat, etc., Angular creates a $watch on that value. +Then whenever a value on a scope changes, all $watches observing that element are executed, and everything updates.

    +

    Sometimes, usually when you're writing a custom directive, you will have to define your own $watch on a scope value to make the directive react to changes.

    +

    On the flip side, sometimes you change a scope value in some code but the app doesn't react to it. +Angular checks for scope variable changes after pieces of your code have finished running; for example, when ng-click calls a function on your scope, Angular will check for changes and react. +However, some code is outside of Angular and you'll have to call scope.$apply() yourself to trigger the update. +This is most commonly seen in event handlers in custom directives.

    +

    Combining ng-repeat with other directives

    +

    ng-repeat is extremely useful, one of the most powerful directives in Angular. +However the transformation it applies to the DOM is substantial. +Therefore applying other directives (such as ng-show, ng-controller and others) to the same element as ng-repeat generally leads to problems.

    +

    If you want to apply a directive to the whole repeat, wrap the repeat in a parent element and put it there. +If you want to apply a directive to each inner piece of the repeat, put it on a child of the element with ng-repeat.

    +

    $rootScope exists, but it can be used for evil

    +

    Scopes in Angular form a hierarchy, prototypically inheriting from a root scope at the top of the tree. +Usually this can be ignored, since most views have a controller, and therefore a scope, of their own.

    +

    Occasionally there are pieces of data that you want to make global to the whole app. +For these, you can inject $rootScope and set values on it like any other scope. +Since the scopes inherit from the root scope, these values will be available to the expressions attached to directives like ng-show just like values on your local $scope.

    +

    Of course, global state sucks and you should use $rootScope sparingly, like you would (hopefully) use with global variables in any language. +In particular, don't use it for code, only data. +If you're tempted to put a function on $rootScope, it's almost always better to put it in a service that can be injected where it's needed, and more easily tested.

    +

    Conversely, don't create a service whose only purpose in life is to store and return bits of data.

    +
    diff --git a/app/lib/angular/docs/partials/misc/started.html b/app/lib/angular/docs/partials/misc/started.html new file mode 100755 index 000000000..af98b045a --- /dev/null +++ b/app/lib/angular/docs/partials/misc/started.html @@ -0,0 +1,35 @@ + Improve this doc

    +
    +
    +

    +

    We want you to have an easy time while starting to use Angular. We've put together the following steps on your path to +becoming an Angular expert.

    +
      +
    1. Read the conceptual overview.
      Understand Angular's vocabulary and how all the Angular +components work together.
    2. +
    3. Do the AngularJS Tutorial.
      Walk end-to-end through building and application complete with tests +on top of a node.js web server. Covers every major AngularJS feature and show you how to set up your development +environment.
    4. +
    5. Download or clone the Seed App project template.
      Gives you a +starter app with a directory layout, test harness, and scripts to begin building your application.
    6. +
    +

    Further Steps

    +

    Watch Videos

    +

    If you haven’t had a chance to watch the videos from the homepage, please check out:

    + +

    And visit our YouTube channel for more AngularJS video presentations and +tutorials.

    +

    Subscribe

    + +

    Read more

    +

    The AngularJS documentation includes the Developer Guide covering concepts and the +API Reference for syntax and usage.

    +
    diff --git a/app/lib/angular/docs/partials/tutorial/index.html b/app/lib/angular/docs/partials/tutorial/index.html new file mode 100755 index 000000000..7e6130b55 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/index.html @@ -0,0 +1,102 @@ + Improve this doc

    +
    +
    +

    +

    A great way to get introduced to AngularJS is to work through this tutorial, which walks you through +the construction of an AngularJS web app. The app you will build is a catalog that displays a list +of Android devices, lets you filter the list to see only devices that interest you, and then view +details for any device.

    +

    +

    Work through the tutorial to see how Angular makes browsers smarter — without the use of extensions +or plug-ins. As you work through the tutorial, you will:

    +
      +
    • See examples of how to use client-side data binding and dependency injection to build dynamic +views of data that change immediately in response to user actions.
    • +
    • See how Angular creates listeners on your data without the need for DOM manipulation.
    • +
    • Learn a better, easier way to test your web apps.
    • +
    • Learn how to use Angular services to make common web tasks, such as getting data into your app, +easier.
    • +
    +

    And all of this works in any browser without modification to the browser!

    +

    When you finish the tutorial you will be able to:

    +
      +
    • Create a dynamic application that works in any browser.
    • +
    • Define the differences between Angular and common JavaScript frameworks.
    • +
    • Understand how data binding works in AngularJS.
    • +
    • Use the angular-seed project to quickly boot-strap your own projects.
    • +
    • Create and run tests.
    • +
    • Identify resources for learning more about AngularJS.
    • +
    +

    The tutorial guides you through the entire process of building a simple application, including +writing and running unit and end-to-end tests. Experiments at the end of each step provide +suggestions for you to learn more about AngularJS and the application you are building.

    +

    You can go through the whole tutorial in a couple of hours or you may want to spend a pleasant day +really digging into it. If you're looking for a shorter introduction to AngularJS, check out the +Getting Started document.

    +

    Working with the code

    +

    You can follow this tutorial and hack on the code in either the Mac/Linux or the Windows +environment. The tutorial relies on the use of Git versioning system for source code management. +You don't need to know anything about Git to follow the tutorial. Select one of the tabs below +and follow the instructions for setting up your computer.

    +
    +
    +
      +
    1. You will need Node.js and Karma to run unit tests, so please verify that you have + Node.js v0.8 or better installed + and that the node executable is on your PATH by running the following + command in a terminal window:

      +
      node --version
      +

      Additionally install Karma if you + don't have it already:

      +
      npm install -g karma
      +
    2. You'll also need Git, which you can get from + the Git site.

    3. +
    4. Clone the angular-phonecat repository located at + Github by running the following command:

      +
      git clone git://github.com/angular/angular-phonecat.git
      +

      This command creates the angular-phonecat directory in your current +directory.

    5. +
    6. Change your current directory to angular-phonecat:

      +
      cd angular-phonecat
      +

      The tutorial instructions assume you are running all commands from the angular-phonecat +directory.

    7. +
    8. You will need an http server running on your system. Mac and Linux machines typically +have Apache pre-installed, but If you don't already have one installed, you can use node +to run scripts/web-server.js, a simple bundled http server.

    9. +
    +
    + +
    +
      +
    1. You will need Node.js and Karma to run unit tests, so please verify that you have + Node.js v0.8 or better installed + and that the node executable is on your PATH by running the following + command in a terminal window:

      +
      node --version
      +

      Additionally install Karma if you + don't have it already:

      +
      npm install -g karma
      +
    2. +
    3. You'll also need Git, which you can get from + the Git site.

    4. +
    5. Clone the angular-phonecat repository located at Github by running the following command:

      +
      git clone git://github.com/angular/angular-phonecat.git
      +

      This command creates the angular-phonecat directory in your current directory.

    6. +
    7. Change your current directory to angular-phonecat:

      +
      cd angular-phonecat
      +

      The tutorial instructions assume you are running all commands from the angular-phonecat +directory.

      +

      You should run all git commands from Git bash.

      +

      Other commands like test.bat or e2e-test.bat should be +executed from the Windows command line.

    8. +
    9. You need an http server running on your system, but if you don't already have one +already installed, you can use node to run scripts\web-server.js, a simple +bundled http server.

    10. +
    +
    + +

    The last thing to do is to make sure your computer has a web browser and a good text editor +installed. Now, let's get some cool stuff done!

    +

    Get Started!

    +
    diff --git a/app/lib/angular/docs/partials/tutorial/step_00.html b/app/lib/angular/docs/partials/tutorial/step_00.html new file mode 100755 index 000000000..b7157a949 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_00.html @@ -0,0 +1,176 @@ + Improve this doc

    +
    +
    +

    +
      + + +

      You are now ready to build the AngularJS phonecat app. In this step, you will become familiar +with the most important source code files, learn how to start the development servers bundled with +angular-seed, and run the application in the browser.

      +
      +
      +
        +
      1. In angular-phonecat directory, run this command:

        +
        git checkout -f step-0
        +

        This resets your workspace to step 0 of the tutorial app.

        +

        You must repeat this for every future step in the tutorial and change the number to + the number of the step you are on. This will cause any changes you made within + your working directory to be lost.

      2. + +
      3. To see the app running in a browser, do one of the following: + +
      4. +
      +
      + + +
      +
        +
      1. Open Git bash and run this command (in angular-phonecat directory):

        +
        git checkout -f step-0
        +

        This resets your workspace to step 0 of the tutorial app.

        +

        You must repeat this for every future step in the tutorial and change the number to + the number of the step you are on. This will cause any changes you made within + your working directory to be lost.

      2. +
      3. To see the app running in a browser, do one of the following: + +
      4. +
      +
      +
      + + +

      You can now see the page in your browser. It's not very exciting, but that's OK.

      +

      The HTML page that displays "Nothing here yet!" was constructed with the HTML code shown below. +The code contains some key Angular elements that we will need going forward.

      +

      app/index.html: +

      +<!doctype html>
      +<html lang="en" ng-app>
      +<head>
      +  <meta charset="utf-8">
      +  <title>My HTML File</title>
      +  <link rel="stylesheet" href="css/app.css">
      +  <link rel="stylesheet" href="css/bootstrap.css">
      +  <script src="lib/angular/angular.js"></script>
      +</head>
      +<body>
      +
      +  <p>Nothing here {{'yet' + '!'}}</p>
      +
      +</body>
      +</html>
      +
      +

      What is the code doing?

      +
        +
      • ng-app directive:

        +
            <html ng-app>
        +

        The ng-app attribute represents an Angular directive named ngApp (Angular uses +name-with-dashes for its custom attributes and camelCase for the corresponding directives +that implements them). +This directive is used to flag the html element that Angular should consider to be the root element +of our application. +This gives application developers the freedom to tell Angular if the entire html page or only a +portion of it should be treated as the Angular application.

        +
      • +
      • AngularJS script tag:

        +
            <script src="lib/angular/angular.js">
        +

        This code downloads the angular.js script and registers a callback that will be executed by the +browser when the containing HTML page is fully downloaded. When the callback is executed, Angular +looks for the ngApp directive. If +Angular finds the directive, it will bootstrap the application with the root of the application DOM +being the element on which the ngApp directive was defined.

        +
      • +
      • Double-curly binding with an expression:

        +
            Nothing here {{'yet' + '!'}}
        +

        This line demonstrates the core feature of Angular's templating capabilities – a binding, denoted +by double-curlies {{ }} as well as a simple expression 'yet' + '!' used in this binding.

        +

        The binding tells Angular that it should evaluate an expression and insert the result into the +DOM in place of the binding. Rather than a one-time insert, as we'll see in the next steps, a +binding will result in efficient continuous updates whenever the result of the expression +evaluation changes.

        +

        Angular expression is a JavaScript-like code snippet that is +evaluated by Angular in the context of the current model scope, rather than within the scope of +the global context (window).

        +

        As expected, once this template is processed by Angular, the html page contains the text: +"Nothing here yet!".

        +
      • +
      +

      Bootstrapping AngularJS apps

      +

      Bootstrapping AngularJS apps automatically using the ngApp directive is very easy and suitable +for most cases. In advanced cases, such as when using script loaders, you can use +imperative / manual way to bootstrap the app.

      +

      There are 3 important things that happen during the app bootstrap:

      +
        +
      1. The injector that will be used for dependency injection +within this app is created.

        +
      2. +
      3. The injector will then create the root scope that will +become the context for the model of our application.

        +
      4. +
      5. Angular will then "compile" the DOM starting at the ngApp root element, processing any +directives and bindings found along the way.

        +
      6. +
      +

      Once an application is bootstrapped, it will then wait for incoming browser events (such as mouse +click, key press or incoming HTTP response) that might change the model. Once such an event occurs, +Angular detects if it caused any model changes and if changes are found, Angular will reflect them +in the view by updating all of the affected bindings.

      +

      The structure of our application is currently very simple. The template contains just one directive +and one static binding, and our model is empty. That will soon change!

      +

      +

      What are all these files in my working directory?

      +

      Most of the files in your working directory come from the angular-seed project which is typically used to bootstrap +new Angular projects. The seed project includes the latest Angular libraries, test libraries, +scripts and a simple example app, all pre-configured for developing a typical web app.

      +

      For the purposes of this tutorial, we modified the angular-seed with the following changes:

      +
        +
      • Removed the example app
      • +
      • Added phone images to app/img/phones/
      • +
      • Added phone data files (JSON) to app/phones/
      • +
      • Added Bootstrap files to app/css/ and app/img/
      • +
      +

      Experiments

      +
        +
      • Try adding a new expression to the index.html that will do some math:

        +
            <p>1 + 2 = {{ 1 + 2 }}</p>
        +
      • +
      +

      Summary

      +

      Now let's go to step 1 and add some content to the web app.

      +
        + +
        +Note: During the bootstrap the injector and the root scope will then be associated with the + element on which the ngApp directive was declared, so when debugging the app you can retrieve + them from browser console via angular.element(rootElement).scope() and + angular.element(rootElement).injector(). +
        diff --git a/app/lib/angular/docs/partials/tutorial/step_01.html b/app/lib/angular/docs/partials/tutorial/step_01.html new file mode 100755 index 000000000..56103cd96 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_01.html @@ -0,0 +1,43 @@ + Improve this doc

        +
        +
        +

        +
          + + +

          In order to illustrate how Angular enhances standard HTML, you will create a purely static HTML +page and then examine how we can turn this HTML code into a template that Angular will use to +dynamically display the same result with any set of data.

          +

          In this step you will add some basic information about two cell phones to an HTML page.

          +
          +
          + + +

          The page now contains a list with information about two phones.

          +

          The most important changes are listed below. You can see the full diff on GitHub:

          +

          app/index.html: +

          +  <ul>
          +    <li>
          +      <span>Nexus S</span>
          +      <p>
          +        Fast just got faster with Nexus S.
          +      </p>
          +    </li>
          +    <li>
          +      <span>Motorola XOOM™ with Wi-Fi</span>
          +      <p>
          +        The Next, Next Generation tablet.
          +      </p>
          +    </li>
          +  </ul>
          +
          +

          Experiments

          +
            +
          • Try adding more static HTML to index.html. For example:

            +
                <p>Total number of phones: 2</p>
            +
          • +
          +

          Summary

          +

          This addition to your app uses static HTML to display the list. Now, let's go to step 2 to learn how to use AngularJS to dynamically generate the same list.

          +
            diff --git a/app/lib/angular/docs/partials/tutorial/step_02.html b/app/lib/angular/docs/partials/tutorial/step_02.html new file mode 100755 index 000000000..b1b63b611 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_02.html @@ -0,0 +1,168 @@ + Improve this doc

            +
            +
            +

            +
              + + +

              Now it's time to make the web page dynamic — with AngularJS. We'll also add a test that verifies the +code for the controller we are going to add.

              +

              There are many ways to structure the code for an application. For Angular apps, we encourage the +use of the Model-View-Controller (MVC) design pattern to decouple the code and to separate concerns. With that in mind, let's use a +little Angular and JavaScript to add model, view, and controller components to our app.

              +
              +
              + + +

              The app now contains a list with three phones.

              +

              The most important changes are listed below. You can see the full diff on GitHub:

              +

              View and Template

              +

              In Angular, the view is a projection of the model through the HTML template. This means that +whenever the model changes, Angular refreshes the appropriate binding points, which updates the +view.

              +

              The view component is constructed by Angular from this template:

              +

              app/index.html: +

              +<html ng-app>
              +<head>
              +  ...
              +  <script src="lib/angular/angular.js"></script>
              +  <script src="js/controllers.js"></script>
              +</head>
              +<body ng-controller="PhoneListCtrl">
              +
              +  <ul>
              +    <li ng-repeat="phone in phones">
              +      {{phone.name}}
              +      <p>{{phone.snippet}}</p>
              +    </li>
              +  </ul>
              +</body>
              +</html>
              +
              +

              We replaced the hard-coded phone list with the +ngRepeat directive and two +Angular expressions enclosed in curly braces: +{{phone.name}} and {{phone.snippet}}:

              +
                +
              • The ng-repeat="phone in phones" statement in the <li> tag is an Angular repeater. The +repeater tells Angular to create a <li> element for each phone in the list using the first <li> +tag as the template.

                +
              • +
              • As we've learned in step 0, the curly braces around phone.name and phone.snippet denote +bindings. As opposed to evaluating constants, these expressions are referring to our application +model, which was set up in our PhoneListCtrl controller.

                +
              • +
              +

              +

              Model and Controller

              +

              The data model (a simple array of phones in object literal notation) is instantiated within +the PhoneListCtrl controller:

              +

              app/js/controllers.js: +

              +function PhoneListCtrl($scope) {
              +  $scope.phones = [
              +    {"name": "Nexus S",
              +     "snippet": "Fast just got faster with Nexus S."},
              +    {"name": "Motorola XOOM™ with Wi-Fi",
              +     "snippet": "The Next, Next Generation tablet."},
              +    {"name": "MOTOROLA XOOM™",
              +     "snippet": "The Next, Next Generation tablet."}
              +  ];
              +}
              +
              +

              Although the controller is not yet doing very much controlling, it is playing a crucial role. By +providing context for our data model, the controller allows us to establish data-binding between +the model and the view. We connected the dots between the presentation, data, and logic components +as follows:

              +
                +
              • PhoneListCtrl — the name of our controller function (located in the JavaScript file +controllers.js), matches the value of the +ngController directive located +on the <body> tag.

                +
              • +
              • The phone data is then attached to the scope ($scope) that was injected into our controller +function. The controller scope is a prototypical descendant of the root scope that was created +when the application bootstrapped. This controller scope is available to all bindings located within +the <body ng-controller="PhoneListCtrl"> tag.

                +

                The concept of a scope in Angular is crucial; a scope can be seen as the glue which allows the +template, model and controller to work together. Angular uses scopes, along with the information +contained in the template, data model, and controller, to keep models and views separate, but in +sync. Any changes made to the model are reflected in the view; any changes that occur in the view +are reflected in the model.

                +

                To learn more about Angular scopes, see the angular scope documentation.

                +
              • +
              +

              Tests

              +

              The "Angular way" makes it easy to test code as it is being developed. Take a look at the following +unit test for your newly created controller:

              +

              test/unit/controllersSpec.js: +

              +describe('PhoneCat controllers', function() {
              +
              +  describe('PhoneListCtrl', function(){
              +
              +    it('should create "phones" model with 3 phones', function() {
              +      var scope = {},
              +          ctrl = new PhoneListCtrl(scope);
              +
              +      expect(scope.phones.length).toBe(3);
              +    });
              +  });
              +});
              +
              +

              The test instantiates our PhoneListCtrl and verifies that its phones array property contains three +records. This example demonstrates how easy it is to create a unit test for code in Angular. Since +testing is such a critical part of software development, we make it easy to create tests in Angular +so that developers are encouraged to write them.

              +

              Angular developers prefer the syntax of Jasmine's Behavior-driven Development (BDD) framework when +writing tests. Although Angular does not require you to use Jasmine, we wrote all of the tests in +this tutorial in Jasmine. You can learn about Jasmine on the Jasmine home page and on the Jasmine wiki.

              +

              The angular-seed project is pre-configured to run all unit tests using Karma. To run the test, do the following:

              +
                +
              1. In a separate terminal window or tab, go to the angular-phonecat directory and run +./scripts/test.sh to start the Karma server (the config file necessary to start the server +is located at ./config/karma.conf.js).

                +
              2. +
              3. Karma will start a new instance of Chrome browser automatically. Just ignore it and let it run in +the background. Karma will use this browser for test execution.

                +
              4. +
              5. You should see the following or similar output in the terminal:

                +
                      info: Karma server started at http://localhost:9876/
                +      info (launcher): Starting  browser "Chrome"
                +      info (Chrome 22.0): Connected on socket id tPUm9DXcLHtZTKbAEO-n
                +      Chrome 22.0: Executed 1 of 1 SUCCESS (0.093 secs / 0.004 secs)
                +

                Yay! The test passed! Or not...

                +
              6. +
              7. To rerun the tests, just change any of the source or test files. Karma will notice the change +and will rerun the tests for you. Now isn't that sweet?

                +
              8. +
              +

              Experiments

              +
                +
              • Add another binding to index.html. For example:

                +
                    <p>Total number of phones: {{phones.length}}</p>
                +
              • +
              • Create a new model property in the controller and bind to it from the template. For example:

                +
                    $scope.hello = "Hello, World!"
                +

                Refresh your browser to make sure it says, "Hello, World!"

                +
              • +
              • Create a repeater that constructs a simple table:

                +
                    <table>
                +      <tr><th>row number</th></tr>
                +      <tr ng-repeat="i in [0, 1, 2, 3, 4, 5, 6, 7]"><td>{{i}}</td></tr>
                +    </table>
                +

                Now, make the list 1-based by incrementing i by one in the binding:

                +
                    <table>
                +      <tr><th>row number</th></tr>
                +      <tr ng-repeat="i in [0, 1, 2, 3, 4, 5, 6, 7]"><td>{{i+1}}</td></tr>
                +    </table>
                +
              • +
              • Make the unit test fail by changing the toBe(3) statement to toBe(4).

                +
              • +
              +

              Summary

              +

              You now have a dynamic app that features separate model, view, and controller components, and you +are testing as you go. Now, let's go to step 3 to learn how to add full text search +to the app.

              +
                diff --git a/app/lib/angular/docs/partials/tutorial/step_03.html b/app/lib/angular/docs/partials/tutorial/step_03.html new file mode 100755 index 000000000..f2eecaaae --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_03.html @@ -0,0 +1,162 @@ + Improve this doc

                +
                +
                +

                +
                  + + +

                  We did a lot of work in laying a foundation for the app in the last step, so now we'll do something +simple; we will add full text search (yes, it will be simple!). We will also write an end-to-end +test, because a good end-to-end test is a good friend. It stays with your app, keeps an eye on it, +and quickly detects regressions.

                  +
                  +
                  + + +

                  The app now has a search box. Notice that the phone list on the page changes depending on what a +user types into the search box.

                  +

                  The most important differences between Steps 2 and 3 are listed below. You can see the full diff on +GitHub:

                  +

                  Controller

                  +

                  We made no changes to the controller.

                  +

                  Template

                  +

                  app/index.html: +

                  +  <div class="container-fluid">
                  +    <div class="row-fluid">
                  +      <div class="span2">
                  +        <!--Sidebar content-->
                  +
                  +        Search: <input ng-model="query">
                  +
                  +      </div>
                  +      <div class="span10">
                  +        <!--Body content-->
                  +
                  +        <ul class="phones">
                  +          <li ng-repeat="phone in phones | filter:query">
                  +            {{phone.name}}
                  +            <p>{{phone.snippet}}</p>
                  +          </li>
                  +        </ul>
                  +
                  +      </div>
                  +    </div>
                  +  </div>
                  +
                  +

                  We added a standard HTML <input> tag and used Angular's +$filter function to process the input for the +ngRepeat directive.

                  +

                  This lets a user enter search criteria and immediately see the effects of their search on the phone +list. This new code demonstrates the following:

                  +
                    +
                  • Data-binding: This is one of the core features in Angular. When the page loads, Angular binds the +name of the input box to a variable of the same name in the data model and keeps the two in sync.

                    +

                    In this code, the data that a user types into the input box (named query) is immediately +available as a filter input in the list repeater (phone in phones | filter:query). When +changes to the data model cause the repeater's input to change, the repeater efficiently updates +the DOM to reflect the current state of the model.

                    +
                    <img  class="diagram" src="img/tutorial/tutorial_03.png">
                    +
                  • +
                  • Use of the filter filter: The filter function uses the +query value to create a new array that contains only those records that match the query.

                    +

                    ngRepeat automatically updates the view in response to the changing number of phones returned +by the filter filter. The process is completely transparent to the developer.

                    +
                  • +
                  +

                  Test

                  +

                  In Step 2, we learned how to write and run unit tests. Unit tests are perfect for testing +controllers and other components of our application written in JavaScript, but they can't easily +test DOM manipulation or the wiring of our application. For these, an end-to-end test is a much +better choice.

                  +

                  The search feature was fully implemented via templates and data-binding, so we'll write our first +end-to-end test, to verify that the feature works.

                  +

                  test/e2e/scenarios.js: +

                  +describe('PhoneCat App', function() {
                  +
                  +  describe('Phone list view', function() {
                  +
                  +    beforeEach(function() {
                  +      browser().navigateTo('../../app/index.html');
                  +    });
                  +
                  +
                  +    it('should filter the phone list as user types into the search box', function() {
                  +      expect(repeater('.phones li').count()).toBe(3);
                  +
                  +      input('query').enter('nexus');
                  +      expect(repeater('.phones li').count()).toBe(1);
                  +
                  +      input('query').enter('motorola');
                  +      expect(repeater('.phones li').count()).toBe(2);
                  +    });
                  +  });
                  +});
                  +
                  +

                  Even though the syntax of this test looks very much like our controller unit test written with +Jasmine, the end-to-end test uses APIs of Angular's end-to-end test runner.

                  +

                  To run the end-to-end test, open one of the following in a new browser tab:

                  + +

                  Previously we've seen how Karma can be used to execute unit tests. Well, it can also run the +end-to-end tests! Use ./scripts/e2e-test.sh script for that. End-to-end tests are slow, so unlike +with unit tests, Karma will exit after the test run and will not automatically rerun the test +suite on every file change. To rerun the test suite, execute the e2e-test.sh script again.

                  +

                  This test verifies that the search box and the repeater are correctly wired together. Notice how +easy it is to write end-to-end tests in Angular. Although this example is for a simple test, it +really is that easy to set up any functional, readable, end-to-end test.

                  +

                  Experiments

                  +
                    +
                  • Display the current value of the query model by adding a {{query}} binding into the +index.html template, and see how it changes when you type in the input box.

                    +
                  • +
                  • Let's see how we can get the current value of the query model to appear in the HTML page title.

                    +

                    You might think you could just add the {{query}} to the title tag element as follows:

                    +
                        <title>Google Phone Gallery: {{query}}</title>
                    +

                    However, when you reload the page, you won't see the expected result. This is because the "query" +model lives in the scope, defined by the ng-controller="PhoneListCtrl" directive, on the body element:

                    +
                        <body ng-controller="PhoneListCtrl">
                    +

                    If you want to bind to the query model from the <title> element, you must move the +ngController declaration to the HTML element because it is the common parent of both the body +and title elements:

                    +
                        <html ng-app ng-controller="PhoneListCtrl">
                    +

                    Be sure to remove the ng-controller declaration from the body element.

                    +

                    While using double curlies works fine within the title element, you might have noticed that +for a split second they are actually displayed to the user while the page is loading. A better +solution would be to use the ngBind or ngBindTemplate directives, which are invisible to the user while the page is loading:

                    +
                        <title ng-bind-template="Google Phone Gallery: {{query}}">Google Phone Gallery</title>
                    +
                  • +
                  • Add the following end-to-end test into the describe block within test/e2e/scenarios.js:

                    +
                    +    it('should display the current filter value within an element with id "status"',
                    +        function() {
                    +      expect(element('#status').text()).toMatch(/Current filter: \s*$/);
                    +
                    +      input('query').enter('nexus');
                    +
                    +      expect(element('#status').text()).toMatch(/Current filter: nexus\s*$/);
                    +
                    +      //alternative version of the last assertion that tests just the value of the binding
                    +      using('#status').expect(binding('query')).toBe('nexus');
                    +    });
                    +  
                    +

                    Refresh the browser tab with the end-to-end test runner to see the test fail. To make the test +pass, edit the index.html template to add a div or p element with id "status" and content +with the query binding, prefixed by "Current filter:". For instance:

                    +
                        <div id="status">Current filter: {{query}}</div>
                    +
                  • +
                  • Add a pause() statement inside of an end-to-end test and rerun it. You'll see the runner pause; +this gives you the opportunity to explore the state of your application while it is displayed in +the browser. The app is live! You can change the search query to prove it. Notice how useful this +is for troubleshooting end-to-end tests.

                    +
                  • +
                  +

                  Summary

                  +

                  We have now added full text search and included a test to verify that search works! Now let's go on +to step 4 to learn how to add sorting capability to the phone app.

                  +
                    diff --git a/app/lib/angular/docs/partials/tutorial/step_04.html b/app/lib/angular/docs/partials/tutorial/step_04.html new file mode 100755 index 000000000..52ab12e2f --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_04.html @@ -0,0 +1,159 @@ + Improve this doc

                    +
                    +
                    +

                    +
                      + + +

                      In this step, you will add a feature to let your users control the order of the items in the phone +list. The dynamic ordering is implemented by creating a new model property, wiring it together with +the repeater, and letting the data binding magic do the rest of the work.

                      +
                      +
                      + + +

                      You should see that in addition to the search box, the app displays a drop down menu that allows +users to control the order in which the phones are listed.

                      +

                      The most important differences between Steps 3 and 4 are listed below. You can see the full diff on +GitHub:

                      +

                      Template

                      +

                      app/index.html: +

                      +  Search: <input ng-model="query">
                      +  Sort by:
                      +  <select ng-model="orderProp">
                      +    <option value="name">Alphabetical</option>
                      +    <option value="age">Newest</option>
                      +  </select>
                      +
                      +
                      +  <ul class="phones">
                      +    <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
                      +      {{phone.name}}
                      +      <p>{{phone.snippet}}</p>
                      +    </li>
                      +  </ul>
                      +
                      +

                      We made the following changes to the index.html template:

                      +
                        +
                      • First, we added a <select> html element named orderProp, so that our users can pick from the +two provided sorting options.

                        +
                        <img  class="diagram" src="img/tutorial/tutorial_04.png">
                        +
                      • +
                      • We then chained the filter filter with orderBy +filter to further process the input into the repeater. orderBy is a filter that takes an input +array, copies it and reorders the copy which is then returned.

                        +
                      • +
                      +

                      Angular creates a two way data-binding between the select element and the orderProp model. +orderProp is then used as the input for the orderBy filter.

                      +

                      As we discussed in the section about data-binding and the repeater in step 3, whenever the model +changes (for example because a user changes the order with the select drop down menu), Angular's +data-binding will cause the view to automatically update. No bloated DOM manipulation code is +necessary!

                      +

                      Controller

                      +

                      app/js/controllers.js: +

                      +function PhoneListCtrl($scope) {
                      +  $scope.phones = [
                      +    {"name": "Nexus S",
                      +     "snippet": "Fast just got faster with Nexus S.",
                      +     "age": 0},
                      +    {"name": "Motorola XOOM™ with Wi-Fi",
                      +     "snippet": "The Next, Next Generation tablet.",
                      +     "age": 1},
                      +    {"name": "MOTOROLA XOOM™",
                      +     "snippet": "The Next, Next Generation tablet.",
                      +     "age": 2}
                      +  ];
                      +
                      +  $scope.orderProp = 'age';
                      +}
                      +
                      +
                        +
                      • We modified the phones model - the array of phones - and added an age property to each phone +record. This property is used to order phones by age.

                        +
                      • +
                      • We added a line to the controller that sets the default value of orderProp to age. If we had +not set the default value here, the model would stay uninitialized until our user would pick an +option from the drop down menu.

                        +

                        This is a good time to talk about two-way data-binding. Notice that when the app is loaded in the +browser, "Newest" is selected in the drop down menu. This is because we set orderProp to 'age' +in the controller. So the binding works in the direction from our model to the UI. Now if you +select "Alphabetically" in the drop down menu, the model will be updated as well and the phones +will be reordered. That is the data-binding doing its job in the opposite direction — from the UI +to the model.

                        +
                      • +
                      +

                      Test

                      +

                      The changes we made should be verified with both a unit test and an end-to-end test. Let's look at +the unit test first.

                      +

                      test/unit/controllersSpec.js: +

                      +describe('PhoneCat controllers', function() {
                      +
                      +  describe('PhoneListCtrl', function(){
                      +    var scope, ctrl;
                      +
                      +    beforeEach(function() {
                      +      scope = {},
                      +      ctrl = new PhoneListCtrl(scope);
                      +    });
                      +
                      +
                      +    it('should create "phones" model with 3 phones', function() {
                      +      expect(scope.phones.length).toBe(3);
                      +    });
                      +
                      +
                      +    it('should set the default value of orderProp model', function() {
                      +      expect(scope.orderProp).toBe('age');
                      +    });
                      +  });
                      +});
                      +
                      +

                      The unit test now verifies that the default ordering property is set.

                      +

                      We used Jasmine's API to extract the controller construction into a beforeEach block, which is +shared by all tests in the parent describe block.

                      +

                      You should now see the following output in the Karma tab:

                      +
                          Chrome 22.0: Executed 2 of 2 SUCCESS (0.021 secs / 0.001 secs)
                      +

                      Let's turn our attention to the end-to-end test.

                      +

                      test/e2e/scenarios.js: +

                      +...
                      +    it('should be possible to control phone order via the drop down select box',
                      +        function() {
                      +      //let's narrow the dataset to make the test assertions shorter
                      +      input('query').enter('tablet');
                      +
                      +      expect(repeater('.phones li', 'Phone List').column('phone.name')).
                      +          toEqual(["Motorola XOOM\u2122 with Wi-Fi",
                      +                   "MOTOROLA XOOM\u2122"]);
                      +
                      +      select('orderProp').option('Alphabetical');
                      +
                      +      expect(repeater('.phones li', 'Phone List').column('phone.name')).
                      +          toEqual(["MOTOROLA XOOM\u2122",
                      +                   "Motorola XOOM\u2122 with Wi-Fi"]);
                      +    });
                      +...
                      +
                      +

                      The end-to-end test verifies that the ordering mechanism of the select box is working correctly.

                      +

                      You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test +runner.html to see the tests run, or you can see them running on Angular's server.

                      +

                      Experiments

                      +
                        +
                      • In the PhoneListCtrl controller, remove the statement that sets the orderProp value and +you'll see that Angular will temporarily add a new "unknown" option to the drop-down list and the +ordering will default to unordered/natural order.

                        +
                      • +
                      • Add an {{orderProp}} binding into the index.html template to display its current value as +text.

                        +
                      • +
                      • Reverse the sort order by adding a - symbol before the sorting value: <option value="-age">Oldest</option>

                        +
                      • +
                      +

                      Summary

                      +

                      Now that you have added list sorting and tested the app, go to step 5 to learn +about Angular services and how Angular uses dependency injection.

                      +
                        diff --git a/app/lib/angular/docs/partials/tutorial/step_05.html b/app/lib/angular/docs/partials/tutorial/step_05.html new file mode 100755 index 000000000..59440c35f --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_05.html @@ -0,0 +1,188 @@ + Improve this doc

                        +
                        +
                        +

                        +
                          + + +

                          Enough of building an app with three phones in a hard-coded dataset! Let's fetch a larger dataset +from our server using one of angular's built-in services called $http. We will use angular's dependency injection (DI) to provide the service to the PhoneListCtrl controller.

                          +
                          +
                          + + +

                          You should now see a list of 20 phones.

                          +

                          The most important changes are listed below. You can see the full diff on GitHub:

                          +

                          Data

                          +

                          The app/phones/phones.json file in your project is a dataset that contains a larger list of phones +stored in the JSON format.

                          +

                          Following is a sample of the file: +

                          +[
                          + {
                          +  "age": 13,
                          +  "id": "motorola-defy-with-motoblur",
                          +  "name": "Motorola DEFY\u2122 with MOTOBLUR\u2122",
                          +  "snippet": "Are you ready for everything life throws your way?"
                          +  ...
                          + },
                          +...
                          +]
                          +
                          +

                          Controller

                          +

                          We'll use angular's $http service in our controller to make an HTTP +request to your web server to fetch the data in the app/phones/phones.json file. $http is just +one of several built-in angular services that handle common operations +in web apps. Angular injects these services for you where you need them.

                          +

                          Services are managed by angular's DI subsystem. Dependency injection +helps to make your web apps both well-structured (e.g., separate components for presentation, data, +and control) and loosely coupled (dependencies between components are not resolved by the +components themselves, but by the DI subsystem).

                          +

                          app/js/controllers.js: +

                          +function PhoneListCtrl($scope, $http) {
                          +  $http.get('phones/phones.json').success(function(data) {
                          +    $scope.phones = data;
                          +  });
                          +
                          +  $scope.orderProp = 'age';
                          +}
                          +
                          +//PhoneListCtrl.$inject = ['$scope', '$http'];
                          +
                          +

                          $http makes an HTTP GET request to our web server, asking for phone/phones.json (the url is +relative to our index.html file). The server responds by providing the data in the json file. +(The response might just as well have been dynamically generated by a backend server. To the +browser and our app they both look the same. For the sake of simplicity we used a json file in this +tutorial.)

                          +

                          The $http service returns a promise object with a success +method. We call this method to handle the asynchronous response and assign the phone data to the +scope controlled by this controller, as a model called phones. Notice that angular detected the +json response and parsed it for us!

                          +

                          To use a service in angular, you simply declare the names of the dependencies you need as arguments +to the controller's constructor function, as follows:

                          +
                          function PhoneListCtrl($scope, $http) {...}
                          +

                          Angular's dependency injector provides services to your controller when the controller is being +constructed. The dependency injector also takes care of creating any transitive dependencies the +service may have (services often depend upon other services).

                          +

                          Note that the names of arguments are significant, because the injector uses these to look up the +dependencies.

                          +

                          +

                          '$' Prefix Naming Convention

                          +

                          You can create your own services, and in fact we will do exactly that in step 11. As a naming +convention, angular's built-in services, Scope methods and a few other angular APIs have a '$' +prefix in front of the name. Don't use a '$' prefix when naming your services and models, in order +to avoid any possible naming collisions.

                          +

                          A Note on Minification

                          +

                          Since angular infers the controller's dependencies from the names of arguments to the controller's +constructor function, if you were to minify the JavaScript code for PhoneListCtrl controller, all of its function arguments would be +minified as well, and the dependency injector would not be able to identify services correctly.

                          +

                          To overcome issues caused by minification, just assign an array with service identifier strings +into the $inject property of the controller function, just like the last line in the snippet +(commented out) suggests:

                          +
                          PhoneListCtrl.$inject = ['$scope', '$http'];
                          +

                          There is also one more way to specify this dependency list and avoid minification issues — using the +bracket notation which wraps the function to be injected into an array of strings (representing the +dependency names) followed by the function to be injected:

                          +
                          var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];
                          +

                          Both of these methods work with any function that can be injected by Angular, so it's up to your +project's style guide to decide which one you use.

                          +

                          Test

                          +

                          test/unit/controllersSpec.js:

                          +

                          Because we started using dependency injection and our controller has dependencies, constructing the +controller in our tests is a bit more complicated. We could use the new operator and provide the +constructor with some kind of fake $http implementation. However, the recommended (and easier) way +is to create a controller in the test environment in the same way that angular does it in the +production code behind the scenes, as follows:

                          +
                          +describe('PhoneCat controllers', function() {
                          +
                          +  describe('PhoneListCtrl', function(){
                          +    var scope, ctrl, $httpBackend;
                          +
                          +    // The injector ignores leading and trailing underscores here (i.e. _$httpBackend_).
                          +    // This allows us to inject a service but then attach it to a variable
                          +    // with the same name as the service.
                          +    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
                          +      $httpBackend = _$httpBackend_;
                          +      $httpBackend.expectGET('phones/phones.json').
                          +          respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
                          +
                          +      scope = $rootScope.$new();
                          +      ctrl = $controller(PhoneListCtrl, {$scope: scope});
                          +    }));
                          +
                          +

                          Note: Because we loaded Jasmine and angular-mocks.js in our test environment, we got two helper +methods module and inject that we'll +use to access and configure the injector.

                          +

                          We created the controller in the test environment, as follows:

                          +
                            +
                          • We used the inject helper method to inject instances of +$rootScope, +$controller and +$httpBackend services into the Jasmine's beforeEach +function. These instances come from an injector which is recreated from scratch for every single +test. This guarantees that each test starts from a well known starting point and each test is +isolated from the work done in other tests.

                            +
                          • +
                          • We created a new scope for our controller by calling $rootScope.$new()

                            +
                          • +
                          • We called the injected $controller function passing the PhoneListCtrl function and the created +scope as parameters.

                            +
                          • +
                          +

                          Because our code now uses the $http service to fetch the phone list data in our controller, before +we create the PhoneListCtrl child scope, we need to tell the testing harness to expect an +incoming request from the controller. To do this we:

                          +
                            +
                          • Request $httpBackend service to be injected into our beforeEach function. This is a mock +version of the service that in a production environment facilitates all XHR and JSONP requests. +The mock version of this service allows you to write tests without having to deal with +native APIs and the global state associated with them — both of which make testing a nightmare.

                            +
                          • +
                          • Use the $httpBackend.expectGET method to train the $httpBackend service to expect an incoming +HTTP request and tell it what to respond with. Note that the responses are not returned until we call +the $httpBackend.flush method.

                            +
                          • +
                          +

                          Now, we will make assertions to verify that the phones model doesn't exist on scope before +the response is received:

                          +
                          +    it('should create "phones" model with 2 phones fetched from xhr', function() {
                          +      expect(scope.phones).toBeUndefined();
                          +      $httpBackend.flush();
                          +
                          +      expect(scope.phones).toEqual([{name: 'Nexus S'},
                          +                                   {name: 'Motorola DROID'}]);
                          +    });
                          +
                          +
                            +
                          • We flush the request queue in the browser by calling $httpBackend.flush(). This causes the +promise returned by the $http service to be resolved with the trained response.

                            +
                          • +
                          • We make the assertions, verifying that the phone model now exists on the scope.

                            +
                          • +
                          +

                          Finally, we verify that the default value of orderProp is set correctly:

                          +
                          +    it('should set the default value of orderProp model', function() {
                          +      expect(scope.orderProp).toBe('age');
                          +    });
                          +
                          +

                          You should now see the following output in the Karma tab:

                          +
                             Chrome 22.0: Executed 2 of 2 SUCCESS (0.028 secs / 0.007 secs)
                          +

                          Experiments

                          +
                            +
                          • At the bottom of index.html, add a {{phones | json}} binding to see the list of phones +displayed in json format.

                            +
                          • +
                          • In the PhoneListCtrl controller, pre-process the http response by limiting the number of phones +to the first 5 in the list. Use the following code in the $http callback:

                            +
                               $scope.phones = data.splice(0, 5);
                            +
                          • +
                          +

                          Summary

                          +

                          Now that you have learned how easy it is to use angular services (thanks to Angular's dependency +injection), go to step 6, where you will add some +thumbnail images of phones and some links.

                          +
                            diff --git a/app/lib/angular/docs/partials/tutorial/step_06.html b/app/lib/angular/docs/partials/tutorial/step_06.html new file mode 100755 index 000000000..7b87f2ff7 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_06.html @@ -0,0 +1,84 @@ + Improve this doc

                            +
                            +
                            +

                            +
                            diff --git a/app/lib/angular/docs/partials/tutorial/step_07.html b/app/lib/angular/docs/partials/tutorial/step_07.html new file mode 100755 index 000000000..d46bbe118 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_07.html @@ -0,0 +1,209 @@ + Improve this doc

                            +
                            +
                            +

                            +
                              + + +

                              In this step, you will learn how to create a layout template and how to build an app that has +multiple views by adding routing.

                              +
                              +
                              + + +

                              Note that when you now navigate to app/index.html, you are redirected to app/index.html#/phones +and the same phone list appears in the browser. When you click on a phone link the stub of a phone +detail page is displayed.

                              +

                              The most important changes are listed below. You can see the full diff on GitHub.

                              +

                              Multiple Views, Routing and Layout Template

                              +

                              Our app is slowly growing and becoming more complex. Before step 7, the app provided our users with +a single view (the list of all phones), and all of the template code was located in the +index.html file. The next step in building the app is to add a view that will show detailed +information about each of the devices in our list.

                              +

                              To add the detailed view, we could expand the index.html file to contain template code for both +views, but that would get messy very quickly. Instead, we are going to turn the index.html +template into what we call a "layout template". This is a template that is common for all views in +our application. Other "partial templates" are then included into this layout template depending on +the current "route" — the view that is currently displayed to the user.

                              +

                              Application routes in Angular are declared via the +$routeProvider, which is the provider of the +$route service. This service makes it easy to wire together +controllers, view templates, and the current +URL location in the browser. Using this feature we can implement deep linking, which lets us utilize the browser's +history (back and forward navigation) and bookmarks.

                              +

                              A Note About DI, Injector and Providers

                              +

                              As you noticed, dependency injection (DI) is the core feature of +AngularJS, so it's important for you to understand a thing or two about how it works.

                              +

                              When the application bootstraps, Angular creates an injector that will be used for all DI stuff in +this app. The injector itself doesn't know anything about what $http or $route services do, in +fact it doesn't even know about the existence of these services unless it is configured with proper +module definitions. The sole responsibilities of the injector are to load specified module +definition(s), register all service providers defined in these modules, and when asked, inject +a specified function with dependencies (services) that it lazily instantiates via their providers.

                              +

                              Providers are objects that provide (create) instances of services and expose configuration APIs +that can be used to control the creation and runtime behavior of a service. In case of the $route +service, the $routeProvider exposes APIs that allow you to define routes for your application.

                              +

                              Angular modules solve the problem of removing global state from the application and provide a way +of configuring the injector. As opposed to AMD or require.js modules, Angular modules don't try to +solve the problem of script load ordering or lazy script fetching. These goals are totally independent and +both module systems can live side by side and fulfil their goals.

                              +

                              The App Module

                              +

                              app/js/app.js: +

                              +angular.module('phonecat', []).
                              +  config(['$routeProvider', function($routeProvider) {
                              +  $routeProvider.
                              +      when('/phones', {templateUrl: 'partials/phone-list.html',   controller: PhoneListCtrl}).
                              +      when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
                              +      otherwise({redirectTo: '/phones'});
                              +}]);
                              +
                              +

                              In order to configure our application with routes, we need to create a module for our application. +We call this module phonecat and using the config API we request the $routeProvider to be +injected into our config function and use $routeProvider.when API to define our routes.

                              +

                              Note that during the injector configuration phase, the providers can be injected as well, but they +will not be available for injection once the injector is created and starts creating service +instances.

                              +

                              Our application routes were defined as follows:

                              +
                                +
                              • The phone list view will be shown when the URL hash fragment is /phones. To construct this +view, Angular will use the phone-list.html template and the PhoneListCtrl controller.

                                +
                              • +
                              • The phone details view will be shown when the URL hash fragment matches '/phone/:phoneId', where +:phoneId is a variable part of the URL. To construct the phone details view, angular will use the +phone-detail.html template and the PhoneDetailCtrl controller.

                                +
                              • +
                              +

                              We reused the PhoneListCtrl controller that we constructed in previous steps and we added a new, +empty PhoneDetailCtrl controller to the app/js/controllers.js file for the phone details view.

                              +

                              The statement $route.otherwise({redirectTo: '/phones'}) triggers a redirection to /phones when +the browser address doesn't match either of our routes.

                              +

                              Note the use of the :phoneId parameter in the second route declaration. The $route service uses +the route declaration — '/phones/:phoneId' — as a template that is matched against the current +URL. All variables defined with the : notation are extracted into the +$routeParams object.

                              +

                              In order for our application to bootstrap with our newly created module we'll also need to specify +the module name as the value of the ngApp +directive:

                              +

                              app/index.html: +

                              +<!doctype html>
                              +<html lang="en" ng-app="phonecat">
                              +...
                              +
                              +

                              Controllers

                              +

                              app/js/controllers.js: +

                              +...
                              +function PhoneDetailCtrl($scope, $routeParams) {
                              +  $scope.phoneId = $routeParams.phoneId;
                              +}
                              +
                              +//PhoneDetailCtrl.$inject = ['$scope', '$routeParams'];
                              +
                              +

                              Template

                              +

                              The $route service is usually used in conjunction with the ngView directive. The role of the ngView directive is to include the view template for the current +route into the layout template, which makes it a perfect fit for our index.html template.

                              +

                              app/index.html: +

                              +<html lang="en" ng-app="phonecat">
                              +<head>
                              +...
                              +  <script src="lib/angular/angular.js"></script>
                              +  <script src="js/app.js"></script>
                              +  <script src="js/controllers.js"></script>
                              +</head>
                              +<body>
                              +
                              +  <div ng-view></div>
                              +
                              +</body>
                              +</html>
                              +
                              +

                              Note that we removed most of the code in the index.html template and replaced it with a single +line containing a div with the ng-view attribute. The code that we removed was placed into the +phone-list.html template:

                              +

                              app/partials/phone-list.html: +

                              +<div class="container-fluid">
                              +  <div class="row-fluid">
                              +    <div class="span2">
                              +      <!--Sidebar content-->
                              +
                              +      Search: <input ng-model="query">
                              +      Sort by:
                              +      <select ng-model="orderProp">
                              +        <option value="name">Alphabetical</option>
                              +        <option value="age">Newest</option>
                              +      </select>
                              +
                              +    </div>
                              +    <div class="span10">
                              +      <!--Body content-->
                              +
                              +      <ul class="phones">
                              +        <li ng-repeat="phone in phones | filter:query | orderBy:orderProp" class="thumbnail">
                              +          <a href="#/phones/{{phone.id}}" class="thumb"><img ng-src="{{phone.imageUrl}}"></a>
                              +          <a href="#/phones/{{phone.id}}">{{phone.name}}</a>
                              +          <p>{{phone.snippet}}</p>
                              +        </li>
                              +      </ul>
                              +
                              +    </div>
                              +  </div>
                              +</div>
                              +
                              +
                              +TODO! + +
                              + +

                              We also added a placeholder template for the phone details view:

                              +

                              app/partials/phone-detail.html: +

                              +TBD: detail view for {{phoneId}}
                              +
                              +

                              Note how we are using phoneId model defined in the PhoneDetailCtrl controller.

                              +

                              Test

                              +

                              To automatically verify that everything is wired properly, we wrote end-to-end tests that navigate +to various URLs and verify that the correct view was rendered.

                              +
                              +...
                              +  it('should redirect index.html to index.html#/phones', function() {
                              +    browser().navigateTo('../../app/index.html');
                              +    expect(browser().location().url()).toBe('/phones');
                              +  });
                              +...
                              +
                              + describe('Phone detail view', function() {
                              +
                              +    beforeEach(function() {
                              +      browser().navigateTo('../../app/index.html#/phones/nexus-s');
                              +    });
                              +
                              +
                              +    it('should display placeholder page with phoneId', function() {
                              +      expect(binding('phoneId')).toBe('nexus-s');
                              +    });
                              + });
                              +
                              +

                              You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test +runner to see the tests run, or you can see them running on Angular's server.

                              +

                              Experiments

                              +
                                +
                              • Try to add an {{orderProp}} binding to index.html, and you'll see that nothing happens even +when you are in the phone list view. This is because the orderProp model is visible only in the +scope managed by PhoneListCtrl, which is associated with the <div ng-view> element. If you add +the same binding into the phone-list.html template, the binding will work as expected.
                              • +
                              +
                              +* In PhoneCatCtrl, create a new model called "hero" with this.hero = 'Zoro'. In +PhoneListCtrl let's shadow it with this.hero = 'Batman', and in PhoneDetailCtrl we'll use +this.hero = "Captain Proton". Then add the <p>hero = {{hero}}</p> to all three of our templates +(index.html, phone-list.html, and phone-detail.html). Open the app and you'll see scope +inheritance and model property shadowing do some wonders. +
                              + +

                              Summary

                              +

                              With the routing set up and the phone list view implemented, we're ready to go to step 8 to implement the phone details view.

                              +
                                diff --git a/app/lib/angular/docs/partials/tutorial/step_08.html b/app/lib/angular/docs/partials/tutorial/step_08.html new file mode 100755 index 000000000..e159e8cab --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_08.html @@ -0,0 +1,156 @@ + Improve this doc

                                +
                                +
                                +

                                +
                                  + + +

                                  In this step, you will implement the phone details view, which is displayed when a user clicks on a +phone in the phone list.

                                  +
                                  +
                                  + + +

                                  Now when you click on a phone on the list, the phone details page with phone-specific information +is displayed.

                                  +

                                  To implement the phone details view we will use $http to fetch +our data, and we'll flesh out the phone-detail.html view template.

                                  +

                                  The most important changes are listed below. You can see the full diff on GitHub:

                                  +

                                  Data

                                  +

                                  In addition to phones.json, the app/phones/ directory also contains one json file for each +phone:

                                  +

                                  app/phones/nexus-s.json: (sample snippet) +

                                  +{
                                  +  "additionalFeatures": "Contour Display, Near Field Communications (NFC),...",
                                  +  "android": {
                                  +      "os": "Android 2.3",
                                  +      "ui": "Android"
                                  +  },
                                  +  ...
                                  +  "images": [
                                  +      "img/phones/nexus-s.0.jpg",
                                  +      "img/phones/nexus-s.1.jpg",
                                  +      "img/phones/nexus-s.2.jpg",
                                  +      "img/phones/nexus-s.3.jpg"
                                  +  ],
                                  +  "storage": {
                                  +      "flash": "16384MB",
                                  +      "ram": "512MB"
                                  +  }
                                  +}
                                  +
                                  +

                                  Each of these files describes various properties of the phone using the same data structure. We'll +show this data in the phone detail view.

                                  +

                                  Controller

                                  +

                                  We'll expand the PhoneDetailCtrl by using the $http service to fetch the json files. This works +the same way as the phone list controller.

                                  +

                                  app/js/controllers.js: +

                                  +function PhoneDetailCtrl($scope, $routeParams, $http) {
                                  +  $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {
                                  +    $scope.phone = data;
                                  +  });
                                  +}
                                  +
                                  +//PhoneDetailCtrl.$inject = ['$scope', '$routeParams', '$http'];
                                  +
                                  +

                                  To construct the URL for the HTTP request, we use $routeParams.phoneId extracted from the current +route by the $route service.

                                  +

                                  Template

                                  +

                                  The TBD placeholder line has been replaced with lists and bindings that comprise the phone details. +Note where we use the angular {{expression}} markup and ngRepeat to project phone data from +our model into the view.

                                  +

                                  app/partials/phone-detail.html: +

                                  +<img ng-src="{{phone.images[0]}}" class="phone">
                                  +
                                  +<h1>{{phone.name}}</h1>
                                  +
                                  +<p>{{phone.description}}</p>
                                  +
                                  +<ul class="phone-thumbs">
                                  +  <li ng-repeat="img in phone.images">
                                  +    <img ng-src="{{img}}">
                                  +  </li>
                                  +</ul>
                                  +
                                  +<ul class="specs">
                                  +  <li>
                                  +    <span>Availability and Networks</span>
                                  +    <dl>
                                  +      <dt>Availability</dt>
                                  +      <dd ng-repeat="availability in phone.availability">{{availability}}</dd>
                                  +    </dl>
                                  +  </li>
                                  +    ...
                                  +  </li>
                                  +    <span>Additional Features</span>
                                  +    <dd>{{phone.additionalFeatures}}</dd>
                                  +  </li>
                                  +</ul>
                                  +
                                  +
                                  +TODO! + +
                                  + +

                                  Test

                                  +

                                  We wrote a new unit test that is similar to the one we wrote for the PhoneListCtrl controller in +step 5.

                                  +

                                  test/unit/controllersSpec.js: +

                                  +...
                                  +  describe('PhoneDetailCtrl', function(){
                                  +    var scope, $httpBackend, ctrl;
                                  +
                                  +    beforeEach(inject(function(_$httpBackend_, $rootScope, $routeParams, $controller) {
                                  +      $httpBackend = _$httpBackend_;
                                  +      $httpBackend.expectGET('phones/xyz.json').respond({name:'phone xyz'});
                                  +
                                  +      $routeParams.phoneId = 'xyz';
                                  +      scope = $rootScope.$new();
                                  +      ctrl = $controller(PhoneDetailCtrl, {$scope: scope});
                                  +    }));
                                  +
                                  +
                                  +    it('should fetch phone detail', function() {
                                  +      expect(scope.phone).toBeUndefined();
                                  +      $httpBackend.flush();
                                  +
                                  +      expect(scope.phone).toEqual({name:'phone xyz'});
                                  +    });
                                  +  });
                                  +...
                                  +
                                  +

                                  You should now see the following output in the Karma tab:

                                  +
                                  Chrome 22.0: Executed 3 of 3 SUCCESS (0.039 secs / 0.012 secs)
                                  +

                                  We also added a new end-to-end test that navigates to the Nexus S detail page and verifies that the +heading on the page is "Nexus S".

                                  +

                                  test/e2e/scenarios.js: +

                                  +...
                                  +  describe('Phone detail view', function() {
                                  +
                                  +    beforeEach(function() {
                                  +      browser().navigateTo('../../app/index.html#/phones/nexus-s');
                                  +    });
                                  +
                                  +
                                  +    it('should display nexus-s page', function() {
                                  +      expect(binding('phone.name')).toBe('Nexus S');
                                  +    });
                                  +  });
                                  +...
                                  +
                                  +

                                  You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test +runner to see the tests run, or you can see them running on Angular's server.

                                  +

                                  Experiments

                                  + +

                                  Summary

                                  +

                                  Now that the phone details view is in place, proceed to step 9 to learn how to +write your own custom display filter.

                                  +
                                    diff --git a/app/lib/angular/docs/partials/tutorial/step_09.html b/app/lib/angular/docs/partials/tutorial/step_09.html new file mode 100755 index 000000000..d405bcd2d --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_09.html @@ -0,0 +1,105 @@ + Improve this doc

                                    +
                                    +
                                    +

                                    +
                                      + + +

                                      In this step you will learn how to create your own custom display filter.

                                      +
                                      +
                                      + + +

                                      Navigate to one of the detail pages.

                                      +

                                      In the previous step, the details page displayed either "true" or "false" to indicate whether +certain phone features were present or not. We have used a custom filter to convert those text +strings into glyphs: ✓ for "true", and ✘ for "false". Let's see what the filter code looks like.

                                      +

                                      The most important changes are listed below. You can see the full diff on GitHub:

                                      +

                                      Custom Filter

                                      +

                                      In order to create a new filter, you are going to create a phonecatFilters module and register +your custom filter with this module:

                                      +

                                      app/js/filters.js: +

                                      +angular.module('phonecatFilters', []).filter('checkmark', function() {
                                      +  return function(input) {
                                      +    return input ? '\u2713' : '\u2718';
                                      +  };
                                      +});
                                      +
                                      +

                                      The name of our filter is "checkmark". The input evaluates to either true or false, and we +return one of the two unicode characters we have chosen to represent true (\u2713 -> ✓) or false (\u2718 -> ✘).

                                      +

                                      Now that our filter is ready, we need to register the phonecatFilters module as a dependency for +our main phonecat module.

                                      +

                                      app/js/app.js: +

                                      +...
                                      +angular.module('phonecat', ['phonecatFilters']).
                                      +...
                                      +
                                      +

                                      Template

                                      +

                                      Since the filter code lives in the app/js/filters.js file, we need to include this file in our +layout template.

                                      +

                                      app/index.html: +

                                      +...
                                      + <script src="js/controllers.js"></script>
                                      + <script src="js/filters.js"></script>
                                      +...
                                      +
                                      +

                                      The syntax for using filters in Angular templates is as follows:

                                      +
                                      {{ expression | filter }}
                                      +

                                      Let's employ the filter in the phone details template:

                                      +

                                      app/partials/phone-detail.html: +

                                      +...
                                      +    <dl>
                                      +      <dt>Infrared</dt>
                                      +      <dd>{{phone.connectivity.infrared | checkmark}}</dd>
                                      +      <dt>GPS</dt>
                                      +      <dd>{{phone.connectivity.gps | checkmark}}</dd>
                                      +    </dl>
                                      +...
                                      +
                                      +

                                      Test

                                      +

                                      Filters, like any other component, should be tested and these tests are very easy to write.

                                      +

                                      test/unit/filtersSpec.js: +

                                      +describe('filter', function() {
                                      +
                                      +  beforeEach(module('phonecatFilters'));
                                      +
                                      +
                                      +  describe('checkmark', function() {
                                      +
                                      +    it('should convert boolean values to unicode checkmark or cross',
                                      +        inject(function(checkmarkFilter) {
                                      +      expect(checkmarkFilter(true)).toBe('\u2713');
                                      +      expect(checkmarkFilter(false)).toBe('\u2718');
                                      +    }));
                                      +  });
                                      +});
                                      +
                                      +

                                      Note that you need to configure our test injector with the phonecatFilters module before any of +our filter tests execute.

                                      +

                                      You should now see the following output in the Karma tab:

                                      +
                                          Chrome 22.0: Executed 4 of 4 SUCCESS (0.034 secs / 0.012 secs)
                                      +

                                      Experiments

                                      +
                                        +
                                      • Let's experiment with some of the built-in Angular filters and add the +following bindings to index.html:

                                        +
                                          +
                                        • {{ "lower cap string" | uppercase }}
                                        • +
                                        • {{ {foo: "bar", baz: 23} | json }}
                                        • +
                                        • {{ 1304375948024 | date }}
                                        • +
                                        • {{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}
                                        • +
                                        +
                                      • +
                                      • We can also create a model with an input element, and combine it with a filtered binding. Add +the following to index.html:

                                        +
                                         <input ng-model="userInput"> Uppercased: {{ userInput | uppercase }}
                                        +
                                      • +
                                      +

                                      Summary

                                      +

                                      Now that you have learned how to write and test a custom filter, go to step 10 to +learn how we can use Angular to enhance the phone details page further.

                                      +
                                        diff --git a/app/lib/angular/docs/partials/tutorial/step_10.html b/app/lib/angular/docs/partials/tutorial/step_10.html new file mode 100755 index 000000000..9a7716b82 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_10.html @@ -0,0 +1,114 @@ + Improve this doc

                                        +
                                        +
                                        +

                                        +
                                          + + +

                                          In this step, you will add a clickable phone image swapper to the phone details page.

                                          +
                                          +
                                          + + +

                                          The phone details view displays one large image of the current phone and several smaller thumbnail +images. It would be great if we could replace the large image with any of the thumbnails just by +clicking on the desired thumbnail image. Let's have a look at how we can do this with Angular.

                                          +

                                          The most important changes are listed below. You can see the full diff on GitHub:

                                          +

                                          Controller

                                          +

                                          app/js/controllers.js: +

                                          +...
                                          +function PhoneDetailCtrl($scope, $routeParams, $http) {
                                          +  $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {
                                          +    $scope.phone = data;
                                          +    $scope.mainImageUrl = data.images[0];
                                          +  });
                                          +
                                          +  $scope.setImage = function(imageUrl) {
                                          +    $scope.mainImageUrl = imageUrl;
                                          +  }
                                          +}
                                          +
                                          +//PhoneDetailCtrl.$inject = ['$scope', '$routeParams', '$http'];
                                          +
                                          +

                                          In the PhoneDetailCtrl controller, we created the mainImageUrl model property and set its +default value to the first phone image URL.

                                          +

                                          We also created a setImage event handler function that will change the value of mainImageUrl.

                                          +

                                          Template

                                          +

                                          app/partials/phone-detail.html: +

                                          +<img ng-src="{{mainImageUrl}}" class="phone">
                                          +
                                          +...
                                          +
                                          +<ul class="phone-thumbs">
                                          +  <li ng-repeat="img in phone.images">
                                          +    <img ng-src="{{img}}" ng-click="setImage(img)">
                                          +  </li>
                                          +</ul>
                                          +...
                                          +
                                          +

                                          We bound the ngSrc directive of the large image to the mainImageUrl property.

                                          +

                                          We also registered an ngClick +handler with thumbnail images. When a user clicks on one of the thumbnail images, the handler will +use the setImage event handler function to change the value of the mainImageUrl property to the +URL of the thumbnail image.

                                          +
                                          +TODO! + +
                                          + +

                                          Test

                                          +

                                          To verify this new feature, we added two end-to-end tests. One verifies that the main image is set +to the first phone image by default. The second test clicks on several thumbnail images and +verifies that the main image changed appropriately.

                                          +

                                          test/e2e/scenarios.js: +

                                          +...
                                          +  describe('Phone detail view', function() {
                                          +
                                          +...
                                          +
                                          +    it('should display the first phone image as the main phone image', function() {
                                          +      expect(element('img.phone').attr('src')).toBe('img/phones/nexus-s.0.jpg');
                                          +    });
                                          +
                                          +
                                          +    it('should swap main image if a thumbnail image is clicked on', function() {
                                          +      element('.phone-thumbs li:nth-child(3) img').click();
                                          +      expect(element('img.phone').attr('src')).toBe('img/phones/nexus-s.2.jpg');
                                          +
                                          +      element('.phone-thumbs li:nth-child(1) img').click();
                                          +      expect(element('img.phone').attr('src')).toBe('img/phones/nexus-s.0.jpg');
                                          +    });
                                          +  });
                                          +});
                                          +
                                          +

                                          You can now rerun ./scripts/e2e-test.sh or refresh the browser tab with the end-to-end test +runner to see the tests run, or you can see them running on Angular's server.

                                          +

                                          Experiments

                                          +
                                            +
                                          • Let's add a new controller method to PhoneDetailCtrl:

                                            +
                                                $scope.hello = function(name) {
                                            +        alert('Hello ' + (name || 'world') + '!');
                                            +    }
                                            +

                                            and add:

                                            +
                                                <button ng-click="hello('Elmo')">Hello</button>
                                            +

                                            to the phone-details.html template.

                                            +
                                          • +
                                          +
                                          +TODO! + The controller methods are inherited between controllers/scopes, so you can use the same snippet +in the phone-list.html template as well. + +* Move the hello method from PhoneCatCtrl to PhoneListCtrl and you'll see that the button +declared in index.html will stop working, while the one declared in the phone-list.html +template remains operational. +
                                          + + +

                                          Summary

                                          +

                                          With the phone image swapper in place, we're ready for step 11 (the last step!) to +learn an even better way to fetch data.

                                          +
                                            diff --git a/app/lib/angular/docs/partials/tutorial/step_11.html b/app/lib/angular/docs/partials/tutorial/step_11.html new file mode 100755 index 000000000..1ad1f9033 --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/step_11.html @@ -0,0 +1,185 @@ + Improve this doc

                                            +
                                            +
                                            +

                                            +
                                              + + +

                                              In this step, you will improve the way our app fetches data.

                                              +
                                              +
                                              + + +

                                              The last improvement we will make to our app is to define a custom service that represents a RESTful client. Using this client we +can make XHR requests for data in an easier way, without having to deal with the lower-level $http API, HTTP methods and URLs.

                                              +

                                              The most important changes are listed below. You can see the full diff on GitHub:

                                              +

                                              Template

                                              +

                                              The custom service is defined in app/js/services.js so we need to include this file in our layout +template. Additionally, we also need to load the angular-resource.js file, which contains the +ngResource module and in it the $resource service, that we'll soon use:

                                              +

                                              app/index.html. +

                                              +...
                                              +  <script src="js/services.js"></script>
                                              +  <script src="lib/angular/angular-resource.js"></script>
                                              +...
                                              +
                                              +

                                              Service

                                              +

                                              app/js/services.js. +

                                              +angular.module('phonecatServices', ['ngResource']).
                                              +    factory('Phone', function($resource){
                                              +  return $resource('phones/:phoneId.json', {}, {
                                              +    query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
                                              +  });
                                              +});
                                              +
                                              +

                                              We used the module API to register a custom service using a factory function. We passed in the name +of the service - 'Phone' - and the factory function. The factory function is similar to a +controller's constructor in that both can declare dependencies via function arguments. The Phone +service declared a dependency on the $resource service.

                                              +

                                              The $resource service makes it easy to create a +RESTful client with just a few +lines of code. This client can then be used in our application, instead of the lower-level $http service.

                                              +

                                              app/js/app.js. +

                                              +...
                                              +angular.module('phonecat', ['phonecatFilters', 'phonecatServices']).
                                              +...
                                              +
                                              +

                                              We need to add 'phonecatServices' to 'phonecat' application's requires array.

                                              +

                                              Controller

                                              +

                                              We simplified our sub-controllers (PhoneListCtrl and PhoneDetailCtrl) by factoring out the +lower-level $http service, replacing it with a new service called +Phone. Angular's $resource service is easier to +use than $http for interacting with data sources exposed as RESTful resources. It is also easier +now to understand what the code in our controllers is doing.

                                              +

                                              app/js/controllers.js. +

                                              +...
                                              +
                                              +function PhoneListCtrl($scope, Phone) {
                                              +  $scope.phones = Phone.query();
                                              +  $scope.orderProp = 'age';
                                              +}
                                              +
                                              +//PhoneListCtrl.$inject = ['$scope', 'Phone'];
                                              +
                                              +
                                              +
                                              +function PhoneDetailCtrl($scope, $routeParams, Phone) {
                                              +  $scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
                                              +    $scope.mainImageUrl = phone.images[0];
                                              +  });
                                              +
                                              +  $scope.setImage = function(imageUrl) {
                                              +    $scope.mainImageUrl = imageUrl;
                                              +  }
                                              +}
                                              +
                                              +//PhoneDetailCtrl.$inject = ['$scope', '$routeParams', 'Phone'];
                                              +
                                              +

                                              Notice how in PhoneListCtrl we replaced:

                                              +
                                              $http.get('phones/phones.json').success(function(data) {
                                              +  $scope.phones = data;
                                              +});
                                              +

                                              with:

                                              +
                                              $scope.phones = Phone.query();
                                              +

                                              This is a simple statement that we want to query for all phones.

                                              +

                                              An important thing to notice in the code above is that we don't pass any callback functions when +invoking methods of our Phone service. Although it looks as if the result were returned +synchronously, that is not the case at all. What is returned synchronously is a "future" — an +object, which will be filled with data when the XHR response returns. Because of the data-binding +in Angular, we can use this future and bind it to our template. Then, when the data arrives, the +view will automatically update.

                                              +

                                              Sometimes, relying on the future object and data-binding alone is not sufficient to do everything +we require, so in these cases, we can add a callback to process the server response. The +PhoneDetailCtrl controller illustrates this by setting the mainImageUrl in a callback.

                                              +

                                              Test

                                              +

                                              We have modified our unit tests to verify that our new service is issuing HTTP requests and +processing them as expected. The tests also check that our controllers are interacting with the +service correctly.

                                              +

                                              The $resource service augments the response object +with methods for updating and deleting the resource. If we were to use the standard toEqual +matcher, our tests would fail because the test values would not match the responses exactly. To +solve the problem, we use a newly-defined toEqualData Jasmine matcher. When the +toEqualData matcher compares two objects, it takes only object properties into account and +ignores methods.

                                              +

                                              test/unit/controllersSpec.js: +

                                              +describe('PhoneCat controllers', function() {
                                              +
                                              +  beforeEach(function(){
                                              +    this.addMatchers({
                                              +      toEqualData: function(expected) {
                                              +        return angular.equals(this.actual, expected);
                                              +      }
                                              +    });
                                              +  });
                                              +
                                              +
                                              +  beforeEach(module('phonecatServices'));
                                              +
                                              +
                                              +  describe('PhoneListCtrl', function(){
                                              +    var scope, ctrl, $httpBackend;
                                              +
                                              +    beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
                                              +      $httpBackend = _$httpBackend_;
                                              +      $httpBackend.expectGET('phones/phones.json').
                                              +          respond([{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
                                              +
                                              +      scope = $rootScope.$new();
                                              +      ctrl = $controller(PhoneListCtrl, {$scope: scope});
                                              +    }));
                                              +
                                              +
                                              +    it('should create "phones" model with 2 phones fetched from xhr', function() {
                                              +      expect(scope.phones).toEqual([]);
                                              +      $httpBackend.flush();
                                              +
                                              +      expect(scope.phones).toEqualData(
                                              +          [{name: 'Nexus S'}, {name: 'Motorola DROID'}]);
                                              +    });
                                              +
                                              +
                                              +    it('should set the default value of orderProp model', function() {
                                              +      expect(scope.orderProp).toBe('age');
                                              +    });
                                              +  });
                                              +
                                              +
                                              +  describe('PhoneDetailCtrl', function(){
                                              +    var scope, $httpBackend, ctrl,
                                              +        xyzPhoneData = function() {
                                              +          return {
                                              +            name: 'phone xyz',
                                              +                images: ['image/url1.png', 'image/url2.png']
                                              +          }
                                              +        };
                                              +
                                              +
                                              +    beforeEach(inject(function(_$httpBackend_, $rootScope, $routeParams, $controller) {
                                              +      $httpBackend = _$httpBackend_;
                                              +      $httpBackend.expectGET('phones/xyz.json').respond(xyzPhoneData());
                                              +
                                              +      $routeParams.phoneId = 'xyz';
                                              +      scope = $rootScope.$new();
                                              +      ctrl = $controller(PhoneDetailCtrl, {$scope: scope});
                                              +    }));
                                              +
                                              +
                                              +    it('should fetch phone detail', function() {
                                              +      expect(scope.phone).toEqualData({});
                                              +      $httpBackend.flush();
                                              +
                                              +      expect(scope.phone).toEqualData(xyzPhoneData());
                                              +    });
                                              +  });
                                              +});
                                              +
                                              +

                                              You should now see the following output in the Karma tab:

                                              +
                                              Chrome 22.0: Executed 4 of 4 SUCCESS (0.038 secs / 0.01 secs)
                                              +

                                              Summary

                                              +

                                              There you have it! We have created a web app in a relatively short amount of time. In the closing notes we'll cover where to go from here.

                                              +
                                                diff --git a/app/lib/angular/docs/partials/tutorial/the_end.html b/app/lib/angular/docs/partials/tutorial/the_end.html new file mode 100755 index 000000000..bac59e76b --- /dev/null +++ b/app/lib/angular/docs/partials/tutorial/the_end.html @@ -0,0 +1,16 @@ + Improve this doc

                                                +
                                                +
                                                +

                                                +

                                                Our application is now complete. Feel free to experiment with the code further, and jump back to +previous steps using the git checkout command.

                                                +

                                                For more details and examples of the Angular concepts we touched on in this tutorial, see the +Developer Guide.

                                                +

                                                For several more examples of code, see the Cookbook.

                                                +

                                                When you are ready to start developing a project using Angular, we recommend that you bootstrap +your development with the angular-seed project.

                                                +

                                                We hope this tutorial was useful to you and that you learned enough about Angular to make you want +to learn more. We especially hope you are inspired to go out and develop Angular web apps of your +own, and that you might be interested in contributing to Angular.

                                                +

                                                If you have questions or feedback or just want to say "hi", please post a message at https://groups.google.com/forum/#!forum/angular.

                                                +
                                                diff --git a/app/lib/angular/docs/robots.txt b/app/lib/angular/docs/robots.txt new file mode 100755 index 000000000..f93b7c063 --- /dev/null +++ b/app/lib/angular/docs/robots.txt @@ -0,0 +1 @@ +Sitemap: http://docs.angularjs.org/sitemap.xml diff --git a/app/lib/angular/docs/sitemap.xml b/app/lib/angular/docs/sitemap.xml new file mode 100755 index 000000000..61d6e302c --- /dev/null +++ b/app/lib/angular/docs/sitemap.xml @@ -0,0 +1,284 @@ + + + http://docs.angularjs.org/api/angular.lowercaseweekly + http://docs.angularjs.org/api/angular.uppercaseweekly + http://docs.angularjs.org/api/angular.forEachweekly + http://docs.angularjs.org/api/angular.extendweekly + http://docs.angularjs.org/api/angular.noopweekly + http://docs.angularjs.org/api/angular.identityweekly + http://docs.angularjs.org/api/angular.isUndefinedweekly + http://docs.angularjs.org/api/angular.isDefinedweekly + http://docs.angularjs.org/api/angular.isObjectweekly + http://docs.angularjs.org/api/angular.isStringweekly + http://docs.angularjs.org/api/angular.isNumberweekly + http://docs.angularjs.org/api/angular.isDateweekly + http://docs.angularjs.org/api/angular.isArrayweekly + http://docs.angularjs.org/api/angular.isFunctionweekly + http://docs.angularjs.org/api/angular.isElementweekly + http://docs.angularjs.org/api/angular.copyweekly + http://docs.angularjs.org/api/angular.equalsweekly + http://docs.angularjs.org/api/angular.bindweekly + http://docs.angularjs.org/api/angular.toJsonweekly + http://docs.angularjs.org/api/angular.fromJsonweekly + http://docs.angularjs.org/api/ng.directive:ngAppweekly + http://docs.angularjs.org/api/angular.bootstrapweekly + http://docs.angularjs.org/api/angular.versionweekly + http://docs.angularjs.org/api/angular.injectorweekly + http://docs.angularjs.org/api/AUTOweekly + http://docs.angularjs.org/api/AUTO.$injectorweekly + http://docs.angularjs.org/api/AUTO.$provideweekly + http://docs.angularjs.org/api/angular.Moduleweekly + http://docs.angularjs.org/api/angular.moduleweekly + http://docs.angularjs.org/api/angular.elementweekly + http://docs.angularjs.org/api/ng.$anchorScrollweekly + http://docs.angularjs.org/api/ng.$animateProviderweekly + http://docs.angularjs.org/api/ng.$animateweekly + http://docs.angularjs.org/api/ng.$cacheFactoryweekly + http://docs.angularjs.org/api/ng.$templateCacheweekly + http://docs.angularjs.org/api/ng.$controllerProviderweekly + http://docs.angularjs.org/api/ng.$controllerweekly + http://docs.angularjs.org/api/ng.directive:aweekly + http://docs.angularjs.org/api/ng.$compileweekly + http://docs.angularjs.org/api/ng.$compileProviderweekly + http://docs.angularjs.org/api/ng.$compile.directive.Attributesweekly + http://docs.angularjs.org/api/ng.directive:ngHrefweekly + http://docs.angularjs.org/api/ng.directive:ngSrcweekly + http://docs.angularjs.org/api/ng.directive:ngSrcsetweekly + http://docs.angularjs.org/api/ng.directive:ngDisabledweekly + http://docs.angularjs.org/api/ng.directive:ngCheckedweekly + http://docs.angularjs.org/api/ng.directive:ngReadonlyweekly + http://docs.angularjs.org/api/ng.directive:ngSelectedweekly + http://docs.angularjs.org/api/ng.directive:ngOpenweekly + http://docs.angularjs.org/api/ng.directive:form.FormControllerweekly + http://docs.angularjs.org/api/ng.directive:ngFormweekly + http://docs.angularjs.org/api/ng.directive:formweekly + http://docs.angularjs.org/api/ng.directive:ngBindweekly + http://docs.angularjs.org/api/ng.directive:ngBindTemplateweekly + http://docs.angularjs.org/api/ng.directive:ngBindHtmlweekly + http://docs.angularjs.org/api/ng.directive:input.textweekly + http://docs.angularjs.org/api/ng.directive:input.numberweekly + http://docs.angularjs.org/api/ng.directive:input.urlweekly + http://docs.angularjs.org/api/ng.directive:input.emailweekly + http://docs.angularjs.org/api/ng.directive:input.radioweekly + http://docs.angularjs.org/api/ng.directive:input.checkboxweekly + http://docs.angularjs.org/api/ng.directive:textareaweekly + http://docs.angularjs.org/api/ng.directive:inputweekly + http://docs.angularjs.org/api/ng.directive:ngModel.NgModelControllerweekly + http://docs.angularjs.org/api/ng.directive:ngModelweekly + http://docs.angularjs.org/api/ng.directive:ngChangeweekly + http://docs.angularjs.org/api/ng.directive:ngListweekly + http://docs.angularjs.org/api/ng.directive:ngClassweekly + http://docs.angularjs.org/api/ng.directive:ngClassOddweekly + http://docs.angularjs.org/api/ng.directive:ngClassEvenweekly + http://docs.angularjs.org/api/ng.directive:ngCloakweekly + http://docs.angularjs.org/api/ng.directive:ngControllerweekly + http://docs.angularjs.org/api/ng.directive:ngCspweekly + http://docs.angularjs.org/api/ng.directive:ngClickweekly + http://docs.angularjs.org/api/ng.directive:ngDblclickweekly + http://docs.angularjs.org/api/ng.directive:ngMousedownweekly + http://docs.angularjs.org/api/ng.directive:ngMouseupweekly + http://docs.angularjs.org/api/ng.directive:ngMouseoverweekly + http://docs.angularjs.org/api/ng.directive:ngMouseenterweekly + http://docs.angularjs.org/api/ng.directive:ngMouseleaveweekly + http://docs.angularjs.org/api/ng.directive:ngMousemoveweekly + http://docs.angularjs.org/api/ng.directive:ngKeydownweekly + http://docs.angularjs.org/api/ng.directive:ngKeyupweekly + http://docs.angularjs.org/api/ng.directive:ngKeypressweekly + http://docs.angularjs.org/api/ng.directive:ngSubmitweekly + http://docs.angularjs.org/api/ng.directive:ngFocusweekly + http://docs.angularjs.org/api/ng.directive:ngBlurweekly + http://docs.angularjs.org/api/ng.directive:ngIfweekly + http://docs.angularjs.org/api/ng.directive:ngIncludeweekly + http://docs.angularjs.org/api/ng.directive:ngInitweekly + http://docs.angularjs.org/api/ng.directive:ngNonBindableweekly + http://docs.angularjs.org/api/ng.directive:ngPluralizeweekly + http://docs.angularjs.org/api/ng.directive:ngRepeatweekly + http://docs.angularjs.org/api/ng.directive:ngShowweekly + http://docs.angularjs.org/api/ng.directive:ngHideweekly + http://docs.angularjs.org/api/ng.directive:ngStyleweekly + http://docs.angularjs.org/api/ng.directive:ngSwitchweekly + http://docs.angularjs.org/api/ng.directive:ngTranscludeweekly + http://docs.angularjs.org/api/ng.directive:scriptweekly + http://docs.angularjs.org/api/ng.directive:selectweekly + http://docs.angularjs.org/api/ng.$documentweekly + http://docs.angularjs.org/api/ng.$exceptionHandlerweekly + http://docs.angularjs.org/api/ng.filter:filterweekly + http://docs.angularjs.org/api/ng.filter:currencyweekly + http://docs.angularjs.org/api/ng.filter:numberweekly + http://docs.angularjs.org/api/ng.filter:dateweekly + http://docs.angularjs.org/api/ng.filter:jsonweekly + http://docs.angularjs.org/api/ng.filter:lowercaseweekly + http://docs.angularjs.org/api/ng.filter:uppercaseweekly + http://docs.angularjs.org/api/ng.filter:limitToweekly + http://docs.angularjs.org/api/ng.filter:orderByweekly + http://docs.angularjs.org/api/ng.$filterProviderweekly + http://docs.angularjs.org/api/ng.$filterweekly + http://docs.angularjs.org/api/ng.$httpBackendweekly + http://docs.angularjs.org/api/ng.$httpweekly + http://docs.angularjs.org/api/ng.$interpolateProviderweekly + http://docs.angularjs.org/api/ng.$interpolateweekly + http://docs.angularjs.org/api/ng.$localeweekly + http://docs.angularjs.org/api/ng.$locationweekly + http://docs.angularjs.org/api/ng.$locationProviderweekly + http://docs.angularjs.org/api/ng.$logweekly + http://docs.angularjs.org/api/ng.$logProviderweekly + http://docs.angularjs.org/api/ng.$parseweekly + http://docs.angularjs.org/api/ng.$qweekly + http://docs.angularjs.org/api/ng.$rootScopeProviderweekly + http://docs.angularjs.org/api/ng.$rootScopeweekly + http://docs.angularjs.org/api/ng.$rootScope.Scopeweekly + http://docs.angularjs.org/api/ng.$sceDelegateweekly + http://docs.angularjs.org/api/ng.$sceDelegateProviderweekly + http://docs.angularjs.org/api/ng.$sceProviderweekly + http://docs.angularjs.org/api/ng.$sceweekly + http://docs.angularjs.org/api/ng.$timeoutweekly + http://docs.angularjs.org/api/ng.$windowweekly + http://docs.angularjs.org/api/ngAnimateweekly + http://docs.angularjs.org/api/ngAnimate.$animateProviderweekly + http://docs.angularjs.org/api/ngAnimate.$animateweekly + http://docs.angularjs.org/api/ngCookiesweekly + http://docs.angularjs.org/api/ngCookies.$cookiesweekly + http://docs.angularjs.org/api/ngCookies.$cookieStoreweekly + http://docs.angularjs.org/api/ng.$rootElementweekly + http://docs.angularjs.org/api/angular.mockweekly + http://docs.angularjs.org/api/ngMock.$exceptionHandlerProviderweekly + http://docs.angularjs.org/api/ngMock.$exceptionHandlerweekly + http://docs.angularjs.org/api/ngMock.$logweekly + http://docs.angularjs.org/api/angular.mock.TzDateweekly + http://docs.angularjs.org/api/angular.mock.dumpweekly + http://docs.angularjs.org/api/ngMock.$httpBackendweekly + http://docs.angularjs.org/api/ngMock.$timeoutweekly + http://docs.angularjs.org/api/ngMockweekly + http://docs.angularjs.org/api/ngMockE2Eweekly + http://docs.angularjs.org/api/ngMockE2E.$httpBackendweekly + http://docs.angularjs.org/api/angular.mock.moduleweekly + http://docs.angularjs.org/api/angular.mock.injectweekly + http://docs.angularjs.org/api/ngResourceweekly + http://docs.angularjs.org/api/ngResource.$resourceweekly + http://docs.angularjs.org/api/ngRoute.directive:ngViewweekly + http://docs.angularjs.org/api/ngRoute.$routeParamsweekly + http://docs.angularjs.org/api/ngRouteweekly + http://docs.angularjs.org/api/ngRoute.$routeProviderweekly + http://docs.angularjs.org/api/ngRoute.$routeweekly + http://docs.angularjs.org/api/ngSanitize.filter:linkyweekly + http://docs.angularjs.org/api/ngSanitizeweekly + http://docs.angularjs.org/api/ngSanitize.$sanitizeweekly + http://docs.angularjs.org/api/ngTouch.directive:ngSwipeLeftweekly + http://docs.angularjs.org/api/ngTouch.directive:ngSwipeRightweekly + http://docs.angularjs.org/api/ngTouch.$swipeweekly + http://docs.angularjs.org/api/ngTouch.directive:ngClickweekly + http://docs.angularjs.org/api/ngTouchweekly + http://docs.angularjs.org/api/indexweekly + http://docs.angularjs.org/cookbook/advancedformweekly + http://docs.angularjs.org/api/ngweekly + http://docs.angularjs.org/cookbook/buzzweekly + http://docs.angularjs.org/cookbook/deeplinkingweekly + http://docs.angularjs.org/cookbook/formweekly + http://docs.angularjs.org/cookbook/helloworldweekly + http://docs.angularjs.org/cookbook/indexweekly + http://docs.angularjs.org/error/$cacheFactory:iidweekly + http://docs.angularjs.org/error/$compile:ctreqweekly + http://docs.angularjs.org/cookbook/mvcweekly + http://docs.angularjs.org/error/$animate:notcselweekly + http://docs.angularjs.org/error/$compile:iscpweekly + http://docs.angularjs.org/error/$compile:multidirweekly + http://docs.angularjs.org/error/$compile:nodomeventsweekly + http://docs.angularjs.org/error/$compile:nonassignweekly + http://docs.angularjs.org/error/$compile:selmultiweekly + http://docs.angularjs.org/error/$compile:tploadweekly + http://docs.angularjs.org/error/$compile:tplrtweekly + http://docs.angularjs.org/error/$compile:uterdirweekly + http://docs.angularjs.org/error/$controller:noscpweekly + http://docs.angularjs.org/error/$httpBackend:noxhrweekly + http://docs.angularjs.org/error/indexweekly + http://docs.angularjs.org/error/$injector:modulerrweekly + http://docs.angularjs.org/error/$injector:nomodweekly + http://docs.angularjs.org/error/$injector:pgetweekly + http://docs.angularjs.org/error/$injector:cdepweekly + http://docs.angularjs.org/error/$injector:itknweekly + http://docs.angularjs.org/error/$injector:unprweekly + http://docs.angularjs.org/error/$interpolate:interrweekly + http://docs.angularjs.org/error/$interpolate:noconcatweekly + http://docs.angularjs.org/error/jqLite:offargsweekly + http://docs.angularjs.org/error/jqLite:noselweekly + http://docs.angularjs.org/error/jqLite:onargsweekly + http://docs.angularjs.org/error/$location:ihshprfxweekly + http://docs.angularjs.org/error/$location:ipthprfxweekly + http://docs.angularjs.org/error/$location:isrchargweekly + http://docs.angularjs.org/error/ng:areqweekly + http://docs.angularjs.org/error/ng:btstrpdweekly + http://docs.angularjs.org/error/ng:cpiweekly + http://docs.angularjs.org/error/ngModel:nonassignweekly + http://docs.angularjs.org/error/ng:cpwsweekly + http://docs.angularjs.org/error/ngOptions:iexpweekly + http://docs.angularjs.org/error/ngPattern:noregexpweekly + http://docs.angularjs.org/error/ngRepeat:iidexpweekly + http://docs.angularjs.org/error/ngRepeat:dupesweekly + http://docs.angularjs.org/error/ngRepeat:iexpweekly + http://docs.angularjs.org/error/$parse:isecfldweekly + http://docs.angularjs.org/error/$parse:lexerrweekly + http://docs.angularjs.org/error/$parse:isecfnweekly + http://docs.angularjs.org/error/$parse:syntaxweekly + http://docs.angularjs.org/error/$parse:ueoeweekly + http://docs.angularjs.org/error/$resource:badargsweekly + http://docs.angularjs.org/error/$resource:badcfgweekly + http://docs.angularjs.org/error/$rootScope:inprogweekly + http://docs.angularjs.org/error/$rootScope:infdigweekly + http://docs.angularjs.org/error/$sanitize:badparseweekly + http://docs.angularjs.org/error/$sce:icontextweekly + http://docs.angularjs.org/error/$sce:iequirksweekly + http://docs.angularjs.org/error/$sce:itypeweekly + http://docs.angularjs.org/error/$sce:unsafeweekly + http://docs.angularjs.org/guide/bootstrapweekly + http://docs.angularjs.org/guide/compilerweekly + http://docs.angularjs.org/error/$sce:insecurlweekly + http://docs.angularjs.org/guide/conceptsweekly + http://docs.angularjs.org/guide/dev_guide.mvcweekly + http://docs.angularjs.org/guide/dev_guide.e2e-testingweekly + http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controllerweekly + http://docs.angularjs.org/guide/dev_guide.mvc.understanding_viewweekly + http://docs.angularjs.org/guide/dev_guide.mvc.understanding_modelweekly + http://docs.angularjs.org/guide/dev_guide.services.creating_servicesweekly + http://docs.angularjs.org/guide/dev_guide.services.injecting_controllersweekly + http://docs.angularjs.org/guide/dev_guide.services.$locationweekly + http://docs.angularjs.org/guide/dev_guide.services.managing_dependenciesweekly + http://docs.angularjs.org/guide/dev_guide.services.testing_servicesweekly + http://docs.angularjs.org/guide/dev_guide.servicesweekly + http://docs.angularjs.org/guide/dev_guide.templates.css-stylingweekly + http://docs.angularjs.org/guide/dev_guide.services.understanding_servicesweekly + http://docs.angularjs.org/guide/dev_guide.templates.filters.creating_filtersweekly + http://docs.angularjs.org/guide/dev_guide.templates.databindingweekly + http://docs.angularjs.org/guide/dev_guide.templates.filters.using_filtersweekly + http://docs.angularjs.org/guide/dev_guide.templates.filtersweekly + http://docs.angularjs.org/guide/dev_guide.templatesweekly + http://docs.angularjs.org/guide/dev_guide.unit-testingweekly + http://docs.angularjs.org/guide/diweekly + http://docs.angularjs.org/guide/expressionweekly + http://docs.angularjs.org/guide/directiveweekly + http://docs.angularjs.org/guide/formsweekly + http://docs.angularjs.org/guide/ieweekly + http://docs.angularjs.org/guide/i18nweekly + http://docs.angularjs.org/guide/indexweekly + http://docs.angularjs.org/guide/introductionweekly + http://docs.angularjs.org/guide/moduleweekly + http://docs.angularjs.org/guide/overviewweekly + http://docs.angularjs.org/misc/contributeweekly + http://docs.angularjs.org/guide/scopeweekly + http://docs.angularjs.org/misc/downloadingweekly + http://docs.angularjs.org/misc/startedweekly + http://docs.angularjs.org/tutorial/indexweekly + http://docs.angularjs.org/tutorial/step_01weekly + http://docs.angularjs.org/tutorial/step_00weekly + http://docs.angularjs.org/misc/faqweekly + http://docs.angularjs.org/tutorial/step_02weekly + http://docs.angularjs.org/tutorial/step_03weekly + http://docs.angularjs.org/tutorial/step_06weekly + http://docs.angularjs.org/tutorial/step_04weekly + http://docs.angularjs.org/tutorial/step_05weekly + http://docs.angularjs.org/tutorial/step_07weekly + http://docs.angularjs.org/tutorial/step_08weekly + http://docs.angularjs.org/tutorial/step_09weekly + http://docs.angularjs.org/tutorial/the_endweekly + http://docs.angularjs.org/tutorial/step_10weekly + http://docs.angularjs.org/tutorial/step_11weekly + diff --git a/app/lib/jquery/jquery-1.10.2.js b/app/lib/jquery/jquery-1.10.2.js new file mode 100644 index 000000000..c5c648255 --- /dev/null +++ b/app/lib/jquery/jquery-1.10.2.js @@ -0,0 +1,9789 @@ +/*! + * jQuery JavaScript Library v1.10.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03T13:48Z + */ +(function( window, undefined ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +//"use strict"; +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<10 + // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + location = window.location, + document = window.document, + docElem = document.documentElement, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.10.2", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( jQuery.support.ownLast ) { + for ( key in obj ) { + return core_hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations. + // Note: this method belongs to the css module but it's needed here for the support module. + // If support gets modularized, this method should be moved back to the css module. + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +/*! + * Sizzle CSS Selector Engine v1.10.2 + * http://sizzlejs.com/ + * + * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-07-03 + */ +(function( window, undefined ) { + +var i, + support, + cachedruns, + Expr, + getText, + isXML, + compile, + outermostContext, + sortInput, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + hasDuplicate = false, + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + return 0; + }, + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rsibling = new RegExp( whitespace + "*[+~]" ), + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( documentIsHTML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // QSA path + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + nid = old = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = attrs.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc, + parent = doc.defaultView; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsHTML = !isXML( doc ); + + // Support: IE>8 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 + // IE6-8 do not support the defaultView property so parent will be undefined + if ( parent && parent.attachEvent && parent !== parent.top ) { + parent.attachEvent( "onbeforeunload", function() { + setDocument(); + }); + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if getElementsByClassName can be trusted + support.getElementsByClassName = assert(function( div ) { + div.innerHTML = "
                                                "; + + // Support: Safari<4 + // Catch class over-caching + div.firstChild.className = "i"; + // Support: Opera<10 + // Catch gEBCN failure to find non-leading classes + return div.getElementsByClassName("i").length === 2; + }); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Support: Opera 10-12/IE8 + // ^= $= *= and empty values + // Should not select anything + // Support: Windows 8 Native Apps + // The type attribute is restricted during .innerHTML assignment + var input = doc.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "t", "" ); + + if ( div.querySelectorAll("[t^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); + + if ( compare ) { + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === doc || contains(preferredDoc, a) ) { + return -1; + } + if ( b === doc || contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } + + // Not directly comparable, sort on existence of method + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return doc; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val === undefined ? + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null : + val; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] && match[4] !== undefined ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + } + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + !documentIsHTML, + results, + rsibling.test( selector ) + ); + return results; +} + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome<14 +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + elem[ name ] === true ? name.toLowerCase() : null; + } + }); +} + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + firingLength = 0; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( list && ( !fired || stack ) ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function( support ) { + + var all, a, input, select, fragment, opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
                                                a"; + + // Finish early in limited (non-browser) environments + all = div.getElementsByTagName("*") || []; + a = div.getElementsByTagName("a")[ 0 ]; + if ( !a || !a.style || !all.length ) { + return support; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + support.getSetAttribute = div.className !== "t"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName("tbody").length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName("link").length; + + // Get the style information from getAttribute + // (IE uses .cssText instead) + support.style = /top/.test( a.getAttribute("style") ); + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + support.hrefNormalized = a.getAttribute("href") === "/a"; + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + support.opacity = /^0.5/.test( a.style.opacity ); + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + support.cssFloat = !!a.style.cssFloat; + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + support.checkOn = !!input.value; + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + support.optSelected = opt.selected; + + // Tests for enctype support on a form (#6743) + support.enctype = !!document.createElement("form").enctype; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>"; + + // Will be defined later + support.inlineBlockNeedsLayout = false; + support.shrinkWrapBlocks = false; + support.pixelPosition = false; + support.deleteExpando = true; + support.noCloneEvent = true; + support.reliableMarginRight = true; + support.boxSizingReliable = true; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Support: IE<9 + // Iteration over object's inherited properties before its own. + for ( i in jQuery( support ) ) { + break; + } + support.ownLast = i !== "0"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
                                                t
                                                "; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior. + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + + // Workaround failing boxSizing test due to offsetWidth returning wrong value + // with some non-1 values of body zoom, ticket #13543 + jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { + support.boxSizing = div.offsetWidth === 4; + }); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
                                                "; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})({}); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = jQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "applet": true, + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + data = null, + i = 0, + elem = this[0]; + + // Special expections of .data basically thwart jQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( name.indexOf("data-") === 0 ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return arguments.length > 1 ? + + // Sets one value + this.each(function() { + jQuery.data( this, key, value ); + }) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n\f]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // Use proper attribute retrieval(#6932, #12072) + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) { + optionSet = true; + } + } + + // force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( jQuery.expr.match.bool.test( name ) ) { + // Set corresponding property to false + if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + elem[ propName ] = false; + // Support: IE<9 + // Also clear defaultChecked/defaultSelected (if appropriate) + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? + ret : + ( elem[ name ] = value ); + + } else { + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? + ret : + elem[ name ]; + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + return tabindex ? + parseInt( tabindex, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + -1; + } + } + } +}); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr; + + jQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ? + function( elem, name, isXML ) { + var fn = jQuery.expr.attrHandle[ name ], + ret = isXML ? + undefined : + /* jshint eqeqeq: false */ + (jQuery.expr.attrHandle[ name ] = undefined) != + getter( elem, name, isXML ) ? + + name.toLowerCase() : + null; + jQuery.expr.attrHandle[ name ] = fn; + return ret; + } : + function( elem, name, isXML ) { + return isXML ? + undefined : + elem[ jQuery.camelCase( "default-" + name ) ] ? + name.toLowerCase() : + null; + }; +}); + +// fix oldIE attroperties +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = { + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords = + // Some attributes are constructed with empty-string values when not defined + function( elem, name, isXML ) { + var ret; + return isXML ? + undefined : + (ret = elem.getAttributeNode( name )) && ret.value !== "" ? + ret.value : + null; + }; + jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ret.specified ? + ret.value : + undefined; + }, + set: nodeHook.set + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }; + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }; +} + +jQuery.each([ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +}); + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }; + if ( !jQuery.support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + // Support: Webkit + // "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + }; + } +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && + jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +var isSimple = /^.[^:#\[\.,]*$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector || [], true) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector || [], false) ); + }, + + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments + if ( cur.nodeType < 11 && (pos ? + pos.index(cur) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector(cur, selectors)) ) { + + cur = ret.push( cur ); + break; + } + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = jQuery.unique( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + })); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + }); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + }); + + } + + if ( typeof qualifier === "string" ) { + if ( isSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
                                                ", "
                                                " ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
                                                " ], + tr: [ 2, "", "
                                                " ], + col: [ 2, "", "
                                                " ], + td: [ 3, "", "
                                                " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
                                                ", "
                                                " ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + append: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip( arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + elems = selector ? jQuery.filter( selector, this ) : this, + i = 0; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var + // Snapshot the DOM in case .domManip sweeps something relevant into its fragment + args = jQuery.map( this, function( elem ) { + return [ elem.nextSibling, elem.parentNode ]; + }), + i = 0; + + // Make the changes, replacing each context element with the new content + this.domManip( arguments, function( elem ) { + var next = args[ i++ ], + parent = args[ i++ ]; + + if ( parent ) { + // Don't use the snapshot next if it has moved (#13810) + if ( next && next.parentNode !== parent ) { + next = this.nextSibling; + } + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + // Allow new content to include elements from the context set + }, true ); + + // Force removal if there was no new content (e.g., from empty arguments) + return i ? this : this.remove(); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, callback, allowIntersection ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, self.html() ); + } + self.domManip( args, callback, allowIntersection ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( this[i], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery._evalUrl( node.src ); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName("tbody")[0] || + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
                                                " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + }, + + _evalUrl: function( url ) { + return jQuery.ajax({ + url: url, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } +}); +jQuery.fn.extend({ + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each(function() { + if ( isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("