├── .bowerrc ├── .gitignore ├── .jsbeautifyrc ├── .jshintrc ├── .travis.yml ├── Gruntfile.js ├── LICENSE ├── README.md ├── bower.json ├── bower_components ├── angular-mocks │ ├── .bower.json │ ├── README.md │ ├── angular-mocks.js │ ├── bower.json │ ├── ngAnimateMock.js │ ├── ngMock.js │ ├── ngMockE2E.js │ └── package.json ├── angular │ ├── .bower.json │ ├── README.md │ ├── angular-csp.css │ ├── angular.js │ ├── angular.min.js │ ├── angular.min.js.gzip │ ├── angular.min.js.map │ ├── bower.json │ ├── index.js │ └── package.json ├── animate.css │ ├── .bower.json │ ├── Gruntfile.js │ ├── animate-config.json │ ├── animate.css │ ├── animate.min.css │ ├── bower.json │ ├── package.json │ └── source │ │ ├── _base.css │ │ ├── attention_seekers │ │ ├── bounce.css │ │ ├── flash.css │ │ ├── jello.css │ │ ├── pulse.css │ │ ├── rubberBand.css │ │ ├── shake.css │ │ ├── swing.css │ │ ├── tada.css │ │ └── wobble.css │ │ ├── bouncing_entrances │ │ ├── bounceIn.css │ │ ├── bounceInDown.css │ │ ├── bounceInLeft.css │ │ ├── bounceInRight.css │ │ └── bounceInUp.css │ │ ├── bouncing_exits │ │ ├── bounceOut.css │ │ ├── bounceOutDown.css │ │ ├── bounceOutLeft.css │ │ ├── bounceOutRight.css │ │ └── bounceOutUp.css │ │ ├── fading_entrances │ │ ├── fadeIn.css │ │ ├── fadeInDown.css │ │ ├── fadeInDownBig.css │ │ ├── fadeInLeft.css │ │ ├── fadeInLeftBig.css │ │ ├── fadeInRight.css │ │ ├── fadeInRightBig.css │ │ ├── fadeInUp.css │ │ └── fadeInUpBig.css │ │ ├── fading_exits │ │ ├── fadeOut.css │ │ ├── fadeOutDown.css │ │ ├── fadeOutDownBig.css │ │ ├── fadeOutLeft.css │ │ ├── fadeOutLeftBig.css │ │ ├── fadeOutRight.css │ │ ├── fadeOutRightBig.css │ │ ├── fadeOutUp.css │ │ └── fadeOutUpBig.css │ │ ├── flippers │ │ ├── flip.css │ │ ├── flipInX.css │ │ ├── flipInY.css │ │ ├── flipOutX.css │ │ └── flipOutY.css │ │ ├── lightspeed │ │ ├── lightSpeedIn.css │ │ └── lightSpeedOut.css │ │ ├── rotating_entrances │ │ ├── rotateIn.css │ │ ├── rotateInDownLeft.css │ │ ├── rotateInDownRight.css │ │ ├── rotateInUpLeft.css │ │ └── rotateInUpRight.css │ │ ├── rotating_exits │ │ ├── rotateOut.css │ │ ├── rotateOutDownLeft.css │ │ ├── rotateOutDownRight.css │ │ ├── rotateOutUpLeft.css │ │ └── rotateOutUpRight.css │ │ ├── sliding_entrances │ │ ├── slideInDown.css │ │ ├── slideInLeft.css │ │ ├── slideInRight.css │ │ └── slideInUp.css │ │ ├── sliding_exits │ │ ├── slideOutDown.css │ │ ├── slideOutLeft.css │ │ ├── slideOutRight.css │ │ └── slideOutUp.css │ │ ├── specials │ │ ├── hinge.css │ │ ├── rollIn.css │ │ └── rollOut.css │ │ ├── zooming_entrances │ │ ├── zoomIn.css │ │ ├── zoomInDown.css │ │ ├── zoomInLeft.css │ │ ├── zoomInRight.css │ │ └── zoomInUp.css │ │ └── zooming_exits │ │ ├── zoomOut.css │ │ ├── zoomOutDown.css │ │ ├── zoomOutLeft.css │ │ ├── zoomOutRight.css │ │ └── zoomOutUp.css ├── jasmine-sinon │ ├── .bower.json │ ├── Gruntfile.js │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── karma.conf.coffee │ ├── lib │ │ └── jasmine-sinon.js │ ├── package.json │ └── spec │ │ ├── existing-method-spy-matchers.spec.js │ │ ├── individual-spy-calls.spec.js │ │ ├── jasmine-matchers-compatibility.spec.js │ │ ├── overwritten-jasmine-matchers.spec.js │ │ ├── spy-matchers.spec.js │ │ └── test-stubs.spec.js ├── jasmine │ ├── .bower.json │ ├── .gitignore │ ├── .gitmodules │ ├── .rspec │ ├── .travis.yml │ ├── Contribute.markdown │ ├── Gemfile │ ├── MIT.LICENSE │ ├── README.markdown │ ├── Rakefile │ ├── Release.markdown │ ├── config.rb │ ├── images │ │ └── jasmine_favicon.png │ ├── jasmine-core.gemspec │ ├── jasmine_dev.thor │ ├── jsdoc-template │ │ ├── allclasses.tmpl │ │ ├── allfiles.tmpl │ │ ├── class.tmpl │ │ ├── index.tmpl │ │ ├── publish.js │ │ ├── static │ │ │ ├── default.css │ │ │ ├── header.html │ │ │ └── index.html │ │ └── symbol.tmpl │ ├── jshint │ │ ├── jshint.js │ │ └── run.js │ ├── lib │ │ ├── jasmine-core.rb │ │ └── jasmine-core │ │ │ ├── example │ │ │ ├── SpecRunner.html │ │ │ ├── spec │ │ │ │ ├── PlayerSpec.js │ │ │ │ └── SpecHelper.js │ │ │ └── src │ │ │ │ ├── Player.js │ │ │ │ └── Song.js │ │ │ ├── jasmine-html.js │ │ │ ├── jasmine.css │ │ │ ├── jasmine.js │ │ │ ├── json2.js │ │ │ └── version.rb │ ├── spec │ │ ├── console │ │ │ └── ConsoleReporterSpec.js │ │ ├── core │ │ │ ├── BaseSpec.js │ │ │ ├── CustomMatchersSpec.js │ │ │ ├── EnvSpec.js │ │ │ ├── ExceptionsSpec.js │ │ │ ├── JsApiReporterSpec.js │ │ │ ├── MatchersSpec.js │ │ │ ├── MockClockSpec.js │ │ │ ├── MultiReporterSpec.js │ │ │ ├── NestedResultsSpec.js │ │ │ ├── PrettyPrintSpec.js │ │ │ ├── QueueSpec.js │ │ │ ├── ReporterSpec.js │ │ │ ├── RunnerSpec.js │ │ │ ├── SpecRunningSpec.js │ │ │ ├── SpecSpec.js │ │ │ ├── SpySpec.js │ │ │ ├── SuiteSpec.js │ │ │ ├── UtilSpec.js │ │ │ └── WaitsForBlockSpec.js │ │ ├── html │ │ │ ├── HTMLReporterSpec.js │ │ │ ├── MatchersHtmlSpec.js │ │ │ ├── PrettyPrintHtmlSpec.js │ │ │ └── TrivialReporterSpec.js │ │ ├── jasmine.yml │ │ ├── jasmine_self_test_spec.rb │ │ ├── node_suite.js │ │ ├── runner.html │ │ ├── spec_helper.rb │ │ ├── tasks │ │ │ ├── build_distribution_spec.rb │ │ │ ├── build_github_pages_spec.rb │ │ │ ├── build_standalone_distribution_spec.rb │ │ │ ├── build_standalone_runner_spec.rb │ │ │ ├── count_specs_spec.rb │ │ │ ├── execute_specs_spec.rb │ │ │ ├── jshint_spec.rb │ │ │ ├── release_spec.rb │ │ │ └── version_spec.rb │ │ └── templates │ │ │ ├── runner.html.erb │ │ │ └── script_tag.html.erb │ ├── src │ │ ├── console │ │ │ └── ConsoleReporter.js │ │ ├── core │ │ │ ├── Block.js │ │ │ ├── Env.js │ │ │ ├── JsApiReporter.js │ │ │ ├── Matchers.js │ │ │ ├── MultiReporter.js │ │ │ ├── NestedResults.js │ │ │ ├── PrettyPrinter.js │ │ │ ├── Queue.js │ │ │ ├── Reporter.js │ │ │ ├── Runner.js │ │ │ ├── Spec.js │ │ │ ├── Suite.js │ │ │ ├── WaitsBlock.js │ │ │ ├── WaitsForBlock.js │ │ │ ├── base.js │ │ │ ├── mock-timeout.js │ │ │ └── util.js │ │ ├── html │ │ │ ├── HtmlReporter.js │ │ │ ├── HtmlReporterHelpers.js │ │ │ ├── ReporterView.js │ │ │ ├── SpecView.js │ │ │ ├── SuiteView.js │ │ │ ├── TrivialReporter.js │ │ │ ├── _HTMLReporter.scss │ │ │ ├── _TrivialReporter.scss │ │ │ ├── jasmine.css │ │ │ └── jasmine.scss │ │ ├── templates │ │ │ ├── example_project_jasmine_tags.html.erb │ │ │ ├── version.js.erb │ │ │ └── version.rb.erb │ │ ├── version.js │ │ └── version.json │ └── tasks │ │ ├── docs.rb │ │ ├── jasmine_dev.rb │ │ └── jasmine_dev │ │ ├── base.rb │ │ ├── build_distribution.rb │ │ ├── build_github_pages.rb │ │ ├── build_standalone_distribution.rb │ │ ├── build_standalone_runner.rb │ │ ├── count_specs.rb │ │ ├── execute_specs.rb │ │ ├── js_hint.rb │ │ ├── release.rb │ │ ├── sources.rb │ │ └── version.rb ├── sinon │ ├── .bower.json │ ├── .editorconfig │ ├── .gitignore │ ├── .jscsrc │ ├── .travis.yml │ ├── AUTHORS │ ├── CONTRIBUTING.md │ ├── Changelog.txt │ ├── LICENSE │ ├── README.md │ ├── RELEASE.md │ ├── build │ ├── lib │ │ ├── sinon.js │ │ └── sinon │ │ │ ├── assert.js │ │ │ ├── behavior.js │ │ │ ├── call.js │ │ │ ├── collection.js │ │ │ ├── extend.js │ │ │ ├── format.js │ │ │ ├── log_error.js │ │ │ ├── match.js │ │ │ ├── mock.js │ │ │ ├── sandbox.js │ │ │ ├── spy.js │ │ │ ├── stub.js │ │ │ ├── test.js │ │ │ ├── test_case.js │ │ │ ├── times_in_words.js │ │ │ ├── typeOf.js │ │ │ └── util │ │ │ ├── core.js │ │ │ ├── event.js │ │ │ ├── fake_server.js │ │ │ ├── fake_server_with_clock.js │ │ │ ├── fake_timers.js │ │ │ ├── fake_xdomain_request.js │ │ │ ├── fake_xml_http_request.js │ │ │ ├── timers_ie.js │ │ │ ├── xdr_ie.js │ │ │ └── xhr_ie.js │ ├── package.json │ ├── release.sh │ ├── scripts │ │ └── ci-test.sh │ └── test │ │ ├── assert-test.js │ │ ├── buster-packaged.js │ │ ├── buster.js │ │ ├── call-test.js │ │ ├── collection-test.js │ │ ├── extend-test.js │ │ ├── format-test.js │ │ ├── hello-world-test.js │ │ ├── issues │ │ └── issues-test.js │ │ ├── log-error-test.js │ │ ├── match-test.js │ │ ├── mock-test.js │ │ ├── sandbox-test.js │ │ ├── sinon-test.js │ │ ├── spy-test.js │ │ ├── stub-test.js │ │ ├── test-case-test.js │ │ ├── test-helper.js │ │ ├── test-test.js │ │ ├── times-in-words-test.js │ │ ├── typeOf-test.js │ │ └── util │ │ ├── event-test.js │ │ ├── fake-server-test.js │ │ ├── fake-server-with-clock-test.js │ │ ├── fake-timers-test.js │ │ ├── fake-xdomain-request-test.js │ │ └── fake-xml-http-request-test.js ├── sinonjs │ ├── .bower.json │ ├── README.md │ ├── bower.json │ └── sinon.js └── underscore │ ├── .bower.json │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── underscore-min.js │ ├── underscore-min.map │ └── underscore.js ├── dist └── angular-scroll-animate.js ├── docs ├── css │ ├── animations.css │ ├── bootstrap.min.css │ ├── doc_widgets.css │ ├── docs.css │ ├── font-awesome.css │ └── prettify.css ├── font │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ └── fontawesome-webfont.woff ├── index.html ├── js │ ├── angular-bootstrap-prettify.js │ ├── angular-bootstrap.js │ ├── angular.min.js │ ├── docs-setup.js │ ├── docs.js │ ├── google-code-prettify.js │ └── marked.js └── partials │ └── api │ └── angular-scroll-animate.directive.when-visible.html ├── example ├── app.js ├── example-controller.js ├── example.html └── index.html ├── karma.conf.js ├── package.json └── src └── angular-scroll-animate.js /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory" : "bower_components" 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | coverage 2 | node_modules 3 | .idea 4 | npm-debug.log 5 | -------------------------------------------------------------------------------- /.jsbeautifyrc: -------------------------------------------------------------------------------- 1 | { 2 | "indent_size": 2, 3 | "indent_char": " ", 4 | "indent_level": 0, 5 | "indent_with_tabs": false, 6 | "preserve_newlines": true, 7 | "max_preserve_newlines": 2, 8 | "jslint_happy": false, 9 | "brace_style": "end-expand", 10 | "indent_scripts": "keep", 11 | "keep_array_indentation": true, 12 | "keep_function_indentation": false, 13 | "space_before_conditional": true, 14 | "break_chained_methods": false, 15 | "eval_code": false, 16 | "unescape_strings": false, 17 | "wrap_line_length": 0 18 | } 19 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "globalstrict": true, 3 | "debug": false, 4 | "node": false, 5 | "devel": true, 6 | "boss": true, 7 | "curly": false, 8 | "eqeqeq": true, 9 | "eqnull": true, 10 | "expr": true, 11 | "immed": true, 12 | "loopfunc": true, 13 | "noarg": true, 14 | "onevar": false, 15 | "quotmark": "single", 16 | "smarttabs": true, 17 | "trailing": true, 18 | "undef": true, 19 | "unused": false, 20 | "globals": { 21 | "angular": false, 22 | "$": false, 23 | "jQuery": false, 24 | "Backbone": false, 25 | "_": false, 26 | "document": false 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | before_script: 5 | - npm install -g bower 6 | - bower install 7 | script: "grunt" 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2015 Robert Pocklington 2 | http://github.com/rpocklin/angular-scroll-animate 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-scroll-animate", 3 | "version": "0.9.9", 4 | "license": "MIT", 5 | "main": [ 6 | "dist/angular-scroll-animate.js" 7 | ], 8 | "keywords": [ 9 | "angular", 10 | "directive", 11 | "scroll", 12 | "animate", 13 | "visible", 14 | "view", 15 | "viewport", 16 | "lazy" 17 | ], 18 | "ignore": [ 19 | "**/.*", 20 | "*.yml", 21 | ".jshintrc", 22 | "node_modules", 23 | "bower_components", 24 | "example", 25 | "Gruntfile.js", 26 | "package.json", 27 | "component.json", 28 | "karma.conf.js", 29 | "src" 30 | ], 31 | "dependencies": { 32 | "angular": "^1.3.15" 33 | }, 34 | "devDependencies": { 35 | "angular-mocks": "^1.3.15", 36 | "sinon": "^1.9.0", 37 | "jasmine-sinon": "^0.3.1", 38 | "underscore": "^1.7.0", 39 | "animate.css": "^3.1.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /bower_components/angular-mocks/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-mocks", 3 | "version": "1.4.0", 4 | "main": "./angular-mocks.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.4.0" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-mocks", 10 | "_release": "1.4.0", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.4.0", 14 | "commit": "5a7f9f0bad5da4314df7f638fcaf330ff864cae2" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-mocks.git", 17 | "_target": "^1.3.15", 18 | "_originalSource": "angular-mocks" 19 | } -------------------------------------------------------------------------------- /bower_components/angular-mocks/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-mocks 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-mocks 15 | ``` 16 | 17 | You can `require` ngMock modules: 18 | 19 | ```js 20 | var angular = require('angular'); 21 | angular.module('myMod', [ 22 | require('angular-animate'), 23 | require('angular-mocks/ngMock') 24 | require('angular-mocks/ngAnimateMock') 25 | ]); 26 | ``` 27 | 28 | ### bower 29 | 30 | ```shell 31 | bower install angular-mocks 32 | ``` 33 | 34 | The mocks are then available at `bower_components/angular-mocks/angular-mocks.js`. 35 | 36 | ## Documentation 37 | 38 | Documentation is available on the 39 | [AngularJS docs site](https://docs.angularjs.org/guide/unit-testing). 40 | 41 | ## License 42 | 43 | The MIT License 44 | 45 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 46 | 47 | Permission is hereby granted, free of charge, to any person obtaining a copy 48 | of this software and associated documentation files (the "Software"), to deal 49 | in the Software without restriction, including without limitation the rights 50 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 51 | copies of the Software, and to permit persons to whom the Software is 52 | furnished to do so, subject to the following conditions: 53 | 54 | The above copyright notice and this permission notice shall be included in 55 | all copies or substantial portions of the Software. 56 | 57 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 58 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 59 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 60 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 61 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 62 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 63 | THE SOFTWARE. 64 | -------------------------------------------------------------------------------- /bower_components/angular-mocks/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-mocks", 3 | "version": "1.4.0", 4 | "main": "./angular-mocks.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.4.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /bower_components/angular-mocks/ngAnimateMock.js: -------------------------------------------------------------------------------- 1 | require('./angular-mocks'); 2 | module.exports = 'ngAnimateMock'; 3 | -------------------------------------------------------------------------------- /bower_components/angular-mocks/ngMock.js: -------------------------------------------------------------------------------- 1 | require('./angular-mocks'); 2 | module.exports = 'ngMock'; 3 | -------------------------------------------------------------------------------- /bower_components/angular-mocks/ngMockE2E.js: -------------------------------------------------------------------------------- 1 | require('./angular-mocks'); 2 | module.exports = 'ngMockE2E'; 3 | -------------------------------------------------------------------------------- /bower_components/angular-mocks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-mocks", 3 | "version": "1.4.0", 4 | "description": "AngularJS mocks for testing", 5 | "main": "angular-mocks.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "mocks", 18 | "testing", 19 | "client-side" 20 | ], 21 | "author": "Angular Core Team ", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/angular/angular.js/issues" 25 | }, 26 | "homepage": "http://angularjs.org" 27 | } 28 | -------------------------------------------------------------------------------- /bower_components/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.4.0", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": {}, 7 | "homepage": "https://github.com/angular/bower-angular", 8 | "_release": "1.4.0", 9 | "_resolution": { 10 | "type": "version", 11 | "tag": "v1.4.0", 12 | "commit": "e2f2cf7dc4a3ef1859ab28e657eca0e9edb588ba" 13 | }, 14 | "_source": "git://github.com/angular/bower-angular.git", 15 | "_target": "^1.3.15", 16 | "_originalSource": "angular" 17 | } -------------------------------------------------------------------------------- /bower_components/angular/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular 15 | ``` 16 | 17 | Then add a ` 21 | ``` 22 | 23 | Or `require('angular')` from your code. 24 | 25 | ### bower 26 | 27 | ```shell 28 | bower install angular 29 | ``` 30 | 31 | Then add a ` 35 | ``` 36 | 37 | ## Documentation 38 | 39 | Documentation is available on the 40 | [AngularJS docs site](http://docs.angularjs.org/). 41 | 42 | ## License 43 | 44 | The MIT License 45 | 46 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | -------------------------------------------------------------------------------- /bower_components/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | 15 | .ng-animate-shim { 16 | visibility:hidden; 17 | } 18 | 19 | .ng-anchor { 20 | position:absolute; 21 | } 22 | -------------------------------------------------------------------------------- /bower_components/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rpocklin/angular-scroll-animate/08552ffb9a3a8fb0c22aa72da7190d96b41af50f/bower_components/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /bower_components/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.4.0", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /bower_components/angular/index.js: -------------------------------------------------------------------------------- 1 | require('./angular'); 2 | module.exports = angular; 3 | -------------------------------------------------------------------------------- /bower_components/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.4.0", 4 | "description": "HTML enhanced for web apps", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "client-side" 18 | ], 19 | "author": "Angular Core Team ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /bower_components/animate.css/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "animate.css", 3 | "version": "3.3.0", 4 | "main": "./animate.css", 5 | "ignore": [ 6 | ".*", 7 | "src", 8 | "*.yml", 9 | "Gemfile", 10 | "Gemfile.lock", 11 | "*.md" 12 | ], 13 | "homepage": "https://github.com/daneden/animate.css", 14 | "_release": "3.3.0", 15 | "_resolution": { 16 | "type": "version", 17 | "tag": "3.3.0", 18 | "commit": "31b8e9026143342d14ba4ff9213181394a8b2e90" 19 | }, 20 | "_source": "git://github.com/daneden/animate.css.git", 21 | "_target": "^3.1.0", 22 | "_originalSource": "animate.css" 23 | } -------------------------------------------------------------------------------- /bower_components/animate.css/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | require('load-grunt-tasks')(grunt); 4 | 5 | var concatAnim; 6 | 7 | grunt.initConfig({ 8 | 9 | pkg: grunt.file.readJSON('package.json'), 10 | 11 | concat: { 12 | dist: { 13 | src: [ 'source/_base.css', 'source/**/*.css' ], // _base.css required for .animated helper class 14 | dest: 'animate.css' 15 | } 16 | }, 17 | 18 | autoprefixer: { // https://github.com/nDmitry/grunt-autoprefixer 19 | options: { 20 | browsers: ['last 2 versions', 'bb 10'] 21 | }, 22 | no_dest: { 23 | src: 'animate.css' // output file 24 | } 25 | }, 26 | 27 | cssmin: { 28 | minify: { 29 | src: ['animate.css'], 30 | dest: 'animate.min.css', 31 | } 32 | }, 33 | 34 | watch: { 35 | css: { 36 | files: [ 'source/**/*', 'animate-config.json' ], 37 | tasks: ['default'] 38 | } 39 | } 40 | 41 | }); 42 | 43 | // fuction to perform custom task 44 | concatAnim = function () { 45 | 46 | var categories = grunt.file.readJSON('animate-config.json'), 47 | category, files, file, 48 | target = [ 'source/_base.css' ], 49 | count = 0; 50 | 51 | for ( category in categories ) { 52 | if ( categories.hasOwnProperty(category) ) { 53 | files = categories[category] 54 | for (file in files) { 55 | if ( files.hasOwnProperty(file) && files[file] ) { 56 | target.push('source/' + category + '/' + file + '.css'); 57 | count += 1; 58 | } 59 | } 60 | } 61 | } 62 | 63 | if (!count) { 64 | grunt.log.writeln('No animations activated.'); 65 | } else { 66 | grunt.log.writeln(count + (count > 1 ? ' animations' : ' animation') + ' activated.'); 67 | } 68 | 69 | grunt.config('concat', { 'animate.css': target }); 70 | grunt.task.run('concat'); 71 | 72 | }; 73 | 74 | // register task 75 | grunt.registerTask('concat-anim', 'Concatenates activated animations', concatAnim); // custom task 76 | grunt.registerTask('default', ['concat-anim', 'autoprefixer', 'cssmin']); 77 | grunt.registerTask('dev', ['watch']); 78 | 79 | }; 80 | -------------------------------------------------------------------------------- /bower_components/animate.css/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "animate.css", 3 | "version": "3.3.0", 4 | "main": "./animate.css", 5 | "ignore": [ 6 | ".*", 7 | "src", 8 | "*.yml", 9 | "Gemfile", 10 | "Gemfile.lock", 11 | "*.md" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /bower_components/animate.css/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "animate.css", 3 | "version": "3.3.0", 4 | "repository": { 5 | "type": "git", 6 | "url": "https://github.com/daneden/animate.css.git" 7 | }, 8 | "devDependencies": { 9 | "grunt": "~0.4.1", 10 | "grunt-autoprefixer": "~0.4.0", 11 | "grunt-contrib-watch": "~0.5.3", 12 | "grunt-contrib-concat": "~0.3.0", 13 | "grunt-contrib-cssmin": "~0.8.0", 14 | "load-grunt-tasks": "~0.2.0" 15 | }, 16 | "spm": { 17 | "main": "./animate.css" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/_base.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /*! 3 | Animate.css - http://daneden.me/animate 4 | Licensed under the MIT license - http://opensource.org/licenses/MIT 5 | 6 | Copyright (c) 2015 Daniel Eden 7 | */ 8 | 9 | .animated { 10 | animation-duration: 1s; 11 | animation-fill-mode: both; 12 | } 13 | 14 | .animated.infinite { 15 | animation-iteration-count: infinite; 16 | } 17 | 18 | .animated.hinge { 19 | animation-duration: 2s; 20 | } 21 | 22 | .animated.bounceIn, 23 | .animated.bounceOut { 24 | animation-duration: .75s; 25 | } 26 | 27 | .animated.flipOutX, 28 | .animated.flipOutY { 29 | animation-duration: .75s; 30 | } 31 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/bounce.css: -------------------------------------------------------------------------------- 1 | @keyframes bounce { 2 | 0%, 20%, 53%, 80%, 100% { 3 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 4 | transform: translate3d(0,0,0); 5 | } 6 | 7 | 40%, 43% { 8 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 9 | transform: translate3d(0, -30px, 0); 10 | } 11 | 12 | 70% { 13 | animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 14 | transform: translate3d(0, -15px, 0); 15 | } 16 | 17 | 90% { 18 | transform: translate3d(0,-4px,0); 19 | } 20 | } 21 | 22 | .bounce { 23 | animation-name: bounce; 24 | transform-origin: center bottom; 25 | } 26 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/flash.css: -------------------------------------------------------------------------------- 1 | @keyframes flash { 2 | 0%, 50%, 100% { 3 | opacity: 1; 4 | } 5 | 6 | 25%, 75% { 7 | opacity: 0; 8 | } 9 | } 10 | 11 | .flash { 12 | animation-name: flash; 13 | } 14 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/jello.css: -------------------------------------------------------------------------------- 1 | @keyframes jello { 2 | 11.1% { 3 | transform: none 4 | } 5 | 22.2% { 6 | transform: skewX(-12.5deg) skewY(-12.5deg) 7 | } 8 | 33.3% { 9 | transform: skewX(6.25deg) skewY(6.25deg) 10 | } 11 | 44.4% { 12 | transform: skewX(-3.125deg) skewY(-3.125deg) 13 | } 14 | 55.5% { 15 | transform: skewX(1.5625deg) skewY(1.5625deg) 16 | } 17 | 66.6% { 18 | transform: skewX(-0.78125deg) skewY(-0.78125deg) 19 | } 20 | 77.7% { 21 | transform: skewX(0.390625deg) skewY(0.390625deg) 22 | } 23 | 88.8% { 24 | transform: skewX(-0.1953125deg) skewY(-0.1953125deg) 25 | } 26 | 100% { 27 | transform: none 28 | } 29 | } 30 | 31 | 32 | 33 | .jello{ 34 | animation-name:jello; 35 | transform-origin: center 36 | } 37 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/pulse.css: -------------------------------------------------------------------------------- 1 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 2 | 3 | @keyframes pulse { 4 | 0% { 5 | transform: scale3d(1, 1, 1); 6 | } 7 | 8 | 50% { 9 | transform: scale3d(1.05, 1.05, 1.05); 10 | } 11 | 12 | 100% { 13 | transform: scale3d(1, 1, 1); 14 | } 15 | } 16 | 17 | .pulse { 18 | animation-name: pulse; 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/rubberBand.css: -------------------------------------------------------------------------------- 1 | @keyframes rubberBand { 2 | 0% { 3 | transform: scale3d(1, 1, 1); 4 | } 5 | 6 | 30% { 7 | transform: scale3d(1.25, 0.75, 1); 8 | } 9 | 10 | 40% { 11 | transform: scale3d(0.75, 1.25, 1); 12 | } 13 | 14 | 50% { 15 | transform: scale3d(1.15, 0.85, 1); 16 | } 17 | 18 | 65% { 19 | transform: scale3d(.95, 1.05, 1); 20 | } 21 | 22 | 75% { 23 | transform: scale3d(1.05, .95, 1); 24 | } 25 | 26 | 100% { 27 | transform: scale3d(1, 1, 1); 28 | } 29 | } 30 | 31 | .rubberBand { 32 | animation-name: rubberBand; 33 | } 34 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/shake.css: -------------------------------------------------------------------------------- 1 | @keyframes shake { 2 | 0%, 100% { 3 | transform: translate3d(0, 0, 0); 4 | } 5 | 6 | 10%, 30%, 50%, 70%, 90% { 7 | transform: translate3d(-10px, 0, 0); 8 | } 9 | 10 | 20%, 40%, 60%, 80% { 11 | transform: translate3d(10px, 0, 0); 12 | } 13 | } 14 | 15 | .shake { 16 | animation-name: shake; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/swing.css: -------------------------------------------------------------------------------- 1 | @keyframes swing { 2 | 20% { 3 | transform: rotate3d(0, 0, 1, 15deg); 4 | } 5 | 6 | 40% { 7 | transform: rotate3d(0, 0, 1, -10deg); 8 | } 9 | 10 | 60% { 11 | transform: rotate3d(0, 0, 1, 5deg); 12 | } 13 | 14 | 80% { 15 | transform: rotate3d(0, 0, 1, -5deg); 16 | } 17 | 18 | 100% { 19 | transform: rotate3d(0, 0, 1, 0deg); 20 | } 21 | } 22 | 23 | .swing { 24 | transform-origin: top center; 25 | animation-name: swing; 26 | } 27 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/tada.css: -------------------------------------------------------------------------------- 1 | @keyframes tada { 2 | 0% { 3 | transform: scale3d(1, 1, 1); 4 | } 5 | 6 | 10%, 20% { 7 | transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); 8 | } 9 | 10 | 30%, 50%, 70%, 90% { 11 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); 12 | } 13 | 14 | 40%, 60%, 80% { 15 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); 16 | } 17 | 18 | 100% { 19 | transform: scale3d(1, 1, 1); 20 | } 21 | } 22 | 23 | .tada { 24 | animation-name: tada; 25 | } 26 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/attention_seekers/wobble.css: -------------------------------------------------------------------------------- 1 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 2 | 3 | @keyframes wobble { 4 | 0% { 5 | transform: none; 6 | } 7 | 8 | 15% { 9 | transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); 10 | } 11 | 12 | 30% { 13 | transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); 14 | } 15 | 16 | 45% { 17 | transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); 18 | } 19 | 20 | 60% { 21 | transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); 22 | } 23 | 24 | 75% { 25 | transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); 26 | } 27 | 28 | 100% { 29 | transform: none; 30 | } 31 | } 32 | 33 | .wobble { 34 | animation-name: wobble; 35 | } 36 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_entrances/bounceIn.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceIn { 2 | 0%, 20%, 40%, 60%, 80%, 100% { 3 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 4 | } 5 | 6 | 0% { 7 | opacity: 0; 8 | transform: scale3d(.3, .3, .3); 9 | } 10 | 11 | 20% { 12 | transform: scale3d(1.1, 1.1, 1.1); 13 | } 14 | 15 | 40% { 16 | transform: scale3d(.9, .9, .9); 17 | } 18 | 19 | 60% { 20 | opacity: 1; 21 | transform: scale3d(1.03, 1.03, 1.03); 22 | } 23 | 24 | 80% { 25 | transform: scale3d(.97, .97, .97); 26 | } 27 | 28 | 100% { 29 | opacity: 1; 30 | transform: scale3d(1, 1, 1); 31 | } 32 | } 33 | 34 | .bounceIn { 35 | animation-name: bounceIn; 36 | } 37 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_entrances/bounceInDown.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceInDown { 2 | 0%, 60%, 75%, 90%, 100% { 3 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 4 | } 5 | 6 | 0% { 7 | opacity: 0; 8 | transform: translate3d(0, -3000px, 0); 9 | } 10 | 11 | 60% { 12 | opacity: 1; 13 | transform: translate3d(0, 25px, 0); 14 | } 15 | 16 | 75% { 17 | transform: translate3d(0, -10px, 0); 18 | } 19 | 20 | 90% { 21 | transform: translate3d(0, 5px, 0); 22 | } 23 | 24 | 100% { 25 | transform: none; 26 | } 27 | } 28 | 29 | .bounceInDown { 30 | animation-name: bounceInDown; 31 | } 32 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_entrances/bounceInLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceInLeft { 2 | 0%, 60%, 75%, 90%, 100% { 3 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 4 | } 5 | 6 | 0% { 7 | opacity: 0; 8 | transform: translate3d(-3000px, 0, 0); 9 | } 10 | 11 | 60% { 12 | opacity: 1; 13 | transform: translate3d(25px, 0, 0); 14 | } 15 | 16 | 75% { 17 | transform: translate3d(-10px, 0, 0); 18 | } 19 | 20 | 90% { 21 | transform: translate3d(5px, 0, 0); 22 | } 23 | 24 | 100% { 25 | transform: none; 26 | } 27 | } 28 | 29 | .bounceInLeft { 30 | animation-name: bounceInLeft; 31 | } 32 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_entrances/bounceInRight.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceInRight { 2 | 0%, 60%, 75%, 90%, 100% { 3 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 4 | } 5 | 6 | 0% { 7 | opacity: 0; 8 | transform: translate3d(3000px, 0, 0); 9 | } 10 | 11 | 60% { 12 | opacity: 1; 13 | transform: translate3d(-25px, 0, 0); 14 | } 15 | 16 | 75% { 17 | transform: translate3d(10px, 0, 0); 18 | } 19 | 20 | 90% { 21 | transform: translate3d(-5px, 0, 0); 22 | } 23 | 24 | 100% { 25 | transform: none; 26 | } 27 | } 28 | 29 | .bounceInRight { 30 | animation-name: bounceInRight; 31 | } 32 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_entrances/bounceInUp.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceInUp { 2 | 0%, 60%, 75%, 90%, 100% { 3 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 4 | } 5 | 6 | 0% { 7 | opacity: 0; 8 | transform: translate3d(0, 3000px, 0); 9 | } 10 | 11 | 60% { 12 | opacity: 1; 13 | transform: translate3d(0, -20px, 0); 14 | } 15 | 16 | 75% { 17 | transform: translate3d(0, 10px, 0); 18 | } 19 | 20 | 90% { 21 | transform: translate3d(0, -5px, 0); 22 | } 23 | 24 | 100% { 25 | transform: translate3d(0, 0, 0); 26 | } 27 | } 28 | 29 | .bounceInUp { 30 | animation-name: bounceInUp; 31 | } 32 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_exits/bounceOut.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceOut { 2 | 20% { 3 | transform: scale3d(.9, .9, .9); 4 | } 5 | 6 | 50%, 55% { 7 | opacity: 1; 8 | transform: scale3d(1.1, 1.1, 1.1); 9 | } 10 | 11 | 100% { 12 | opacity: 0; 13 | transform: scale3d(.3, .3, .3); 14 | } 15 | } 16 | 17 | .bounceOut { 18 | animation-name: bounceOut; 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_exits/bounceOutDown.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceOutDown { 2 | 20% { 3 | transform: translate3d(0, 10px, 0); 4 | } 5 | 6 | 40%, 45% { 7 | opacity: 1; 8 | transform: translate3d(0, -20px, 0); 9 | } 10 | 11 | 100% { 12 | opacity: 0; 13 | transform: translate3d(0, 2000px, 0); 14 | } 15 | } 16 | 17 | .bounceOutDown { 18 | animation-name: bounceOutDown; 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_exits/bounceOutLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceOutLeft { 2 | 20% { 3 | opacity: 1; 4 | transform: translate3d(20px, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 0; 9 | transform: translate3d(-2000px, 0, 0); 10 | } 11 | } 12 | 13 | .bounceOutLeft { 14 | animation-name: bounceOutLeft; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_exits/bounceOutRight.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceOutRight { 2 | 20% { 3 | opacity: 1; 4 | transform: translate3d(-20px, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 0; 9 | transform: translate3d(2000px, 0, 0); 10 | } 11 | } 12 | 13 | .bounceOutRight { 14 | animation-name: bounceOutRight; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/bouncing_exits/bounceOutUp.css: -------------------------------------------------------------------------------- 1 | @keyframes bounceOutUp { 2 | 20% { 3 | transform: translate3d(0, -10px, 0); 4 | } 5 | 6 | 40%, 45% { 7 | opacity: 1; 8 | transform: translate3d(0, 20px, 0); 9 | } 10 | 11 | 100% { 12 | opacity: 0; 13 | transform: translate3d(0, -2000px, 0); 14 | } 15 | } 16 | 17 | .bounceOutUp { 18 | animation-name: bounceOutUp; 19 | } 20 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeIn.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeIn { 2 | 0% {opacity: 0;} 3 | 100% {opacity: 1;} 4 | } 5 | 6 | .fadeIn { 7 | animation-name: fadeIn; 8 | } 9 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInDown.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInDown { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(0, -100%, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInDown { 14 | animation-name: fadeInDown; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInDownBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInDownBig { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(0, -2000px, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInDownBig { 14 | animation-name: fadeInDownBig; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInLeft { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(-100%, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInLeft { 14 | animation-name: fadeInLeft; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInLeftBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInLeftBig { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(-2000px, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInLeftBig { 14 | animation-name: fadeInLeftBig; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInRight.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInRight { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(100%, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInRight { 14 | animation-name: fadeInRight; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInRightBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInRightBig { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(2000px, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInRightBig { 14 | animation-name: fadeInRightBig; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInUp.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInUp { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(0, 100%, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInUp { 14 | animation-name: fadeInUp; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_entrances/fadeInUpBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeInUpBig { 2 | 0% { 3 | opacity: 0; 4 | transform: translate3d(0, 2000px, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 1; 9 | transform: none; 10 | } 11 | } 12 | 13 | .fadeInUpBig { 14 | animation-name: fadeInUpBig; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOut.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOut { 2 | 0% {opacity: 1;} 3 | 100% {opacity: 0;} 4 | } 5 | 6 | .fadeOut { 7 | animation-name: fadeOut; 8 | } 9 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutDown.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutDown { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(0, 100%, 0); 9 | } 10 | } 11 | 12 | .fadeOutDown { 13 | animation-name: fadeOutDown; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutDownBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutDownBig { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(0, 2000px, 0); 9 | } 10 | } 11 | 12 | .fadeOutDownBig { 13 | animation-name: fadeOutDownBig; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutLeft { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(-100%, 0, 0); 9 | } 10 | } 11 | 12 | .fadeOutLeft { 13 | animation-name: fadeOutLeft; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutLeftBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutLeftBig { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(-2000px, 0, 0); 9 | } 10 | } 11 | 12 | .fadeOutLeftBig { 13 | animation-name: fadeOutLeftBig; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutRight.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutRight { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(100%, 0, 0); 9 | } 10 | } 11 | 12 | .fadeOutRight { 13 | animation-name: fadeOutRight; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutRightBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutRightBig { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(2000px, 0, 0); 9 | } 10 | } 11 | 12 | .fadeOutRightBig { 13 | animation-name: fadeOutRightBig; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutUp.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutUp { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(0, -100%, 0); 9 | } 10 | } 11 | 12 | .fadeOutUp { 13 | animation-name: fadeOutUp; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/fading_exits/fadeOutUpBig.css: -------------------------------------------------------------------------------- 1 | @keyframes fadeOutUpBig { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | opacity: 0; 8 | transform: translate3d(0, -2000px, 0); 9 | } 10 | } 11 | 12 | .fadeOutUpBig { 13 | animation-name: fadeOutUpBig; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/flippers/flip.css: -------------------------------------------------------------------------------- 1 | @keyframes flip { 2 | 0% { 3 | transform: perspective(400px) rotate3d(0, 1, 0, -360deg); 4 | animation-timing-function: ease-out; 5 | } 6 | 7 | 40% { 8 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); 9 | animation-timing-function: ease-out; 10 | } 11 | 12 | 50% { 13 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); 14 | animation-timing-function: ease-in; 15 | } 16 | 17 | 80% { 18 | transform: perspective(400px) scale3d(.95, .95, .95); 19 | animation-timing-function: ease-in; 20 | } 21 | 22 | 100% { 23 | transform: perspective(400px); 24 | animation-timing-function: ease-in; 25 | } 26 | } 27 | 28 | .animated.flip { 29 | backface-visibility: visible; 30 | animation-name: flip; 31 | } 32 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/flippers/flipInX.css: -------------------------------------------------------------------------------- 1 | @keyframes flipInX { 2 | 0% { 3 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 4 | animation-timing-function: ease-in; 5 | opacity: 0; 6 | } 7 | 8 | 40% { 9 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 10 | animation-timing-function: ease-in; 11 | } 12 | 13 | 60% { 14 | transform: perspective(400px) rotate3d(1, 0, 0, 10deg); 15 | opacity: 1; 16 | } 17 | 18 | 80% { 19 | transform: perspective(400px) rotate3d(1, 0, 0, -5deg); 20 | } 21 | 22 | 100% { 23 | transform: perspective(400px); 24 | } 25 | } 26 | 27 | .flipInX { 28 | backface-visibility: visible !important; 29 | animation-name: flipInX; 30 | } 31 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/flippers/flipInY.css: -------------------------------------------------------------------------------- 1 | @keyframes flipInY { 2 | 0% { 3 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 4 | animation-timing-function: ease-in; 5 | opacity: 0; 6 | } 7 | 8 | 40% { 9 | transform: perspective(400px) rotate3d(0, 1, 0, -20deg); 10 | animation-timing-function: ease-in; 11 | } 12 | 13 | 60% { 14 | transform: perspective(400px) rotate3d(0, 1, 0, 10deg); 15 | opacity: 1; 16 | } 17 | 18 | 80% { 19 | transform: perspective(400px) rotate3d(0, 1, 0, -5deg); 20 | } 21 | 22 | 100% { 23 | transform: perspective(400px); 24 | } 25 | } 26 | 27 | .flipInY { 28 | backface-visibility: visible !important; 29 | animation-name: flipInY; 30 | } 31 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/flippers/flipOutX.css: -------------------------------------------------------------------------------- 1 | @keyframes flipOutX { 2 | 0% { 3 | transform: perspective(400px); 4 | } 5 | 6 | 30% { 7 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 8 | opacity: 1; 9 | } 10 | 11 | 100% { 12 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 13 | opacity: 0; 14 | } 15 | } 16 | 17 | .flipOutX { 18 | animation-name: flipOutX; 19 | backface-visibility: visible !important; 20 | } 21 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/flippers/flipOutY.css: -------------------------------------------------------------------------------- 1 | @keyframes flipOutY { 2 | 0% { 3 | transform: perspective(400px); 4 | } 5 | 6 | 30% { 7 | transform: perspective(400px) rotate3d(0, 1, 0, -15deg); 8 | opacity: 1; 9 | } 10 | 11 | 100% { 12 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 13 | opacity: 0; 14 | } 15 | } 16 | 17 | .flipOutY { 18 | backface-visibility: visible !important; 19 | animation-name: flipOutY; 20 | } 21 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/lightspeed/lightSpeedIn.css: -------------------------------------------------------------------------------- 1 | @keyframes lightSpeedIn { 2 | 0% { 3 | transform: translate3d(100%, 0, 0) skewX(-30deg); 4 | opacity: 0; 5 | } 6 | 7 | 60% { 8 | transform: skewX(20deg); 9 | opacity: 1; 10 | } 11 | 12 | 80% { 13 | transform: skewX(-5deg); 14 | opacity: 1; 15 | } 16 | 17 | 100% { 18 | transform: none; 19 | opacity: 1; 20 | } 21 | } 22 | 23 | .lightSpeedIn { 24 | animation-name: lightSpeedIn; 25 | animation-timing-function: ease-out; 26 | } 27 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/lightspeed/lightSpeedOut.css: -------------------------------------------------------------------------------- 1 | @keyframes lightSpeedOut { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 100% { 7 | transform: translate3d(100%, 0, 0) skewX(30deg); 8 | opacity: 0; 9 | } 10 | } 11 | 12 | .lightSpeedOut { 13 | animation-name: lightSpeedOut; 14 | animation-timing-function: ease-in; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_entrances/rotateIn.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateIn { 2 | 0% { 3 | transform-origin: center; 4 | transform: rotate3d(0, 0, 1, -200deg); 5 | opacity: 0; 6 | } 7 | 8 | 100% { 9 | transform-origin: center; 10 | transform: none; 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .rotateIn { 16 | animation-name: rotateIn; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_entrances/rotateInDownLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateInDownLeft { 2 | 0% { 3 | transform-origin: left bottom; 4 | transform: rotate3d(0, 0, 1, -45deg); 5 | opacity: 0; 6 | } 7 | 8 | 100% { 9 | transform-origin: left bottom; 10 | transform: none; 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .rotateInDownLeft { 16 | animation-name: rotateInDownLeft; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_entrances/rotateInDownRight.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateInDownRight { 2 | 0% { 3 | transform-origin: right bottom; 4 | transform: rotate3d(0, 0, 1, 45deg); 5 | opacity: 0; 6 | } 7 | 8 | 100% { 9 | transform-origin: right bottom; 10 | transform: none; 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .rotateInDownRight { 16 | animation-name: rotateInDownRight; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_entrances/rotateInUpLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateInUpLeft { 2 | 0% { 3 | transform-origin: left bottom; 4 | transform: rotate3d(0, 0, 1, 45deg); 5 | opacity: 0; 6 | } 7 | 8 | 100% { 9 | transform-origin: left bottom; 10 | transform: none; 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .rotateInUpLeft { 16 | animation-name: rotateInUpLeft; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_entrances/rotateInUpRight.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateInUpRight { 2 | 0% { 3 | transform-origin: right bottom; 4 | transform: rotate3d(0, 0, 1, -90deg); 5 | opacity: 0; 6 | } 7 | 8 | 100% { 9 | transform-origin: right bottom; 10 | transform: none; 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .rotateInUpRight { 16 | animation-name: rotateInUpRight; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_exits/rotateOut.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateOut { 2 | 0% { 3 | transform-origin: center; 4 | opacity: 1; 5 | } 6 | 7 | 100% { 8 | transform-origin: center; 9 | transform: rotate3d(0, 0, 1, 200deg); 10 | opacity: 0; 11 | } 12 | } 13 | 14 | .rotateOut { 15 | animation-name: rotateOut; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_exits/rotateOutDownLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateOutDownLeft { 2 | 0% { 3 | transform-origin: left bottom; 4 | opacity: 1; 5 | } 6 | 7 | 100% { 8 | transform-origin: left bottom; 9 | transform: rotate3d(0, 0, 1, 45deg); 10 | opacity: 0; 11 | } 12 | } 13 | 14 | .rotateOutDownLeft { 15 | animation-name: rotateOutDownLeft; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_exits/rotateOutDownRight.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateOutDownRight { 2 | 0% { 3 | transform-origin: right bottom; 4 | opacity: 1; 5 | } 6 | 7 | 100% { 8 | transform-origin: right bottom; 9 | transform: rotate3d(0, 0, 1, -45deg); 10 | opacity: 0; 11 | } 12 | } 13 | 14 | .rotateOutDownRight { 15 | animation-name: rotateOutDownRight; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_exits/rotateOutUpLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateOutUpLeft { 2 | 0% { 3 | transform-origin: left bottom; 4 | opacity: 1; 5 | } 6 | 7 | 100% { 8 | transform-origin: left bottom; 9 | transform: rotate3d(0, 0, 1, -45deg); 10 | opacity: 0; 11 | } 12 | } 13 | 14 | .rotateOutUpLeft { 15 | animation-name: rotateOutUpLeft; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/rotating_exits/rotateOutUpRight.css: -------------------------------------------------------------------------------- 1 | @keyframes rotateOutUpRight { 2 | 0% { 3 | transform-origin: right bottom; 4 | opacity: 1; 5 | } 6 | 7 | 100% { 8 | transform-origin: right bottom; 9 | transform: rotate3d(0, 0, 1, 90deg); 10 | opacity: 0; 11 | } 12 | } 13 | 14 | .rotateOutUpRight { 15 | animation-name: rotateOutUpRight; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_entrances/slideInDown.css: -------------------------------------------------------------------------------- 1 | @keyframes slideInDown { 2 | 0% { 3 | transform: translate3d(0, -100%, 0); 4 | visibility: visible; 5 | } 6 | 7 | 100% { 8 | transform: translate3d(0, 0, 0); 9 | } 10 | } 11 | 12 | .slideInDown { 13 | animation-name: slideInDown; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_entrances/slideInLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes slideInLeft { 2 | 0% { 3 | transform: translate3d(-100%, 0, 0); 4 | visibility: visible; 5 | } 6 | 7 | 100% { 8 | transform: translate3d(0, 0, 0); 9 | } 10 | } 11 | 12 | .slideInLeft { 13 | animation-name: slideInLeft; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_entrances/slideInRight.css: -------------------------------------------------------------------------------- 1 | @keyframes slideInRight { 2 | 0% { 3 | transform: translate3d(100%, 0, 0); 4 | visibility: visible; 5 | } 6 | 7 | 100% { 8 | transform: translate3d(0, 0, 0); 9 | } 10 | } 11 | 12 | .slideInRight { 13 | animation-name: slideInRight; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_entrances/slideInUp.css: -------------------------------------------------------------------------------- 1 | @keyframes slideInUp { 2 | 0% { 3 | transform: translate3d(0, 100%, 0); 4 | visibility: visible; 5 | } 6 | 7 | 100% { 8 | transform: translate3d(0, 0, 0); 9 | } 10 | } 11 | 12 | .slideInUp { 13 | animation-name: slideInUp; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_exits/slideOutDown.css: -------------------------------------------------------------------------------- 1 | @keyframes slideOutDown { 2 | 0% { 3 | transform: translate3d(0, 0, 0); 4 | } 5 | 6 | 100% { 7 | visibility: hidden; 8 | transform: translate3d(0, 100%, 0); 9 | } 10 | } 11 | 12 | .slideOutDown { 13 | animation-name: slideOutDown; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_exits/slideOutLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes slideOutLeft { 2 | 0% { 3 | transform: translate3d(0, 0, 0); 4 | } 5 | 6 | 100% { 7 | visibility: hidden; 8 | transform: translate3d(-100%, 0, 0); 9 | } 10 | } 11 | 12 | .slideOutLeft { 13 | animation-name: slideOutLeft; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_exits/slideOutRight.css: -------------------------------------------------------------------------------- 1 | @keyframes slideOutRight { 2 | 0% { 3 | transform: translate3d(0, 0, 0); 4 | } 5 | 6 | 100% { 7 | visibility: hidden; 8 | transform: translate3d(100%, 0, 0); 9 | } 10 | } 11 | 12 | .slideOutRight { 13 | animation-name: slideOutRight; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/sliding_exits/slideOutUp.css: -------------------------------------------------------------------------------- 1 | @keyframes slideOutUp { 2 | 0% { 3 | transform: translate3d(0, 0, 0); 4 | } 5 | 6 | 100% { 7 | visibility: hidden; 8 | transform: translate3d(0, -100%, 0); 9 | } 10 | } 11 | 12 | .slideOutUp { 13 | animation-name: slideOutUp; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/specials/hinge.css: -------------------------------------------------------------------------------- 1 | @keyframes hinge { 2 | 0% { 3 | transform-origin: top left; 4 | animation-timing-function: ease-in-out; 5 | } 6 | 7 | 20%, 60% { 8 | transform: rotate3d(0, 0, 1, 80deg); 9 | transform-origin: top left; 10 | animation-timing-function: ease-in-out; 11 | } 12 | 13 | 40%, 80% { 14 | transform: rotate3d(0, 0, 1, 60deg); 15 | transform-origin: top left; 16 | animation-timing-function: ease-in-out; 17 | opacity: 1; 18 | } 19 | 20 | 100% { 21 | transform: translate3d(0, 700px, 0); 22 | opacity: 0; 23 | } 24 | } 25 | 26 | .hinge { 27 | animation-name: hinge; 28 | } 29 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/specials/rollIn.css: -------------------------------------------------------------------------------- 1 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 2 | 3 | @keyframes rollIn { 4 | 0% { 5 | opacity: 0; 6 | transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); 7 | } 8 | 9 | 100% { 10 | opacity: 1; 11 | transform: none; 12 | } 13 | } 14 | 15 | .rollIn { 16 | animation-name: rollIn; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/specials/rollOut.css: -------------------------------------------------------------------------------- 1 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 2 | 3 | @keyframes rollOut { 4 | 0% { 5 | opacity: 1; 6 | } 7 | 8 | 100% { 9 | opacity: 0; 10 | transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); 11 | } 12 | } 13 | 14 | .rollOut { 15 | animation-name: rollOut; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_entrances/zoomIn.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomIn { 2 | 0% { 3 | opacity: 0; 4 | transform: scale3d(.3, .3, .3); 5 | } 6 | 7 | 50% { 8 | opacity: 1; 9 | } 10 | } 11 | 12 | .zoomIn { 13 | animation-name: zoomIn; 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_entrances/zoomInDown.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomInDown { 2 | 0% { 3 | opacity: 0; 4 | transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); 5 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 6 | } 7 | 8 | 60% { 9 | opacity: 1; 10 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 11 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 12 | } 13 | } 14 | 15 | .zoomInDown { 16 | animation-name: zoomInDown; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_entrances/zoomInLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomInLeft { 2 | 0% { 3 | opacity: 0; 4 | transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); 5 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 6 | } 7 | 8 | 60% { 9 | opacity: 1; 10 | transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); 11 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 12 | } 13 | } 14 | 15 | .zoomInLeft { 16 | animation-name: zoomInLeft; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_entrances/zoomInRight.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomInRight { 2 | 0% { 3 | opacity: 0; 4 | transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); 5 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 6 | } 7 | 8 | 60% { 9 | opacity: 1; 10 | transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); 11 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 12 | } 13 | } 14 | 15 | .zoomInRight { 16 | animation-name: zoomInRight; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_entrances/zoomInUp.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomInUp { 2 | 0% { 3 | opacity: 0; 4 | transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); 5 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 6 | } 7 | 8 | 60% { 9 | opacity: 1; 10 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 11 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 12 | } 13 | } 14 | 15 | .zoomInUp { 16 | animation-name: zoomInUp; 17 | } 18 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_exits/zoomOut.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomOut { 2 | 0% { 3 | opacity: 1; 4 | } 5 | 6 | 50% { 7 | opacity: 0; 8 | transform: scale3d(.3, .3, .3); 9 | } 10 | 11 | 100% { 12 | opacity: 0; 13 | } 14 | } 15 | 16 | .zoomOut { 17 | animation-name: zoomOut; 18 | } 19 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_exits/zoomOutDown.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomOutDown { 2 | 40% { 3 | opacity: 1; 4 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 5 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 6 | } 7 | 8 | 100% { 9 | opacity: 0; 10 | transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); 11 | transform-origin: center bottom; 12 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 13 | } 14 | } 15 | 16 | .zoomOutDown { 17 | animation-name: zoomOutDown; 18 | } 19 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_exits/zoomOutLeft.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomOutLeft { 2 | 40% { 3 | opacity: 1; 4 | transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 0; 9 | transform: scale(.1) translate3d(-2000px, 0, 0); 10 | transform-origin: left center; 11 | } 12 | } 13 | 14 | .zoomOutLeft { 15 | animation-name: zoomOutLeft; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_exits/zoomOutRight.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomOutRight { 2 | 40% { 3 | opacity: 1; 4 | transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); 5 | } 6 | 7 | 100% { 8 | opacity: 0; 9 | transform: scale(.1) translate3d(2000px, 0, 0); 10 | transform-origin: right center; 11 | } 12 | } 13 | 14 | .zoomOutRight { 15 | animation-name: zoomOutRight; 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/animate.css/source/zooming_exits/zoomOutUp.css: -------------------------------------------------------------------------------- 1 | @keyframes zoomOutUp { 2 | 40% { 3 | opacity: 1; 4 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 5 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 6 | } 7 | 8 | 100% { 9 | opacity: 0; 10 | transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); 11 | transform-origin: center bottom; 12 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 13 | } 14 | } 15 | 16 | .zoomOutUp { 17 | animation-name: zoomOutUp; 18 | } 19 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jasmine-sinon", 3 | "version": "0.3.2", 4 | "main": "lib/jasmine-sinon.js", 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components" 9 | ], 10 | "dependencies": { 11 | "jasmine": "~1.3.1", 12 | "sinonjs": ">= 1.7.1" 13 | }, 14 | "homepage": "https://github.com/froots/jasmine-sinon", 15 | "_release": "0.3.2", 16 | "_resolution": { 17 | "type": "version", 18 | "tag": "0.3.2", 19 | "commit": "ac40948132ed6e4ca329e1c84d9445c52acf4d27" 20 | }, 21 | "_source": "git://github.com/froots/jasmine-sinon.git", 22 | "_target": "^0.3.1", 23 | "_originalSource": "jasmine-sinon" 24 | } -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | 'use strict'; 4 | 5 | grunt.initConfig({ 6 | jasmine_node: { 7 | options: { 8 | forceExit: true, 9 | isVerbose: false 10 | }, 11 | all: ['spec/'] 12 | }, 13 | 14 | jshint: { 15 | options: { 16 | jshintrc: '.jshintrc' 17 | }, 18 | all: ['Gruntfile.js', 'lib/jasmine-sinon.js'] 19 | }, 20 | 21 | karma: { 22 | options: { 23 | configFile: 'karma.conf.coffee' 24 | }, 25 | dev: { 26 | reporters: 'dots' 27 | }, 28 | ci: { 29 | singleRun: true, 30 | browsers: ['Firefox'] 31 | } 32 | } 33 | }); 34 | 35 | grunt.loadNpmTasks('grunt-contrib-jshint'); 36 | grunt.loadNpmTasks('grunt-karma'); 37 | grunt.loadNpmTasks('grunt-jasmine-node'); 38 | 39 | grunt.registerTask('test', ['jshint', 'karma:ci', 'jasmine_node']); 40 | grunt.registerTask('default', 'test'); 41 | grunt.registerTask('travis', ['jshint', 'karma:ci', 'jasmine_node']); 42 | 43 | }; 44 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/LICENSE: -------------------------------------------------------------------------------- 1 | (The BSD License) 2 | 3 | Copyright (c) 2011-2013, James Newbery, james@tinnedfruit.com 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, 7 | are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, 10 | this list of conditions and the following disclaimer. 11 | * Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | * Neither the name of James Newbery nor the names of his contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jasmine-sinon", 3 | "version": "0.3.2", 4 | "main": "lib/jasmine-sinon.js", 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components" 9 | ], 10 | "dependencies": { 11 | "jasmine": "~1.3.1", 12 | "sinonjs": ">= 1.7.1" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/karma.conf.coffee: -------------------------------------------------------------------------------- 1 | module.exports = (config) -> 2 | config.set 3 | basePath: '' 4 | frameworks: ['jasmine'] 5 | files: [ 6 | 'bower_components/sinonjs/sinon.js' 7 | 'lib/jasmine-sinon.js' 8 | 'spec/*.spec.js' 9 | ] 10 | reporters: ['progress'] 11 | runnerPort: 9100 12 | browsers: ['Chrome', 'Firefox'], 13 | plugins: [ 14 | 'karma-jasmine' 15 | 'karma-chrome-launcher' 16 | 'karma-firefox-launcher' 17 | ] -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/lib/jasmine-sinon.js: -------------------------------------------------------------------------------- 1 | /* global jasmine */ 2 | 3 | 'use strict'; 4 | 5 | (function(jasmine, beforeEach) { 6 | 7 | var sinon = (typeof require === 'function' && typeof module === 'object') ? require('sinon') : window.sinon, 8 | spyMatchers = 'called calledOnce calledTwice calledThrice calledBefore calledAfter calledOn alwaysCalledOn calledWith alwaysCalledWith calledWithExactly alwaysCalledWithExactly calledWithMatch alwaysCalledWithMatch'.split(' '), 9 | i = spyMatchers.length, 10 | spyMatcherHash = {}, 11 | unusualMatchers = { 12 | "returned": "toHaveReturned", 13 | "alwaysReturned": "toHaveAlwaysReturned", 14 | "threw": "toHaveThrown", 15 | "alwaysThrew": "toHaveAlwaysThrown" 16 | }, 17 | 18 | createCustomMatcher = function(arg) { 19 | return sinon.match(function (val) { 20 | return jasmine.getEnv().equals_(val, arg); 21 | }); 22 | }, 23 | 24 | getMatcherFunction = function(sinonName, matcherName) { 25 | var original = jasmine.Matchers.prototype[matcherName]; 26 | return function () { 27 | if (jasmine.isSpy(this.actual) && original) { 28 | return original.apply(this, arguments); 29 | } 30 | var sinonProperty = this.actual[sinonName]; 31 | var args = Array.prototype.slice.call(arguments); 32 | 33 | for (var i = 0; i < args.length; i++) { 34 | if (args[i] && (typeof args[i].jasmineMatches === 'function' || args[i] instanceof jasmine.Matchers.ObjectContaining)) { 35 | args[i] = createCustomMatcher(args[i]); 36 | } 37 | } 38 | 39 | return (typeof sinonProperty === 'function') ? sinonProperty.apply(this.actual, args) : sinonProperty; 40 | }; 41 | }; 42 | 43 | while(i--) { 44 | var sinonName = spyMatchers[i], 45 | matcherName = "toHaveBeen" + sinonName.charAt(0).toUpperCase() + sinonName.slice(1); 46 | 47 | spyMatcherHash[matcherName] = getMatcherFunction(sinonName, matcherName); 48 | } 49 | 50 | for (var j in unusualMatchers) { 51 | spyMatcherHash[unusualMatchers[j]] = getMatcherFunction(j, unusualMatchers[j]); 52 | } 53 | 54 | beforeEach(function() { 55 | this.addMatchers(spyMatcherHash); 56 | }); 57 | 58 | })(jasmine, beforeEach); 59 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jasmine-sinon", 3 | "version": "0.3.2", 4 | "description": "Jasmine BDD matchers for Sinon.JS", 5 | "main": "lib/jasmine-sinon.js", 6 | "scripts": { 7 | "test": "grunt travis" 8 | }, 9 | "homepage": "http://github.com/froots/jasmine-sinon", 10 | "repository": { 11 | "type": "git", 12 | "url": "git://github.com/froots/jasmine-sinon.git" 13 | }, 14 | "bugs": { 15 | "url": "http://github.com/froots/jasmine-sinon/issues" 16 | }, 17 | "keywords": [ 18 | "jasmine", 19 | "sinon" 20 | ], 21 | "author": "Jim Newbery (http://tinnedfruit.com)", 22 | "license": { 23 | "type": "BSD", 24 | "url": "http://github.com/froots/jasmine-sinon/blob/master/LICENSE" 25 | }, 26 | "readmeFilename": "README.md", 27 | "engines": { 28 | "node": ">=0.1.103" 29 | }, 30 | "devDependencies": { 31 | "grunt": "~0.4.4", 32 | "grunt-contrib-jshint": "~0.10.0", 33 | "grunt-karma": "~0.8.3", 34 | "grunt-jasmine-node": "~0.2.1", 35 | "karma-jasmine": "~0.1.5", 36 | "karma-chrome-launcher": "~0.1.3", 37 | "karma-firefox-launcher": "~0.1.3" 38 | }, 39 | "dependencies": { 40 | "sinon": ">= 1.7.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/spec/existing-method-spy-matchers.spec.js: -------------------------------------------------------------------------------- 1 | if (typeof require === 'function' && typeof module === 'object') { 2 | var sinon = require('sinon'); 3 | var jasmineSinon = require('../lib/jasmine-sinon.js'); 4 | } 5 | 6 | describe('existing method spy matchers', function() { 7 | beforeEach(function() { 8 | this.methodVal = 'no'; 9 | this.api = { 10 | myMethod: function(val) { 11 | this.methodVal = val; 12 | } 13 | }; 14 | this.spy = sinon.spy(this.api, 'myMethod'); 15 | }); 16 | 17 | describe('boolean matcher example', function() { 18 | it('should retain spy\'s original functionality', function() { 19 | expect(this.methodVal).toEqual('no'); 20 | expect(this.spy).not.toHaveBeenCalled(); 21 | this.api.myMethod.call(this, 'yes'); 22 | expect(this.methodVal).toEqual('yes'); 23 | expect(this.spy).toHaveBeenCalled(); 24 | }); 25 | }); 26 | 27 | describe('method matcher example', function() { 28 | it('should retain spy\'s original functionality', function() { 29 | expect(this.methodVal).toEqual('no'); 30 | expect(this.spy).not.toHaveBeenCalledOn(this); 31 | this.api.myMethod.call(this, 'yes'); 32 | expect(this.methodVal).toEqual('yes'); 33 | expect(this.spy).toHaveBeenCalledOn(this); 34 | }); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/spec/individual-spy-calls.spec.js: -------------------------------------------------------------------------------- 1 | if (typeof require === 'function' && typeof module === 'object') { 2 | var sinon = require('sinon'); 3 | var jasmineSinon = require('../lib/jasmine-sinon.js'); 4 | } 5 | 6 | describe('individual spy calls', function() { 7 | beforeEach(function() { 8 | this.spy = sinon.spy(); 9 | }); 10 | 11 | describe('calledOn/toHaveBeenCalledOn', function() { 12 | var a = { foo: 'bar' }, b = { bar: 'foo' }; 13 | 14 | it('should return true if obj was scope for call', function() { 15 | this.spy.call(a); 16 | var spyCall = this.spy.getCall(0); 17 | expect(spyCall.calledOn(a)).toBeTruthy(); 18 | expect(spyCall).toHaveBeenCalledOn(a); 19 | }); 20 | 21 | it('should not return true if scope was something else', function() { 22 | this.spy.call(b); 23 | var spyCall = this.spy.getCall(0); 24 | expect(spyCall.calledOn(a)).toBeFalsy(); 25 | expect(spyCall).not.toHaveBeenCalledOn(a); 26 | }); 27 | }); 28 | 29 | describe('calledWith/toHaveBeenCalledWith', function() { 30 | it('should return true if call received arguments', function() { 31 | this.spy('foo', 'bar'); 32 | var spyCall = this.spy.getCall(0); 33 | expect(spyCall.calledWith('foo', 'bar')).toBeTruthy(); 34 | expect(spyCall).toHaveBeenCalledWith('foo', 'bar'); 35 | }); 36 | 37 | it('should not return true if call did not receive arguments', function() { 38 | this.spy('fooble', 'barble'); 39 | var spyCall = this.spy.getCall(0); 40 | expect(spyCall.calledWith('foo','bar')).toBeFalsy(); 41 | expect(spyCall).not.toHaveBeenCalledWith('foo','bar'); 42 | }); 43 | }); 44 | 45 | describe('calledWithExactly/toHaveBeenCalledWithExactly', function() { 46 | it('should return true if received provided arguments and no others', function() { 47 | this.spy('foo','bar'); 48 | var spyCall = this.spy.getCall(0); 49 | expect(spyCall.calledWithExactly('foo','bar')).toBeTruthy(); 50 | expect(spyCall).toHaveBeenCalledWithExactly('foo','bar'); 51 | }); 52 | }); 53 | // TODO individual spy call exception matchers 54 | }); 55 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/spec/jasmine-matchers-compatibility.spec.js: -------------------------------------------------------------------------------- 1 | if (typeof require === 'function' && typeof module === 'object') { 2 | var sinon = require('sinon'); 3 | var jasmineSinon = require('../lib/jasmine-sinon.js'); 4 | } 5 | 6 | describe('sinon matchers should support jasmine matchers', function() { 7 | it('jasmine.any()', function () { 8 | var spy = sinon.spy(); 9 | spy('abc'); 10 | spy(new Date()); 11 | expect(spy).toHaveBeenCalledWith(jasmine.any(String)); 12 | expect(spy).toHaveBeenCalledWith(jasmine.any(Date)); 13 | expect(spy).not.toHaveBeenCalledWith(jasmine.any(Number)); 14 | }); 15 | 16 | it('jasmine.objectContaining()', function () { 17 | var spy = sinon.spy(); 18 | spy({ 19 | a: 1, 20 | b: 2, 21 | c: 3 22 | }); 23 | expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({b: 2})); 24 | expect(spy).not.toHaveBeenCalledWith(jasmine.objectContaining({b: 1})); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/spec/overwritten-jasmine-matchers.spec.js: -------------------------------------------------------------------------------- 1 | if (typeof require === 'function' && typeof module === 'object') { 2 | var sinon = require('sinon'); 3 | var jasmineSinon = require('../lib/jasmine-sinon.js'); 4 | } 5 | 6 | describe('jasmine matchers gracefully overridden', function() { 7 | beforeEach(function() { 8 | this.methodVal = 'no'; 9 | this.api = { 10 | myMethod: function(val) { 11 | this.methodVal = val; 12 | } 13 | }; 14 | spyOn(this.api, 'myMethod').andCallThrough(); 15 | }); 16 | 17 | describe('toHaveBeenCalled', function() { 18 | it('should work for jasmine spy', function() { 19 | expect(this.methodVal).toEqual('no'); 20 | expect(this.api.myMethod).not.toHaveBeenCalled(); 21 | this.api.myMethod.call(this, 'yes'); 22 | expect(this.methodVal).toEqual('yes'); 23 | expect(this.api.myMethod).toHaveBeenCalled(); 24 | }); 25 | }); 26 | 27 | describe('toHaveBeenCalledWith', function() { 28 | it('should work for jasmine spy', function() { 29 | expect(this.methodVal).toEqual('no'); 30 | expect(this.api.myMethod).not.toHaveBeenCalledWith('yes'); 31 | this.api.myMethod.call(this, 'yes'); 32 | expect(this.methodVal).toEqual('yes'); 33 | expect(this.api.myMethod).toHaveBeenCalledWith('yes'); 34 | }); 35 | }); 36 | }); 37 | -------------------------------------------------------------------------------- /bower_components/jasmine-sinon/spec/test-stubs.spec.js: -------------------------------------------------------------------------------- 1 | if (typeof require === 'function' && typeof module === 'object') { 2 | var sinon = require('sinon'); 3 | var jasmineSinon = require('../lib/jasmine-sinon.js'); 4 | } 5 | 6 | describe('test stubs', function() { 7 | beforeEach(function() { 8 | this.anonStub = sinon.stub(); 9 | this.api = { 10 | foo: function() { 11 | return 'bar'; 12 | } 13 | }; 14 | this.methodStub = sinon.stub(this.api,'foo'); 15 | }); 16 | 17 | describe('inherit spy matchers', function() { 18 | describe('boolean matcher examples', function() { 19 | it('should return true when anonymous stub was called', function() { 20 | this.anonStub(); 21 | expect(this.anonStub.called).toBeTruthy(); 22 | expect(this.anonStub).toHaveBeenCalled(); 23 | }); 24 | 25 | it('should return true when method stub was called', function() { 26 | this.api.foo(); 27 | expect(this.methodStub.called).toBeTruthy(); 28 | expect(this.methodStub).toHaveBeenCalled(); 29 | }); 30 | 31 | it('should return false when stubs were not called', function() { 32 | expect(this.anonStub.called).toBeFalsy(); 33 | expect(this.anonStub).not.toHaveBeenCalled(); 34 | expect(this.methodStub.called).toBeFalsy(); 35 | expect(this.methodStub).not.toHaveBeenCalled(); 36 | }); 37 | }); 38 | 39 | describe('method matcher examples', function() { 40 | it('should return true when anonymous stub called with scope', function() { 41 | this.anonStub.call(this); 42 | expect(this.anonStub.calledOn(this)).toBeTruthy(); 43 | expect(this.anonStub).toHaveBeenCalledOn(this); 44 | }); 45 | 46 | it('should return true when method stub was called with scope', function() { 47 | this.api.foo.call(this); 48 | expect(this.methodStub.calledOn(this)).toBeTruthy(); 49 | expect(this.methodStub).toHaveBeenCalledOn(this); 50 | }); 51 | }); 52 | }); 53 | }); 54 | -------------------------------------------------------------------------------- /bower_components/jasmine/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jasmine", 3 | "homepage": "https://github.com/pivotal/jasmine", 4 | "version": "1.3.1", 5 | "_release": "1.3.1", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "v1.3.1", 9 | "commit": "fadd494cab99b75c2885f4e9becee582b11b6fcc" 10 | }, 11 | "_source": "git://github.com/pivotal/jasmine.git", 12 | "_target": "~1.3.1", 13 | "_originalSource": "jasmine" 14 | } -------------------------------------------------------------------------------- /bower_components/jasmine/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .svn/ 3 | .DS_Store 4 | site/ 5 | .bundle/ 6 | .pairs 7 | .rvmrc 8 | *.gem 9 | .bundle 10 | tags 11 | Gemfile.lock 12 | pkg/* 13 | .sass-cache/* 14 | src/html/.sass-cache/* -------------------------------------------------------------------------------- /bower_components/jasmine/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "pages"] 2 | path = pages 3 | url = https://github.com/pivotal/jasmine.git 4 | -------------------------------------------------------------------------------- /bower_components/jasmine/.rspec: -------------------------------------------------------------------------------- 1 | --color 2 | -------------------------------------------------------------------------------- /bower_components/jasmine/.travis.yml: -------------------------------------------------------------------------------- 1 | # before_script: 2 | # - "sh -e /etc/init.d/xvfb start" 3 | before_install: 4 | - "export DISPLAY=:99.0" 5 | - "sh -e /etc/init.d/xvfb start"# 6 | script: "DISPLAY=:99.0 bundle exec rake jasmine_core_spec" 7 | 8 | rvm: 9 | - "1.9.3" 10 | -------------------------------------------------------------------------------- /bower_components/jasmine/Gemfile: -------------------------------------------------------------------------------- 1 | source :rubygems 2 | gem "rake" 3 | gem "jasmine", git: 'https://github.com/pivotal/jasmine-gem.git' 4 | 5 | unless ENV["TRAVIS"] 6 | group :debug do 7 | gem 'debugger' 8 | end 9 | end 10 | 11 | gemspec 12 | -------------------------------------------------------------------------------- /bower_components/jasmine/MIT.LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008-2011 Pivotal Labs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /bower_components/jasmine/README.markdown: -------------------------------------------------------------------------------- 1 | [Jasmine](http://pivotal.github.com/jasmine/) 2 | 3 | ======= 4 | **A JavaScript Testing Framework** 5 | 6 | Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, [Node.js](http://nodejs.org) projects, or anywhere that JavaScript can run. 7 | 8 | Documentation & guides live here: [http://pivotal.github.com/jasmine/](http://pivotal.github.com/jasmine/) 9 | 10 | 11 | ## Support 12 | 13 | * Search past discussions: [http://groups.google.com/group/jasmine-js](http://groups.google.com/group/jasmine-js) 14 | * Send an email to the list: [jasmine-js@googlegroups.com](jasmine-js@googlegroups.com) 15 | * View the project backlog at Pivotal Tracker: [http://www.pivotaltracker.com/projects/10606](http://www.pivotaltracker.com/projects/10606) 16 | * Follow us on Twitter: [@JasmineBDD](http://twitter.com/JasmineBDD) 17 | 18 | 19 | ## Maintainers 20 | 21 | * [Davis W. Frank](mailto:dwfrank@pivotallabs.com), Pivotal Labs 22 | * [Rajan Agaskar](mailto:rajan@pivotallabs.com), Pivotal Labs 23 | * [Christian Williams](mailto:antixian666@gmail.com), Square 24 | 25 | Copyright (c) 2008-2012 Pivotal Labs. This software is licensed under the MIT License. 26 | -------------------------------------------------------------------------------- /bower_components/jasmine/Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler" 2 | Bundler::GemHelper.install_tasks 3 | require "json" 4 | require "tilt" 5 | 6 | Dir["#{File.dirname(__FILE__)}/tasks/**/*.rb"].each do |file| 7 | require file 8 | end 9 | 10 | desc "Run all Jasmine JS specs" 11 | task :jasmine_specs do 12 | jasmine_dev = JasmineDev.new 13 | 14 | return unless jasmine_dev.node_installed? 15 | 16 | system "thor jasmine_dev:execute_specs" 17 | 18 | puts "\n\033[33m>>> DEPRECATED <<< Run Jasmine's JavaScript specs with 'thor jasmine_dev:execute_specs'\n\033[0m" 19 | end 20 | 21 | desc "Run all Jasmine core tests (JavaScript and dev tasks)" 22 | task :spec => :require_pages_submodule do 23 | jasmine_dev = JasmineDev.new 24 | 25 | return unless jasmine_dev.node_installed? 26 | 27 | system "rspec" 28 | end 29 | 30 | task :require_pages_submodule do 31 | jasmine_dev = JasmineDev.new 32 | 33 | unless jasmine_dev.pages_submodule_installed? 34 | puts 'Installing the Github pages submodule:' 35 | system 'git submodule update --init' 36 | puts 'Now continuing...' 37 | end 38 | end 39 | 40 | desc "View full development tasks" 41 | task :list_dev_tasks do 42 | puts "Jasmine uses Thor for command line tasks for development. Here is the command set:" 43 | system "thor list" 44 | end 45 | 46 | require "jasmine" 47 | require 'rspec' 48 | require 'rspec/core/rake_task' 49 | 50 | desc "Run all examples" 51 | RSpec::Core::RakeTask.new(:jasmine_core_spec) do |t| 52 | t.pattern = 'spec/jasmine_self_test_spec.rb' 53 | end 54 | 55 | namespace :jasmine do 56 | task :server do 57 | port = ENV['JASMINE_PORT'] || 8888 58 | Jasmine.load_configuration_from_yaml(File.join(Dir.pwd, 'spec', 'jasmine.yml')) 59 | config = Jasmine.config 60 | server = Jasmine::Server.new(8888, Jasmine::Application.app(config)) 61 | server.start 62 | 63 | puts "your tests are here:" 64 | puts " http://localhost:#{port}/" 65 | end 66 | 67 | desc "Copy examples from Jasmine JS to the gem" 68 | task :copy_examples_to_gem do 69 | require "fileutils" 70 | 71 | # copy jasmine's example tree into our generator templates dir 72 | FileUtils.rm_r('generators/jasmine/templates/jasmine-example', :force => true) 73 | FileUtils.cp_r(File.join(Jasmine::Core.path, 'example'), 'generators/jasmine/templates/jasmine-example', :preserve => true) 74 | end 75 | end 76 | 77 | desc "Run specs via server" 78 | task :jasmine => ['jasmine:server'] 79 | 80 | 81 | -------------------------------------------------------------------------------- /bower_components/jasmine/Release.markdown: -------------------------------------------------------------------------------- 1 | # How to work on a Jasmine Release 2 | 3 | ## Development 4 | ___Jasmine Core Maintainers Only___ 5 | 6 | Follow the instructions in `Contribute.markdown` during development. 7 | 8 | ### Git Rules 9 | 10 | Please work on feature branches. 11 | 12 | Please attempt to keep commits to `master` small, but cohesive. If a feature is contained in a bunch of small commits (e.g., it has several wip commits), please squash them when merging back to `master`. 13 | 14 | ### Version 15 | 16 | We attempt to stick to [Semantic Versioning](). Most of the time, development should be against a new minor version - fixing bugs and adding new features that are backwards compatible. 17 | 18 | The current version lives in the file `src/version.json`. This file should be set to the version that is _currently_ under development. That is, if version 1.0.0 is the current release then version should be incremented say, to 1.1.0. 19 | 20 | This version is used by both `jasmine.js` and the `jasmine-core` Ruby gem. 21 | 22 | Note that Jasmine should *not* use the "patch" version number. Let downstream projects rev their patch versions as needed, keeping their major and minor version numbers in sync with Jasmine core. 23 | 24 | ### Update the Github Pages (as needed) 25 | 26 | Github pages have to exist in a branch called `gh-pages` in order for their app to serve them. This repo adds that branch as a submodule under the `pages` directory. This is a bit of a hack, but it allows us to work with the pages and the source at the same time and with one set of rake tasks. 27 | 28 | If you want to submit changes to this repo and aren't a Pivotal Labs employee, you can fork and work in the `gh-pages` branch. You won't be able to edit the pages in the submodule off of master. 29 | 30 | The pages are built with [Frank](https://github.com/blahed/frank). All the source for these pages live in the `pages/pages_source` directory. 31 | 32 | ## Release 33 | 34 | When ready to release - specs are all green and the stories are done: 35 | 36 | 1. Update the version in `version.json` to a release candidate - add a `release_candidate` property with a value of 1 37 | 1. Update any comments on the public interfaces 38 | 1. Update any links or top-level landing page for the Github Pages 39 | 1. `thor jasmine_dev:release_prep` - updates the version, builds the `.js` files, builds the standalone release, and builds the Github pages 40 | 1. `rake release` - tags the repo with the version, builds the `jasmine-core` gem, pushes the gem to Rubygems.org 41 | 42 | There should be a post to Pivotal Labs blog and a tweet to that link. 43 | -------------------------------------------------------------------------------- /bower_components/jasmine/config.rb: -------------------------------------------------------------------------------- 1 | # 2 | # Compass configuration file - for building Jasmine's 'final CSS files 3 | # 4 | 5 | # Require any additional compass plugins here. 6 | 7 | # Set this to the root of your project when deployed: 8 | http_path = "/" 9 | css_dir = "src/html" 10 | sass_dir = "src/html" 11 | images_dir = "images" 12 | javascripts_dir = "javascripts" 13 | 14 | # You can select your preferred output style here (can be overridden via the command line): 15 | # output_style = :expanded or :nested or :compact or :compressed 16 | output_style = :compact 17 | 18 | # To enable relative paths to assets via compass helper functions. Uncomment: 19 | # relative_assets = true 20 | 21 | # To disable debugging comments that display the original location of your selectors. Uncomment: 22 | line_comments = false 23 | 24 | 25 | # If you prefer the indented syntax, you might want to regenerate this 26 | # project again passing --syntax sass, or you can uncomment this: 27 | # preferred_syntax = :sass 28 | # and then run: 29 | # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass 30 | -------------------------------------------------------------------------------- /bower_components/jasmine/images/jasmine_favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rpocklin/angular-scroll-animate/08552ffb9a3a8fb0c22aa72da7190d96b41af50f/bower_components/jasmine/images/jasmine_favicon.png -------------------------------------------------------------------------------- /bower_components/jasmine/jasmine-core.gemspec: -------------------------------------------------------------------------------- 1 | # -*- encoding: utf-8 -*- 2 | $:.push File.expand_path("../lib", __FILE__) 3 | require "jasmine-core/version" 4 | 5 | Gem::Specification.new do |s| 6 | s.name = "jasmine-core" 7 | s.version = Jasmine::Core::VERSION 8 | s.platform = Gem::Platform::RUBY 9 | s.authors = ["Rajan Agaskar", "Davis W. Frank", "Christian Williams"] 10 | s.summary = %q{JavaScript BDD framework} 11 | s.description = %q{Test your JavaScript without any framework dependencies, in any environment, and with a nice descriptive syntax.} 12 | s.email = %q{jasmine-js@googlegroups.com} 13 | s.homepage = "http://pivotal.github.com/jasmine" 14 | s.rubyforge_project = "jasmine-core" 15 | s.license = "MIT" 16 | 17 | s.files = Dir.glob("./lib/**/*") + Dir.glob("./lib/jasmine-core/spec/**/*.js") 18 | s.require_paths = ["lib"] 19 | s.add_development_dependency "json_pure", ">= 1.4.3" 20 | s.add_development_dependency "tilt" 21 | s.add_development_dependency "sass" 22 | s.add_development_dependency "compass" 23 | s.add_development_dependency "ragaskar-jsdoc_helper" 24 | s.add_development_dependency "rspec" 25 | s.add_development_dependency "fuubar" 26 | s.add_development_dependency "awesome_print" 27 | s.add_development_dependency "thor" 28 | s.add_development_dependency "nokogiri" 29 | s.add_development_dependency "redcarpet", "1.7" 30 | s.add_development_dependency "rocco" 31 | s.add_development_dependency "rdiscount" 32 | end 33 | -------------------------------------------------------------------------------- /bower_components/jasmine/jasmine_dev.thor: -------------------------------------------------------------------------------- 1 | require "#{File.expand_path(File.dirname(__FILE__))}/tasks/jasmine_dev" -------------------------------------------------------------------------------- /bower_components/jasmine/jsdoc-template/allclasses.tmpl: -------------------------------------------------------------------------------- 1 |
{+new Link().toFile("index.html").withText("Class Index")+} 2 | | {+new Link().toFile("files.html").withText("File Index")+}
3 |
4 |

Classes

5 |
    6 | 7 |
  • {! 8 | if (thisClass.alias == "_global_") { 9 | output += ""+new Link().toClass(thisClass.alias)+""; 10 | } 11 | else { 12 | output += new Link().toClass(thisClass.alias); 13 | } 14 | !}
  • 15 |
    16 |
17 |
-------------------------------------------------------------------------------- /bower_components/jasmine/jsdoc-template/allfiles.tmpl: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | {! Link.base = ""; /* all generated links will be relative to this */ !} 7 | JsDoc Reference - File Index 8 | 9 | 10 | 13 | 14 | 15 | 16 | {+include("static/header.html")+} 17 | 18 |
19 | {+publish.classesIndex+} 20 |
21 | 22 |
23 |

File Index

24 | 25 | 26 |
27 |

{+new Link().toSrc(item.alias).withText(item.name)+}

28 | {+resolveLinks(summarize(item.desc))+} 29 |
30 | 31 |
Author:
32 |
{+item.author+}
33 |
34 | 35 |
Version:
36 |
{+item.version+}
37 |
38 | {! var locations = item.comment.getTag('location').map(function($){return $.toString().replace(/(^\$ ?| ?\$$)/g, '').replace(/^HeadURL: https:/g, 'http:');}) !} 39 | 40 |
Location:
41 | 42 |
{+location+}
43 |
44 |
45 |
46 |
47 |
48 |
49 | 50 |
51 |
52 | ©{+JSDOC.opt.D.copyright+}
53 | Documentation generated by JsDoc Toolkit {+JSDOC.VERSION+} on {+new Date()+} 54 |
55 | 56 | -------------------------------------------------------------------------------- /bower_components/jasmine/jsdoc-template/index.tmpl: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | JsDoc Reference - Index 8 | 9 | 10 | 13 | 14 | 15 | 16 | {+include("static/header.html")+} 17 | 18 |
19 | {+publish.classesIndex+} 20 |
21 | 22 |
23 |

Class Index

24 | 25 | 26 |
27 |

{+(new Link().toSymbol(thisClass.alias))+}

28 | {+resolveLinks(summarize(thisClass.classDesc))+} 29 |
30 |
31 |
32 | 33 |
34 |
35 | ©{+JSDOC.opt.D.copyright+}
36 | Documentation generated by JsDoc Toolkit {+JSDOC.VERSION+} on {+new Date()+} 37 |
38 | 39 | -------------------------------------------------------------------------------- /bower_components/jasmine/jsdoc-template/static/header.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bower_components/jasmine/jsdoc-template/static/index.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | Generated Javascript Documentation 7 | 8 | 9 | 10 | 11 | 12 | <body> 13 | <p> 14 | This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. 15 | </p> 16 | </body> 17 | 18 | 19 | -------------------------------------------------------------------------------- /bower_components/jasmine/jsdoc-template/symbol.tmpl: -------------------------------------------------------------------------------- 1 | 2 | {+data.name+} 3 | {+data.memberOf+} 4 | {+data.isStatic+} 5 | {+data.isa+} 6 | {+data.desc+} 7 | {+data.classDesc+} 8 | 9 | 10 | 11 | {+method.name+} 12 | {+method.memberOf+} 13 | {+method.isStatic+} 14 | {+method.desc+} 15 | 16 | 17 | {+param.type+} 18 | {+param.name+} 19 | {+param.desc+} 20 | {+param.defaultValue+} 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {+property.name+} 29 | {+property.memberOf+} 30 | {+property.isStatic+} 31 | {+property.desc+} 32 | {+property.type+} 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core.rb: -------------------------------------------------------------------------------- 1 | module Jasmine 2 | module Core 3 | class << self 4 | def path 5 | File.join(File.dirname(__FILE__), "jasmine-core") 6 | end 7 | 8 | def js_files 9 | (["jasmine.js"] + Dir.glob(File.join(path, "*.js"))).map { |f| File.basename(f) }.uniq 10 | end 11 | 12 | SPEC_TYPES = ["core", "html", "node"] 13 | 14 | def core_spec_files 15 | spec_files("core") 16 | end 17 | 18 | def html_spec_files 19 | spec_files("html") 20 | end 21 | 22 | def node_spec_files 23 | spec_files("node") 24 | end 25 | 26 | def spec_files(type) 27 | raise ArgumentError.new("Unrecognized spec type") unless SPEC_TYPES.include?(type) 28 | (Dir.glob(File.join(path, "spec", type, "*.js"))).map { |f| File.join("spec", type, File.basename(f)) }.uniq 29 | end 30 | 31 | def css_files 32 | Dir.glob(File.join(path, "*.css")).map { |f| File.basename(f) } 33 | end 34 | end 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core/example/SpecRunner.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | Jasmine Spec Runner 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core/example/spec/PlayerSpec.js: -------------------------------------------------------------------------------- 1 | describe("Player", function() { 2 | var player; 3 | var song; 4 | 5 | beforeEach(function() { 6 | player = new Player(); 7 | song = new Song(); 8 | }); 9 | 10 | it("should be able to play a Song", function() { 11 | player.play(song); 12 | expect(player.currentlyPlayingSong).toEqual(song); 13 | 14 | //demonstrates use of custom matcher 15 | expect(player).toBePlaying(song); 16 | }); 17 | 18 | describe("when song has been paused", function() { 19 | beforeEach(function() { 20 | player.play(song); 21 | player.pause(); 22 | }); 23 | 24 | it("should indicate that the song is currently paused", function() { 25 | expect(player.isPlaying).toBeFalsy(); 26 | 27 | // demonstrates use of 'not' with a custom matcher 28 | expect(player).not.toBePlaying(song); 29 | }); 30 | 31 | it("should be possible to resume", function() { 32 | player.resume(); 33 | expect(player.isPlaying).toBeTruthy(); 34 | expect(player.currentlyPlayingSong).toEqual(song); 35 | }); 36 | }); 37 | 38 | // demonstrates use of spies to intercept and test method calls 39 | it("tells the current song if the user has made it a favorite", function() { 40 | spyOn(song, 'persistFavoriteStatus'); 41 | 42 | player.play(song); 43 | player.makeFavorite(); 44 | 45 | expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true); 46 | }); 47 | 48 | //demonstrates use of expected exceptions 49 | describe("#resume", function() { 50 | it("should throw an exception if song is already playing", function() { 51 | player.play(song); 52 | 53 | expect(function() { 54 | player.resume(); 55 | }).toThrow("song is already playing"); 56 | }); 57 | }); 58 | }); -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core/example/spec/SpecHelper.js: -------------------------------------------------------------------------------- 1 | beforeEach(function() { 2 | this.addMatchers({ 3 | toBePlaying: function(expectedSong) { 4 | var player = this.actual; 5 | return player.currentlyPlayingSong === expectedSong && 6 | player.isPlaying; 7 | } 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core/example/src/Player.js: -------------------------------------------------------------------------------- 1 | function Player() { 2 | } 3 | Player.prototype.play = function(song) { 4 | this.currentlyPlayingSong = song; 5 | this.isPlaying = true; 6 | }; 7 | 8 | Player.prototype.pause = function() { 9 | this.isPlaying = false; 10 | }; 11 | 12 | Player.prototype.resume = function() { 13 | if (this.isPlaying) { 14 | throw new Error("song is already playing"); 15 | } 16 | 17 | this.isPlaying = true; 18 | }; 19 | 20 | Player.prototype.makeFavorite = function() { 21 | this.currentlyPlayingSong.persistFavoriteStatus(true); 22 | }; -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core/example/src/Song.js: -------------------------------------------------------------------------------- 1 | function Song() { 2 | } 3 | 4 | Song.prototype.persistFavoriteStatus = function(value) { 5 | // something complicated 6 | throw new Error("not yet implemented"); 7 | }; -------------------------------------------------------------------------------- /bower_components/jasmine/lib/jasmine-core/version.rb: -------------------------------------------------------------------------------- 1 | module Jasmine 2 | module Core 3 | VERSION = "1.3.1" 4 | end 5 | end 6 | 7 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/BaseSpec.js: -------------------------------------------------------------------------------- 1 | describe("base.js", function() { 2 | describe("jasmine.MessageResult", function() { 3 | it("#toString should pretty-print and concatenate each part of the message", function() { 4 | var values = ["log", "message", 123, {key: "value"}, "FTW!"]; 5 | var messageResult = new jasmine.MessageResult(values); 6 | expect(messageResult.toString()).toEqual("log message 123 { key : 'value' } FTW!"); 7 | }); 8 | }); 9 | 10 | describe("jasmine.log", function() { 11 | it("should accept n arguments", function() { 12 | spyOn(jasmine.getEnv().currentSpec, 'log'); 13 | jasmine.log(1, 2, 3); 14 | expect(jasmine.getEnv().currentSpec.log).toHaveBeenCalledWith(1, 2, 3); 15 | }); 16 | }); 17 | 18 | describe("jasmine.getGlobal", function() { 19 | it("should return the global object", function() { 20 | var globalObject = (function() { 21 | return this; 22 | })(); 23 | 24 | expect(jasmine.getGlobal()).toBe(globalObject); 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/MockClockSpec.js: -------------------------------------------------------------------------------- 1 | describe("MockClock", function () { 2 | 3 | beforeEach(function() { 4 | jasmine.Clock.useMock(); 5 | }); 6 | 7 | describe("setTimeout", function () { 8 | it("should mock the clock when useMock is in a beforeEach", function() { 9 | var expected = false; 10 | setTimeout(function() { 11 | expected = true; 12 | }, 30000); 13 | expect(expected).toBe(false); 14 | jasmine.Clock.tick(30001); 15 | expect(expected).toBe(true); 16 | }); 17 | }); 18 | 19 | describe("setInterval", function () { 20 | it("should mock the clock when useMock is in a beforeEach", function() { 21 | var interval = 0; 22 | setInterval(function() { 23 | interval++; 24 | }, 30000); 25 | expect(interval).toEqual(0); 26 | jasmine.Clock.tick(30001); 27 | expect(interval).toEqual(1); 28 | jasmine.Clock.tick(30001); 29 | expect(interval).toEqual(2); 30 | jasmine.Clock.tick(1); 31 | expect(interval).toEqual(2); 32 | }); 33 | }); 34 | 35 | it("shouldn't complain if you call jasmine.Clock.useMock() more than once", function() { 36 | jasmine.Clock.useMock(); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/MultiReporterSpec.js: -------------------------------------------------------------------------------- 1 | describe("jasmine.MultiReporter", function() { 2 | var multiReporter, fakeReporter1, fakeReporter2; 3 | 4 | beforeEach(function() { 5 | multiReporter = new jasmine.MultiReporter(); 6 | fakeReporter1 = jasmine.createSpyObj("fakeReporter1", ["reportSpecResults"]); 7 | fakeReporter2 = jasmine.createSpyObj("fakeReporter2", ["reportSpecResults", "reportRunnerStarting"]); 8 | multiReporter.addReporter(fakeReporter1); 9 | multiReporter.addReporter(fakeReporter2); 10 | }); 11 | 12 | it("should support all the method calls that jasmine.Reporter supports", function() { 13 | var delegate = {}; 14 | multiReporter.addReporter(delegate); 15 | 16 | this.addMatchers({ 17 | toDelegateMethod: function(methodName) { 18 | delegate[methodName] = jasmine.createSpy(methodName); 19 | this.actual[methodName]("whatever argument"); 20 | 21 | return delegate[methodName].wasCalled && 22 | delegate[methodName].mostRecentCall.args.length == 1 && 23 | delegate[methodName].mostRecentCall.args[0] == "whatever argument"; 24 | } 25 | }); 26 | 27 | expect(multiReporter).toDelegateMethod('reportRunnerStarting'); 28 | expect(multiReporter).toDelegateMethod('reportRunnerResults'); 29 | expect(multiReporter).toDelegateMethod('reportSuiteResults'); 30 | expect(multiReporter).toDelegateMethod('reportSpecStarting'); 31 | expect(multiReporter).toDelegateMethod('reportSpecResults'); 32 | expect(multiReporter).toDelegateMethod('log'); 33 | }); 34 | 35 | it("should delegate to any and all subreporters", function() { 36 | multiReporter.reportSpecResults('blah', 'foo'); 37 | expect(fakeReporter1.reportSpecResults).toHaveBeenCalledWith('blah', 'foo'); 38 | expect(fakeReporter2.reportSpecResults).toHaveBeenCalledWith('blah', 'foo'); 39 | }); 40 | 41 | it("should quietly skip delegating to any subreporters which lack the given method", function() { 42 | multiReporter.reportRunnerStarting('blah', 'foo'); 43 | expect(fakeReporter2.reportRunnerStarting).toHaveBeenCalledWith('blah', 'foo'); 44 | }); 45 | }); -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/NestedResultsSpec.js: -------------------------------------------------------------------------------- 1 | describe('jasmine.NestedResults', function() { 2 | it('#addResult increments counters', function() { 3 | // Leaf case 4 | var results = new jasmine.NestedResults(); 5 | 6 | results.addResult(new jasmine.ExpectationResult({ 7 | matcherName: "foo", passed: true, message: 'Passed.', actual: 'bar', expected: 'bar'} 8 | )); 9 | 10 | expect(results.getItems().length).toEqual(1); 11 | expect(results.totalCount).toEqual(1); 12 | expect(results.passedCount).toEqual(1); 13 | expect(results.failedCount).toEqual(0); 14 | 15 | results.addResult(new jasmine.ExpectationResult({ 16 | matcherName: "baz", passed: false, message: 'FAIL.', actual: "corge", expected: "quux" 17 | })); 18 | 19 | expect(results.getItems().length).toEqual(2); 20 | expect(results.totalCount).toEqual(2); 21 | expect(results.passedCount).toEqual(1); 22 | expect(results.failedCount).toEqual(1); 23 | }); 24 | 25 | it('should roll up counts for nested results', function() { 26 | // Branch case 27 | var leafResultsOne = new jasmine.NestedResults(); 28 | leafResultsOne.addResult(new jasmine.ExpectationResult({ 29 | matcherName: "toSomething", passed: true, message: 'message', actual: '', expected:'' 30 | })); 31 | 32 | leafResultsOne.addResult(new jasmine.ExpectationResult({ 33 | matcherName: "toSomethingElse", passed: false, message: 'message', actual: 'a', expected: 'b' 34 | })); 35 | 36 | var leafResultsTwo = new jasmine.NestedResults(); 37 | leafResultsTwo.addResult(new jasmine.ExpectationResult({ 38 | matcherName: "toSomething", passed: true, message: 'message', actual: '', expected: '' 39 | })); 40 | leafResultsTwo.addResult(new jasmine.ExpectationResult({ 41 | matcherName: "toSomethineElse", passed: false, message: 'message', actual: 'c', expected: 'd' 42 | })); 43 | 44 | var branchResults = new jasmine.NestedResults(); 45 | branchResults.addResult(leafResultsOne); 46 | branchResults.addResult(leafResultsTwo); 47 | 48 | expect(branchResults.getItems().length).toEqual(2); 49 | expect(branchResults.totalCount).toEqual(4); 50 | expect(branchResults.passedCount).toEqual(2); 51 | expect(branchResults.failedCount).toEqual(2); 52 | }); 53 | 54 | }); 55 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/QueueSpec.js: -------------------------------------------------------------------------------- 1 | describe("jasmine.Queue", function() { 2 | it("should not call itself recursively, so we don't get stack overflow errors", function() { 3 | var queue = new jasmine.Queue(new jasmine.Env()); 4 | queue.add(new jasmine.Block(null, function() {})); 5 | queue.add(new jasmine.Block(null, function() {})); 6 | queue.add(new jasmine.Block(null, function() {})); 7 | queue.add(new jasmine.Block(null, function() {})); 8 | 9 | var nestCount = 0; 10 | var maxNestCount = 0; 11 | var nextCallCount = 0; 12 | queue.next_ = function() { 13 | nestCount++; 14 | if (nestCount > maxNestCount) maxNestCount = nestCount; 15 | 16 | jasmine.Queue.prototype.next_.apply(queue, arguments); 17 | nestCount--; 18 | }; 19 | 20 | queue.start(); 21 | expect(maxNestCount).toEqual(1); 22 | }); 23 | }); -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/ReporterSpec.js: -------------------------------------------------------------------------------- 1 | describe('jasmine.Reporter', function() { 2 | var env; 3 | 4 | 5 | beforeEach(function() { 6 | env = new jasmine.Env(); 7 | env.updateInterval = 0; 8 | }); 9 | 10 | it('should get called from the test runner', function() { 11 | env.describe('Suite for JSON Reporter with Callbacks', function () { 12 | env.it('should be a test', function() { 13 | this.runs(function () { 14 | this.expect(true).toEqual(true); 15 | }); 16 | }); 17 | env.it('should be a failing test', function() { 18 | this.runs(function () { 19 | this.expect(false).toEqual(true); 20 | }); 21 | }); 22 | }); 23 | env.describe('Suite for JSON Reporter with Callbacks 2', function () { 24 | env.it('should be a test', function() { 25 | this.runs(function () { 26 | this.expect(true).toEqual(true); 27 | }); 28 | }); 29 | 30 | }); 31 | 32 | var foo = 0; 33 | var bar = 0; 34 | var baz = 0; 35 | 36 | env.addReporter({ 37 | reportSpecResults: function() { 38 | foo++; 39 | }, 40 | reportSuiteResults: function() { 41 | bar++; 42 | }, 43 | reportRunnerResults: function() { 44 | baz++; 45 | } 46 | }); 47 | 48 | var runner = env.currentRunner(); 49 | runner.execute(); 50 | 51 | expect(foo).toEqual(3); // 'foo was expected to be 3, was ' + foo); 52 | expect(bar).toEqual(2); // 'bar was expected to be 2, was ' + bar); 53 | expect(baz).toEqual(1); // 'baz was expected to be 1, was ' + baz); 54 | }); 55 | 56 | }); -------------------------------------------------------------------------------- /bower_components/jasmine/spec/core/UtilSpec.js: -------------------------------------------------------------------------------- 1 | describe("jasmine.util", function() { 2 | describe("extend", function () { 3 | it("should add properies to a destination object ", function() { 4 | var destination = {baz: 'baz'}; 5 | jasmine.util.extend(destination, { 6 | foo: 'foo', bar: 'bar' 7 | }); 8 | expect(destination).toEqual({foo: 'foo', bar: 'bar', baz: 'baz'}); 9 | }); 10 | 11 | it("should replace properies that already exist on a destination object", function() { 12 | var destination = {foo: 'foo'}; 13 | jasmine.util.extend(destination, { 14 | foo: 'bar' 15 | }); 16 | expect(destination).toEqual({foo: 'bar'}); 17 | jasmine.util.extend(destination, { 18 | foo: null 19 | }); 20 | expect(destination).toEqual({foo: null}); 21 | }); 22 | }); 23 | 24 | describe("isArray_", function() { 25 | it("should return true if the argument is an array", function() { 26 | expect(jasmine.isArray_([])).toBe(true); 27 | expect(jasmine.isArray_(['a'])).toBe(true); 28 | }); 29 | 30 | it("should return false if the argument is not an array", function() { 31 | expect(jasmine.isArray_(undefined)).toBe(false); 32 | expect(jasmine.isArray_({})).toBe(false); 33 | expect(jasmine.isArray_(function() {})).toBe(false); 34 | expect(jasmine.isArray_('foo')).toBe(false); 35 | expect(jasmine.isArray_(5)).toBe(false); 36 | expect(jasmine.isArray_(null)).toBe(false); 37 | }); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/html/MatchersHtmlSpec.js: -------------------------------------------------------------------------------- 1 | describe("MatchersSpec - HTML Dependent", function () { 2 | var env, spec; 3 | 4 | beforeEach(function() { 5 | env = new jasmine.Env(); 6 | env.updateInterval = 0; 7 | 8 | var suite = env.describe("suite", function() { 9 | spec = env.it("spec", function() { 10 | }); 11 | }); 12 | spyOn(spec, 'addMatcherResult'); 13 | 14 | this.addMatchers({ 15 | toPass: function() { 16 | return lastResult().passed(); 17 | }, 18 | toFail: function() { 19 | return !lastResult().passed(); 20 | } 21 | }); 22 | }); 23 | 24 | function match(value) { 25 | return spec.expect(value); 26 | } 27 | 28 | function lastResult() { 29 | return spec.addMatcherResult.mostRecentCall.args[0]; 30 | } 31 | 32 | it("toEqual with DOM nodes", function() { 33 | var nodeA = document.createElement('div'); 34 | var nodeB = document.createElement('div'); 35 | expect((match(nodeA).toEqual(nodeA))).toPass(); 36 | expect((match(nodeA).toEqual(nodeB))).toFail(); 37 | }); 38 | }); -------------------------------------------------------------------------------- /bower_components/jasmine/spec/html/PrettyPrintHtmlSpec.js: -------------------------------------------------------------------------------- 1 | describe("jasmine.pp (HTML Dependent)", function () { 2 | it("should stringify HTML nodes properly", function() { 3 | var sampleNode = document.createElement('div'); 4 | sampleNode.innerHTML = 'foobar'; 5 | expect(jasmine.pp(sampleNode)).toEqual("HTMLNode"); 6 | expect(jasmine.pp({foo: sampleNode})).toEqual("{ foo : HTMLNode }"); 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/jasmine.yml: -------------------------------------------------------------------------------- 1 | jasmine_dir: 2 | - 'src' 3 | #This 'magic' inclusion order allows the travis build to pass. 4 | #TODO: search for the correct files to include to prevent 5 | jasmine_files: 6 | - 'core/base.js' 7 | - 'core/util.js' 8 | - 'core/Reporter.js' 9 | #end of known dependencies 10 | - 'core/Env.js' 11 | - 'core/Block.js' 12 | - 'core/JsApiReporter.js' 13 | - 'core/Matchers.js' 14 | - 'core/mock-timeout.js' 15 | - 'core/MultiReporter.js' 16 | - 'core/NestedResults.js' 17 | - 'core/PrettyPrinter.js' 18 | - 'core/Queue.js' 19 | - 'core/Runner.js' 20 | - 'core/Spec.js' 21 | - 'core/Suite.js' 22 | - 'core/WaitsBlock.js' 23 | - 'core/WaitsForBlock.js' 24 | - 'html/HtmlReporterHelpers.js' 25 | - 'html/HtmlReporter.js' 26 | - '**/*.js' 27 | jasmine_css_files: 28 | - 'html/jasmine.css' 29 | src_files: 30 | stylesheets: 31 | helpers: 32 | - 'helpers/**/*.js' 33 | spec_files: 34 | - '**/*[Ss]pec.js' 35 | src_dir: 36 | spec_dir: 37 | - 'spec' 38 | 39 | 40 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/jasmine_self_test_spec.rb: -------------------------------------------------------------------------------- 1 | require 'jasmine' 2 | 3 | Jasmine.load_configuration_from_yaml(File.join(Dir.pwd, 'spec', 'jasmine.yml')) 4 | config = Jasmine.config 5 | server = Jasmine::Server.new(config.port, Jasmine::Application.app(config)) 6 | driver = Jasmine::SeleniumDriver.new(config.browser, "#{config.host}:#{config.port}/") 7 | 8 | t = Thread.new do 9 | begin 10 | server.start 11 | rescue ChildProcess::TimeoutError 12 | end 13 | # # ignore bad exits 14 | end 15 | t.abort_on_exception = true 16 | Jasmine::wait_for_listener(config.port, "jasmine server") 17 | puts "jasmine server started." 18 | 19 | results_processor = Jasmine::ResultsProcessor.new(config) 20 | results = Jasmine::Runners::HTTP.new(driver, results_processor, config.result_batch_size).run 21 | formatter = Jasmine::RspecFormatter.new 22 | formatter.format_results(results) 23 | 24 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | # This file was generated by the `rspec --init` command. Conventionally, all 2 | # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 3 | # Require this file using `require "spec_helper.rb"` to ensure that it is only 4 | # loaded once. 5 | # 6 | # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 7 | RSpec.configure do |config| 8 | config.treat_symbols_as_metadata_keys_with_true_values = true 9 | config.run_all_when_everything_filtered = true 10 | config.filter_run :focus 11 | end 12 | 13 | require 'awesome_print' 14 | require 'tmpdir' 15 | require 'nokogiri' 16 | 17 | def project_root 18 | File.join(File.expand_path(File.dirname(__FILE__)), '..') 19 | end 20 | 21 | require "#{project_root}/tasks/jasmine_dev" 22 | 23 | def capture_output(capture = true) 24 | if capture 25 | output = StringIO.new 26 | $stdout = output 27 | end 28 | yield 29 | if capture 30 | output.string 31 | end 32 | ensure 33 | $stdout = STDOUT 34 | end 35 | 36 | def reset_dir(dir) 37 | FileUtils.rm_r dir if File.exists?(dir) 38 | FileUtils.mkdir_p dir 39 | end 40 | 41 | def jasmine_version 42 | version = jasmine_version_object 43 | 44 | version_string = "#{version['major']}.#{version['minor']}.#{version['build']}" 45 | version_string += ".rc#{version['release_candidate']}" if version['release_candidate'] 46 | version_string 47 | end 48 | 49 | def jasmine_version_object 50 | @version_object ||= JSON.parse(File.read(File.join(JasmineDev.project_root, 'src', 'version.json'))) 51 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/build_distribution_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Build Jasmine task" do 4 | 5 | let(:jasmine_core_dir) { "#{Dir.tmpdir}/jasmine-core" } 6 | let(:jasmine_dev) { JasmineDev.new } 7 | 8 | before do 9 | reset_dir jasmine_core_dir 10 | @output = capture_output { jasmine_dev.build_distribution jasmine_core_dir } 11 | end 12 | 13 | it "should say that JSHint is running" do 14 | @output.should match(/Running JSHint/) 15 | @output.should match(/Jasmine JSHint PASSED/) 16 | end 17 | 18 | it "should tell the developer it is building the distribution" do 19 | @output.should match(/Building Jasmine distribution/) 20 | end 21 | 22 | it "should build jasmine.js in the destination directory" do 23 | File.exist?("#{jasmine_core_dir}/jasmine.js").should be_true 24 | end 25 | 26 | it "should build jasmine-html.js in the destination directory" do 27 | File.exist?("#{jasmine_core_dir}/jasmine-html.js").should be_true 28 | end 29 | 30 | it "should build jasmine.css" do 31 | File.exist?("#{jasmine_core_dir}/jasmine.css").should be_true 32 | end 33 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/build_github_pages_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Build Github Pages task" do 4 | 5 | let(:pages_dir) { File.join(Dir.tmpdir, 'pages') } 6 | let(:jasmine_dev) { JasmineDev.new } 7 | 8 | before do 9 | reset_dir pages_dir 10 | end 11 | 12 | describe "when the Github pages submodule is not present" do 13 | before do 14 | jasmine_dev.should_receive(:has_pages_submodule?).and_return(false) 15 | 16 | @output = capture_output { jasmine_dev.build_github_pages pages_dir } 17 | end 18 | 19 | it "should tell the user the task is running" do 20 | @output.should match(/Building Github Pages/) 21 | end 22 | 23 | it "should prompt the user to install the submodule" do 24 | @output.should match(/Submodule for Github Pages isn't present/) 25 | end 26 | end 27 | 28 | describe "when the Github pages submodule is present" do 29 | before do 30 | jasmine_dev.should_receive(:has_pages_submodule?).and_return(true) 31 | 32 | @output = capture_output { jasmine_dev.build_github_pages pages_dir } 33 | end 34 | 35 | it "should tell the user the task is running" do 36 | @output.should match(/Building Github Pages/) 37 | end 38 | 39 | it "should copy the latest jasmine files to the pages dir" do 40 | ['jasmine.js', 'jasmine.css', 'jasmine-html.js'].each do |lib_file| 41 | source = File.read(File.join(project_root, 'lib', 'jasmine-core', lib_file)) 42 | dest = File.read(File.join(pages_dir, 'lib', lib_file)) 43 | 44 | source.should == dest 45 | end 46 | end 47 | 48 | it "should build a new page" do 49 | @output.should match(/rocco/) 50 | File.exist?(File.join(pages_dir, 'introduction.html')).should be_true 51 | end 52 | 53 | it "should copy the rocco output to index.html" do 54 | introduction = File.read(File.join(pages_dir, 'introduction.html')) 55 | index = File.read(File.join(pages_dir, 'index.html')) 56 | 57 | index.should == introduction 58 | end 59 | end 60 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/build_standalone_runner_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Build Standalone runner HTML task" do 4 | 5 | let(:jasmine_dev) { JasmineDev.new } 6 | let(:standalone_temp_dir) { "#{Dir.tmpdir}/jasmine_test" } 7 | 8 | describe "build_standalone_runner" do 9 | before do 10 | reset_dir standalone_temp_dir 11 | Dir.should_receive(:tmpdir).any_number_of_times.and_return(standalone_temp_dir) 12 | 13 | @standalone_staging_dir = File.join(standalone_temp_dir, 'jasmine_standalone') 14 | 15 | @version_dir = File.join(@standalone_staging_dir, "jasmine-standalone-#{jasmine_version}") 16 | 17 | @output = capture_output { jasmine_dev.build_standalone_runner } 18 | end 19 | 20 | it "should tell the developer the task has started" do 21 | @output.should match(/Building standalone runner HTML/) 22 | end 23 | 24 | it "should copy a build SpecRunner.html to the staging directory" do 25 | File.exist?(File.join(@version_dir, 'SpecRunner.html')).should be_true 26 | end 27 | 28 | describe "should build the file that has HTML that" do 29 | before do 30 | html = File.read(File.join(@version_dir, 'SpecRunner.html')) 31 | @runner = Nokogiri(html) 32 | end 33 | 34 | it "should have the favicon tag" do 35 | favicon_tag = @runner.css('link')[0] 36 | favicon_tag['href'].should match("lib/jasmine-#{jasmine_version}/jasmine_favicon.png") 37 | end 38 | 39 | it "should have the stylesheet" do 40 | css_tag = @runner.css('link')[1] 41 | css_tag['href'].should match("lib/jasmine-#{jasmine_version}/jasmine.css") 42 | end 43 | 44 | it "should have the jasmine script tags" do 45 | script_sources = @runner.css('script').collect {|tag| tag['src']} 46 | script_sources.should include("lib/jasmine-#{jasmine_version}/jasmine.js") 47 | script_sources.should include("lib/jasmine-#{jasmine_version}/jasmine-html.js") 48 | end 49 | 50 | it "should have the example source files" do 51 | script_sources = @runner.css('script').collect {|tag| tag['src']} 52 | script_sources.should include('src/Player.js') 53 | script_sources.should include('src/Song.js') 54 | end 55 | 56 | it "should have the example source files" do 57 | script_sources = @runner.css('script').collect {|tag| tag['src']} 58 | script_sources.should include('spec/SpecHelper.js') 59 | script_sources.should include('spec/PlayerSpec.js') 60 | end 61 | end 62 | end 63 | end 64 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/count_specs_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Spec counting task" do 4 | 5 | let(:jasmine_dev) { JasmineDev.new } 6 | 7 | before do 8 | @output = capture_output { jasmine_dev.count_specs } 9 | end 10 | 11 | it "should tell the developer that the specs are being counted" do 12 | @output.should match(/Counting specs/) 13 | end 14 | 15 | it "should report the number of specs that will run in node" do 16 | @output.should match(/\d+ \e\[0mspecs for Node.js/) 17 | end 18 | 19 | it "should report the number of specs that will run in the browser" do 20 | @output.should match(/\d+ \e\[0mspecs for Browser/) 21 | end 22 | 23 | it "should remind the developer to check the count" do 24 | @output.should match(/Please verify/) 25 | end 26 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/execute_specs_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Spec tasks" do 4 | 5 | let(:jasmine_dev) { JasmineDev.new } 6 | 7 | describe "execute_specs_in_node" do 8 | describe "when Node.js is not present" do 9 | before do 10 | jasmine_dev.should_receive(:has_node?).and_return(false) 11 | @output = capture_output { jasmine_dev.execute_specs_in_node } 12 | end 13 | 14 | it "should prompt the user to install Node" do 15 | @output.should match(/Node\.js is required/) 16 | end 17 | end 18 | 19 | describe "when Node.js is present" do 20 | before do 21 | jasmine_dev.should_receive(:has_node?).and_return(true) 22 | @output = capture_output { jasmine_dev.execute_specs_in_node } 23 | end 24 | 25 | it "should build the distribution" do 26 | @output.should match(/Building Jasmine distribution/) 27 | end 28 | 29 | it "should tell the developer that the specs are being counted" do 30 | @output.should match(/Counting specs/) 31 | end 32 | 33 | it "should tell the user that the specs are running in Node.js" do 34 | @output.should match(/specs via Node/) 35 | @output.should match(/Started/) 36 | @output.should match(/\d+ specs, 0 failures/) 37 | end 38 | end 39 | end 40 | 41 | describe "execute_specs_in_browser" do 42 | before do 43 | jasmine_dev.should_receive(:run) 44 | @output = capture_output { jasmine_dev.execute_specs_in_browser } 45 | end 46 | 47 | it "should build the distribution" do 48 | @output.should match(/Building Jasmine distribution/) 49 | end 50 | 51 | it "should tell the developer that the specs are being counted" do 52 | @output.should match(/Counting specs/) 53 | end 54 | 55 | it "should tell the user that the specs are running in the broswer" do 56 | @output.should match(/specs via the default web browser/) 57 | end 58 | end 59 | 60 | describe "execute_specs" do 61 | before do 62 | @output = capture_output { jasmine_dev.execute_specs } 63 | end 64 | 65 | it "should build the distribution" do 66 | @output.should match(/Building Jasmine distribution/) 67 | end 68 | 69 | it "should tell the developer that the specs are being counted" do 70 | @output.should match(/Counting specs/) 71 | end 72 | 73 | it "should tell the user that the specs are running in Node.js" do 74 | @output.should match(/specs via Node/) 75 | end 76 | 77 | it "should tell the user that the specs are running in the broswer" do 78 | @output.should match(/specs via the default web browser/) 79 | end 80 | end 81 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/jshint_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "JSHint task" do 4 | 5 | let(:tmp_dir) { "#{Dir.tmpdir}/jasmine_tasks_test" } 6 | let(:jasmine_dev) { JasmineDev.new } 7 | 8 | before do 9 | reset_dir tmp_dir 10 | end 11 | 12 | describe "when Node is not present" do 13 | before do 14 | jasmine_dev.should_receive(:has_node?).and_return(false) 15 | @output = capture_output { jasmine_dev.js_hint } 16 | end 17 | 18 | it "should not tell the user that lint is running" do 19 | @output.should_not match(/Running JSHint/) 20 | end 21 | 22 | it "should prompt the user to install Node" do 23 | @output.should match(/Node\.js is required/) 24 | end 25 | end 26 | 27 | describe "when Node is present" do 28 | before do 29 | jasmine_dev.should_receive(:has_node?).and_return(true) 30 | 31 | @output = capture_output { jasmine_dev.js_hint } 32 | end 33 | 34 | it "should tell the user that lint is running" do 35 | @output.should match(/Running JSHint/) 36 | @output.should match(/Jasmine JSHint PASSED/) 37 | end 38 | end 39 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/release_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Release task" do 4 | 5 | let(:jasmine_dev) { JasmineDev.new } 6 | 7 | describe "when the pages submodule is not present" do 8 | before do 9 | jasmine_dev.should_receive(:has_pages_submodule?).and_return(false) 10 | 11 | @output = capture_output { jasmine_dev.release_prep } 12 | end 13 | 14 | it "should tell the user the task is running" do 15 | @output.should match(/Building Release/) 16 | end 17 | 18 | it "should prompt the user to install the submodule" do 19 | @output.should match(/Submodule for Github Pages isn't present/) 20 | end 21 | end 22 | 23 | describe "when the pages submodule is present" do 24 | before do 25 | JasmineDev.any_instance.should_receive(:write_version_files) 26 | JasmineDev.any_instance.should_receive(:build_distribution) 27 | JasmineDev.any_instance.should_receive(:build_standalone_distribution) 28 | JasmineDev.any_instance.should_receive(:build_github_pages) 29 | 30 | jasmine_dev.should_receive(:has_pages_submodule?).and_return(true) 31 | 32 | @output = capture_output { jasmine_dev.release_prep } 33 | end 34 | 35 | it "should tell the user the task is running" do 36 | @output.should match(/Building Release/) 37 | end 38 | end 39 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/tasks/version_spec.rb: -------------------------------------------------------------------------------- 1 | require 'spec_helper.rb' 2 | 3 | describe "Version tasks" do 4 | 5 | let(:jasmine_dev) { JasmineDev.new } 6 | 7 | describe "write_version_files" do 8 | 9 | before do 10 | @output = capture_output { jasmine_dev.write_version_files } 11 | end 12 | 13 | it "should tell the user that the task has started" do 14 | @output.should match(/Building version files/) 15 | end 16 | 17 | it "should build the version.js file" do 18 | js_version = File.read(File.join(project_root, 'src', 'version.js')) 19 | js_version.should match(%Q{"build": #{jasmine_version_object["build"]}}) 20 | js_version.should match(%Q{"minor": #{jasmine_version_object["minor"]}}) 21 | js_version.should match(%Q{"build": #{jasmine_version_object["build"]}}) 22 | 23 | if jasmine_version_object["release_candidate"] 24 | js_version.should match(%Q{"release_candidate": #{jasmine_version_object["release_candidate"]}}) 25 | end 26 | 27 | js_version.should match(/"revision": \d+/) 28 | end 29 | 30 | it "should build the jasmine-core ruby gem version" do 31 | ruby_version = File.read(File.join(project_root, 'lib', 'jasmine-core', 'version.rb')) 32 | ruby_version.should match(%Q{VERSION = "#{jasmine_version}"}) 33 | end 34 | end 35 | 36 | describe "display_version" do 37 | describe "when Node.js is not present" do 38 | before do 39 | @output = capture_output { jasmine_dev.display_version } 40 | end 41 | 42 | it "should display a version header" do 43 | @output.should match(/Current version/) 44 | end 45 | 46 | it "should display the current version Object" do 47 | @output.should match(/Display version: \e\[33m\d+\.\d+\.\d+/) 48 | end 49 | 50 | it "should display the current version string" do 51 | @output.should match(/\{ "major": \d+, "minor": \d+, "build": \d+/) 52 | end 53 | end 54 | end 55 | end -------------------------------------------------------------------------------- /bower_components/jasmine/spec/templates/runner.html.erb: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | <%= title %> 6 | 7 | <%= favicon %> 8 | <%= jasmine_tags %> 9 | 10 | 11 | <%= source_tags %> 12 | 13 | 14 | <%= spec_file_tags %> 15 | 16 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /bower_components/jasmine/spec/templates/script_tag.html.erb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/Block.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Blocks are functions with executable code that make up a spec. 3 | * 4 | * @constructor 5 | * @param {jasmine.Env} env 6 | * @param {Function} func 7 | * @param {jasmine.Spec} spec 8 | */ 9 | jasmine.Block = function(env, func, spec) { 10 | this.env = env; 11 | this.func = func; 12 | this.spec = spec; 13 | }; 14 | 15 | jasmine.Block.prototype.execute = function(onComplete) { 16 | if (!jasmine.CATCH_EXCEPTIONS) { 17 | this.func.apply(this.spec); 18 | } 19 | else { 20 | try { 21 | this.func.apply(this.spec); 22 | } catch (e) { 23 | this.spec.fail(e); 24 | } 25 | } 26 | onComplete(); 27 | }; 28 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/MultiReporter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @constructor 3 | */ 4 | jasmine.MultiReporter = function() { 5 | this.subReporters_ = []; 6 | }; 7 | jasmine.util.inherit(jasmine.MultiReporter, jasmine.Reporter); 8 | 9 | jasmine.MultiReporter.prototype.addReporter = function(reporter) { 10 | this.subReporters_.push(reporter); 11 | }; 12 | 13 | (function() { 14 | var functionNames = [ 15 | "reportRunnerStarting", 16 | "reportRunnerResults", 17 | "reportSuiteResults", 18 | "reportSpecStarting", 19 | "reportSpecResults", 20 | "log" 21 | ]; 22 | for (var i = 0; i < functionNames.length; i++) { 23 | var functionName = functionNames[i]; 24 | jasmine.MultiReporter.prototype[functionName] = (function(functionName) { 25 | return function() { 26 | for (var j = 0; j < this.subReporters_.length; j++) { 27 | var subReporter = this.subReporters_[j]; 28 | if (subReporter[functionName]) { 29 | subReporter[functionName].apply(subReporter, arguments); 30 | } 31 | } 32 | }; 33 | })(functionName); 34 | } 35 | })(); 36 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/NestedResults.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Holds results for a set of Jasmine spec. Allows for the results array to hold another jasmine.NestedResults 3 | * 4 | * @constructor 5 | */ 6 | jasmine.NestedResults = function() { 7 | /** 8 | * The total count of results 9 | */ 10 | this.totalCount = 0; 11 | /** 12 | * Number of passed results 13 | */ 14 | this.passedCount = 0; 15 | /** 16 | * Number of failed results 17 | */ 18 | this.failedCount = 0; 19 | /** 20 | * Was this suite/spec skipped? 21 | */ 22 | this.skipped = false; 23 | /** 24 | * @ignore 25 | */ 26 | this.items_ = []; 27 | }; 28 | 29 | /** 30 | * Roll up the result counts. 31 | * 32 | * @param result 33 | */ 34 | jasmine.NestedResults.prototype.rollupCounts = function(result) { 35 | this.totalCount += result.totalCount; 36 | this.passedCount += result.passedCount; 37 | this.failedCount += result.failedCount; 38 | }; 39 | 40 | /** 41 | * Adds a log message. 42 | * @param values Array of message parts which will be concatenated later. 43 | */ 44 | jasmine.NestedResults.prototype.log = function(values) { 45 | this.items_.push(new jasmine.MessageResult(values)); 46 | }; 47 | 48 | /** 49 | * Getter for the results: message & results. 50 | */ 51 | jasmine.NestedResults.prototype.getItems = function() { 52 | return this.items_; 53 | }; 54 | 55 | /** 56 | * Adds a result, tracking counts (total, passed, & failed) 57 | * @param {jasmine.ExpectationResult|jasmine.NestedResults} result 58 | */ 59 | jasmine.NestedResults.prototype.addResult = function(result) { 60 | if (result.type != 'log') { 61 | if (result.items_) { 62 | this.rollupCounts(result); 63 | } else { 64 | this.totalCount++; 65 | if (result.passed()) { 66 | this.passedCount++; 67 | } else { 68 | this.failedCount++; 69 | } 70 | } 71 | } 72 | this.items_.push(result); 73 | }; 74 | 75 | /** 76 | * @returns {Boolean} True if everything below passed 77 | */ 78 | jasmine.NestedResults.prototype.passed = function() { 79 | return this.passedCount === this.totalCount; 80 | }; 81 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/Reporter.js: -------------------------------------------------------------------------------- 1 | /** No-op base class for Jasmine reporters. 2 | * 3 | * @constructor 4 | */ 5 | jasmine.Reporter = function() { 6 | }; 7 | 8 | //noinspection JSUnusedLocalSymbols 9 | jasmine.Reporter.prototype.reportRunnerStarting = function(runner) { 10 | }; 11 | 12 | //noinspection JSUnusedLocalSymbols 13 | jasmine.Reporter.prototype.reportRunnerResults = function(runner) { 14 | }; 15 | 16 | //noinspection JSUnusedLocalSymbols 17 | jasmine.Reporter.prototype.reportSuiteResults = function(suite) { 18 | }; 19 | 20 | //noinspection JSUnusedLocalSymbols 21 | jasmine.Reporter.prototype.reportSpecStarting = function(spec) { 22 | }; 23 | 24 | //noinspection JSUnusedLocalSymbols 25 | jasmine.Reporter.prototype.reportSpecResults = function(spec) { 26 | }; 27 | 28 | //noinspection JSUnusedLocalSymbols 29 | jasmine.Reporter.prototype.log = function(str) { 30 | }; 31 | 32 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/Runner.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Runner 3 | * 4 | * @constructor 5 | * @param {jasmine.Env} env 6 | */ 7 | jasmine.Runner = function(env) { 8 | var self = this; 9 | self.env = env; 10 | self.queue = new jasmine.Queue(env); 11 | self.before_ = []; 12 | self.after_ = []; 13 | self.suites_ = []; 14 | }; 15 | 16 | jasmine.Runner.prototype.execute = function() { 17 | var self = this; 18 | if (self.env.reporter.reportRunnerStarting) { 19 | self.env.reporter.reportRunnerStarting(this); 20 | } 21 | self.queue.start(function () { 22 | self.finishCallback(); 23 | }); 24 | }; 25 | 26 | jasmine.Runner.prototype.beforeEach = function(beforeEachFunction) { 27 | beforeEachFunction.typeName = 'beforeEach'; 28 | this.before_.splice(0,0,beforeEachFunction); 29 | }; 30 | 31 | jasmine.Runner.prototype.afterEach = function(afterEachFunction) { 32 | afterEachFunction.typeName = 'afterEach'; 33 | this.after_.splice(0,0,afterEachFunction); 34 | }; 35 | 36 | 37 | jasmine.Runner.prototype.finishCallback = function() { 38 | this.env.reporter.reportRunnerResults(this); 39 | }; 40 | 41 | jasmine.Runner.prototype.addSuite = function(suite) { 42 | this.suites_.push(suite); 43 | }; 44 | 45 | jasmine.Runner.prototype.add = function(block) { 46 | if (block instanceof jasmine.Suite) { 47 | this.addSuite(block); 48 | } 49 | this.queue.add(block); 50 | }; 51 | 52 | jasmine.Runner.prototype.specs = function () { 53 | var suites = this.suites(); 54 | var specs = []; 55 | for (var i = 0; i < suites.length; i++) { 56 | specs = specs.concat(suites[i].specs()); 57 | } 58 | return specs; 59 | }; 60 | 61 | jasmine.Runner.prototype.suites = function() { 62 | return this.suites_; 63 | }; 64 | 65 | jasmine.Runner.prototype.topLevelSuites = function() { 66 | var topLevelSuites = []; 67 | for (var i = 0; i < this.suites_.length; i++) { 68 | if (!this.suites_[i].parentSuite) { 69 | topLevelSuites.push(this.suites_[i]); 70 | } 71 | } 72 | return topLevelSuites; 73 | }; 74 | 75 | jasmine.Runner.prototype.results = function() { 76 | return this.queue.results(); 77 | }; 78 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/Suite.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Internal representation of a Jasmine suite. 3 | * 4 | * @constructor 5 | * @param {jasmine.Env} env 6 | * @param {String} description 7 | * @param {Function} specDefinitions 8 | * @param {jasmine.Suite} parentSuite 9 | */ 10 | jasmine.Suite = function(env, description, specDefinitions, parentSuite) { 11 | var self = this; 12 | self.id = env.nextSuiteId ? env.nextSuiteId() : null; 13 | self.description = description; 14 | self.queue = new jasmine.Queue(env); 15 | self.parentSuite = parentSuite; 16 | self.env = env; 17 | self.before_ = []; 18 | self.after_ = []; 19 | self.children_ = []; 20 | self.suites_ = []; 21 | self.specs_ = []; 22 | }; 23 | 24 | jasmine.Suite.prototype.getFullName = function() { 25 | var fullName = this.description; 26 | for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { 27 | fullName = parentSuite.description + ' ' + fullName; 28 | } 29 | return fullName; 30 | }; 31 | 32 | jasmine.Suite.prototype.finish = function(onComplete) { 33 | this.env.reporter.reportSuiteResults(this); 34 | this.finished = true; 35 | if (typeof(onComplete) == 'function') { 36 | onComplete(); 37 | } 38 | }; 39 | 40 | jasmine.Suite.prototype.beforeEach = function(beforeEachFunction) { 41 | beforeEachFunction.typeName = 'beforeEach'; 42 | this.before_.unshift(beforeEachFunction); 43 | }; 44 | 45 | jasmine.Suite.prototype.afterEach = function(afterEachFunction) { 46 | afterEachFunction.typeName = 'afterEach'; 47 | this.after_.unshift(afterEachFunction); 48 | }; 49 | 50 | jasmine.Suite.prototype.results = function() { 51 | return this.queue.results(); 52 | }; 53 | 54 | jasmine.Suite.prototype.add = function(suiteOrSpec) { 55 | this.children_.push(suiteOrSpec); 56 | if (suiteOrSpec instanceof jasmine.Suite) { 57 | this.suites_.push(suiteOrSpec); 58 | this.env.currentRunner().addSuite(suiteOrSpec); 59 | } else { 60 | this.specs_.push(suiteOrSpec); 61 | } 62 | this.queue.add(suiteOrSpec); 63 | }; 64 | 65 | jasmine.Suite.prototype.specs = function() { 66 | return this.specs_; 67 | }; 68 | 69 | jasmine.Suite.prototype.suites = function() { 70 | return this.suites_; 71 | }; 72 | 73 | jasmine.Suite.prototype.children = function() { 74 | return this.children_; 75 | }; 76 | 77 | jasmine.Suite.prototype.execute = function(onComplete) { 78 | var self = this; 79 | this.queue.start(function () { 80 | self.finish(onComplete); 81 | }); 82 | }; 83 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/WaitsBlock.js: -------------------------------------------------------------------------------- 1 | jasmine.WaitsBlock = function(env, timeout, spec) { 2 | this.timeout = timeout; 3 | jasmine.Block.call(this, env, null, spec); 4 | }; 5 | 6 | jasmine.util.inherit(jasmine.WaitsBlock, jasmine.Block); 7 | 8 | jasmine.WaitsBlock.prototype.execute = function (onComplete) { 9 | if (jasmine.VERBOSE) { 10 | this.env.reporter.log('>> Jasmine waiting for ' + this.timeout + ' ms...'); 11 | } 12 | this.env.setTimeout(function () { 13 | onComplete(); 14 | }, this.timeout); 15 | }; 16 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/WaitsForBlock.js: -------------------------------------------------------------------------------- 1 | /** 2 | * A block which waits for some condition to become true, with timeout. 3 | * 4 | * @constructor 5 | * @extends jasmine.Block 6 | * @param {jasmine.Env} env The Jasmine environment. 7 | * @param {Number} timeout The maximum time in milliseconds to wait for the condition to become true. 8 | * @param {Function} latchFunction A function which returns true when the desired condition has been met. 9 | * @param {String} message The message to display if the desired condition hasn't been met within the given time period. 10 | * @param {jasmine.Spec} spec The Jasmine spec. 11 | */ 12 | jasmine.WaitsForBlock = function(env, timeout, latchFunction, message, spec) { 13 | this.timeout = timeout || env.defaultTimeoutInterval; 14 | this.latchFunction = latchFunction; 15 | this.message = message; 16 | this.totalTimeSpentWaitingForLatch = 0; 17 | jasmine.Block.call(this, env, null, spec); 18 | }; 19 | jasmine.util.inherit(jasmine.WaitsForBlock, jasmine.Block); 20 | 21 | jasmine.WaitsForBlock.TIMEOUT_INCREMENT = 10; 22 | 23 | jasmine.WaitsForBlock.prototype.execute = function(onComplete) { 24 | if (jasmine.VERBOSE) { 25 | this.env.reporter.log('>> Jasmine waiting for ' + (this.message || 'something to happen')); 26 | } 27 | var latchFunctionResult; 28 | try { 29 | latchFunctionResult = this.latchFunction.apply(this.spec); 30 | } catch (e) { 31 | this.spec.fail(e); 32 | onComplete(); 33 | return; 34 | } 35 | 36 | if (latchFunctionResult) { 37 | onComplete(); 38 | } else if (this.totalTimeSpentWaitingForLatch >= this.timeout) { 39 | var message = 'timed out after ' + this.timeout + ' msec waiting for ' + (this.message || 'something to happen'); 40 | this.spec.fail({ 41 | name: 'timeout', 42 | message: message 43 | }); 44 | 45 | this.abort = true; 46 | onComplete(); 47 | } else { 48 | this.totalTimeSpentWaitingForLatch += jasmine.WaitsForBlock.TIMEOUT_INCREMENT; 49 | var self = this; 50 | this.env.setTimeout(function() { 51 | self.execute(onComplete); 52 | }, jasmine.WaitsForBlock.TIMEOUT_INCREMENT); 53 | } 54 | }; 55 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/core/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @namespace 3 | */ 4 | jasmine.util = {}; 5 | 6 | /** 7 | * Declare that a child class inherit it's prototype from the parent class. 8 | * 9 | * @private 10 | * @param {Function} childClass 11 | * @param {Function} parentClass 12 | */ 13 | jasmine.util.inherit = function(childClass, parentClass) { 14 | /** 15 | * @private 16 | */ 17 | var subclass = function() { 18 | }; 19 | subclass.prototype = parentClass.prototype; 20 | childClass.prototype = new subclass(); 21 | }; 22 | 23 | jasmine.util.formatException = function(e) { 24 | var lineNumber; 25 | if (e.line) { 26 | lineNumber = e.line; 27 | } 28 | else if (e.lineNumber) { 29 | lineNumber = e.lineNumber; 30 | } 31 | 32 | var file; 33 | 34 | if (e.sourceURL) { 35 | file = e.sourceURL; 36 | } 37 | else if (e.fileName) { 38 | file = e.fileName; 39 | } 40 | 41 | var message = (e.name && e.message) ? (e.name + ': ' + e.message) : e.toString(); 42 | 43 | if (file && lineNumber) { 44 | message += ' in ' + file + ' (line ' + lineNumber + ')'; 45 | } 46 | 47 | return message; 48 | }; 49 | 50 | jasmine.util.htmlEscape = function(str) { 51 | if (!str) return str; 52 | return str.replace(/&/g, '&') 53 | .replace(//g, '>'); 55 | }; 56 | 57 | jasmine.util.argsToArray = function(args) { 58 | var arrayOfArgs = []; 59 | for (var i = 0; i < args.length; i++) arrayOfArgs.push(args[i]); 60 | return arrayOfArgs; 61 | }; 62 | 63 | jasmine.util.extend = function(destination, source) { 64 | for (var property in source) destination[property] = source[property]; 65 | return destination; 66 | }; 67 | 68 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/html/HtmlReporterHelpers.js: -------------------------------------------------------------------------------- 1 | jasmine.HtmlReporterHelpers = {}; 2 | 3 | jasmine.HtmlReporterHelpers.createDom = function(type, attrs, childrenVarArgs) { 4 | var el = document.createElement(type); 5 | 6 | for (var i = 2; i < arguments.length; i++) { 7 | var child = arguments[i]; 8 | 9 | if (typeof child === 'string') { 10 | el.appendChild(document.createTextNode(child)); 11 | } else { 12 | if (child) { 13 | el.appendChild(child); 14 | } 15 | } 16 | } 17 | 18 | for (var attr in attrs) { 19 | if (attr == "className") { 20 | el[attr] = attrs[attr]; 21 | } else { 22 | el.setAttribute(attr, attrs[attr]); 23 | } 24 | } 25 | 26 | return el; 27 | }; 28 | 29 | jasmine.HtmlReporterHelpers.getSpecStatus = function(child) { 30 | var results = child.results(); 31 | var status = results.passed() ? 'passed' : 'failed'; 32 | if (results.skipped) { 33 | status = 'skipped'; 34 | } 35 | 36 | return status; 37 | }; 38 | 39 | jasmine.HtmlReporterHelpers.appendToSummary = function(child, childElement) { 40 | var parentDiv = this.dom.summary; 41 | var parentSuite = (typeof child.parentSuite == 'undefined') ? 'suite' : 'parentSuite'; 42 | var parent = child[parentSuite]; 43 | 44 | if (parent) { 45 | if (typeof this.views.suites[parent.id] == 'undefined') { 46 | this.views.suites[parent.id] = new jasmine.HtmlReporter.SuiteView(parent, this.dom, this.views); 47 | } 48 | parentDiv = this.views.suites[parent.id].element; 49 | } 50 | 51 | parentDiv.appendChild(childElement); 52 | }; 53 | 54 | 55 | jasmine.HtmlReporterHelpers.addHelpers = function(ctor) { 56 | for(var fn in jasmine.HtmlReporterHelpers) { 57 | ctor.prototype[fn] = jasmine.HtmlReporterHelpers[fn]; 58 | } 59 | }; 60 | 61 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/html/SuiteView.js: -------------------------------------------------------------------------------- 1 | jasmine.HtmlReporter.SuiteView = function(suite, dom, views) { 2 | this.suite = suite; 3 | this.dom = dom; 4 | this.views = views; 5 | 6 | this.element = this.createDom('div', { className: 'suite' }, 7 | this.createDom('a', { className: 'description', href: jasmine.HtmlReporter.sectionLink(this.suite.getFullName()) }, this.suite.description) 8 | ); 9 | 10 | this.appendToSummary(this.suite, this.element); 11 | }; 12 | 13 | jasmine.HtmlReporter.SuiteView.prototype.status = function() { 14 | return this.getSpecStatus(this.suite); 15 | }; 16 | 17 | jasmine.HtmlReporter.SuiteView.prototype.refresh = function() { 18 | this.element.className += " " + this.status(); 19 | }; 20 | 21 | jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SuiteView); 22 | 23 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/html/jasmine.scss: -------------------------------------------------------------------------------- 1 | @import "HTMLReporter"; 2 | @import "TrivialReporter"; -------------------------------------------------------------------------------- /bower_components/jasmine/src/templates/example_project_jasmine_tags.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/templates/version.js.erb: -------------------------------------------------------------------------------- 1 | 2 | jasmine.version_= { 3 | "major": <%= major %>, 4 | "minor": <%= minor %>, 5 | "build": <%= build %>, 6 | "revision": <%= revision %><%= %Q{,\n "release_candidate": #{release_candidate}} if release_candidate %> 7 | }; 8 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/templates/version.rb.erb: -------------------------------------------------------------------------------- 1 | module Jasmine 2 | module Core 3 | VERSION = "<%= "#{major}.#{minor}.#{build}" %><%= ".rc#{release_candidate}" if release_candidate %>" 4 | end 5 | end 6 | 7 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/version.js: -------------------------------------------------------------------------------- 1 | 2 | jasmine.version_= { 3 | "major": 1, 4 | "minor": 3, 5 | "build": 1, 6 | "revision": 1354556913 7 | }; 8 | -------------------------------------------------------------------------------- /bower_components/jasmine/src/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "major": 1, 3 | "minor": 3, 4 | "build": 1 5 | } 6 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/docs.rb: -------------------------------------------------------------------------------- 1 | desc "Build jasmine documentation" 2 | task :doc => :require_pages_submodule do 3 | puts 'Creating Jasmine Documentation' 4 | require 'rubygems' 5 | require 'jsdoc_helper' 6 | 7 | FileUtils.rm_r "pages/jsdoc", :force => true 8 | 9 | JsdocHelper::Rake::Task.new(:lambda_jsdoc) do |t| 10 | t[:files] = core_sources + html_sources + console_sources 11 | t[:options] = "-a" 12 | t[:out] = "pages/jsdoc" 13 | # JsdocHelper bug: template must be relative to the JsdocHelper gem, ick 14 | t[:template] = File.join("../".*(100), Dir::getwd, "jsdoc-template") 15 | end 16 | Rake::Task[:lambda_jsdoc].invoke 17 | end 18 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev.rb: -------------------------------------------------------------------------------- 1 | require 'thor' 2 | require 'json' 3 | require 'tilt' 4 | require 'ostruct' 5 | 6 | $:.unshift(File.join(File.dirname(__FILE__), "jasmine_dev")) 7 | 8 | require "base" 9 | require "sources" 10 | require "js_hint" 11 | require "build_distribution" 12 | require "build_github_pages" 13 | require "build_standalone_distribution" 14 | require "build_standalone_runner" 15 | require "count_specs" 16 | require "execute_specs" 17 | require "release" 18 | require "version" -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/base.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | include Thor::Actions 3 | 4 | def self.source_root 5 | File.dirname(__FILE__) 6 | end 7 | 8 | def self.source_paths 9 | [ 10 | File.join(JasmineDev.project_root, 'lib', 'jasmine-core'), 11 | JasmineDev.project_root 12 | ] 13 | end 14 | 15 | def self.project_root 16 | File.join(JasmineDev.source_root, '..', '..') 17 | end 18 | 19 | def self.spacer 20 | "\n--------------------" 21 | end 22 | 23 | no_tasks do 24 | # allows merged stdout in test with low-harassment 25 | def run_with_output(*run_args) 26 | say run *run_args 27 | end 28 | 29 | def node_installed? 30 | return true if has_node? 31 | 32 | say "Node.js is required to develop Jasmine. Please visit http://nodejs.org to install.", 33 | :red 34 | false 35 | end 36 | 37 | def has_node? 38 | run "which node", :verbose => false, :capture => true 39 | $?.exitstatus == 0 40 | end 41 | 42 | def pages_submodule_installed? 43 | return true if has_pages_submodule? 44 | 45 | say "Submodule for Github Pages isn't present. Run git submodule update --init", 46 | :red 47 | false 48 | end 49 | 50 | def has_pages_submodule? 51 | File.exist?(File.join(JasmineDev.project_root, 'pages', 'index.html')) 52 | end 53 | end 54 | end 55 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/build_distribution.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc "build_distribution", "Build Jasmine js & css files" 4 | def build_distribution(directory = "./lib/jasmine-core") 5 | invoke :js_hint 6 | 7 | say JasmineDev.spacer 8 | 9 | say "Building Jasmine distribution from source into #{directory}", :cyan 10 | 11 | say 'Building JavaScript...', :yellow 12 | 13 | inside directory do 14 | create_file "jasmine.js", 15 | concat_contents_of(jasmine_js_paths), 16 | :force => true 17 | create_file "jasmine-html.js", 18 | concat_contents_of(jasmine_html_js_paths), 19 | :force => true 20 | end 21 | 22 | say 'Building CSS...', :yellow 23 | 24 | run "compass compile", :capture => true 25 | 26 | copy_file File.join("#{JasmineDev.project_root}", 'src', 'html', 'jasmine.css'), 27 | File.join(directory, 'jasmine.css') 28 | end 29 | 30 | no_tasks do 31 | def jasmine_js_paths 32 | paths = JasmineDev::JASMINE_SOURCES[:core].collect do |f| 33 | File.join(JasmineDev.project_root, 'src', 'core', f) 34 | end 35 | 36 | paths << File.join(JasmineDev.project_root, 'src', 'version.js') 37 | paths 38 | end 39 | 40 | def jasmine_html_js_paths 41 | JasmineDev::JASMINE_SOURCES[:html].collect do |f| 42 | File.join(JasmineDev.project_root, 'src', 'html', f) 43 | end 44 | end 45 | 46 | def concat_contents_of(paths) 47 | paths.inject("") do |string, path| 48 | string << File.read(path) 49 | string 50 | end 51 | end 52 | end 53 | end -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/build_github_pages.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc "build_github_pages", "Build static pages for pivotal.github.com/jasmine" 4 | def build_github_pages(pages_dir = File.expand_path(File.join('.', 'pages'))) 5 | say JasmineDev.spacer 6 | 7 | say "Building Github Pages...", :cyan 8 | 9 | return unless pages_submodule_installed? 10 | 11 | project_lib_dir = File.join(JasmineDev.project_root, 'lib', 'jasmine-core') 12 | 13 | pages_lib_dir = File.join(pages_dir, 'lib') 14 | FileUtils.rm_r(pages_lib_dir) if File.exist?(pages_lib_dir) 15 | 16 | ['jasmine.js', 'jasmine-html.js', 'jasmine.css'].each do |file| 17 | copy_file File.join(project_lib_dir, file), File.join(pages_lib_dir, file) 18 | end 19 | 20 | inside File.join(JasmineDev.project_root, 'pages', 'src') do 21 | run_with_output "bundle exec rocco -l js introduction.js -t layout.mustache -o #{pages_dir}" 22 | end 23 | 24 | inside pages_dir do 25 | copy_file File.join(pages_dir,'introduction.html'), File.join(pages_dir,'index.html') 26 | end 27 | end 28 | end -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/build_standalone_distribution.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | include Thor::Actions 3 | 4 | desc "build_standalone_distribution", "Build Jasmine standalone distribution" 5 | def build_standalone_distribution(download_dir = File.expand_path(File.join('.', 'pages', 'downloads'))) 6 | invoke :build_distribution 7 | 8 | say JasmineDev.spacer 9 | 10 | say "Building standalone distribution...", :cyan 11 | 12 | say "Staging files...", :yellow 13 | 14 | lib_files.each do |f| 15 | copy_file f, File.join(standalone_temp_dir, 'lib', "jasmine-#{version_string}", f) 16 | end 17 | 18 | ['src', 'spec'].each do |dir| 19 | directory File.join('lib', 'jasmine-core', 'example', dir), 20 | File.join(standalone_temp_dir, dir) 21 | end 22 | 23 | invoke :build_standalone_runner 24 | 25 | say "Zipping distribution...", :yellow 26 | 27 | inside standalone_temp_dir do 28 | run_with_output "zip -rq ../jasmine-standalone-#{version_string}.zip ." 29 | 30 | say "Copying Zip file to downloads directory", :yellow 31 | run "mkdir -p #{download_dir}" 32 | run "cp ../jasmine-standalone-#{version_string}.zip #{download_dir}/" 33 | end 34 | 35 | end 36 | 37 | no_tasks do 38 | def standalone_temp_dir 39 | @standalone_temp_dir ||= File.join(Dir.tmpdir, 'jasmine_standalone', "jasmine-standalone-#{version_string}") 40 | end 41 | 42 | def lib_files 43 | %w{ jasmine.js jasmine-html.js jasmine.css MIT.LICENSE } 44 | end 45 | 46 | def example_path 47 | File.join('lib', "jasmine-#{version_string}") 48 | end 49 | end 50 | end 51 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/build_standalone_runner.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | include Thor::Actions 3 | 4 | desc "build_standalone_runner", "Build HTML spec runner for Jasmine standalone distribution" 5 | 6 | def build_standalone_runner 7 | say JasmineDev.spacer 8 | 9 | say "Building standalone runner HTML...", :cyan 10 | 11 | create_file File.join(standalone_temp_dir, 'SpecRunner.html') do 12 | template = Tilt.new(File.join('spec', 'templates','runner.html.erb')) 13 | 14 | scope = OpenStruct.new(:title => "Jasmine Spec Runner", 15 | :favicon => example_favicon, 16 | :jasmine_tags => example_jasmine_tags, 17 | :source_tags => example_source_tags, 18 | :spec_file_tags => example_spec_tags) 19 | template.render(scope) 20 | end 21 | end 22 | 23 | no_tasks do 24 | def standalone_temp_dir 25 | @standalone_temp_dir ||= File.join(Dir.tmpdir, 'jasmine_standalone', "jasmine-standalone-#{version_string}") 26 | end 27 | 28 | def example_path 29 | File.join('lib', "jasmine-#{version_string}") 30 | end 31 | 32 | def example_favicon 33 | %Q{} 34 | end 35 | 36 | def script_tags_for(files) 37 | srcs = (files.is_a?(String) ? [files] : files) 38 | srcs.inject([]) do |tags, file| 39 | tags << %Q{} 40 | tags 41 | end.join("\n ") 42 | end 43 | 44 | def example_jasmine_tags 45 | tags = %Q{} 46 | tags << "\n " 47 | tags << script_tags_for(["#{example_path}/jasmine.js", "#{example_path}/jasmine-html.js"]) 48 | tags 49 | end 50 | 51 | def example_source_tags 52 | script_tags_for ['src/Player.js', 'src/Song.js'] 53 | end 54 | 55 | def example_spec_tags 56 | script_tags_for ['spec/SpecHelper.js', 'spec/PlayerSpec.js'] 57 | end 58 | end 59 | end 60 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/count_specs.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc "count_specs", "Count the number of specs for each test runner" 4 | def count_specs 5 | say JasmineDev.spacer 6 | say "Counting specs...", :cyan 7 | 8 | core_spec_count = count_specs_in(File.join('spec', 'core')) 9 | console_spec_count = count_specs_in(File.join('spec', 'console')) 10 | html_spec_count = count_specs_in(File.join('spec', 'html')) 11 | 12 | say "#{(core_spec_count + console_spec_count).to_s} ", :yellow 13 | say "specs for Node.js runner (exclude DOM-related specs)" 14 | say "#{(core_spec_count + console_spec_count + html_spec_count).to_s} ", :yellow 15 | say "specs for Browser runner (all specs)" 16 | say "\n" 17 | say "Please verify that these numbers match the runner output." 18 | end 19 | 20 | no_tasks do 21 | def count_specs_in(relative_path) 22 | files = Dir.glob(File.join(JasmineDev.project_root, relative_path, '*.js')) 23 | files.inject(0) do |count, file| 24 | File.read(file).scan(/\sit\s*\(/) { |s| count += 1 } 25 | count 26 | end 27 | end 28 | end 29 | end -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/execute_specs.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc "execute_specs_in_node", "Run all relevant specs in Node.js" 4 | 5 | def execute_specs_in_node 6 | return unless node_installed? 7 | 8 | invoke :build_distribution 9 | invoke :count_specs 10 | 11 | say JasmineDev.spacer 12 | 13 | say "Running all appropriate specs via Node.js...", :cyan 14 | 15 | with_color_option = STDOUT.isatty ? "--color" : "--noColor" 16 | 17 | run_with_output "node spec/node_suite.js #{with_color_option}", :capture => true 18 | end 19 | 20 | desc "execute_specs_in_browser", "Run all relevent specs in your default browser" 21 | 22 | def execute_specs_in_browser 23 | invoke :build_distribution 24 | invoke :count_specs 25 | 26 | say JasmineDev.spacer 27 | 28 | say "Running all appropriate specs via the default web browser...", :cyan 29 | 30 | open_specs_in_browser 31 | end 32 | 33 | desc "execute_specs", "Run all of Jasmine's JavaScript specs" 34 | 35 | def execute_specs 36 | invoke :execute_specs_in_node 37 | invoke :execute_specs_in_browser 38 | end 39 | 40 | no_tasks do 41 | def open_specs_in_browser 42 | require 'rbconfig' 43 | 44 | case Object.const_get(defined?(RbConfig) ? :RbConfig : :Config)::CONFIG['host_os'] 45 | when /linux/ 46 | run "xdg-open spec/runner.html" 47 | else 48 | run "open spec/runner.html" 49 | end 50 | end 51 | end 52 | end 53 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/js_hint.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc "js_hint", "Run Jasmine source through JSHint" 4 | def js_hint 5 | say JasmineDev.spacer 6 | 7 | return unless node_installed? 8 | 9 | say "Running JSHint on Jasmine source and specs...", :cyan 10 | 11 | run_with_output "node jshint/run.js", :capture => true 12 | end 13 | end -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/release.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc 'release_prep', "Update version and build distributions" 4 | def release_prep 5 | say JasmineDev.spacer 6 | 7 | say "Building Release...", :cyan 8 | 9 | return unless pages_submodule_installed? 10 | 11 | invoke :write_version_files 12 | invoke :build_distribution 13 | invoke :build_standalone_distribution 14 | invoke :build_github_pages 15 | end 16 | end -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/sources.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | JASMINE_SOURCES = { 3 | :core => [ 4 | "base.js", 5 | "util.js", 6 | "Env.js", 7 | "Reporter.js", 8 | "Block.js", 9 | "JsApiReporter.js", 10 | "Matchers.js", 11 | "mock-timeout.js", 12 | "MultiReporter.js", 13 | "NestedResults.js", 14 | "PrettyPrinter.js", 15 | "Queue.js", 16 | "Runner.js", 17 | "Spec.js", 18 | "Suite.js", 19 | "WaitsBlock.js", 20 | "WaitsForBlock.js" 21 | ], 22 | 23 | :html => [ 24 | "HtmlReporterHelpers.js", 25 | "HtmlReporter.js", 26 | "ReporterView.js", 27 | "SpecView.js", 28 | "SuiteView.js", 29 | "TrivialReporter.js" 30 | ] 31 | } 32 | end 33 | -------------------------------------------------------------------------------- /bower_components/jasmine/tasks/jasmine_dev/version.rb: -------------------------------------------------------------------------------- 1 | class JasmineDev < Thor 2 | 3 | desc "write_version_files", "Write out version files" 4 | 5 | def write_version_files 6 | say JasmineDev.spacer 7 | 8 | say "Building version files", :cyan 9 | 10 | scope = OpenStruct.new(:major => version_object["major"], 11 | :minor => version_object["minor"], 12 | :build => version_object["build"], 13 | :release_candidate => version_object["release_candidate"], 14 | :revision => Time.now.to_i) 15 | 16 | js_template = Tilt.new(File.join(JasmineDev.project_root, 'src', 'templates', 'version.js.erb')) 17 | create_file File.join(JasmineDev.project_root, 'src', 'version.js'), :force => true do 18 | js_template.render(scope) 19 | end 20 | 21 | rb_template = Tilt.new(File.join(JasmineDev.project_root, 'src', 'templates', 'version.rb.erb')) 22 | 23 | create_file File.join(JasmineDev.project_root, 'lib', 'jasmine-core', 'version.rb'), :force => true do 24 | rb_template.render(scope) 25 | end 26 | end 27 | 28 | desc "display_version", "Display version currently stored in source" 29 | 30 | def display_version 31 | 32 | say "Current version information from src/version.json", :cyan 33 | 34 | say "Display version: " 35 | say "#{version_string}", :yellow 36 | 37 | say "Version object: " 38 | say "#{version_object_old}", :yellow 39 | end 40 | 41 | no_tasks do 42 | def version 43 | @version ||= File.read(File.join(JasmineDev.project_root, 'src', 'version.json')) 44 | end 45 | 46 | def version_string 47 | display = "#{version_object['major']}.#{version_object['minor']}.#{version_object['build']}" 48 | display += ".rc#{version_object['release_candidate']}" if version_object['release_candidate'] 49 | display 50 | end 51 | 52 | def version_object 53 | @version_object ||= JSON.parse(version) 54 | end 55 | 56 | def version_object_old 57 | version.gsub("\n", " "). 58 | gsub(/\s+/, " "). 59 | gsub(/\}\s+$/, "}") 60 | end 61 | end 62 | end -------------------------------------------------------------------------------- /bower_components/sinon/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sinon", 3 | "homepage": "https://github.com/cjohansen/Sinon.JS", 4 | "version": "1.15.0", 5 | "_release": "1.15.0", 6 | "_resolution": { 7 | "type": "version", 8 | "tag": "v1.15.0", 9 | "commit": "34906cc91bd04211831f0b9c2a441d4579530993" 10 | }, 11 | "_source": "git://github.com/cjohansen/Sinon.JS.git", 12 | "_target": "^1.9.0", 13 | "_originalSource": "sinon" 14 | } -------------------------------------------------------------------------------- /bower_components/sinon/.editorconfig: -------------------------------------------------------------------------------- 1 | ; EditorConfig file: http://EditorConfig.org 2 | ; Install the "EditorConfig" plugin into your editor to use 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | end_of_line = lf 9 | insert_final_newline = true 10 | indent_style = space 11 | indent_size = 4 12 | trim_trailing_whitespace = true 13 | 14 | # Matches the exact files either package.json or .travis.yml 15 | [{package.json, .travis.yml}] 16 | indent_style = space 17 | indent_size = 2 18 | -------------------------------------------------------------------------------- /bower_components/sinon/.gitignore: -------------------------------------------------------------------------------- 1 | pkg 2 | node_modules 3 | coverage/ 4 | -------------------------------------------------------------------------------- /bower_components/sinon/.jscsrc: -------------------------------------------------------------------------------- 1 | // should allow comments in this type of config 2 | { 3 | "excludeFiles": [ 4 | "node_modules/**", 5 | "build/*", 6 | "coverage/*", 7 | "pkg/*" 8 | ], 9 | "preset": "crockford", 10 | 11 | // Sinon specific overrides 12 | "validateQuoteMarks" : "\"", 13 | "requireMultipleVarDecl" : null 14 | } 15 | -------------------------------------------------------------------------------- /bower_components/sinon/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.6" 4 | - "0.8" 5 | - "0.10" 6 | - "0.12" 7 | 8 | sudo: false 9 | 10 | before_install: 11 | - npm config set strict-ssl false 12 | # use a more modern npm than ships with 0.6 and 0.8 13 | - 'if [ "x$TRAVIS_NODE_VERSION" = "x0.6" ]; then npm install -g npm@1.3; fi' 14 | - 'if [ "x$TRAVIS_NODE_VERSION" = "x0.8" ]; then npm install -g npm@1.4; fi' 15 | 16 | before_script: 17 | - rvm install 2.2.0 18 | - rvm use 2.2.0 --default 19 | - gem install juicer 20 | # we only need to run jscs once per build, so let's conserve a few resources 21 | - 'if [ "x$TRAVIS_NODE_VERSION" = "x0.12" ]; then $(npm bin)/jscs .; fi' 22 | 23 | script: 24 | - ./scripts/ci-test.sh 25 | 26 | git: 27 | depth: 10 28 | -------------------------------------------------------------------------------- /bower_components/sinon/LICENSE: -------------------------------------------------------------------------------- 1 | (The BSD License) 2 | 3 | Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without modification, 7 | are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, 10 | this list of conditions and the following disclaimer. 11 | * Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | * Neither the name of Christian Johansen nor the names of his contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /bower_components/sinon/README.md: -------------------------------------------------------------------------------- 1 | # Sinon.JS 2 | 3 | [![Build status](https://secure.travis-ci.org/cjohansen/Sinon.JS.svg?branch=master)](http://travis-ci.org/cjohansen/Sinon.JS) 4 | 5 | Standalone and test framework agnostic JavaScript test spies, stubs and mocks. 6 | 7 | ## Installation 8 | 9 | via [npm (node package manager)](http://github.com/isaacs/npm) 10 | 11 | $ npm install sinon 12 | 13 | via [NuGet (package manager for Microsoft development platform)](https://www.nuget.org/packages/SinonJS) 14 | 15 | Install-Package SinonJS 16 | 17 | or install via git by cloning the repository and including sinon.js 18 | in your project, as you would any other third party library. 19 | 20 | Don't forget to include the parts of Sinon.JS that you want to use as well 21 | (i.e. spy.js). 22 | 23 | ## Usage 24 | 25 | See the [sinon project homepage](http://sinonjs.org/) for documentation on usage. 26 | 27 | If you have questions that are not covered by the documentation, please post them to the [Sinon.JS mailinglist](http://groups.google.com/group/sinonjs) or drop by #sinon.js on irc.freenode.net:6667 28 | 29 | ### Important: AMD needs pre-built version 30 | 31 | Sinon.JS *as source* **doesn't work with AMD loaders** (when they're asynchronous, like loading via script tags in the browser). For that you will have to use a pre-built version. You can either [build it yourself](CONTRIBUTING.md#testing-a-built-version) or get a numbered version from http://sinonjs.org. 32 | 33 | This might or might not change in future versions, depending of outcome of investigations. Please don't report this as a bug, just use pre-built versions. 34 | 35 | ## Goals 36 | 37 | * No global pollution 38 | * Easy to use 39 | * Require minimal “integration” 40 | * Easy to embed seamlessly with any testing framework 41 | * Easily fake any interface 42 | * Ship with ready-to-use fakes for XMLHttpRequest, timers and more 43 | 44 | ## Contribute? 45 | 46 | See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how you can contribute to Sinon.JS 47 | -------------------------------------------------------------------------------- /bower_components/sinon/RELEASE.md: -------------------------------------------------------------------------------- 1 | # Rolling Sinon releases 2 | 3 | You'll need a working installation of [git-extras](https://github.com/tj/git-extras) for this. 4 | 5 | ## Update Changelog.txt 6 | 7 | Compile interesting highlights from [`git changelog`](https://github.com/tj/git-extras/blob/master/Commands.md#git-changelog) into Changelog.md 8 | 9 | git changelog --no-merges 10 | 11 | ## Update AUTHORS 12 | 13 | git authors --list > AUTHORS 14 | 15 | ## Create a new version 16 | 17 | Update package.json and create a new tag. 18 | 19 | ``` 20 | $ npm version x.y.z 21 | ``` 22 | 23 | ## Publish to NPM 24 | 25 | ``` 26 | $ npm publish 27 | ``` 28 | 29 | ## Update static site 30 | 31 | ### Copy files into the static site 32 | 33 | cp Changelog.txt ../sinon-docs/resources/public/. 34 | cp pkg/* ../sinon-docs/resources/public/releases/. 35 | 36 | ### Publish the site 37 | 38 | cd ../sinon-docs && ./publish.sh 39 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sinon core utilities. For internal use only. 3 | * 4 | * @author Christian Johansen (christian@cjohansen.no) 5 | * @license BSD 6 | * 7 | * Copyright (c) 2010-2013 Christian Johansen 8 | */ 9 | "use strict"; 10 | 11 | var sinon = (function () { 12 | var sinon; 13 | var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; 14 | var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; 15 | 16 | function loadDependencies(require, exports, module) { 17 | sinon = module.exports = require("./sinon/util/core"); 18 | require("./sinon/extend"); 19 | require("./sinon/typeOf"); 20 | require("./sinon/times_in_words"); 21 | require("./sinon/spy"); 22 | require("./sinon/call"); 23 | require("./sinon/behavior"); 24 | require("./sinon/stub"); 25 | require("./sinon/mock"); 26 | require("./sinon/collection"); 27 | require("./sinon/assert"); 28 | require("./sinon/sandbox"); 29 | require("./sinon/test"); 30 | require("./sinon/test_case"); 31 | require("./sinon/match"); 32 | require("./sinon/format"); 33 | require("./sinon/log_error"); 34 | } 35 | 36 | if (isAMD) { 37 | define(loadDependencies); 38 | } else if (isNode) { 39 | loadDependencies(require, module.exports, module); 40 | sinon = module.exports; 41 | } else { 42 | sinon = {}; 43 | } 44 | 45 | return sinon; 46 | }()); 47 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/log_error.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @depend util/core.js 3 | */ 4 | /** 5 | * Logs errors 6 | * 7 | * @author Christian Johansen (christian@cjohansen.no) 8 | * @license BSD 9 | * 10 | * Copyright (c) 2010-2014 Christian Johansen 11 | */ 12 | "use strict"; 13 | 14 | (function (sinon) { 15 | // cache a reference to setTimeout, so that our reference won't be stubbed out 16 | // when using fake timers and errors will still get logged 17 | // https://github.com/cjohansen/Sinon.JS/issues/381 18 | var realSetTimeout = setTimeout; 19 | 20 | function makeApi(sinon) { 21 | 22 | function log() {} 23 | 24 | function logError(label, err) { 25 | var msg = label + " threw exception: "; 26 | 27 | sinon.log(msg + "[" + err.name + "] " + err.message); 28 | 29 | if (err.stack) { 30 | sinon.log(err.stack); 31 | } 32 | 33 | logError.setTimeout(function () { 34 | err.message = msg + err.message; 35 | throw err; 36 | }, 0); 37 | }; 38 | 39 | // wrap realSetTimeout with something we can stub in tests 40 | logError.setTimeout = function (func, timeout) { 41 | realSetTimeout(func, timeout); 42 | } 43 | 44 | var exports = {}; 45 | exports.log = sinon.log = log; 46 | exports.logError = sinon.logError = logError; 47 | 48 | return exports; 49 | } 50 | 51 | function loadDependencies(require, exports, module) { 52 | var sinon = require("./util/core"); 53 | module.exports = makeApi(sinon); 54 | } 55 | 56 | var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; 57 | var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; 58 | 59 | if (isAMD) { 60 | define(loadDependencies); 61 | } else if (isNode) { 62 | loadDependencies(require, module.exports, module); 63 | } else if (!sinon) { 64 | return; 65 | } else { 66 | makeApi(sinon); 67 | } 68 | }(typeof sinon == "object" && sinon || null)); 69 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/times_in_words.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @depend util/core.js 3 | */ 4 | "use strict"; 5 | 6 | (function (sinon) { 7 | function makeApi(sinon) { 8 | 9 | function timesInWords(count) { 10 | switch (count) { 11 | case 1: 12 | return "once"; 13 | case 2: 14 | return "twice"; 15 | case 3: 16 | return "thrice"; 17 | default: 18 | return (count || 0) + " times"; 19 | } 20 | } 21 | 22 | sinon.timesInWords = timesInWords; 23 | return sinon.timesInWords; 24 | } 25 | 26 | function loadDependencies(require, exports, module) { 27 | var sinon = require("./util/core"); 28 | module.exports = makeApi(sinon); 29 | } 30 | 31 | var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; 32 | var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; 33 | 34 | if (isAMD) { 35 | define(loadDependencies); 36 | } else if (isNode) { 37 | loadDependencies(require, module.exports, module); 38 | } else if (!sinon) { 39 | return; 40 | } else { 41 | makeApi(sinon); 42 | } 43 | }(typeof sinon == "object" && sinon || null)); 44 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/typeOf.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @depend util/core.js 3 | */ 4 | /** 5 | * Format functions 6 | * 7 | * @author Christian Johansen (christian@cjohansen.no) 8 | * @license BSD 9 | * 10 | * Copyright (c) 2010-2014 Christian Johansen 11 | */ 12 | "use strict"; 13 | 14 | (function (sinon, formatio) { 15 | function makeApi(sinon) { 16 | function typeOf(value) { 17 | if (value === null) { 18 | return "null"; 19 | } else if (value === undefined) { 20 | return "undefined"; 21 | } 22 | var string = Object.prototype.toString.call(value); 23 | return string.substring(8, string.length - 1).toLowerCase(); 24 | }; 25 | 26 | sinon.typeOf = typeOf; 27 | return sinon.typeOf; 28 | } 29 | 30 | function loadDependencies(require, exports, module) { 31 | var sinon = require("./util/core"); 32 | module.exports = makeApi(sinon); 33 | } 34 | 35 | var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; 36 | var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; 37 | 38 | if (isAMD) { 39 | define(loadDependencies); 40 | } else if (isNode) { 41 | loadDependencies(require, module.exports, module); 42 | } else if (!sinon) { 43 | return; 44 | } else { 45 | makeApi(sinon); 46 | } 47 | }( 48 | (typeof sinon == "object" && sinon || null), 49 | (typeof formatio == "object" && formatio) 50 | )); 51 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/util/fake_timers.js: -------------------------------------------------------------------------------- 1 | /*global lolex */ 2 | 3 | /** 4 | * Fake timer API 5 | * setTimeout 6 | * setInterval 7 | * clearTimeout 8 | * clearInterval 9 | * tick 10 | * reset 11 | * Date 12 | * 13 | * Inspired by jsUnitMockTimeOut from JsUnit 14 | * 15 | * @author Christian Johansen (christian@cjohansen.no) 16 | * @license BSD 17 | * 18 | * Copyright (c) 2010-2013 Christian Johansen 19 | */ 20 | "use strict"; 21 | 22 | if (typeof sinon == "undefined") { 23 | var sinon = {}; 24 | } 25 | 26 | (function (global) { 27 | function makeApi(sinon, lol) { 28 | var llx = typeof lolex !== "undefined" ? lolex : lol; 29 | 30 | sinon.useFakeTimers = function () { 31 | var now, methods = Array.prototype.slice.call(arguments); 32 | 33 | if (typeof methods[0] === "string") { 34 | now = 0; 35 | } else { 36 | now = methods.shift(); 37 | } 38 | 39 | var clock = llx.install(now || 0, methods); 40 | clock.restore = clock.uninstall; 41 | return clock; 42 | }; 43 | 44 | sinon.clock = { 45 | create: function (now) { 46 | return llx.createClock(now); 47 | } 48 | }; 49 | 50 | sinon.timers = { 51 | setTimeout: setTimeout, 52 | clearTimeout: clearTimeout, 53 | setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), 54 | clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), 55 | setInterval: setInterval, 56 | clearInterval: clearInterval, 57 | Date: Date 58 | }; 59 | } 60 | 61 | var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; 62 | var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; 63 | 64 | function loadDependencies(require, epxorts, module, lolex) { 65 | var sinon = require("./core"); 66 | makeApi(sinon, lolex); 67 | module.exports = sinon; 68 | } 69 | 70 | if (isAMD) { 71 | define(loadDependencies); 72 | } else if (isNode) { 73 | loadDependencies(require, module.exports, module, require("lolex")); 74 | } else { 75 | makeApi(sinon); 76 | } 77 | }(typeof global != "undefined" && typeof global !== "function" ? global : this)); 78 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/util/timers_ie.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Helps IE run the fake timers. By defining global functions, IE allows 3 | * them to be overwritten at a later point. If these are not defined like 4 | * this, overwriting them will result in anything from an exception to browser 5 | * crash. 6 | * 7 | * If you don't require fake timers to work in IE, don't include this file. 8 | * 9 | * @author Christian Johansen (christian@cjohansen.no) 10 | * @license BSD 11 | * 12 | * Copyright (c) 2010-2013 Christian Johansen 13 | */ 14 | if (typeof window !== "undefined") { 15 | function setTimeout() {} 16 | function clearTimeout() {} 17 | function setImmediate() {} 18 | function clearImmediate() {} 19 | function setInterval() {} 20 | function clearInterval() {} 21 | function Date() {} 22 | 23 | // Reassign the original functions. Now their writable attribute 24 | // should be true. Hackish, I know, but it works. 25 | setTimeout = sinon.timers.setTimeout; 26 | clearTimeout = sinon.timers.clearTimeout; 27 | setImmediate = sinon.timers.setImmediate; 28 | clearImmediate = sinon.timers.clearImmediate; 29 | setInterval = sinon.timers.setInterval; 30 | clearInterval = sinon.timers.clearInterval; 31 | Date = sinon.timers.Date; 32 | } 33 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/util/xdr_ie.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Helps IE run the fake XDomainRequest. By defining global functions, IE allows 3 | * them to be overwritten at a later point. If these are not defined like 4 | * this, overwriting them will result in anything from an exception to browser 5 | * crash. 6 | * 7 | * If you don't require fake XDR to work in IE, don't include this file. 8 | */ 9 | if (typeof window !== "undefined") { 10 | function XDomainRequest() {} 11 | 12 | // Reassign the original function. Now its writable attribute 13 | // should be true. Hackish, I know, but it works. 14 | XDomainRequest = sinon.xdr.XDomainRequest || undefined; 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/sinon/lib/sinon/util/xhr_ie.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Helps IE run the fake XMLHttpRequest. By defining global functions, IE allows 3 | * them to be overwritten at a later point. If these are not defined like 4 | * this, overwriting them will result in anything from an exception to browser 5 | * crash. 6 | * 7 | * If you don't require fake XHR to work in IE, don't include this file. 8 | * 9 | * @author Christian Johansen (christian@cjohansen.no) 10 | * @license BSD 11 | * 12 | * Copyright (c) 2010-2013 Christian Johansen 13 | */ 14 | if (typeof window !== "undefined") { 15 | function XMLHttpRequest() {} 16 | 17 | // Reassign the original function. Now its writable attribute 18 | // should be true. Hackish, I know, but it works. 19 | XMLHttpRequest = sinon.xhr.XMLHttpRequest || undefined; 20 | } 21 | -------------------------------------------------------------------------------- /bower_components/sinon/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sinon", 3 | "description": "JavaScript test spies, stubs and mocks.", 4 | "version": "1.15.0", 5 | "homepage": "http://sinonjs.org/", 6 | "author": "Christian Johansen", 7 | "repository": { 8 | "type": "git", 9 | "url": "http://github.com/cjohansen/Sinon.JS.git" 10 | }, 11 | "bugs": { 12 | "mail": "christian@cjohansen.no", 13 | "url": "http://github.com/cjohansen/Sinon.JS/issues" 14 | }, 15 | "license": "BSD-3-Clause", 16 | "scripts": { 17 | "ci-test": "./scripts/ci-test.sh", 18 | "test": "npm run lint && ./scripts/ci-test.sh", 19 | "lint": "jscs .", 20 | "prepublish": "./build" 21 | }, 22 | "dependencies": { 23 | "formatio": "1.1.1", 24 | "util": ">=0.10.3 <1", 25 | "lolex": "1.1.0", 26 | "samsam": "1.1.2" 27 | }, 28 | "devDependencies": { 29 | "buster": "0.7.18", 30 | "jscs": "1.11.3", 31 | "buster-istanbul": "0.1.13" 32 | }, 33 | "files": [ 34 | "lib" 35 | ], 36 | "main": "./lib/sinon.js", 37 | "engines": { 38 | "node": ">=0.1.103" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /bower_components/sinon/release.sh: -------------------------------------------------------------------------------- 1 | git push 2 | git push --tags 3 | npm publish 4 | rm -f pkg/* 5 | ruby -rubygems build 6 | cp pkg/* ../sinon-web/releases/. 7 | cp Changelog.txt ../sinon-web/. 8 | cd ../sinon-web 9 | sed -i "s/2013\-[0-9][0-9]\-[0-9][0-9] \-/`date +%Y`-`date +%m`-`date +%d` -/" index.html 10 | sed -i "s/2013\-[0-9][0-9]\-[0-9][0-9] \-/`date +%Y`-`date +%m`-`date +%d` -/" qunit/index.html 11 | sed -i "s/$1/$2/g" index.html 12 | sed -i "s/$1/$2/g" qunit/index.html 13 | sed -i "s/$1/$2/g" docs/index.html 14 | -------------------------------------------------------------------------------- /bower_components/sinon/scripts/ci-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eu 3 | 4 | function finish { 5 | if [ -n "${TRAVIS+1}" ]; then 6 | echo "TRAVIS detected, skip killing child processes" 7 | else 8 | kill $(jobs -pr) 9 | fi 10 | } 11 | 12 | trap finish SIGINT SIGTERM EXIT 13 | 14 | echo 15 | echo starting buster-server 16 | ./node_modules/buster/bin/buster-server & # fork to a subshell 17 | sleep 4 # takes a while for buster server to start 18 | 19 | echo 20 | echo starting phantomjs 21 | phantomjs ./node_modules/buster/script/phantom.js & 22 | sleep 1 # give phantomjs a second to warm up 23 | 24 | echo 25 | echo "starting buster-test (source)" 26 | ./node_modules/buster/bin/buster-test --config-group coverage 27 | ./node_modules/buster/bin/buster-test --config-group node 28 | 29 | echo 30 | echo "starting buster-test (packaged)" 31 | ./build 32 | ./node_modules/buster/bin/buster-test --config test/buster-packaged.js 33 | -------------------------------------------------------------------------------- /bower_components/sinon/test/buster-packaged.js: -------------------------------------------------------------------------------- 1 | var config = module.exports; 2 | 3 | config.packaged = { 4 | environment: "browser", 5 | rootPath: "../", 6 | libs: [ 7 | "node_modules/samsam/lib/samsam.js" 8 | ], 9 | sources: [ 10 | "pkg/sinon.js" 11 | ], 12 | testHelpers: [ 13 | "test/test-helper.js" 14 | ], 15 | tests: [ 16 | "test/**/*-test.js" 17 | ] 18 | }; 19 | -------------------------------------------------------------------------------- /bower_components/sinon/test/buster.js: -------------------------------------------------------------------------------- 1 | var config = module.exports; 2 | 3 | config.browser = { 4 | environment: "browser", 5 | rootPath: "../", 6 | libs: [ 7 | "node_modules/lolex/lolex.js", 8 | "node_modules/samsam/lib/samsam.js", 9 | "node_modules/formatio/lib/formatio.js" 10 | ], 11 | sources: [ 12 | "lib/sinon.js", 13 | "lib/sinon/util/core.js", 14 | "lib/sinon/typeOf.js", 15 | "lib/**/*.js" 16 | ], 17 | testHelpers: [ 18 | "test/test-helper.js" 19 | ], 20 | tests: [ 21 | "test/**/*-test.js" 22 | ] 23 | }; 24 | 25 | config.coverage = { 26 | extends: "browser", 27 | "buster-istanbul": { 28 | outputDirectory: "coverage", 29 | format: "lcov", 30 | excludes: ["**/*.json"] 31 | }, 32 | extensions: [ 33 | require("buster-istanbul") 34 | ] 35 | }; 36 | 37 | config.node = { 38 | environment: "node", 39 | rootPath: "../", 40 | sources: [ 41 | "lib/sinon.js", 42 | "lib/**/*.js" 43 | ], 44 | tests: [ 45 | "test/**/*.js" 46 | ] 47 | }; 48 | -------------------------------------------------------------------------------- /bower_components/sinon/test/extend-test.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | 4 | var buster = root.buster || require("buster"), 5 | sinon = root.sinon || require("../lib/sinon"), 6 | assert = buster.assert, 7 | refute = buster.refute; 8 | 9 | buster.testCase("sinon.extend", { 10 | "should return unaltered target when only one argument": function () { 11 | var target = { hello: "world" }; 12 | 13 | sinon.extend(target); 14 | 15 | assert.equals(target, { hello: "world" }); 16 | }, 17 | 18 | "should copy all (own) properties into first argument, from all subsequent arguments": function () { 19 | var target = { hello: "world" }; 20 | 21 | sinon.extend(target, { a: "a" }, { b: "b" }); 22 | 23 | assert.equals(target.hello, "world"); 24 | assert.equals(target.a, "a"); 25 | assert.equals(target.b, "b"); 26 | }, 27 | 28 | "should copy toString method into target": function () { 29 | var target = { 30 | hello: "world", 31 | toString: function () { 32 | return "hello world"; 33 | } 34 | }, 35 | source = { 36 | toString: function () { 37 | return "hello source"; 38 | } 39 | }; 40 | 41 | sinon.extend(target, source); 42 | 43 | assert.same(target.toString, source.toString); 44 | }, 45 | 46 | "must copy the last occuring property into the target": function () { 47 | var target = { a: 0, b: 0, c: 0, d: 0 }, 48 | source1 = { a: 1, b: 1, c: 1 }, 49 | source2 = { a: 2, b: 2 }, 50 | soruce3 = { a: 3 }; 51 | 52 | sinon.extend(target, source1, source2, soruce3); 53 | 54 | assert.equals(target.a, 3); 55 | assert.equals(target.b, 2); 56 | assert.equals(target.c, 1); 57 | assert.equals(target.d, 0); 58 | } 59 | }); 60 | }(this)); 61 | -------------------------------------------------------------------------------- /bower_components/sinon/test/format-test.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | 4 | var buster = root.buster || require("buster"), 5 | sinon = root.sinon || require("../lib/sinon"), 6 | assert = buster.assert, 7 | refute = buster.refute; 8 | 9 | buster.testCase("sinon.format", { 10 | "formats with formatio by default": function () { 11 | assert.equals(sinon.format({ id: 42 }), "{ id: 42 }"); 12 | }, 13 | 14 | "// should configure formatio to use maximum 250 entries": function () { 15 | // not sure how we can verify this integration with the current setup 16 | // where sinon.js calls formatio as part of it's loading 17 | // extracting sinon.format into a separate module would make this a lot 18 | // easier 19 | }, 20 | 21 | "formats strings without quotes": function () { 22 | assert.equals(sinon.format("Hey"), "Hey"); 23 | } 24 | }); 25 | }(this)); 26 | -------------------------------------------------------------------------------- /bower_components/sinon/test/hello-world-test.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | 4 | var buster = root.buster || require("buster"), 5 | assert = buster.assert; 6 | 7 | buster.testCase("hello world", { 8 | "hello world test": function () { 9 | assert(true); 10 | } 11 | }); 12 | }(this)); 13 | -------------------------------------------------------------------------------- /bower_components/sinon/test/log-error-test.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | 4 | var buster = root.buster || require("buster"), 5 | sinon = root.sinon || require("../lib/sinon"), 6 | assert = buster.assert, 7 | refute = buster.refute; 8 | 9 | buster.testCase("sinon.log", { 10 | "is a function": function () { 11 | assert.isFunction(sinon.log); 12 | } 13 | }); 14 | 15 | buster.testCase("sinon.logError", { 16 | setUp: function () { 17 | this.sandbox = sinon.sandbox.create(); 18 | this.timeOutStub = this.sandbox.stub(sinon.logError, "setTimeout"); 19 | }, 20 | 21 | tearDown: function () { 22 | // setTimeout = realSetTimeout; 23 | this.sandbox.restore(); 24 | }, 25 | 26 | "is a function": function () { 27 | assert.isFunction(sinon.logError); 28 | }, 29 | 30 | "calls sinon.log with a String": function () { 31 | var spy = this.sandbox.spy(sinon, "log"), 32 | name = "Quisque consequat, elit id suscipit.", 33 | message = "Pellentesque gravida orci in tellus tristique, ac commodo nibh congue.", 34 | error = new Error(); 35 | 36 | error.name = name; 37 | error.message = message; 38 | 39 | sinon.logError("a label", error); 40 | 41 | assert(spy.called); 42 | assert(spy.calledWithMatch(name)); 43 | assert(spy.calledWithMatch(message)); 44 | }, 45 | 46 | "calls sinon.log with a stack": function () { 47 | var spy = this.sandbox.spy(sinon, "log"); 48 | var stack = "Integer rutrum dictum elit, posuere accumsan nisi pretium vel. Phasellus adipiscing."; 49 | var error = new Error(); 50 | 51 | error.stack = stack; 52 | 53 | sinon.logError("another label", error); 54 | 55 | assert(spy.called); 56 | assert(spy.calledWithMatch(stack)); 57 | }, 58 | 59 | "should call logError.setTimeout": function () { 60 | var error = new Error(); 61 | 62 | sinon.logError("some wonky label", error); 63 | 64 | assert(this.timeOutStub.calledOnce); 65 | }, 66 | 67 | "should pass a throwing function to logError.setTimeout": function () { 68 | var error = new Error(); 69 | 70 | sinon.logError("async error", error); 71 | 72 | var func = this.timeOutStub.args[0][0]; 73 | assert.exception(func); 74 | } 75 | }); 76 | }(this)); 77 | -------------------------------------------------------------------------------- /bower_components/sinon/test/test-helper.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | var buster = root.buster || require("buster"); 4 | 5 | buster.referee.add("spy", { 6 | assert: function (obj) { 7 | return obj !== null && typeof obj.calledWith === "function" && !obj.returns; 8 | }, 9 | assertMessage: "Expected object ${0} to be a spy function" 10 | }); 11 | 12 | buster.referee.add("stub", { 13 | assert: function (obj) { 14 | return obj !== null && 15 | typeof obj.calledWith === "function" && 16 | typeof obj.returns === "function"; 17 | }, 18 | assertMessage: "Expected object ${0} to be a stub function" 19 | }); 20 | 21 | buster.referee.add("mock", { 22 | assert: function (obj) { 23 | return obj !== null && 24 | typeof obj.verify === "function" && 25 | typeof obj.expects === "function"; 26 | }, 27 | assertMessage: "Expected object ${0} to be a mock" 28 | }); 29 | 30 | buster.referee.add("fakeServer", { 31 | assert: function (obj) { 32 | return obj !== null && 33 | Object.prototype.toString.call(obj.requests) == "[object Array]" && 34 | typeof obj.respondWith === "function"; 35 | }, 36 | assertMessage: "Expected object ${0} to be a fake server" 37 | }); 38 | 39 | buster.referee.add("clock", { 40 | assert: function (obj) { 41 | return obj !== null && 42 | typeof obj.tick === "function" && 43 | typeof obj.setTimeout === "function"; 44 | }, 45 | assertMessage: "Expected object ${0} to be a clock" 46 | }); 47 | }(this)); 48 | -------------------------------------------------------------------------------- /bower_components/sinon/test/times-in-words-test.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | 4 | var buster = root.buster || require("buster"), 5 | sinon = root.sinon || require("../lib/sinon"), 6 | assert = buster.assert, 7 | refute = buster.refute; 8 | 9 | buster.testCase("sinon.timesInWords", { 10 | "should return \"once\" for input of 1": function () { 11 | var result = sinon.timesInWords(1); 12 | assert.equals(result, "once"); 13 | }, 14 | 15 | "should return \"twice\" for input of 2": function () { 16 | var result = sinon.timesInWords(2); 17 | assert.equals(result, "twice"); 18 | }, 19 | 20 | "should return \"thrice\" for input of 3": function () { 21 | var result = sinon.timesInWords(3); 22 | assert.equals(result, "thrice"); 23 | }, 24 | 25 | "should return \"n times\" for n larger than 3": function () { 26 | var result, i; 27 | 28 | for (i = 4; i < 100; i++) { 29 | result = sinon.timesInWords(i); 30 | assert.equals(result, i + " times"); 31 | } 32 | }, 33 | 34 | "should return \"0 times\" for falsy input": function () { 35 | var falsies = [0, NaN, null, false, undefined, ""], 36 | result, i; 37 | 38 | for (i = 0; i < falsies.length; i++) { 39 | result = sinon.timesInWords(falsies[i]); 40 | assert.equals(result, "0 times"); 41 | } 42 | } 43 | }); 44 | }(this)); 45 | -------------------------------------------------------------------------------- /bower_components/sinon/test/typeOf-test.js: -------------------------------------------------------------------------------- 1 | (function (root) { 2 | "use strict"; 3 | 4 | var buster = root.buster || require("buster"), 5 | sinon = root.sinon || require("../lib/sinon"), 6 | assert = buster.assert, 7 | refute = buster.refute; 8 | 9 | buster.testCase("sinon.typeOf", { 10 | "returns boolean": function () { 11 | assert.equals(sinon.typeOf(false), "boolean"); 12 | }, 13 | 14 | "returns string": function () { 15 | assert.equals(sinon.typeOf("Sinon.JS"), "string"); 16 | }, 17 | 18 | "returns number": function () { 19 | assert.equals(sinon.typeOf(123), "number"); 20 | }, 21 | 22 | "returns object": function () { 23 | assert.equals(sinon.typeOf({}), "object"); 24 | }, 25 | 26 | "returns function": function () { 27 | assert.equals(sinon.typeOf(function () {}), "function"); 28 | }, 29 | 30 | "returns undefined": function () { 31 | assert.equals(sinon.typeOf(undefined), "undefined"); 32 | }, 33 | 34 | "returns null": function () { 35 | assert.equals(sinon.typeOf(null), "null"); 36 | }, 37 | 38 | "returns array": function () { 39 | assert.equals(sinon.typeOf([]), "array"); 40 | }, 41 | 42 | "returns regexp": function () { 43 | assert.equals(sinon.typeOf(/.*/), "regexp"); 44 | }, 45 | 46 | "returns date": function () { 47 | assert.equals(sinon.typeOf(new Date()), "date"); 48 | } 49 | }); 50 | }(this)); 51 | -------------------------------------------------------------------------------- /bower_components/sinonjs/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sinonjs", 3 | "version": "1.14.1", 4 | "main": "sinon.js", 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components" 9 | ], 10 | "homepage": "https://github.com/blittle/sinon.js", 11 | "_release": "1.14.1", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "1.14.1", 15 | "commit": "2397f5670cd11c882ecd50351b34a77c239ac80e" 16 | }, 17 | "_source": "git://github.com/blittle/sinon.js.git", 18 | "_target": ">= 1.7.1", 19 | "_originalSource": "sinonjs" 20 | } -------------------------------------------------------------------------------- /bower_components/sinonjs/README.md: -------------------------------------------------------------------------------- 1 | sinon.js 2 | ======== 3 | 4 | SinonJS proxy repository for the BowerJS package manager 5 | 6 | Install with: `bower install sinonjs` 7 | 8 | For more information on SinonJS: https://github.com/cjohansen/Sinon.JS 9 | -------------------------------------------------------------------------------- /bower_components/sinonjs/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sinonjs", 3 | "version": "1.14.1", 4 | "main": "sinon.js", 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /bower_components/underscore/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "underscore", 3 | "version": "1.8.3", 4 | "main": "underscore.js", 5 | "keywords": [ 6 | "util", 7 | "functional", 8 | "server", 9 | "client", 10 | "browser" 11 | ], 12 | "ignore": [ 13 | "docs", 14 | "test", 15 | "*.yml", 16 | "CNAME", 17 | "index.html", 18 | "favicon.ico", 19 | "CONTRIBUTING.md", 20 | ".*", 21 | "component.json", 22 | "package.json", 23 | "karma.*" 24 | ], 25 | "homepage": "https://github.com/jashkenas/underscore", 26 | "_release": "1.8.3", 27 | "_resolution": { 28 | "type": "version", 29 | "tag": "1.8.3", 30 | "commit": "e4743ab712b8ab42ad4ccb48b155034d02394e4d" 31 | }, 32 | "_source": "git://github.com/jashkenas/underscore.git", 33 | "_target": "^1.7.0", 34 | "_originalSource": "underscore" 35 | } -------------------------------------------------------------------------------- /bower_components/underscore/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative 2 | Reporters & Editors 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /bower_components/underscore/README.md: -------------------------------------------------------------------------------- 1 | __ 2 | /\ \ __ 3 | __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ 4 | /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ 5 | \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ 6 | \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ 7 | \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ 8 | \ \____/ 9 | \/___/ 10 | 11 | Underscore.js is a utility-belt library for JavaScript that provides 12 | support for the usual functional suspects (each, map, reduce, filter...) 13 | without extending any core JavaScript objects. 14 | 15 | For Docs, License, Tests, and pre-packed downloads, see: 16 | http://underscorejs.org 17 | 18 | Underscore is an open-sourced component of DocumentCloud: 19 | https://github.com/documentcloud 20 | 21 | Many thanks to our contributors: 22 | https://github.com/jashkenas/underscore/contributors 23 | -------------------------------------------------------------------------------- /bower_components/underscore/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "underscore", 3 | "version": "1.8.3", 4 | "main": "underscore.js", 5 | "keywords": ["util", "functional", "server", "client", "browser"], 6 | "ignore" : ["docs", "test", "*.yml", "CNAME", "index.html", "favicon.ico", "CONTRIBUTING.md", ".*", "component.json", "package.json", "karma.*"] 7 | } 8 | -------------------------------------------------------------------------------- /docs/css/animations.css: -------------------------------------------------------------------------------- 1 | .slide-reveal.ng-enter { 2 | -webkit-transition:0.5s linear all; 3 | -moz-transition:0.5s linear all; 4 | -o-transition:0.5s linear all; 5 | transition:0.5s linear all; 6 | 7 | opacity:0.5; 8 | position:relative; 9 | opacity:0; 10 | top:10px; 11 | } 12 | .slide-reveal.ng-enter-active { 13 | top:0; 14 | opacity:1; 15 | } 16 | 17 | .expand.ng-enter { 18 | -webkit-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 19 | -moz-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 20 | -o-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 21 | transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 22 | 23 | opacity:0; 24 | max-height:0; 25 | overflow:hidden; 26 | } 27 | .expand.ng-enter-active { 28 | opacity:1; 29 | max-height:40px; 30 | } 31 | 32 | .expand.ng-leave { 33 | -webkit-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 34 | -moz-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 35 | -o-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 36 | transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all; 37 | 38 | opacity:1; 39 | max-height:40px; 40 | overflow:hidden; 41 | } 42 | .expand.ng-leave-active { 43 | opacity:0; 44 | max-height:0; 45 | } 46 | -------------------------------------------------------------------------------- /docs/css/prettify.css: -------------------------------------------------------------------------------- 1 | .pln { color: #000 } /* plain text */ 2 | 3 | @media screen { 4 | .str { color: #080 } /* string content */ 5 | .kwd { color: #008 } /* a keyword */ 6 | .com { color: #800 } /* a comment */ 7 | .typ { color: #606 } /* a type name */ 8 | .lit { color: #066 } /* a literal value */ 9 | /* punctuation, lisp open bracket, lisp close bracket */ 10 | .pun, .opn, .clo { color: #660 } 11 | .tag { color: #008 } /* a markup tag name */ 12 | .atn { color: #606 } /* a markup attribute name */ 13 | .atv { color: #080 } /* a markup attribute value */ 14 | .dec, .var { color: #606 } /* a declaration; a variable name */ 15 | .fun { color: red } /* a function name */ 16 | } 17 | 18 | /* Use higher contrast and text-weight for printable form. */ 19 | @media print, projection { 20 | .str { color: #060 } 21 | .kwd { color: #006; font-weight: bold } 22 | .com { color: #600; font-style: italic } 23 | .typ { color: #404; font-weight: bold } 24 | .lit { color: #044 } 25 | .pun, .opn, .clo { color: #440 } 26 | .tag { color: #006; font-weight: bold } 27 | .atn { color: #404 } 28 | .atv { color: #060 } 29 | } 30 | 31 | pre.prettyprint { 32 | padding: 8px; 33 | background-color: #f7f7f9; 34 | border: 1px solid #e1e1e8; 35 | } 36 | pre.prettyprint.linenums { 37 | -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; 38 | -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; 39 | box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; 40 | } 41 | ol.linenums { 42 | margin: 0 0 0 33px; /* IE indents via margin-left */ 43 | } 44 | ol.linenums li { 45 | padding-left: 12px; 46 | font-size:12px; 47 | color: #bebec5; 48 | line-height: 18px; 49 | text-shadow: 0 1px 0 #fff; 50 | list-style-type:decimal!important; 51 | } 52 | -------------------------------------------------------------------------------- /docs/font/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rpocklin/angular-scroll-animate/08552ffb9a3a8fb0c22aa72da7190d96b41af50f/docs/font/FontAwesome.otf -------------------------------------------------------------------------------- /docs/font/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rpocklin/angular-scroll-animate/08552ffb9a3a8fb0c22aa72da7190d96b41af50f/docs/font/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rpocklin/angular-scroll-animate/08552ffb9a3a8fb0c22aa72da7190d96b41af50f/docs/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/font/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rpocklin/angular-scroll-animate/08552ffb9a3a8fb0c22aa72da7190d96b41af50f/docs/font/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/js/docs-setup.js: -------------------------------------------------------------------------------- 1 | NG_DOCS={ 2 | "sections": { 3 | "api": "API" 4 | }, 5 | "pages": [ 6 | { 7 | "section": "api", 8 | "id": "angular-scroll-animate.directive:when-visible", 9 | "shortName": "when-visible", 10 | "type": "directive", 11 | "moduleName": "angular-scroll-animate", 12 | "shortDescription": "Allows method hooks into the detection of when an element is scrolled into or out of view.", 13 | "keywords": "$el $scope addclass allows angular angular-scroll-animate animate animatein animateout animations api binding car class container controller css default delay detection directive ease-in element event example examplectrl execute fadein function hidden hooks html js method module ng-controller override parent percentage px removeclass removeclassclass scroll scrolled transition view viewport visibility visible when-not-visible when-visible" 14 | } 15 | ], 16 | "apis": { 17 | "api": true 18 | }, 19 | "html5Mode": false, 20 | "editExample": true, 21 | "startPage": "/api", 22 | "scripts": [ 23 | "angular.min.js", 24 | "angular-scroll-animate.js" 25 | ] 26 | }; -------------------------------------------------------------------------------- /example/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var app = angular.module('example', [ 4 | 'angular-scroll-animate' 5 | ]); 6 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Angular Timeline Example 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // http://karma-runner.github.io/0.10/config/configuration-file.html 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | // base path, that will be used to resolve files and exclude 7 | basePath: '', 8 | 9 | // testing framework to use (jasmine/mocha/q unit/...) 10 | frameworks: ['jasmine'], 11 | 12 | // list of files / patterns to load in the browser 13 | files: [ 14 | 'bower_components/jquery/dist/jquery.js', 15 | 'bower_components/angular/angular.js', 16 | 'bower_components/underscore/underscore.js', 17 | 'bower_components/sinonjs/sinon.js', 18 | 'bower_components/jasmine-sinon/lib/jasmine-sinon.js', 19 | 'bower_components/angular-mocks/angular-mocks.js', 20 | 'src/**/*.html', 21 | 'src/**/*.js' 22 | ], 23 | 24 | exclude: [], 25 | port: 8080, 26 | logLevel: config.LOG_INFO, 27 | singleRun: true, 28 | autoWatch: false, 29 | 30 | // coverage reporter generates the coverage 31 | reporters: ['progress', 'coverage'], 32 | 33 | preprocessors: { 34 | 'src/!(*spec).js': ['coverage'], 35 | 'src/**/*.html': ['ng-html2js'] 36 | }, 37 | 38 | ngHtml2JsPreprocessor: { 39 | // you might need to strip the main directory prefix in the URL request 40 | stripPrefix: 'src/', 41 | moduleName: 'templates' 42 | }, 43 | 44 | // optionally, configure the reporter 45 | coverageReporter: { 46 | dir: 'coverage', 47 | subdir: '.', 48 | reporters: [ 49 | {type: 'text-summary'}, 50 | {type: 'lcov'}, 51 | {type: 'clover'} 52 | ] 53 | } 54 | }); 55 | }; 56 | 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-scroll-animate", 3 | "description": "An Angular.js directive which allows you to perform any javascript actions (in the controller, or on the element) when an element is scrolled into, or out of, the users viewport, without any other dependencies.", 4 | "homepage": "https://github.com/rpocklin/angular-scroll-animate", 5 | "author": "Robert Pocklington ", 6 | "repository": { 7 | "type": "git", 8 | "url": "http://github.com/rpocklin/angular-scroll-animate.git" 9 | }, 10 | "main": "./dist/angular-scroll-animate.js", 11 | "keywords": [ 12 | "angular", 13 | "directive", 14 | "scroll", 15 | "animate", 16 | "visible", 17 | "view", 18 | "viewport", 19 | "lazy" 20 | ], 21 | "version": "0.9.9", 22 | "license": "MIT", 23 | "dependencies": { 24 | "angular": "^1.3.15" 25 | }, 26 | "devDependencies": { 27 | "grunt": "~0.4.1", 28 | "grunt-autoprefixer": "~0.7.3", 29 | "grunt-cli": "~0.1.13", 30 | "grunt-contrib-clean": "^0.6.0", 31 | "grunt-contrib-concat": "^0.5.0", 32 | "grunt-contrib-connect": "~0.8.0", 33 | "grunt-contrib-jshint": "~0.7.1", 34 | "grunt-contrib-watch": "~0.6.1", 35 | "grunt-jsbeautifier": "~0.2.7", 36 | "grunt-karma": "~0.6.2", 37 | "grunt-karma-coveralls": "~2.3.0", 38 | "grunt-ngdocs": "^0.2.8", 39 | "grunt-sass": "^0.16.1", 40 | "jshint-stylish": "~0.1.3", 41 | "karma": "~0.10.9", 42 | "karma-coverage": "~0.2.4", 43 | "karma-jasmine": "~0.1.5", 44 | "karma-ng-html2js-preprocessor": "~0.1.0", 45 | "karma-phantomjs-launcher": "~0.1.4", 46 | "load-grunt-tasks": "~0.6.0", 47 | "phantomjs": "~1.9.7-15", 48 | "time-grunt": "~0.2.1" 49 | }, 50 | "engines": { 51 | "node": ">=0.10.0" 52 | } 53 | } 54 | --------------------------------------------------------------------------------