├── bower_components ├── jquery │ ├── .gitignore │ ├── package.json │ ├── bower.json │ ├── component.json │ ├── README.md │ ├── .bower.json │ └── composer.json ├── bootstrap │ ├── CNAME │ ├── assets │ │ ├── ico │ │ │ ├── favicon.png │ │ │ ├── apple-touch-icon-57-precomposed.png │ │ │ ├── apple-touch-icon-72-precomposed.png │ │ │ ├── apple-touch-icon-114-precomposed.png │ │ │ └── apple-touch-icon-144-precomposed.png │ │ ├── js │ │ │ ├── html5shiv.js │ │ │ └── respond.min.js │ │ └── css │ │ │ └── pygments-manni.css │ ├── bower.json │ ├── js │ │ ├── .jshintrc │ │ ├── tests │ │ │ ├── server.js │ │ │ ├── unit │ │ │ │ ├── transition.js │ │ │ │ ├── affix.js │ │ │ │ ├── scrollspy.js │ │ │ │ ├── alert.js │ │ │ │ ├── phantom.js │ │ │ │ └── tab.js │ │ │ ├── index.html │ │ │ └── phantom.js │ │ ├── transition.js │ │ ├── alert.js │ │ ├── button.js │ │ └── popover.js │ ├── _includes │ │ ├── old-bs-docs.html │ │ ├── ads.html │ │ ├── nav-getting-started.html │ │ ├── social-buttons.html │ │ ├── footer.html │ │ ├── nav-main.html │ │ ├── nav-customize.html │ │ ├── header.html │ │ ├── nav-javascript.html │ │ └── nav-css.html │ ├── index.html │ ├── .bower.json │ ├── composer.json │ ├── less │ │ ├── breadcrumbs.less │ │ ├── component-animations.less │ │ ├── wells.less │ │ ├── utilities.less │ │ ├── jumbotron.less │ │ ├── accordion.less │ │ ├── close.less │ │ ├── thumbnails.less │ │ ├── labels.less │ │ ├── media.less │ │ ├── pager.less │ │ ├── badges.less │ │ ├── code.less │ │ ├── bootstrap.less │ │ ├── alerts.less │ │ ├── print.less │ │ ├── scaffolding.less │ │ ├── list-group.less │ │ ├── pagination.less │ │ ├── progress-bars.less │ │ ├── tooltip.less │ │ ├── responsive-utilities.less │ │ ├── panels.less │ │ ├── modals.less │ │ └── buttons.less │ ├── package.json │ ├── _config.yml │ ├── _layouts │ │ ├── home.html │ │ ├── customize.html │ │ └── default.html │ └── CONTRIBUTING.md ├── angular-ui-utils │ ├── .gitignore │ ├── modules │ │ ├── highlight │ │ │ ├── highlight.less │ │ │ ├── highlight.js │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ └── test │ │ │ │ └── highlightSpec.js │ │ ├── utils.js │ │ ├── reset │ │ │ ├── stylesheets │ │ │ │ └── reset.less │ │ │ ├── reset.js │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ └── test │ │ │ │ └── resetSpec.js │ │ ├── indeterminate │ │ │ ├── indeterminate.js │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ └── test │ │ │ │ └── indeterminateSpec.js │ │ ├── event │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ ├── event.js │ │ │ └── test │ │ │ │ └── eventSpec.js │ │ ├── scrollfix │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ ├── test │ │ │ │ └── scrollfixSpec.js │ │ │ └── scrollfix.js │ │ ├── unique │ │ │ ├── unique.js │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ └── test │ │ │ │ └── uniqueSpec.js │ │ ├── inflector │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ ├── test │ │ │ │ └── inflectorSpec.js │ │ │ └── inflector.js │ │ ├── format │ │ │ ├── format.js │ │ │ ├── test │ │ │ │ └── formatSpec.js │ │ │ └── demo │ │ │ │ └── index.html │ │ ├── ie-shiv │ │ │ ├── README.md │ │ │ └── ie-shiv.js │ │ ├── showhide │ │ │ ├── showhide.js │ │ │ └── demo │ │ │ │ └── index.html │ │ ├── keypress │ │ │ ├── demo │ │ │ │ └── index.html │ │ │ └── test │ │ │ │ ├── keyupSpec.js │ │ │ │ ├── keydownSpec.js │ │ │ │ └── keypressSpec.js │ │ ├── mask │ │ │ └── demo │ │ │ │ └── index.html │ │ ├── route │ │ │ ├── route.js │ │ │ └── demo │ │ │ │ └── index.html │ │ ├── jq │ │ │ ├── jq.js │ │ │ └── demo │ │ │ │ └── index.html │ │ └── validate │ │ │ ├── demo │ │ │ └── index.html │ │ │ └── validate.js │ ├── demo │ │ └── demo.js │ ├── CONTRIBUTING.md │ ├── bower.json │ ├── .bower.json │ ├── package.json │ ├── LICENSE │ ├── test │ │ └── karma.conf.js │ └── README.md ├── angular │ ├── bower.json │ └── .bower.json ├── angular-fire │ ├── bower.json │ └── .bower.json └── angular-bootstrap │ ├── bower.json │ └── .bower.json ├── bower.json ├── app.css ├── app.js └── README.md /bower_components/jquery/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | -------------------------------------------------------------------------------- /bower_components/bootstrap/CNAME: -------------------------------------------------------------------------------- 1 | getbootstrap.com 2 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | components 3 | .rcs 4 | *.swp 5 | .idea -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/highlight/highlight.less: -------------------------------------------------------------------------------- 1 | 2 | /* highlight */ 3 | .ui-match { 4 | background: yellow; 5 | } 6 | -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/ico/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProLoser/refridge/gh-pages/bower_components/bootstrap/assets/ico/favicon.png -------------------------------------------------------------------------------- /bower_components/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.0.7", 4 | "main": "./angular.js", 5 | "dependencies": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/ico/apple-touch-icon-57-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProLoser/refridge/gh-pages/bower_components/bootstrap/assets/ico/apple-touch-icon-57-precomposed.png -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/ico/apple-touch-icon-72-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProLoser/refridge/gh-pages/bower_components/bootstrap/assets/ico/apple-touch-icon-72-precomposed.png -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/ico/apple-touch-icon-114-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProLoser/refridge/gh-pages/bower_components/bootstrap/assets/ico/apple-touch-icon-114-precomposed.png -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/ico/apple-touch-icon-144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ProLoser/refridge/gh-pages/bower_components/bootstrap/assets/ico/apple-touch-icon-144-precomposed.png -------------------------------------------------------------------------------- /bower_components/jquery/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "components-jquery", 3 | "version": "2.0.3", 4 | "description": "jQuery component", 5 | "keywords": ["jquery"], 6 | "main": "./jquery.js" 7 | } 8 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fridge", 3 | "version": "0.0.1", 4 | "dependencies": { 5 | "angular-fire": "latest", 6 | "angular-bootstrap": "~0.4.0", 7 | "angular-ui-utils": "~0.0.4", 8 | "jquery": "~2.0.3" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 60px; 3 | } 4 | .purchased { 5 | text-decoration: line-through; 6 | } 7 | .purchased input, .purchased select { 8 | text-decoration: line-through; 9 | } 10 | input { 11 | background: #eee; 12 | border: none; 13 | } -------------------------------------------------------------------------------- /bower_components/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.0.3", 4 | "description": "jQuery component", 5 | "keywords": [ 6 | "jquery", 7 | "component" 8 | ], 9 | "main": "jquery.js", 10 | "license": "MIT" 11 | } 12 | -------------------------------------------------------------------------------- /bower_components/angular-fire/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-fire", 3 | "version": "0.2.0", 4 | "main": ["./angularFire.js", "./angularfire.min.js"], 5 | "ignore": ["Makefile", "tests", "README.md", ".travis.yml"], 6 | "dependencies": { 7 | "angular": "1.0.7" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /bower_components/bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "version": "3.0.0", 4 | "main": ["./docs/assets/js/bootstrap.js", "./docs/assets/css/bootstrap.css"], 5 | "ignore": [ 6 | "**/.*" 7 | ], 8 | "dependencies": { 9 | "jquery": ">= 1.9.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "validthis": true, 3 | "laxcomma" : true, 4 | "laxbreak" : true, 5 | "browser" : true, 6 | "eqnull" : true, 7 | "debug" : true, 8 | "devel" : true, 9 | "boss" : true, 10 | "expr" : true, 11 | "asi" : true 12 | } -------------------------------------------------------------------------------- /bower_components/jquery/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "repo": "components/jquery", 4 | "version": "2.0.3", 5 | "description": "jQuery component", 6 | "keywords": [ 7 | "jquery", 8 | "component" 9 | ], 10 | "main": "jquery.js", 11 | "scripts": [ 12 | "jquery.js" 13 | ], 14 | "license": "MIT" 15 | } 16 | -------------------------------------------------------------------------------- /bower_components/angular-bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "https://github.com/angular-ui/bootstrap/graphs/contributors" 4 | }, 5 | "name": "angular-bootstrap", 6 | "version": "0.4.0", 7 | "main": ["./ui-bootstrap-tpls.js"], 8 | "dependencies": { 9 | "angular": ">=1" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/utils.js: -------------------------------------------------------------------------------- 1 | angular.module('ui.utils', [ 2 | "ui.event", 3 | "ui.format", 4 | "ui.highlight", 5 | "ui.indeterminate", 6 | "ui.inflector", 7 | "ui.jq", 8 | "ui.keypress", 9 | "ui.mask", 10 | "ui.reset", 11 | "ui.route", 12 | "ui.scrollfix", 13 | "ui.showhide", 14 | "ui.unique", 15 | "ui.validate" 16 | ]); -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/reset/stylesheets/reset.less: -------------------------------------------------------------------------------- 1 | 2 | /* ui-reset */ 3 | .ui-resetwrap { 4 | display: inline-block; 5 | position: relative; 6 | } 7 | .ui-reset { 8 | display: none; 9 | position: absolute; 10 | cursor: pointer; 11 | top: 0; 12 | right: 0; 13 | z-index: 2; 14 | height: 100%; 15 | } 16 | .ui-resetwrap:hover .ui-reset { 17 | display: block; 18 | } 19 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/old-bs-docs.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | Looking for Bootstrap 2.3.2 docs? 5 | 6 | We've moved it to a new home while we push forward with Bootstrap 3. Read the blog for details. 7 |
8 |
9 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/ads.html: -------------------------------------------------------------------------------- 1 |
-------------------------------------------------------------------------------- /bower_components/jquery/README.md: -------------------------------------------------------------------------------- 1 | jQuery Component 2 | ================ 3 | 4 | Shim repository for the [jQuery](http://jquery.com). 5 | 6 | Package Managers 7 | ---------------- 8 | 9 | * [Bower](http://bower.io/): `jquery` 10 | * [Component](https://github.com/component/component): `components/jquery` 11 | * [Composer](http://packagist.org/packages/components/jquery): `components/jquery` 12 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/server.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Simple connect server for phantom.js 3 | * Adapted from Modernizr 4 | */ 5 | 6 | var connect = require('connect') 7 | , http = require('http') 8 | , fs = require('fs') 9 | , app = connect() 10 | .use(connect.static(__dirname + '/../../')); 11 | 12 | http.createServer(app).listen(3000); 13 | 14 | fs.writeFileSync(__dirname + '/pid.txt', process.pid, 'utf-8') 15 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/demo/demo.js: -------------------------------------------------------------------------------- 1 | 2 | $("#utils").hide(); 3 | 4 | requirejs( 5 | ['build/ui-utils.js'], 6 | function () { 7 | 8 | 9 | //angular.module('doc.ui-map', ['ui.utils', 'prettifyDirective']); 10 | 11 | e$ = $("#utils"); 12 | e$.removeAttr("ng-non-bindable"); 13 | 14 | angular.bootstrap(e$[0], ['ui.utils', 'prettifyDirective']); 15 | e$.show(); 16 | // $("#map-l").slideUp(); 17 | 18 | }); -------------------------------------------------------------------------------- /bower_components/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.0.7", 4 | "main": "./angular.js", 5 | "dependencies": {}, 6 | "homepage": "https://github.com/angular/bower-angular", 7 | "_release": "1.0.7", 8 | "_resolution": { 9 | "type": "version", 10 | "tag": "v1.0.7", 11 | "commit": "6c0e81da2073f3831e32ed486d5aabe17bfc915f" 12 | }, 13 | "_source": "git://github.com/angular/bower-angular.git", 14 | "_target": ">=1" 15 | } -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/unit/transition.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | module("transition") 4 | 5 | test("should be defined on jquery support object", function () { 6 | ok($.support.transition !== undefined, 'transition object is defined') 7 | }) 8 | 9 | test("should provide an end object", function () { 10 | ok($.support.transition ? $.support.transition.end : true, 'end string is defined') 11 | }) 12 | 13 | }) 14 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | CONTRIBUTING 2 | ============ 3 | 4 | * Open a [Pull Request (PR)](https://github.com/angular-ui/ui-utils/pull/new/master) 5 | * Make sure your PR is on a **new branch** you created off of the latest version of master 6 | * Do **not** open a PR from your master branch 7 | * Open a PR to start a discussion even if the code isn't finished (easier to collect feedback this way) 8 | * Make sure all previous tests pass and add new tests for added behaviors 9 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "AngularUI Team", 3 | "name": "angular-ui-utils", 4 | "description": "AngularUI Utilities - Companion Suite for AngularJS", 5 | "version": "0.0.4", 6 | "homepage": "http://angular-ui.github.com", 7 | "main": "./modules/utils.js", 8 | "dependencies": { 9 | "angular": ">= 1.0.2" 10 | }, 11 | "devDependencies": { 12 | "angular-mocks": "~1.0.5", 13 | "jquery": ">=1.6", 14 | "angular-ui-docs": "angular-ui/angular-ui-docs" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /bower_components/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.0.3", 4 | "description": "jQuery component", 5 | "keywords": [ 6 | "jquery", 7 | "component" 8 | ], 9 | "main": "jquery.js", 10 | "license": "MIT", 11 | "homepage": "https://github.com/components/jquery", 12 | "_release": "2.0.3", 13 | "_resolution": { 14 | "type": "version", 15 | "tag": "2.0.3", 16 | "commit": "452a56b52b8f4a032256cdb8b6838f25f0bdb3d2" 17 | }, 18 | "_source": "git://github.com/components/jquery.git", 19 | "_target": ">= 1.9.0" 20 | } -------------------------------------------------------------------------------- /bower_components/bootstrap/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | title: Bootstrap 4 | base_url: "./" 5 | --- 6 | 7 |
8 |
9 |

Bootstrap 3

10 |

Sleek, intuitive, and powerful mobile-first front-end framework for faster and easier web development.

11 |

12 | Download Bootstrap 13 |

14 |
15 |
16 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/nav-getting-started.html: -------------------------------------------------------------------------------- 1 |
  • 2 | Download Bootstrap 3 | 7 |
  • 8 |
  • 9 | What's included 10 |
  • 11 |
  • 12 | Basic template 13 |
  • 14 |
  • 15 | Browser support 16 |
  • 17 |
  • 18 | License FAQs 19 |
  • 20 |
  • 21 | Customizing Bootstrap 22 |
  • -------------------------------------------------------------------------------- /bower_components/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "version": "3.0.0-rc1", 4 | "main": [ 5 | "./docs/assets/js/bootstrap.js", 6 | "./docs/assets/css/bootstrap.css" 7 | ], 8 | "ignore": [ 9 | "**/.*" 10 | ], 11 | "dependencies": { 12 | "jquery": ">= 1.9.0" 13 | }, 14 | "homepage": "https://github.com/twbs/bootstrap", 15 | "_release": "3.0.0-rc1", 16 | "_resolution": { 17 | "type": "version", 18 | "tag": "v3.0.0-rc1", 19 | "commit": "9c63ffa00fd55c7e61c51b58778b06b28f93e1a8" 20 | }, 21 | "_source": "git://github.com/twbs/bootstrap.git", 22 | "_target": "~3.0.0-rc1" 23 | } -------------------------------------------------------------------------------- /bower_components/bootstrap/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twitter/bootstrap" 3 | , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." 4 | , "keywords": ["bootstrap", "css"] 5 | , "homepage": "http://getbootstrap.com" 6 | , "authors": [ 7 | { 8 | "name": "Mark Otto", 9 | "email": "markdotto@gmail.com" 10 | }, 11 | { 12 | "name": "Jacob Thornton", 13 | "email": "jacobthornton@gmail.com" 14 | } 15 | ] 16 | , "support": { 17 | "issues": "https://github.com/twbs/bootstrap/issues" 18 | } 19 | , "license": "Apache-2.0" 20 | } 21 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: 8px 15px; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | > li { 13 | display: inline-block; 14 | &+li:before { 15 | content: "/\00a0"; // Unicode space added since inline-block means non-collapsing white-space 16 | padding: 0 5px; 17 | color: @breadcrumb-color; 18 | } 19 | } 20 | > .active { 21 | color: @breadcrumb-active-color; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /bower_components/angular-bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": { 3 | "name": "https://github.com/angular-ui/bootstrap/graphs/contributors" 4 | }, 5 | "name": "angular-bootstrap", 6 | "version": "0.4.0", 7 | "main": [ 8 | "./ui-bootstrap-tpls.js" 9 | ], 10 | "dependencies": { 11 | "angular": ">=1" 12 | }, 13 | "homepage": "https://github.com/angular-ui/bootstrap-bower", 14 | "_release": "0.4.0", 15 | "_resolution": { 16 | "type": "version", 17 | "tag": "0.4.0", 18 | "commit": "9891c714b1514f0117c15d952280a488cbca0321" 19 | }, 20 | "_source": "git://github.com/angular-ui/bootstrap-bower.git", 21 | "_target": "~0.4.0" 22 | } -------------------------------------------------------------------------------- /bower_components/angular-fire/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-fire", 3 | "version": "0.2.0", 4 | "main": [ 5 | "./angularFire.js", 6 | "./angularfire.min.js" 7 | ], 8 | "ignore": [ 9 | "Makefile", 10 | "tests", 11 | "README.md", 12 | ".travis.yml" 13 | ], 14 | "dependencies": { 15 | "angular": "1.0.7" 16 | }, 17 | "homepage": "https://github.com/firebase/angularFire", 18 | "_release": "0.2.0", 19 | "_resolution": { 20 | "type": "version", 21 | "tag": "v0.2.0", 22 | "commit": "171b80650f6501143878d2ec50e57f466c31e7d8" 23 | }, 24 | "_source": "git://github.com/firebase/angularFire.git", 25 | "_target": "*" 26 | } -------------------------------------------------------------------------------- /bower_components/bootstrap/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | &.in { 21 | display: block; 22 | } 23 | } 24 | .collapsing { 25 | position: relative; 26 | height: 0; 27 | overflow: hidden; 28 | .transition(height .35s ease); 29 | } 30 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid darken(@well-bg, 7%); 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-large { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-small { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .pull-right { 13 | float: right; 14 | } 15 | .pull-left { 16 | float: left; 17 | } 18 | 19 | 20 | // Toggling content 21 | // ------------------------- 22 | 23 | .hide { 24 | display: none !important; 25 | } 26 | .show { 27 | display: block !important; 28 | } 29 | .invisible { 30 | visibility: hidden; 31 | } 32 | .text-hide { 33 | .hide-text(); 34 | } 35 | 36 | 37 | // For Affix plugin 38 | // ------------------------- 39 | 40 | .affix { 41 | position: fixed; 42 | } 43 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/indeterminate/indeterminate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Provides an easy way to toggle a checkboxes indeterminate property 3 | * 4 | * @example 5 | */ 6 | angular.module('ui.indeterminate',[]).directive('uiIndeterminate', [ 7 | function () { 8 | return { 9 | compile: function(tElm, tAttrs) { 10 | if (!tAttrs.type || tAttrs.type.toLowerCase() !== 'checkbox') { 11 | return angular.noop; 12 | } 13 | 14 | return function ($scope, elm, attrs) { 15 | $scope.$watch(attrs.uiIndeterminate, function(newVal, oldVal) { 16 | elm[0].indeterminate = !!newVal; 17 | }); 18 | }; 19 | } 20 | }; 21 | }]); 22 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding: 30px; 8 | margin-bottom: 30px; 9 | font-size: (@font-size-base * 1.5); 10 | font-weight: 200; 11 | line-height: (@line-height-base * 1.5); 12 | color: @jumbotron-lead-color; 13 | background-color: @jumbotron-bg; 14 | h1 { 15 | line-height: 1; 16 | color: @jumbotron-heading-color; 17 | } 18 | p { 19 | line-height: 1.4; 20 | } 21 | 22 | @media screen and (min-width: @screen-tablet) { 23 | padding: 50px 60px; 24 | border-radius: @border-radius-large; // Only round corners at higher resolutions 25 | h1 { 26 | font-size: (@font-size-base * 4.5); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/accordion.less: -------------------------------------------------------------------------------- 1 | // 2 | // Accordion 3 | // -------------------------------------------------- 4 | 5 | 6 | // Parent container 7 | .accordion { 8 | margin-bottom: @line-height-computed; 9 | } 10 | 11 | // Group == heading + body 12 | .accordion-group { 13 | margin-bottom: 2px; 14 | border: 1px solid @accordion-border-color; 15 | border-radius: @border-radius-base; 16 | } 17 | .accordion-heading { 18 | border-bottom: 0; 19 | 20 | .accordion-toggle { 21 | display: block; 22 | padding: 8px 15px; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Inner needs the styles because you can't animate properly with any styles on the element 28 | .accordion-inner { 29 | padding: 9px 15px; 30 | border-top: 1px solid @accordion-border-color; 31 | } 32 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "AngularUI Team", 3 | "name": "angular-ui-utils", 4 | "description": "AngularUI Utilities - Companion Suite for AngularJS", 5 | "version": "0.0.4", 6 | "homepage": "http://angular-ui.github.com", 7 | "main": "./modules/utils.js", 8 | "dependencies": { 9 | "angular": ">= 1.0.2" 10 | }, 11 | "devDependencies": { 12 | "angular-mocks": "~1.0.5", 13 | "jquery": ">=1.6", 14 | "angular-ui-docs": "angular-ui/angular-ui-docs" 15 | }, 16 | "_release": "0.0.4", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "v0.0.4", 20 | "commit": "fa7e14e6cb254b3166ff36060f30ed69b54e7152" 21 | }, 22 | "_source": "git://github.com/angular-ui/ui-utils.git", 23 | "_target": "~0.0.4", 24 | "_direct": true 25 | } -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/highlight/highlight.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Wraps the 3 | * @param text {string} haystack to search through 4 | * @param search {string} needle to search for 5 | * @param [caseSensitive] {boolean} optional boolean to use case-sensitive searching 6 | */ 7 | angular.module('ui.highlight',[]).filter('highlight', function () { 8 | return function (text, search, caseSensitive) { 9 | if (search || angular.isNumber(search)) { 10 | text = text.toString(); 11 | search = search.toString(); 12 | if (caseSensitive) { 13 | return text.split(search).join('' + search + ''); 14 | } else { 15 | return text.replace(new RegExp(search, 'gi'), '$&'); 16 | } 17 | } else { 18 | return text; 19 | } 20 | }; 21 | }); 22 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button& { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-utils", 3 | "version": "0.0.4", 4 | "description": "Swiss-Army-Knife of AngularJS tools (with no external dependencies!)", 5 | "author": "https://github.com/angular-ui/ui-utils/graphs/contributors", 6 | "license": "MIT License, http://www.opensource.org/licenses/MIT", 7 | "homepage": "http://angular-ui.github.com", 8 | "dependencies": {}, 9 | "devDependencies": { 10 | "grunt": "~0.4.1", 11 | "grunt-contrib-clean": "~0.4.1", 12 | "grunt-contrib-concat": "~0.3.0", 13 | "grunt-contrib-copy": "~0.4.1", 14 | "grunt-contrib-jshint": "~0.5.4", 15 | "grunt-contrib-uglify": "~0.2.1", 16 | "grunt-contrib-watch": "~0.4.3", 17 | "grunt-karma": "~0.4.4" 18 | }, 19 | "scripts": {}, 20 | "repository": { 21 | "type": "git", 22 | "url": "git://github.com/angular-ui/ui-utils.git" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/unit/affix.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | module("affix") 4 | 5 | test("should provide no conflict", function () { 6 | var affix = $.fn.affix.noConflict() 7 | ok(!$.fn.affix, 'affix was set back to undefined (org value)') 8 | $.fn.affix = affix 9 | }) 10 | 11 | test("should be defined on jquery object", function () { 12 | ok($(document.body).affix, 'affix method is defined') 13 | }) 14 | 15 | test("should return element", function () { 16 | ok($(document.body).affix()[0] == document.body, 'document.body returned') 17 | }) 18 | 19 | test("should exit early if element is not visible", function () { 20 | var $affix = $('
    ').affix() 21 | $affix.data('bs.affix').checkPosition() 22 | ok(!$affix.hasClass('affix'), 'affix class was not added') 23 | }) 24 | 25 | }) 26 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/reset/reset.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Add a clear button to form inputs to reset their value 3 | */ 4 | angular.module('ui.reset',[]).value('uiResetConfig',null).directive('uiReset', ['uiResetConfig', function (uiResetConfig) { 5 | var resetValue = null; 6 | if (uiResetConfig !== undefined){ 7 | resetValue = uiResetConfig; 8 | } 9 | return { 10 | require: 'ngModel', 11 | link: function (scope, elm, attrs, ctrl) { 12 | var aElement; 13 | aElement = angular.element(''); 14 | elm.wrap('').after(aElement); 15 | aElement.bind('click', function (e) { 16 | e.preventDefault(); 17 | scope.$apply(function () { 18 | if (attrs.uiReset){ 19 | ctrl.$setViewValue(scope.$eval(attrs.uiReset)); 20 | }else{ 21 | ctrl.$setViewValue(resetValue); 22 | } 23 | ctrl.$render(); 24 | }); 25 | }); 26 | } 27 | }; 28 | }]); 29 | -------------------------------------------------------------------------------- /bower_components/bootstrap/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap" 3 | , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." 4 | , "version": "3.0.0" 5 | , "keywords": ["bootstrap", "css"] 6 | , "homepage": "http://twbs.github.com/bootstrap/" 7 | , "author": "Twitter Inc." 8 | , "scripts": { "test": "grunt test" } 9 | , "repository": { 10 | "type": "git" 11 | , "url": "https://github.com/twbs/bootstrap.git" 12 | } 13 | , "licenses": [ 14 | { 15 | "type": "Apache-2.0" 16 | , "url": "http://www.apache.org/licenses/LICENSE-2.0" 17 | } 18 | ] 19 | , "devDependencies": { 20 | "grunt": "~0.4.1" 21 | , "grunt-contrib-connect": "~0.3.0" 22 | , "grunt-contrib-clean": "~0.5.0" 23 | , "grunt-contrib-concat": "~0.3.0" 24 | , "grunt-contrib-jshint": "~0.6.0" 25 | , "grunt-contrib-uglify": "~0.2.2" 26 | , "grunt-contrib-qunit": "~0.2.2" 27 | , "grunt-contrib-watch": "~0.5.1" 28 | , "grunt-recess": "~0.3.3" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base classes 7 | // For thumbnail block-level composite components and simple image styles 8 | 9 | // The actual thumbnailed element 10 | // Can be `a`, `div`, or `img` 11 | .thumbnail, 12 | .img-thumbnail { 13 | padding: 4px; 14 | line-height: @line-height-base; 15 | background-color: @thumbnail-bg; 16 | border: 1px solid @thumbnail-border; 17 | border-radius: @thumbnail-border-radius; 18 | .transition(all .2s ease-in-out); 19 | } 20 | .thumbnail { 21 | display: block; 22 | } 23 | .thumbnail > img, 24 | .img-thumbnail { 25 | .img-responsive(); 26 | } 27 | 28 | // Add a hover state for linked versions only 29 | a.thumbnail:hover, 30 | a.thumbnail:focus { 31 | border-color: @link-color; 32 | } 33 | 34 | // Images and captions 35 | .thumbnail > img { 36 | margin-left: auto; 37 | margin-right: auto; 38 | } 39 | .thumbnail .caption { 40 | padding: 9px; 41 | color: @thumbnail-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /bower_components/jquery/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "components/jquery", 3 | "description": "jQuery JavaScript Library", 4 | "type": "component", 5 | "homepage": "http://jquery.com", 6 | "license": "MIT", 7 | "support": { 8 | "irc": "irc://irc.freenode.org/jquery", 9 | "issues": "http://bugs.jquery.com", 10 | "forum": "http://forum.jquery.com", 11 | "wiki": "http://docs.jquery.com/", 12 | "source": "https://github.com/jquery/jquery" 13 | }, 14 | "authors": [ 15 | { 16 | "name": "John Resig", 17 | "email": "jeresig@gmail.com" 18 | } 19 | ], 20 | "require": { 21 | "robloach/component-installer": "*" 22 | }, 23 | "extra": { 24 | "component": { 25 | "scripts": [ 26 | "jquery.js" 27 | ], 28 | "files": [ 29 | "jquery.min.js", 30 | "jquery-migrate.js", 31 | "jquery-migrate.min.js" 32 | ] 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/social-buttons.html: -------------------------------------------------------------------------------- 1 |
    2 | 16 |
    17 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .25em .6em; 8 | font-size: 75%; 9 | font-weight: 500; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: middle; 15 | background-color: @gray-light; 16 | border-radius: .25em; 17 | 18 | // Add hover effects, but only for links 19 | &[href] { 20 | &:hover, 21 | &:focus { 22 | color: @label-link-hover-color; 23 | text-decoration: none; 24 | cursor: pointer; 25 | background-color: darken(@gray-light, 10%); 26 | } 27 | } 28 | } 29 | 30 | // Colors 31 | // Contextual variations (linked labels get darker on :hover) 32 | .label-danger { 33 | .label-variant(@label-danger-bg); 34 | } 35 | 36 | .label-success { 37 | .label-variant(@label-success-bg); 38 | } 39 | 40 | .label-warning { 41 | .label-variant(@label-warning-bg); 42 | } 43 | 44 | .label-info { 45 | .label-variant(@label-info-bg); 46 | } 47 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/footer.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 14 | 27 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/media.less: -------------------------------------------------------------------------------- 1 | // Media objects 2 | // Source: http://stubbornella.org/content/?p=497 3 | // -------------------------------------------------- 4 | 5 | 6 | // Common styles 7 | // ------------------------- 8 | 9 | // Clear the floats 10 | .media, 11 | .media-body { 12 | overflow: hidden; 13 | zoom: 1; 14 | } 15 | 16 | // Proper spacing between instances of .media 17 | .media, 18 | .media .media { 19 | margin-top: 15px; 20 | } 21 | .media:first-child { 22 | margin-top: 0; 23 | } 24 | 25 | // For images and videos, set to block 26 | .media-object { 27 | display: block; 28 | } 29 | 30 | // Reset margins on headings for tighter default spacing 31 | .media-heading { 32 | margin: 0 0 5px; 33 | } 34 | 35 | 36 | // Media image alignment 37 | // ------------------------- 38 | 39 | .media { 40 | > .pull-left { 41 | margin-right: 10px; 42 | } 43 | > .pull-right { 44 | margin-left: 10px; 45 | } 46 | } 47 | 48 | 49 | // Media list variation 50 | // ------------------------- 51 | 52 | // Undo default ul/ol styles 53 | .media-list { 54 | padding-left: 0; 55 | list-style: none; 56 | } 57 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | .clearfix(); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pagination-bg; 19 | border: 1px solid @pagination-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pagination-active-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pagination-bg; 51 | cursor: not-allowed; 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/indeterminate/demo/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 5 |
    6 |
    7 |

    What?

    8 | 9 |

    Provides an easy way to toggle a checkbox input's special 'indeterminate' property. This is a visual toggle only and in no way affects the model or value outside of native browser behavior at this time.

    10 | 11 |

    12 |
    13 | 14 |

    15 | 16 |

    Why?

    17 | 18 |

    Convenience.

    19 |
    20 |
    21 |

    How?

    22 | 23 |
    24 | Indeterminate: <input type="checkbox" ui-indeterminate="isKnown" readonly>
    25 | Toggle indeterminate here: <input type="checkbox" ng-model="isKnown">
    26 | 
    27 |
    28 |
    29 |
    30 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/event/demo/index.html: -------------------------------------------------------------------------------- 1 | 8 |
    9 | 12 |
    13 |
    14 |

    What?

    15 | 16 |

    Bind a callback to any event not natively supported by Angular.

    17 | 18 |

    19 | 20 |

    Why?

    21 | 22 |

    For Blurs, Focus, Double-Clicks or any other event you may choose that isn't built-in.

    23 |
    24 |
    25 |

    How?

    26 | 27 |

    You can alternatively pass multiple events as an object:

    28 |
    29 | <input ui-event="{ blur : 'blurCallback()' }">
    30 | 
    31 | <script>
    32 | $scope.blurCallback = function() {
    33 | alert('Goodbye');
    34 | };
    35 | </script>
    36 | 
    37 |
    38 |
    39 |
    -------------------------------------------------------------------------------- /bower_components/bootstrap/less/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base classes 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: bold; 13 | color: @badge-color; 14 | line-height: 1; 15 | vertical-align: middle; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: 10px; 20 | 21 | // Empty labels/badges collapse 22 | &:empty { 23 | display: none; 24 | } 25 | } 26 | 27 | // Hover state, but only for links 28 | a.badge { 29 | &:hover, 30 | &:focus { 31 | color: @badge-link-hover-color; 32 | text-decoration: none; 33 | cursor: pointer; 34 | } 35 | } 36 | 37 | // Quick fix for labels/badges in buttons 38 | .btn .badge { 39 | position: relative; 40 | top: -1px; 41 | } 42 | 43 | // Account for counters in navs 44 | a.list-group-item.active > .badge, 45 | .nav-pills > .active > a > .badge { 46 | color: @badge-active-color; 47 | background-color: @badge-active-bg; 48 | } 49 | .nav-pills > li > a > .badge { 50 | margin-left: 3px; 51 | } 52 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/indeterminate/test/indeterminateSpec.js: -------------------------------------------------------------------------------- 1 | describe('uiIndeterminate', function () { 2 | var $scope, $compile; 3 | 4 | beforeEach(module('ui.indeterminate')); 5 | beforeEach(inject(function (_$rootScope_, _$compile_) { 6 | $compile = _$compile_; 7 | $scope = _$rootScope_.$new(); 8 | })); 9 | 10 | it('should watch ui-indeterminate and toggle the indeterminate property', function(){ 11 | elm = $compile('')($scope); 12 | expect(elm[0].indeterminate).toBeFalsy(); 13 | $scope.isUnknown = true; 14 | $scope.$apply(); 15 | expect(elm[0].indeterminate).toBe(true); 16 | $scope.isUnknown = false; 17 | $scope.$apply(); 18 | expect(elm[0].indeterminate).toBe(false); 19 | }); 20 | 21 | it('should do nothing if not attached to input[type=checkbox]', function(){ 22 | elm = $compile('')($scope); 23 | expect(elm[0].indeterminate).toBeFalsy(); 24 | $scope.isUnknown = true; 25 | $scope.$apply(); 26 | expect(elm[0].indeterminate).toBeFalsy(); 27 | $scope.isUnknown = false; 28 | $scope.$apply(); 29 | expect(elm[0].indeterminate).toBeFalsy(); 30 | }); 31 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/_config.yml: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | markdown: rdiscount 3 | pygments: true 4 | 5 | # Permalinks 6 | permalink: pretty 7 | 8 | # Server 9 | destination: ./_gh_pages 10 | exclude: [".editorconfig", ".gitignore", ".ruby-version", "bower.json", "composer.json", "CONTRIBUTING.md", "CNAME", "LICENSE", "Gruntfile.js", "package.json", "node_modules", "README.md", "less"] 11 | port: 9001 12 | 13 | # Custom vars 14 | repo: https://github.com/twbs/bootstrap 15 | download: https://github.com/twbs/bootstrap/archive/v3.0.0-rc1.zip 16 | download_dist: https://github.com/twbs/bootstrap/releases/download/v3.0.0-rc1/bs-v3.0.0-rc1-dist.zip 17 | 18 | examples: http://examples.getbootstrap.com 19 | examples_repo: https://github.com/twbs/bootstrap-examples 20 | 21 | glyphicons: http://glyphicons.getbootstrap.com 22 | glyphicons_repo: https://github.com/twbs/bootstrap-glyphicons 23 | 24 | blog: http://blog.getbootstrap.com 25 | expo: http://expo.getbootstrap.com 26 | 27 | cdn_css: //netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css 28 | cdn_js: //netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/js/bootstrap.min.js 29 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/highlight/demo/index.html: -------------------------------------------------------------------------------- 1 | 6 | 7 |
    8 | 11 |

    What?

    12 | 13 |

    Easily highlight some text in a block

    14 | 15 |
    16 |

    17 | 18 |

    19 | 20 |

    21 |
    22 | 23 |

    How?

    24 |
    25 | <label><input type="checkbox" ng-model="caseSensitive"> Case Sensitive?</label>
    26 | <input placeholder="Enter some text to highlight" value="you" ng-model="highlightText">
    27 | <p ng-bind-html-unsafe="'Hello there, how are you today? I\'m fine thank you.' | highlight:highlightText:caseSensitive"></p>
    28 | 
    29 | <style>
    30 | .ui-match { background: yellow; }
    31 | </style>
    32 | 
    33 |
    -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/event/event.js: -------------------------------------------------------------------------------- 1 | /** 2 | * General-purpose Event binding. Bind any event not natively supported by Angular 3 | * Pass an object with keynames for events to ui-event 4 | * Allows $event object and $params object to be passed 5 | * 6 | * @example 7 | * @example 8 | * 9 | * @param ui-event {string|object literal} The event to bind to as a string or a hash of events with their callbacks 10 | */ 11 | angular.module('ui.event',[]).directive('uiEvent', ['$parse', 12 | function ($parse) { 13 | return function ($scope, elm, attrs) { 14 | var events = $scope.$eval(attrs.uiEvent); 15 | angular.forEach(events, function (uiEvent, eventName) { 16 | var fn = $parse(uiEvent); 17 | elm.bind(eventName, function (evt) { 18 | var params = Array.prototype.slice.call(arguments); 19 | //Take out first paramater (event object); 20 | params = params.splice(1); 21 | fn($scope, {$event: evt, $params: params}); 22 | if (!$scope.$$phase) { 23 | $scope.$apply(); 24 | } 25 | }); 26 | }); 27 | }; 28 | }]); 29 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | angular.module('refridge', ['ui.bootstrap', 'firebase', 'ui.keypress', 'ui.jq']).run(function($rootScope, angularFire, angularFireAuth){ 2 | var url = 'https://refridge.firebaseio.com/'; 3 | angularFire(url, $rootScope, 'refridge', {}); 4 | angularFireAuth.initialize(url, { scope: $rootScope, name: 'user'}); 5 | $rootScope.login = function() { 6 | angularFireAuth.login('github'); 7 | }; 8 | $rootScope.logout = function() { 9 | angularFireAuth.logout(); 10 | }; 11 | $rootScope.init = function(){ 12 | $rootScope.refridge.lists = []; 13 | }; 14 | $rootScope.purchase = function(item){ 15 | item.purchased = Date(); 16 | }; 17 | $rootScope.unpurchase = function(item){ 18 | item.purchased = false; 19 | }; 20 | $rootScope.create = function(){ 21 | $rootScope.activeList = { 22 | name: 'New List', 23 | items: [], 24 | created: Date() 25 | }; 26 | $rootScope.refridge.lists.push($rootScope.activeList); 27 | }; 28 | $rootScope.remove = function(list) { 29 | if (confirm('Delete this list?')) 30 | $rootScope.refridge.lists.splice($rootScope.refridge.lists.indexOf(list),1); 31 | $rootScope.activeList = false; 32 | }; 33 | $rootScope.open = function(list) { 34 | $rootScope.activeList = list; 35 | if (!list.items) 36 | list.items = []; 37 | }; 38 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/unit/scrollspy.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | module("scrollspy") 4 | 5 | test("should provide no conflict", function () { 6 | var scrollspy = $.fn.scrollspy.noConflict() 7 | ok(!$.fn.scrollspy, 'scrollspy was set back to undefined (org value)') 8 | $.fn.scrollspy = scrollspy 9 | }) 10 | 11 | test("should be defined on jquery object", function () { 12 | ok($(document.body).scrollspy, 'scrollspy method is defined') 13 | }) 14 | 15 | test("should return element", function () { 16 | ok($(document.body).scrollspy()[0] == document.body, 'document.body returned') 17 | }) 18 | 19 | test("should switch active class on scroll", function () { 20 | var sectionHTML = '
    ' 21 | , $section = $(sectionHTML).append('#qunit-fixture') 22 | , topbarHTML ='
    ' 23 | + '
    ' 24 | + '
    ' 25 | + '

    Bootstrap

    ' 26 | + '' 29 | + '
    ' 30 | + '
    ' 31 | + '
    ' 32 | , $topbar = $(topbarHTML).scrollspy() 33 | 34 | ok($topbar.find('.active', true)) 35 | }) 36 | 37 | }) 38 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/nav-main.html: -------------------------------------------------------------------------------- 1 | 30 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and blocK) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | pre { 9 | font-family: @font-family-monospace; 10 | } 11 | 12 | // Inline code 13 | code { 14 | padding: 2px 4px; 15 | font-size: 90%; 16 | color: @code-color; 17 | background-color: @code-bg; 18 | white-space: nowrap; 19 | border-radius: 4px; 20 | } 21 | 22 | // Blocks of code 23 | pre { 24 | display: block; 25 | padding: ((@line-height-computed - 1) / 2); 26 | margin: 0 0 (@line-height-computed / 2); 27 | font-size: (@font-size-base - 1); // 14px to 13px 28 | line-height: @line-height-base; 29 | word-break: break-all; 30 | word-wrap: break-word; 31 | color: @gray-dark; 32 | background-color: @pre-bg; 33 | border: 1px solid @pre-border-color; 34 | border-radius: @border-radius-base; 35 | 36 | // Make prettyprint styles more spaced out for readability 37 | &.prettyprint { 38 | margin-bottom: @line-height-computed; 39 | } 40 | 41 | // Account for some code outputs that place code tags in pre tags 42 | code { 43 | padding: 0; 44 | color: inherit; 45 | white-space: pre-wrap; 46 | background-color: transparent; 47 | border: 0; 48 | } 49 | } 50 | 51 | // Enable scrollable blocks of code 52 | .pre-scrollable { 53 | max-height: 340px; 54 | overflow-y: scroll; 55 | } 56 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/scrollfix/demo/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 5 |
    6 |
    7 |

    What?

    8 | 9 |

    Add a 'ui-fixed' class to elements when the page scrolls past them

    10 | 11 |
    12 |

    They see me scrollin...

    13 | Try scrolling past the red text or changing the offset 14 |
    15 |
    16 |
    17 |

    Why?

    18 | 19 |

    Make elements sticky, or simply appear different after scrolling past a certain point

    20 | 21 |

    Remember that this directive 22 | only adds a 23 | ui-scrollfix class to the element. It is up to you to add the corresponding CSS rules, however it also gives you the ability to add other rules instead if you prefer. 24 |

    25 |
    26 |
    27 | 28 |

    How?

    29 |
    <p ui-scrollfix>They see me scrollin...</p>
    30 |

    You can optionally pass a number to 31 | ui-scrollfix which would override the detected y-offset of the element. Values can be either absolute 32 | 600 or offset from the calculated value -50 or +100.

    33 |
    -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/unique/unique.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Filters out all duplicate items from an array by checking the specified key 3 | * @param [key] {string} the name of the attribute of each object to compare for uniqueness 4 | if the key is empty, the entire object will be compared 5 | if the key === false then no filtering will be performed 6 | * @return {array} 7 | */ 8 | angular.module('ui.unique',[]).filter('unique', ['$parse', function ($parse) { 9 | 10 | return function (items, filterOn) { 11 | 12 | if (filterOn === false) { 13 | return items; 14 | } 15 | 16 | if ((filterOn || angular.isUndefined(filterOn)) && angular.isArray(items)) { 17 | var hashCheck = {}, newItems = [], 18 | get = angular.isString(filterOn) ? $parse(filterOn) : function (item) { return item; }; 19 | 20 | var extractValueToCompare = function (item) { 21 | return angular.isObject(item) ? get(item) : item; 22 | }; 23 | 24 | angular.forEach(items, function (item) { 25 | var valueToCheck, isDuplicate = false; 26 | 27 | for (var i = 0; i < newItems.length; i++) { 28 | if (angular.equals(extractValueToCompare(newItems[i]), extractValueToCompare(item))) { 29 | isDuplicate = true; 30 | break; 31 | } 32 | } 33 | if (!isDuplicate) { 34 | newItems.push(item); 35 | } 36 | 37 | }); 38 | items = newItems; 39 | } 40 | return items; 41 | }; 42 | }]); 43 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_layouts/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% include header.html %} 6 | 7 | 8 | 9 | 10 | 11 | {% include nav-main.html %} 12 | 13 | 14 | {{ content }} 15 | 16 | 17 | {% include old-bs-docs.html %} 18 | 19 |
    20 | {% include social-buttons.html %} 21 | 22 | 36 |
    37 | 38 | 39 | {% include footer.html %} 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | refridge 2 | ====== 3 | 4 | Refridge is a simple Shopping List webapp with one huge feature: **it knows when your food is going to expire!** 5 | 6 | **Original Idea** 7 | 8 | [Click here to checkout the blog post](http://deansofer.com/posts/view/18/Shopping-List-Expiration-Reminder-App) 9 | 10 | **How?** 11 | 12 | When you add food to your shopping list, you will be able to specify the category and type of food (along with normal shopping-list notes). When you check off items in shopping mode, they are considered 'purchased' at that date (approximately). A database will be developed that contains expiration times if the food is frozen, refrigerated, left out, or cooked. 13 | 14 | **So what?** 15 | 16 | Well now you can get features such as: 17 | * Notifications for certain food types when they are going to expire 18 | * Recipe suggestions using soon-to-expire ingredients (integration with 3rd party?) 19 | * Start a new shopping list with already-expired items 20 | * Shared family shopping lists 21 | * Know what you need to pick up from the store without having to check the fridge 22 | 23 | ## Setup 24 | 1. `$ bower install` 25 | 2. Setup Firebase authentication keys for 'Github' or whatever 26 | 3. `$ python -m SimpleHTTPServer` or whatever way you wish to host 27 | 4. Visit `localhost:8000` or whatever in the browser 28 | 29 | # Roadmap 30 | * Integration with online DB of food expiration times 31 | * New custom DB of food expiration times 32 | * Password-locked lists 33 | * Shareable lists 34 | * All features in the **so what?** section 35 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/test/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Thu May 02 2013 23:29:14 GMT+0200 (CEST) 3 | 4 | 5 | // base path, that will be used to resolve files and exclude 6 | basePath = '..'; 7 | 8 | 9 | // list of files / patterns to load in the browser 10 | files = [ 11 | JASMINE, 12 | JASMINE_ADAPTER, 13 | 'components/jquery/jquery.js', 14 | 'components/angular/angular.js', 15 | 'components/angular-mocks/angular-mocks.js', 16 | 'modules/*/*.js', 17 | 'modules/*/test/*Spec.js' 18 | ]; 19 | 20 | 21 | // list of files to exclude 22 | exclude = [ 23 | 24 | ]; 25 | 26 | 27 | // test results reporter to use 28 | // possible values: 'dots', 'progress', 'junit' 29 | reporters = ['dots']; 30 | 31 | 32 | // enable / disable colors in the output (reporters and logs) 33 | colors = true; 34 | 35 | 36 | // level of logging 37 | // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 38 | logLevel = LOG_INFO; 39 | 40 | 41 | // enable / disable watching file and executing tests whenever any file changes 42 | autoWatch = false; 43 | 44 | 45 | // Start these browsers, currently available: 46 | // - Chrome 47 | // - ChromeCanary 48 | // - Firefox 49 | // - Opera 50 | // - Safari (only Mac) 51 | // - PhantomJS 52 | // - IE (only Windows) 53 | browsers = ['Chrome', 'Firefox']; 54 | 55 | 56 | // If browser does not capture in given timeout [ms], kill it 57 | captureTimeout = 60000; 58 | 59 | 60 | // Continuous Integration mode 61 | // if true, it capture browsers, run tests and exit 62 | singleRun = false; 63 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/inflector/demo/index.html: -------------------------------------------------------------------------------- 1 |
    2 | 5 |

    What?

    6 | 7 |

    Converts a string to an alternative format.

    8 | 9 |
    10 |

    11 | 12 | 13 | 14 |

    15 | 16 |

    17 | 18 |

    {{inflectorText|inflector:inflectorType}}

    19 |
    20 | 21 |

    How?

    22 |
    23 | <label><input type="radio" value="humanize" ng-model="inflectorType"> Humanize (Default)</label>
    24 | <label><input type="radio" value="underscore" ng-model="inflectorType"> Underscore</label>
    25 | <label><input type="radio" value="variable" ng-model="inflectorType"> Variable</label>
    26 | 
    27 | <input placeholder="Enter some text to inflect" ng-model="inflectorText">
    28 | <p>{{inflectorText|inflector:inflectorType}}</p>
    29 | 
    30 | <script>
    31 | $scope.inflectorText = 'Here Is my_phoneNumber';
    32 | $scope.inflectorType = 'humanize';
    33 | </script>
    34 | 
    35 |
    -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/format/format.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * A replacement utility for internationalization very similar to sprintf. 4 | * 5 | * @param replace {mixed} The tokens to replace depends on type 6 | * string: all instances of $0 will be replaced 7 | * array: each instance of $0, $1, $2 etc. will be placed with each array item in corresponding order 8 | * object: all attributes will be iterated through, with :key being replaced with its corresponding value 9 | * @return string 10 | * 11 | * @example: 'Hello :name, how are you :day'.format({ name:'John', day:'Today' }) 12 | * @example: 'Records $0 to $1 out of $2 total'.format(['10', '20', '3000']) 13 | * @example: '$0 agrees to all mentions $0 makes in the event that $0 hits a tree while $0 is driving drunk'.format('Bob') 14 | */ 15 | angular.module('ui.format',[]).filter('format', function(){ 16 | return function(value, replace) { 17 | var target = value; 18 | if (angular.isString(target) && replace !== undefined) { 19 | if (!angular.isArray(replace) && !angular.isObject(replace)) { 20 | replace = [replace]; 21 | } 22 | if (angular.isArray(replace)) { 23 | var rlen = replace.length; 24 | var rfx = function (str, i) { 25 | i = parseInt(i, 10); 26 | return (i>=0 && i p, 63 | > ul { 64 | margin-bottom: 0; 65 | } 66 | p + p { 67 | margin-top: 5px; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/inflector/test/inflectorSpec.js: -------------------------------------------------------------------------------- 1 | describe('inflector', function () { 2 | var inflectorFilter, testPhrase = 'here isMy_phone_number'; 3 | 4 | beforeEach(module('ui.inflector')); 5 | beforeEach(inject(function ($filter) { 6 | inflectorFilter = $filter('inflector'); 7 | })); 8 | 9 | describe('default', function () { 10 | it('should default to humanize', function () { 11 | expect(inflectorFilter(testPhrase)).toEqual('Here Is My Phone Number'); 12 | }); 13 | it('should fail gracefully for invalid input', function () { 14 | expect(inflectorFilter(undefined)).toBeUndefined(); 15 | }); 16 | it('should do nothing for empty input', function () { 17 | expect(inflectorFilter('')).toEqual(''); 18 | }); 19 | }); 20 | 21 | describe('humanize', function () { 22 | it('should uppercase first letter and separate words with a space', function () { 23 | expect(inflectorFilter(testPhrase, 'humanize')).toEqual('Here Is My Phone Number'); 24 | }); 25 | }); 26 | describe('underscore', function () { 27 | it('should lowercase everything and separate words with an underscore', function () { 28 | expect(inflectorFilter(testPhrase, 'underscore')).toEqual('here_is_my_phone_number'); 29 | }); 30 | }); 31 | describe('variable', function () { 32 | it('should remove all separators and camelHump the phrase', function () { 33 | expect(inflectorFilter(testPhrase, 'variable')).toEqual('hereIsMyPhoneNumber'); 34 | }); 35 | it('should do nothing if already formatted properly', function () { 36 | expect(inflectorFilter("hereIsMyPhoneNumber", 'variable')).toEqual('hereIsMyPhoneNumber'); 37 | }); 38 | }); 39 | }); -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/reset/demo/index.html: -------------------------------------------------------------------------------- 1 | 24 | 29 |
    30 | 33 |
    34 |
    35 |

    What?

    36 | 37 |

    Adds an icon or link that empties the input element

    38 | 39 |

    Resets to empty:    

    40 | 41 |

    Resets to "Empty":

    42 | 43 |

    44 | Remember that you control the CSS. Make the icon always show by changing the CSS to match the 45 | :hover state.

    46 |
    47 |
    48 |

    How?

    49 | 50 |

    You can set an app-wide reset value using ui.config

    51 |
    52 | <input ng-model="resetModel" ui-reset>
    53 | <input ng-model="resetModel" ui-reset=" 'Empty' ">
    54 | 
    55 | <script>
    56 |     $scope.resetModel = 'Hover over me';
    57 | </script>
    58 | 
    59 |
    60 |
    61 |
    -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/README.md: -------------------------------------------------------------------------------- 1 | # AngularUI - The companion suite for AngularJS 2 | 3 | *** 4 | 5 | [![Build Status](https://travis-ci.org/angular-ui/ui-utils.png?branch=master)](https://travis-ci.org/angular-ui/ui-utils) 6 | 7 | ## Usage 8 | 9 | ### Requirements 10 | 11 | * **AngularJS v1.0.0+** is currently required. 12 | * **jQuery*** Until the refactor is complete, some directives still require jQuery 13 | 14 | ## Installation 15 | 16 | Add the specific modules to your dependencies, or add the entire lib by depending on `ui.utils` 17 | 18 | ```javascript 19 | angular.module('myApp', ['ui.keypress', 'ui.event', ...]) 20 | // or if ALL modules are loaded along with modules/utils.js 21 | angular.module('myApp', ['ui.utils']) 22 | ``` 23 | 24 | Each directive and filter is now it's own module and will have a relevant README.md in their respective folders 25 | 26 | ## Development 27 | 28 | At this time, we do not have a build script. You must include all `.js` files you wish to work on. 29 | We will likely be adding a `Gruntfile.js` in the near future for this 30 | 31 | ### Requirements 32 | 33 | 0. Install [Node.js](http://nodejs.org/) and NPM (should come with) 34 | 35 | 1. Install global dependencies `grunt-cli`, `bower`, and `karma`: 36 | 37 | ```bash 38 | $ npm install -g karma grunt-cli bower 39 | ``` 40 | 41 | 2. Install local dependencies: 42 | 43 | ```bash 44 | $ npm install 45 | $ bower install 46 | ``` 47 | 48 | ### Running Tests 49 | 50 | Make sure all tests pass in order for your Pull Request to be accepted 51 | 52 | You can choose what browsers to test in: `Chrome,ChromeCanary,Firefox,PhantomJS` 53 | 54 | ```bash 55 | $ karma start --browsers=Chrome,Firefox test/karma.conf.js --single-run=true 56 | ``` 57 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/inflector/inflector.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Converts variable-esque naming conventions to something presentational, capitalized words separated by space. 3 | * @param {String} value The value to be parsed and prettified. 4 | * @param {String} [inflector] The inflector to use. Default: humanize. 5 | * @return {String} 6 | * @example {{ 'Here Is my_phoneNumber' | inflector:'humanize' }} => Here Is My Phone Number 7 | * {{ 'Here Is my_phoneNumber' | inflector:'underscore' }} => here_is_my_phone_number 8 | * {{ 'Here Is my_phoneNumber' | inflector:'variable' }} => hereIsMyPhoneNumber 9 | */ 10 | angular.module('ui.inflector',[]).filter('inflector', function () { 11 | function ucwords(text) { 12 | return text.replace(/^([a-z])|\s+([a-z])/g, function ($1) { 13 | return $1.toUpperCase(); 14 | }); 15 | } 16 | 17 | function breakup(text, separator) { 18 | return text.replace(/[A-Z]/g, function (match) { 19 | return separator + match; 20 | }); 21 | } 22 | 23 | var inflectors = { 24 | humanize: function (value) { 25 | return ucwords(breakup(value, ' ').split('_').join(' ')); 26 | }, 27 | underscore: function (value) { 28 | return value.substr(0, 1).toLowerCase() + breakup(value.substr(1), '_').toLowerCase().split(' ').join('_'); 29 | }, 30 | variable: function (value) { 31 | value = value.substr(0, 1).toLowerCase() + ucwords(value.split('_').join(' ')).substr(1).split(' ').join(''); 32 | return value; 33 | } 34 | }; 35 | 36 | return function (text, inflector, separator) { 37 | if (inflector !== false && angular.isString(text)) { 38 | inflector = inflector || 'humanize'; 39 | return inflectors[inflector](text); 40 | } else { 41 | return text; 42 | } 43 | }; 44 | }); 45 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/format/test/formatSpec.js: -------------------------------------------------------------------------------- 1 | describe('format', function() { 2 | var formatFilter; 3 | 4 | beforeEach(module('ui.format')); 5 | beforeEach(inject(function($filter) { 6 | formatFilter = $filter('format'); 7 | })); 8 | 9 | it('should return original value if not a string', function() { 10 | expect(formatFilter(undefined, 'bob')).toEqual(undefined); 11 | expect(formatFilter(null, 'bob')).toEqual(null); 12 | expect(formatFilter('', 'bob')).toEqual(''); 13 | expect(formatFilter(1, 'bob')).toEqual(1); 14 | }); 15 | it('should return original string if no tokens present', function() { 16 | expect(formatFilter('abc', 'bob')).toEqual('abc'); 17 | }); 18 | it('should replace all instances of $0 if string token is passed', function() { 19 | expect(formatFilter('First $0, then $0, finally $0', 'bob')).toEqual('First bob, then bob, finally bob'); 20 | }); 21 | it('should replace all instances of $n based on order of token array', function() { 22 | expect(formatFilter('First is $0, then $1, finally $2', ['bob','frank','dianne'])).toEqual('First is bob, then frank, finally dianne'); 23 | }); 24 | it('should replace all instances of $n even when replace with other tokens', function() { 25 | expect(formatFilter('First is $0, then $1, finally $2', ['$1','$2','$0'])).toEqual('First is $1, then $2, finally $0'); 26 | }); 27 | it('should replace all instances :tokens based on keys of token object', function() { 28 | expect(formatFilter('First is :first, next is :second, finally there is :third', {first:'bob',second:'frank',third:'dianne'})).toEqual('First is bob, next is frank, finally there is dianne'); 29 | }); 30 | it('should do nothing if tokens are undefined', function() { 31 | expect(formatFilter('Hello There')).toEqual('Hello There'); 32 | }); 33 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/nav-customize.html: -------------------------------------------------------------------------------- 1 |
  • 2 | LESS components 3 |
  • 4 |
  • 5 | jQuery plugins 6 |
  • 7 |
  • 8 | LESS variables 9 | 37 |
  • 38 |
  • 39 | Download 40 |
  • 41 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/scrollfix/test/scrollfixSpec.js: -------------------------------------------------------------------------------- 1 | /*global describe, beforeEach, module, inject, it, spyOn, expect, $ */ 2 | describe('uiScrollfix', function () { 3 | 'use strict'; 4 | 5 | var scope, $compile, $window; 6 | beforeEach(module('ui.scrollfix')); 7 | beforeEach(inject(function (_$rootScope_, _$compile_, _$window_) { 8 | scope = _$rootScope_.$new(); 9 | $compile = _$compile_; 10 | $window = _$window_; 11 | })); 12 | 13 | describe('compiling this directive', function () { 14 | it('should bind to window "scroll" event', function () { 15 | spyOn($.fn, 'bind'); 16 | $compile('
    ')(scope); 17 | expect($.fn.bind).toHaveBeenCalled(); 18 | expect($.fn.bind.mostRecentCall.args[0]).toBe('scroll'); 19 | }); 20 | }); 21 | describe('scrolling the window', function () { 22 | it('should add the ui-scrollfix class if the offset is greater than specified', function () { 23 | var element = $compile('
    ')(scope); 24 | angular.element($window).trigger('scroll'); 25 | expect(element.hasClass('ui-scrollfix')).toBe(true); 26 | }); 27 | it('should remove the ui-scrollfix class if the offset is less than specified (using absolute coord)', function () { 28 | var element = $compile('
    ')(scope); 29 | angular.element($window).trigger('scroll'); 30 | expect(element.hasClass('ui-scrollfix')).toBe(false); 31 | 32 | }); 33 | it('should remove the ui-scrollfix class if the offset is less than specified (using relative coord)', function () { 34 | var element = $compile('
    ')(scope); 35 | angular.element($window).trigger('scroll'); 36 | expect(element.hasClass('ui-scrollfix')).toBe(false); 37 | }); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/ie-shiv/README.md: -------------------------------------------------------------------------------- 1 | # angular-ui-ieshiv 2 | 3 | ## Important! 4 | 5 | If not installed properly, angular WILL throw an exception. 6 | 7 | "No module: ui.directives" 8 | 9 | Which means you have not included the angular-ui library in the file, or the shiv is in the wrong place. 10 | 11 | WHY? Well, angular is throwing the exception and I can't catch and stop it. If properly setup, you should be good. 12 | If not, then you should probably fix it or yank it out. Of course, then you won't have the shiv for ie. 13 | 14 | ## Description 15 | 16 | This is used in order to support IE versions that do not support custom elements. For example: 17 | 18 | 19 | 20 | 21 | IE 8 and earlier do not allow custom tag elements into the DOM. It just ignores them. 22 | In order to remedy, the trick is to tell browser by calling document.createElement('my-custom-element'). 23 | Then you can use, ..., you also may need to define css styles. 24 | 25 | In current version, this will automagically define directives found in the ui.directives module and 26 | angular's ngView, ngInclude, ngPluralize directives. 27 | 28 | ## Usage 29 | 30 | The shiv needs to run after angular has compiled the application. Best to load angular-ui-ieshiv.js at 31 | bottom of section. 32 | 33 | 34 | 35 | ### Options 36 | 37 | There will be 38 | 39 | ### Notes 40 | - modules are searched for directives 41 | - only IE 8 and earlier will cause shiv to run 42 | - there will be a slight performance hit (for IE) 43 | 44 | ### Todo 45 | - provide ability to specify which directives to include/exclude 46 | - automagically locate all custom directives in current ng-app (this will involve recursion) 47 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Bootstrap Plugin Test Suite 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
    45 |

    Bootstrap Plugin Test Suite

    46 |

    47 |

    48 |
      49 |
      50 |
      51 | 52 | 53 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/print.less: -------------------------------------------------------------------------------- 1 | // 2 | // Basic print styles 3 | // -------------------------------------------------- 4 | // Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css 5 | 6 | @media print { 7 | 8 | * { 9 | text-shadow: none !important; 10 | color: #000 !important; // Black prints faster: h5bp.com/s 11 | background: transparent !important; 12 | box-shadow: none !important; 13 | } 14 | 15 | a, 16 | a:visited { 17 | text-decoration: underline; 18 | } 19 | 20 | a[href]:after { 21 | content: " (" attr(href) ")"; 22 | } 23 | 24 | abbr[title]:after { 25 | content: " (" attr(title) ")"; 26 | } 27 | 28 | // Don't show links for images, or javascript/internal links 29 | .ir a:after, 30 | a[href^="javascript:"]:after, 31 | a[href^="#"]:after { 32 | content: ""; 33 | } 34 | 35 | pre, 36 | blockquote { 37 | border: 1px solid #999; 38 | page-break-inside: avoid; 39 | } 40 | 41 | thead { 42 | display: table-header-group; // h5bp.com/t 43 | } 44 | 45 | tr, 46 | img { 47 | page-break-inside: avoid; 48 | } 49 | 50 | img { 51 | max-width: 100% !important; 52 | } 53 | 54 | @page { 55 | margin: 2cm .5cm; 56 | } 57 | 58 | p, 59 | h2, 60 | h3 { 61 | orphans: 3; 62 | widows: 3; 63 | } 64 | 65 | h2, 66 | h3 { 67 | page-break-after: avoid; 68 | } 69 | 70 | // Bootstrap components 71 | .navbar { 72 | display: none; 73 | } 74 | .table { 75 | td, 76 | th { 77 | background-color: #fff !important; 78 | } 79 | } 80 | .btn, 81 | .dropup > .btn { 82 | > .caret { 83 | border-top-color: #000 !important; 84 | } 85 | } 86 | .label { 87 | border: 1px solid #000; 88 | } 89 | 90 | .table { 91 | border-collapse: collapse !important; 92 | } 93 | .table-bordered { 94 | th, 95 | td { 96 | border: 1px solid #ddd !important; 97 | } 98 | } 99 | 100 | } 101 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/scaffolding.less: -------------------------------------------------------------------------------- 1 | // 2 | // Scaffolding 3 | // -------------------------------------------------- 4 | 5 | 6 | // Reset the box-sizing 7 | // ------------------------- 8 | 9 | * { 10 | .box-sizing(border-box); 11 | } 12 | 13 | 14 | // Body reset 15 | // ------------------------- 16 | 17 | html { 18 | font-size: 62.5%; 19 | -webkit-tap-highlight-color: rgba(0,0,0,0); 20 | } 21 | 22 | body { 23 | font-family: @font-family-base; 24 | font-size: @font-size-base; 25 | line-height: @line-height-base; 26 | color: @text-color; 27 | background-color: @body-bg; 28 | } 29 | 30 | // Reset fonts for relevant elements 31 | input, 32 | button, 33 | select, 34 | textarea { 35 | font-family: inherit; 36 | font-size: inherit; 37 | line-height: inherit; 38 | } 39 | 40 | 41 | // Links 42 | // ------------------------- 43 | 44 | a { 45 | color: @link-color; 46 | text-decoration: none; 47 | } 48 | a:hover, 49 | a:focus { 50 | color: @link-hover-color; 51 | text-decoration: underline; 52 | } 53 | a:focus { 54 | .tab-focus(); 55 | } 56 | 57 | 58 | // Images 59 | // ------------------------- 60 | 61 | img { 62 | vertical-align: middle; 63 | } 64 | 65 | // Responsive images (ensure images don't scale beyond their parents) 66 | .img-responsive { 67 | display: inline-block; 68 | max-width: 100%; // Part 1: Set a maximum relative to the parent 69 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 70 | } 71 | 72 | // Rounded corners 73 | .img-rounded { 74 | border-radius: @border-radius-large; 75 | } 76 | 77 | // Image thumbnails 78 | // See thumbnails.less for `.img-thumbnail` 79 | 80 | // Perfect circle 81 | .img-circle { 82 | border-radius: 500px; // crank the border-radius so it works with most reasonably sized images 83 | } 84 | 85 | 86 | // Horizontal rules 87 | // ------------------------- 88 | 89 | hr { 90 | margin-top: @line-height-computed; 91 | margin-bottom: @line-height-computed; 92 | border: 0; 93 | border-top: 1px solid @hr-border; 94 | } 95 | 96 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_layouts/customize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% include header.html %} 6 | 7 | 8 | 9 | 10 | 11 | {% include nav-main.html %} 12 | 13 | 14 |
      15 |
      16 |

      {{ page.title }}

      17 |

      {{ page.lead }}

      18 | {% include ads.html %} 19 |
      20 |
      21 | 22 | 23 | {% include old-bs-docs.html %} 24 | 25 |
      26 |
      27 |

      Until RC2, the Bootstrap 3 customizer will be disabled. In the mean time, snag the compiled CSS and JavaScript. Hang tight!

      28 |
      29 |
      30 | 31 | 33 | 46 | 47 | 48 | {% include footer.html %} 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/showhide/showhide.js: -------------------------------------------------------------------------------- 1 | /** 2 | * uiShow Directive 3 | * 4 | * Adds a 'ui-show' class to the element instead of display:block 5 | * Created to allow tighter control of CSS without bulkier directives 6 | * 7 | * @param expression {boolean} evaluated expression to determine if the class should be added 8 | */ 9 | angular.module('ui.showhide',[]) 10 | .directive('uiShow', [function () { 11 | return function (scope, elm, attrs) { 12 | scope.$watch(attrs.uiShow, function (newVal, oldVal) { 13 | if (newVal) { 14 | elm.addClass('ui-show'); 15 | } else { 16 | elm.removeClass('ui-show'); 17 | } 18 | }); 19 | }; 20 | }]) 21 | 22 | /** 23 | * uiHide Directive 24 | * 25 | * Adds a 'ui-hide' class to the element instead of display:block 26 | * Created to allow tighter control of CSS without bulkier directives 27 | * 28 | * @param expression {boolean} evaluated expression to determine if the class should be added 29 | */ 30 | .directive('uiHide', [function () { 31 | return function (scope, elm, attrs) { 32 | scope.$watch(attrs.uiHide, function (newVal, oldVal) { 33 | if (newVal) { 34 | elm.addClass('ui-hide'); 35 | } else { 36 | elm.removeClass('ui-hide'); 37 | } 38 | }); 39 | }; 40 | }]) 41 | 42 | /** 43 | * uiToggle Directive 44 | * 45 | * Adds a class 'ui-show' if true, and a 'ui-hide' if false to the element instead of display:block/display:none 46 | * Created to allow tighter control of CSS without bulkier directives. This also allows you to override the 47 | * default visibility of the element using either class. 48 | * 49 | * @param expression {boolean} evaluated expression to determine if the class should be added 50 | */ 51 | .directive('uiToggle', [function () { 52 | return function (scope, elm, attrs) { 53 | scope.$watch(attrs.uiToggle, function (newVal, oldVal) { 54 | if (newVal) { 55 | elm.removeClass('ui-hide').addClass('ui-show'); 56 | } else { 57 | elm.removeClass('ui-show').addClass('ui-hide'); 58 | } 59 | }); 60 | }; 61 | }]); 62 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% if page.title == "Bootstrap" %} 8 | {{ page.title }} 9 | {% else if %} 10 | {{ page.title }} · Bootstrap 11 | {% endif %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 44 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/scrollfix/scrollfix.js: -------------------------------------------------------------------------------- 1 | /*global angular, $, document*/ 2 | /** 3 | * Adds a 'ui-scrollfix' class to the element when the page scrolls past it's position. 4 | * @param [offset] {int} optional Y-offset to override the detected offset. 5 | * Takes 300 (absolute) or -300 or +300 (relative to detected) 6 | */ 7 | angular.module('ui.scrollfix',[]).directive('uiScrollfix', ['$window', function ($window) { 8 | 'use strict'; 9 | return { 10 | require: '^?uiScrollfixTarget', 11 | link: function (scope, elm, attrs, uiScrollfixTarget) { 12 | var top = elm[0].offsetTop, 13 | $target = uiScrollfixTarget && uiScrollfixTarget.$element || angular.element($window); 14 | if (!attrs.uiScrollfix) { 15 | attrs.uiScrollfix = top; 16 | } else { 17 | // chartAt is generally faster than indexOf: http://jsperf.com/indexof-vs-chartat 18 | if (attrs.uiScrollfix.charAt(0) === '-') { 19 | attrs.uiScrollfix = top - attrs.uiScrollfix.substr(1); 20 | } else if (attrs.uiScrollfix.charAt(0) === '+') { 21 | attrs.uiScrollfix = top + parseFloat(attrs.uiScrollfix.substr(1)); 22 | } 23 | } 24 | 25 | $target.bind('scroll', function () { 26 | // if pageYOffset is defined use it, otherwise use other crap for IE 27 | var offset; 28 | if (angular.isDefined($window.pageYOffset)) { 29 | offset = $window.pageYOffset; 30 | } else { 31 | var iebody = (document.compatMode && document.compatMode !== "BackCompat") ? document.documentElement : document.body; 32 | offset = iebody.scrollTop; 33 | } 34 | if (!elm.hasClass('ui-scrollfix') && offset > attrs.uiScrollfix) { 35 | elm.addClass('ui-scrollfix'); 36 | } else if (elm.hasClass('ui-scrollfix') && offset < attrs.uiScrollfix) { 37 | elm.removeClass('ui-scrollfix'); 38 | } 39 | }); 40 | } 41 | }; 42 | }]).directive('uiScrollfixTarget', [function () { 43 | 'use strict'; 44 | return { 45 | controller: function($element) { 46 | this.$element = $element; 47 | } 48 | }; 49 | }]); 50 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/transition.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: transition.js v3.0.0 3 | * http://twbs.github.com/bootstrap/javascript.html#transitions 4 | * ======================================================================== 5 | * Copyright 2013 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ======================================================================== */ 19 | 20 | 21 | +function ($) { "use strict"; 22 | 23 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 24 | // ============================================================ 25 | 26 | function transitionEnd() { 27 | var el = document.createElement('bootstrap') 28 | 29 | var transEndEventNames = { 30 | 'WebkitTransition' : 'webkitTransitionEnd' 31 | , 'MozTransition' : 'transitionend' 32 | , 'OTransition' : 'oTransitionEnd otransitionend' 33 | , 'transition' : 'transitionend' 34 | } 35 | 36 | for (var name in transEndEventNames) { 37 | if (el.style[name] !== undefined) { 38 | return { end: transEndEventNames[name] } 39 | } 40 | } 41 | } 42 | 43 | // http://blog.alexmaccaw.com/css-transitions 44 | $.fn.emulateTransitionEnd = function (duration) { 45 | var called = false, $el = this 46 | $(this).one('webkitTransitionEnd', function () { called = true }) 47 | var callback = function () { if (!called) $($el).trigger('webkitTransitionEnd') } 48 | setTimeout(callback, duration) 49 | return this 50 | } 51 | 52 | $(function () { 53 | $.support.transition = transitionEnd() 54 | }) 55 | 56 | }(window.jQuery); 57 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/keypress/demo/index.html: -------------------------------------------------------------------------------- 1 | 9 |
      10 | 13 |
      14 |
      15 |

      What?

      16 | 17 |

      Bind an event to a particular keypress

      18 | 19 |

      22 | 23 |

      26 |

      27 | 28 |

      31 |
      32 |
      33 |

      Why?

      34 | 35 |

      Cuz you feel like it? Maybe I should stop doing the 'Why' sections, running out of explanations...

      36 | 37 |

      How?

      38 | 39 |

      The directive takes a hash (object) with the key code as the key and the callback function to fire as the value. The callback function takes an 'event' param

      40 | 41 |

      Note that 13 represents the RETURN key code.

      42 |
      43 | <textarea
      44 |         ui-keypress="{13:'keypressCallback($event)'}">
      45 | </textarea>
      46 | <textarea
      47 |         ui-keydown="{'enter alt-space':'keypressCallback($event)'}">
      48 | </textarea>
      49 | <textarea
      50 |         ui-keyup="{'enter':'keypressCallback($event)'}">
      51 | </textarea>
      52 | 
      53 | <script>
      54 |     $scope.keypressCallback = function($event) {
      55 |         alert('Voila!');
      56 |         $event.preventDefault();
      57 |     };
      58 | </script>
      59 | 
      60 |
      61 |
      62 |
      -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/js/html5shiv.js: -------------------------------------------------------------------------------- 1 | /* 2 | HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); 5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x"; 6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| 7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); 8 | for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d×' 22 | + '

      Holy guacamole! Best check yo self, you\'re not looking too good.

      ' 23 | + '' 24 | , alert = $(alertHTML).alert() 25 | 26 | alert.find('.close').click() 27 | 28 | ok(!alert.hasClass('in'), 'remove .in class on .close click') 29 | }) 30 | 31 | test("should remove element when clicking .close", function () { 32 | $.support.transition = false 33 | 34 | var alertHTML = '
      ' 35 | + '×' 36 | + '

      Holy guacamole! Best check yo self, you\'re not looking too good.

      ' 37 | + '
      ' 38 | , alert = $(alertHTML).appendTo('#qunit-fixture').alert() 39 | 40 | ok($('#qunit-fixture').find('.alert-message').length, 'element added to dom') 41 | 42 | alert.find('.close').click() 43 | 44 | ok(!$('#qunit-fixture').find('.alert-message').length, 'element removed from dom') 45 | }) 46 | 47 | test("should not fire closed when close is prevented", function () { 48 | $.support.transition = false 49 | stop(); 50 | $('
      ') 51 | .on('close.bs.alert', function (e) { 52 | e.preventDefault(); 53 | ok(true); 54 | start(); 55 | }) 56 | .on('closed.bs.alert', function () { 57 | ok(false); 58 | }) 59 | .alert('close') 60 | }) 61 | 62 | }) 63 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/list-group.less: -------------------------------------------------------------------------------- 1 | // 2 | // List groups 3 | // -------------------------------------------------- 4 | 5 | // Base class 6 | // 7 | // Easily usable on
        ,
          , or
          . 8 | .list-group { 9 | // No need to set list-style: none; since .list-group-item is block level 10 | margin-bottom: 20px; 11 | padding-left: 0; // reset padding because ul and ol 12 | background-color: @list-group-bg; 13 | } 14 | 15 | // Individual list items 16 | // ------------------------- 17 | 18 | .list-group-item { 19 | position: relative; 20 | display: block; 21 | padding: 10px 30px 10px 15px; 22 | // Place the border on the list items and negative margin up for better styling 23 | margin-bottom: -1px; 24 | border: 1px solid @list-group-border; 25 | 26 | // Round the first and last items 27 | &:first-child { 28 | .border-top-radius(@border-radius-base); 29 | } 30 | &:last-child { 31 | margin-bottom: 0; 32 | .border-bottom-radius(@border-radius-base); 33 | } 34 | 35 | // Align badges within list items 36 | > .badge { 37 | float: right; 38 | margin-right: -15px; 39 | } 40 | } 41 | 42 | // Custom content options 43 | // ------------------------- 44 | 45 | .list-group-item-heading { 46 | margin-top: 0; 47 | margin-bottom: 5px; 48 | } 49 | .list-group-item-text { 50 | margin-bottom: 0; 51 | line-height: 1.3; 52 | } 53 | 54 | // Linked list items 55 | // ------------------------- 56 | 57 | // Custom content within linked items 58 | a.list-group-item { 59 | // Colorize content accordingly 60 | .list-group-item-heading { 61 | color: @list-group-link-heading-color; 62 | } 63 | .list-group-item-text { 64 | color: @list-group-link-color; 65 | } 66 | 67 | // Hover state 68 | &:hover, 69 | &:focus { 70 | text-decoration: none; 71 | background-color: @list-group-hover-bg; 72 | } 73 | 74 | // Active class on item itself, not parent 75 | &.active { 76 | z-index: 2; // Place active items above their siblings for proper border styling 77 | color: @list-group-active-color; 78 | background-color: @list-group-active-bg; 79 | border-color: @list-group-active-border; 80 | 81 | // Force color to inherit for custom content 82 | .list-group-item-heading { 83 | color: inherit; 84 | } 85 | .list-group-item-text { 86 | color: lighten(@list-group-active-bg, 40%); 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/reset/test/resetSpec.js: -------------------------------------------------------------------------------- 1 | /*global describe, beforeEach, module, inject, it, spyOn, expect, $ */ 2 | describe('uiReset', function () { 3 | 'use strict'; 4 | 5 | var scope, $compile; 6 | beforeEach(module('ui.reset')); 7 | beforeEach(inject(function (_$rootScope_, _$compile_, _$window_) { 8 | scope = _$rootScope_.$new(); 9 | $compile = _$compile_; 10 | })); 11 | 12 | describe('compiling this directive', function () { 13 | it('should throw an error if we have no model defined', function () { 14 | function compile() { 15 | $compile('')(scope); 16 | } 17 | 18 | expect(compile).toThrow(); 19 | }); 20 | it('should proper DOM structure', function () { 21 | scope.foo = 'bar'; 22 | scope.$digest(); 23 | var element = $compile('')(scope); 24 | expect(element.parent().is('span')).toBe(true); 25 | expect(element.next().is('a')).toBe(true); 26 | }); 27 | }); 28 | describe('clicking on the created anchor tag', function () { 29 | it('should prevent the default action', function () { 30 | var element = $compile('')(scope); 31 | spyOn($.Event.prototype, 'preventDefault'); 32 | element.next().triggerHandler('click'); 33 | expect($.Event.prototype.preventDefault).toHaveBeenCalled(); 34 | }); 35 | it('should set the model value to null and clear control when no options given', function () { 36 | scope.foo = 'bar'; 37 | var element = $compile('')(scope); 38 | scope.$digest(); 39 | expect(element.val()).toBe('bar'); 40 | element.next().triggerHandler('click'); 41 | expect(scope.foo).toBe(null); 42 | expect(element.val()).toBe(''); 43 | }); 44 | it('should set the model value to the options scope variable when a string is passed in options', function () { 45 | scope.foo = 'bar'; 46 | scope.resetTo = 'i was reset'; 47 | var element = $compile('')(scope); 48 | scope.$digest(); 49 | expect(element.val()).toBe('bar'); 50 | element.next().triggerHandler('click'); 51 | expect(scope.foo).toBe('i was reset'); 52 | expect(element.val()).toBe('i was reset'); 53 | }); 54 | }); 55 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/phantom.js: -------------------------------------------------------------------------------- 1 | // Simple phantom.js integration script 2 | // Adapted from Modernizr 3 | 4 | function waitFor(testFx, onReady, timeOutMillis) { 5 | var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 5001 //< Default Max Timout is 5s 6 | , start = new Date().getTime() 7 | , condition = false 8 | , interval = setInterval(function () { 9 | if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) { 10 | // If not time-out yet and condition not yet fulfilled 11 | condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()) //< defensive code 12 | } else { 13 | if (!condition) { 14 | // If condition still not fulfilled (timeout but condition is 'false') 15 | console.log("'waitFor()' timeout") 16 | phantom.exit(1) 17 | } else { 18 | // Condition fulfilled (timeout and/or condition is 'true') 19 | typeof(onReady) === "string" ? eval(onReady) : onReady() //< Do what it's supposed to do once the condition is fulfilled 20 | clearInterval(interval) //< Stop this interval 21 | } 22 | } 23 | }, 100) //< repeat check every 100ms 24 | } 25 | 26 | 27 | if (phantom.args.length === 0 || phantom.args.length > 2) { 28 | console.log('Usage: phantom.js URL') 29 | phantom.exit() 30 | } 31 | 32 | var page = new WebPage() 33 | 34 | // Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") 35 | page.onConsoleMessage = function(msg) { 36 | console.log(msg) 37 | }; 38 | 39 | page.open(phantom.args[0], function(status){ 40 | if (status !== "success") { 41 | console.log("Unable to access network") 42 | phantom.exit() 43 | } else { 44 | waitFor(function(){ 45 | return page.evaluate(function(){ 46 | var el = document.getElementById('qunit-testresult') 47 | if (el && el.innerText.match('completed')) { 48 | return true 49 | } 50 | return false 51 | }) 52 | }, function(){ 53 | var failedNum = page.evaluate(function(){ 54 | var el = document.getElementById('qunit-testresult') 55 | try { 56 | return el.getElementsByClassName('failed')[0].innerHTML 57 | } catch (e) { } 58 | return 10000 59 | }); 60 | phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0) 61 | }) 62 | } 63 | }) 64 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/unit/phantom.js: -------------------------------------------------------------------------------- 1 | /* 2 | * grunt-contrib-qunit 3 | * http://gruntjs.com/ 4 | * 5 | * Copyright (c) 2013 "Cowboy" Ben Alman, contributors 6 | * Licensed under the MIT license. 7 | */ 8 | 9 | /*global QUnit:true, alert:true*/ 10 | (function () { 11 | 'use strict'; 12 | 13 | // Don't re-order tests. 14 | QUnit.config.reorder = false 15 | // Run tests serially, not in parallel. 16 | QUnit.config.autorun = false 17 | 18 | // Send messages to the parent PhantomJS process via alert! Good times!! 19 | function sendMessage() { 20 | var args = [].slice.call(arguments) 21 | alert(JSON.stringify(args)) 22 | } 23 | 24 | // These methods connect QUnit to PhantomJS. 25 | QUnit.log = function(obj) { 26 | // What is this I don’t even 27 | if (obj.message === '[object Object], undefined:undefined') { return } 28 | // Parse some stuff before sending it. 29 | var actual = QUnit.jsDump.parse(obj.actual) 30 | var expected = QUnit.jsDump.parse(obj.expected) 31 | // Send it. 32 | sendMessage('qunit.log', obj.result, actual, expected, obj.message, obj.source) 33 | } 34 | 35 | QUnit.testStart = function(obj) { 36 | sendMessage('qunit.testStart', obj.name) 37 | } 38 | 39 | QUnit.testDone = function(obj) { 40 | sendMessage('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total) 41 | } 42 | 43 | QUnit.moduleStart = function(obj) { 44 | sendMessage('qunit.moduleStart', obj.name) 45 | } 46 | 47 | QUnit.begin = function () { 48 | sendMessage('qunit.begin') 49 | console.log("Starting test suite") 50 | console.log("================================================\n") 51 | } 52 | 53 | QUnit.moduleDone = function (opts) { 54 | if (opts.failed === 0) { 55 | console.log("\r\u2714 All tests passed in '" + opts.name + "' module") 56 | } else { 57 | console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module") 58 | } 59 | sendMessage('qunit.moduleDone', opts.name, opts.failed, opts.passed, opts.total) 60 | } 61 | 62 | QUnit.done = function (opts) { 63 | console.log("\n================================================") 64 | console.log("Tests completed in " + opts.runtime + " milliseconds") 65 | console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.") 66 | sendMessage('qunit.done', opts.failed, opts.passed, opts.total, opts.runtime) 67 | } 68 | 69 | }()) 70 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/highlight/test/highlightSpec.js: -------------------------------------------------------------------------------- 1 | describe('highlight', function () { 2 | var highlightFilter, testPhrase = 'Prefix Highlight Suffix'; 3 | 4 | beforeEach(module('ui.highlight')); 5 | beforeEach(inject(function ($filter) { 6 | highlightFilter = $filter('highlight'); 7 | })); 8 | describe('case insensitive', function () { 9 | it('should highlight a matching phrase', function () { 10 | expect(highlightFilter(testPhrase, 'highlight')).toEqual('Prefix Highlight Suffix'); 11 | }); 12 | it('should highlight nothing if no match found', function () { 13 | expect(highlightFilter(testPhrase, 'no match')).toEqual(testPhrase); 14 | }); 15 | it('should highlight nothing for the undefined filter', function () { 16 | expect(highlightFilter(testPhrase, undefined)).toEqual(testPhrase); 17 | }); 18 | it('should work correctly for number filters', function () { 19 | expect(highlightFilter('3210123', 0)).toEqual('3210123'); 20 | }); 21 | it('should work correctly for number text', function () { 22 | expect(highlightFilter(3210123, '0')).toEqual('3210123'); 23 | }); 24 | }); 25 | describe('case sensitive', function () { 26 | it('should highlight a matching phrase', function () { 27 | expect(highlightFilter(testPhrase, 'Highlight', true)).toEqual('Prefix Highlight Suffix'); 28 | }); 29 | it('should highlight nothing if no match found', function () { 30 | expect(highlightFilter(testPhrase, 'no match', true)).toEqual(testPhrase); 31 | }); 32 | it('should highlight nothing for the undefined filter', function () { 33 | expect(highlightFilter(testPhrase, undefined, true)).toEqual(testPhrase); 34 | }); 35 | it('should work correctly for number filters', function () { 36 | expect(highlightFilter('3210123', 0, true)).toEqual('3210123'); 37 | }); 38 | it('should work correctly for number text', function () { 39 | expect(highlightFilter(3210123, '0', true)).toEqual('3210123'); 40 | }); 41 | it('should not highlight a phrase with different letter-casing', function () { 42 | expect(highlightFilter(testPhrase, 'highlight', true)).toEqual(testPhrase); 43 | }); 44 | }); 45 | it('should highlight nothing if empty filter string passed - issue #114', function () { 46 | expect(highlightFilter(testPhrase, '')).toEqual(testPhrase); 47 | }); 48 | }); -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/format/demo/index.html: -------------------------------------------------------------------------------- 1 | 15 |
          16 | 19 |
          20 |
          21 |

          What?

          22 | 23 |

          Replace tokens in a string in a variety of ways

          24 | 25 |
          26 | 27 | 32 | 39 | 45 | 46 |

          {{ sentence | format : tokens[mode] }}

          47 |
          Tokens: {{ tokens[mode] | json }}
          48 |
          49 |
          50 |
          51 |

          Why?

          52 | 53 |

          Most commonly, this filter is helpful for internationalization. However anywhere you need to do string replacement the format filter will come in handy.

          54 | 55 |

          How?

          56 |
          57 | {{ "Hello $0, how are you?" | format : 'Bob' }}
          58 | -- or --
          59 | $scope.tokens = ['first','second','third'];
          60 | ...
          61 | {{ "Are you on the $0, $1 or $2?" | format : tokens }}
          62 | -- or --
          63 | $scope.tokens = { name:'Bob', subject:'wife' };
          64 | ...
          65 | {{ "Hey :name, how's the :subject?" | format : tokens }}
          66 | 
          67 |
          68 |
          69 |
          -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/keypress/test/keyupSpec.js: -------------------------------------------------------------------------------- 1 | describe('uiKeyup', function () { 2 | 3 | var $scope, $compile; 4 | 5 | var createKeyEvent = function (mainKey, alt, ctrl, shift, meta) { 6 | var keyEvent = jQuery.Event("keyup"); 7 | 8 | keyEvent.keyCode = mainKey; 9 | keyEvent.altKey = alt; 10 | keyEvent.ctrlKey = ctrl; 11 | keyEvent.shiftKey = shift; 12 | keyEvent.metaKey = meta; 13 | 14 | return keyEvent; 15 | }; 16 | 17 | var createElement = function (elementDef) { 18 | var elementStr = angular.isString(elementDef) ? elementDef : angular.toJson(elementDef); 19 | return $compile("")($scope); 20 | }; 21 | 22 | beforeEach(module('ui.keypress')); 23 | beforeEach(inject(function (_$rootScope_, _$compile_) { 24 | $compile = _$compile_; 25 | $scope = _$rootScope_.$new(); 26 | 27 | $scope.cb = function (event) { 28 | this.event1 = event; 29 | }; 30 | })); 31 | 32 | it('should support single key press', function () { 33 | createElement({'13': 'event=true'}).trigger(createKeyEvent(13)); 34 | expect($scope.event).toBe(true); 35 | }); 36 | 37 | it('should support combined key press', function () { 38 | createElement({'ctrl-shift-13': 'event=true'}).trigger(createKeyEvent(13, false, true, true, false)); 39 | expect($scope.event).toBe(true); 40 | }); 41 | 42 | it('should support alternative combinations', function () { 43 | $scope.event = 0; 44 | createElement({'ctrl-shift-14 ctrl-shift-13': 'event=event+1'}).trigger(createKeyEvent(13, false, true, true, false)).trigger(createKeyEvent(14, false, true, true, false)); 45 | expect($scope.event).toBe(2); 46 | }); 47 | 48 | it('should support multiple key press definitions', function () { 49 | var elm = createElement({'13': 'event1=true', 'ctrl-shift-13': 'event2=true'}); 50 | 51 | elm.trigger(createKeyEvent(13)); 52 | expect($scope.event1).toBe(true); 53 | 54 | elm.trigger(createKeyEvent(13, false, true, true, false)); 55 | expect($scope.event2).toBe(true); 56 | }); 57 | 58 | it('should handle meta key ("⌘" on OS X)', function () { 59 | var elm = createElement({'meta-83': 'event1=true'}); 60 | 61 | elm.trigger(createKeyEvent(83, false, false, false, true)); 62 | expect($scope.event1).toBe(true); 63 | }); 64 | 65 | it('should support $event in expressions', function () { 66 | 67 | var element = createElement({'esc': 'cb($event)', '13': 'event2=$event'}); 68 | 69 | element.trigger(createKeyEvent(27)); 70 | expect($scope.event1.keyCode).toBe(27); 71 | 72 | element.trigger(createKeyEvent(13)); 73 | expect($scope.event2.keyCode).toBe(13); 74 | }); 75 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/less/pagination.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pagination (multiple pages) 3 | // -------------------------------------------------- 4 | .pagination { 5 | display: inline-block; 6 | padding-left: 0; 7 | margin: @line-height-computed 0; 8 | border-radius: @border-radius-base; 9 | 10 | > li { 11 | display: inline; // Remove list-style and block-level defaults 12 | > a, 13 | > span { 14 | float: left; // Collapse white-space 15 | padding: 4px 12px; 16 | line-height: @line-height-base; 17 | text-decoration: none; 18 | background-color: @pagination-bg; 19 | border: 1px solid @pagination-border; 20 | border-left-width: 0; 21 | } 22 | &:first-child { 23 | > a, 24 | > span { 25 | border-left-width: 1px; 26 | .border-left-radius(@border-radius-base); 27 | } 28 | } 29 | &:last-child { 30 | > a, 31 | > span { 32 | .border-right-radius(@border-radius-base); 33 | } 34 | } 35 | } 36 | 37 | > li > a:hover, 38 | > li > a:focus, 39 | > .active > a, 40 | > .active > span { 41 | background-color: @pagination-active-bg; 42 | } 43 | > .active > a, 44 | > .active > span { 45 | color: @pagination-active-color; 46 | cursor: default; 47 | } 48 | 49 | > .disabled { 50 | > span, 51 | > a, 52 | > a:hover, 53 | > a:focus { 54 | color: @pagination-disabled-color; 55 | background-color: @pagination-bg; 56 | cursor: not-allowed; 57 | } 58 | } 59 | } 60 | 61 | // Sizing 62 | // -------------------------------------------------- 63 | 64 | // Large 65 | .pagination-large { 66 | > li { 67 | > a, 68 | > span { 69 | padding: @padding-large-vertical @padding-large-horizontal; 70 | font-size: @font-size-large; 71 | } 72 | &:first-child { 73 | > a, 74 | > span { 75 | .border-left-radius(@border-radius-large); 76 | } 77 | } 78 | &:last-child { 79 | > a, 80 | > span { 81 | .border-right-radius(@border-radius-large); 82 | } 83 | } 84 | } 85 | } 86 | 87 | // Small 88 | .pagination-small { 89 | > li { 90 | > a, 91 | > span { 92 | padding: @padding-small-vertical @padding-small-horizontal; 93 | font-size: @font-size-small; 94 | } 95 | &:first-child { 96 | > a, 97 | > span { 98 | .border-left-radius(@border-radius-small); 99 | } 100 | } 101 | &:last-child { 102 | > a, 103 | > span { 104 | .border-right-radius(@border-radius-small); 105 | } 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/keypress/test/keydownSpec.js: -------------------------------------------------------------------------------- 1 | describe('uiKeydown', function () { 2 | 3 | var $scope, $compile; 4 | 5 | var createKeyEvent = function (mainKey, alt, ctrl, shift, meta) { 6 | var keyEvent = jQuery.Event("keydown"); 7 | 8 | keyEvent.keyCode = mainKey; 9 | keyEvent.altKey = alt; 10 | keyEvent.ctrlKey = ctrl; 11 | keyEvent.shiftKey = shift; 12 | keyEvent.metaKey = meta; 13 | 14 | return keyEvent; 15 | }; 16 | 17 | var createElement = function (elementDef) { 18 | var elementStr = angular.isString(elementDef) ? elementDef : angular.toJson(elementDef); 19 | return $compile("")($scope); 20 | }; 21 | 22 | beforeEach(module('ui.keypress')); 23 | beforeEach(inject(function (_$rootScope_, _$compile_) { 24 | $compile = _$compile_; 25 | $scope = _$rootScope_.$new(); 26 | 27 | $scope.cb = function (event) { 28 | this.event1 = event; 29 | }; 30 | })); 31 | 32 | it('should support single key press', function () { 33 | createElement({'13': 'event=true'}).trigger(createKeyEvent(13)); 34 | expect($scope.event).toBe(true); 35 | }); 36 | 37 | it('should support combined key press', function () { 38 | createElement({'ctrl-shift-13': 'event=true'}).trigger(createKeyEvent(13, false, true, true, false)); 39 | expect($scope.event).toBe(true); 40 | }); 41 | 42 | it('should support alternative combinations', function () { 43 | $scope.event = 0; 44 | createElement({'ctrl-shift-14 ctrl-shift-13': 'event=event+1'}).trigger(createKeyEvent(13, false, true, true, false)).trigger(createKeyEvent(14, false, true, true, false)); 45 | expect($scope.event).toBe(2); 46 | }); 47 | 48 | it('should support multiple key press definitions', function () { 49 | var elm = createElement({'13': 'event1=true', 'ctrl-shift-13': 'event2=true'}); 50 | 51 | elm.trigger(createKeyEvent(13)); 52 | expect($scope.event1).toBe(true); 53 | 54 | elm.trigger(createKeyEvent(13, false, true, true, false)); 55 | expect($scope.event2).toBe(true); 56 | }); 57 | 58 | it('should handle meta key ("⌘" on OS X)', function () { 59 | var elm = createElement({'meta-83': 'event1=true'}); 60 | 61 | elm.trigger(createKeyEvent(83, false, false, false, true)); 62 | expect($scope.event1).toBe(true); 63 | }); 64 | 65 | it('should support $event in expressions', function () { 66 | 67 | var element = createElement({'esc': 'cb($event)', '13': 'event2=$event'}); 68 | 69 | element.trigger(createKeyEvent(27)); 70 | expect($scope.event1.keyCode).toBe(27); 71 | 72 | element.trigger(createKeyEvent(13)); 73 | expect($scope.event2.keyCode).toBe(13); 74 | }); 75 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/nav-javascript.html: -------------------------------------------------------------------------------- 1 |
        1. 2 | Overview 3 | 10 |
        2. 11 |
        3. Transitions
        4. 12 |
        5. 13 | Modal 14 | 18 |
        6. 19 |
        7. 20 | Dropdown 21 | 25 |
        8. 26 |
        9. 27 | Scrollspy 28 | 32 |
        10. 33 |
        11. 34 | Tab 35 | 39 |
        12. 40 |
        13. 41 | Tooltip 42 | 46 |
        14. 47 |
        15. 48 | Popover 49 | 53 |
        16. 54 |
        17. 55 | Alert 56 | 60 |
        18. 61 |
        19. 62 | Button 63 | 67 |
        20. 68 |
        21. 69 | Collapse 70 | 74 |
        22. 75 |
        23. 76 | Carousel 77 | 81 |
        24. 82 |
        25. 83 | Affix 84 | 88 |
        26. 89 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/keypress/test/keypressSpec.js: -------------------------------------------------------------------------------- 1 | 2 | describe('uiKeypress', function () { 3 | 4 | var $scope, $compile; 5 | 6 | var createKeyEvent = function (mainKey, alt, ctrl, shift, meta) { 7 | var keyEvent = jQuery.Event("keypress"); 8 | 9 | keyEvent.keyCode = mainKey; 10 | keyEvent.altKey = alt; 11 | keyEvent.ctrlKey = ctrl; 12 | keyEvent.shiftKey = shift; 13 | keyEvent.metaKey = meta; 14 | 15 | return keyEvent; 16 | }; 17 | 18 | var createElement = function (elementDef) { 19 | var elementStr = angular.isString(elementDef) ? elementDef : angular.toJson(elementDef); 20 | return $compile("")($scope); 21 | }; 22 | 23 | beforeEach(module('ui.keypress')); 24 | beforeEach(inject(function (_$rootScope_, _$compile_) { 25 | $compile = _$compile_; 26 | $scope = _$rootScope_.$new(); 27 | 28 | $scope.cb = function (event) { 29 | this.event1 = event; 30 | }; 31 | })); 32 | 33 | it('should support single key press', function () { 34 | createElement({'13': 'event=true'}).trigger(createKeyEvent(13)); 35 | expect($scope.event).toBe(true); 36 | }); 37 | 38 | it('should support combined key press', function () { 39 | createElement({'ctrl-shift-13': 'event=true'}).trigger(createKeyEvent(13, false, true, true, false)); 40 | expect($scope.event).toBe(true); 41 | }); 42 | 43 | it('should support alternative combinations', function () { 44 | $scope.event = 0; 45 | createElement({'ctrl-shift-14 ctrl-shift-13': 'event=event+1'}).trigger(createKeyEvent(13, false, true, true, false)).trigger(createKeyEvent(14, false, true, true, false)); 46 | expect($scope.event).toBe(2); 47 | }); 48 | 49 | it('should support multiple key press definitions', function () { 50 | var elm = createElement({'13': 'event1=true', 'ctrl-shift-13': 'event2=true'}); 51 | 52 | elm.trigger(createKeyEvent(13)); 53 | expect($scope.event1).toBe(true); 54 | 55 | elm.trigger(createKeyEvent(13, false, true, true, false)); 56 | expect($scope.event2).toBe(true); 57 | }); 58 | 59 | it('should handle meta key ("⌘" on OS X)', function () { 60 | var elm = createElement({'meta-83': 'event1=true'}); 61 | 62 | elm.trigger(createKeyEvent(83, false, false, false, true)); 63 | expect($scope.event1).toBe(true); 64 | }); 65 | 66 | it('should support $event in expressions', function () { 67 | 68 | var element = createElement({'esc': 'cb($event)', '13': 'event2=$event'}); 69 | 70 | element.trigger(createKeyEvent(27)); 71 | expect($scope.event1.keyCode).toBe(27); 72 | 73 | element.trigger(createKeyEvent(13)); 74 | expect($scope.event2.keyCode).toBe(13); 75 | }); 76 | }); -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/ie-shiv/ie-shiv.js: -------------------------------------------------------------------------------- 1 | // READ: http://docs-next.angularjs.org/guide/ie 2 | // element tags are statically defined in order to accommodate lazy-loading whereby directives are also unknown 3 | 4 | // The ieshiv takes care of our ui.directives and AngularJS's ng-view, ng-include, ng-pluralize, ng-switch. 5 | // However, IF you have custom directives that can be used as html tags (yours or someone else's) then 6 | // add list of directives into window.myCustomTags 7 | 8 | // 14 | 15 | (function (exports) { 16 | 17 | var debug = window.ieShivDebug || false, 18 | tags = [ "ngInclude", "ngPluralize", "ngView", "ngSwitch", "uiCurrency", "uiCodemirror", "uiDate", "uiEvent", 19 | "uiKeypress", "uiKeyup", "uiKeydown", "uiMask", "uiMapInfoWindow", "uiMapMarker", "uiMapPolyline", 20 | "uiMapPolygon", "uiMapRectangle", "uiMapCircle", "uiMapGroundOverlay", "uiModal", "uiReset", 21 | "uiScrollfix", "uiSelect2", "uiShow", "uiHide", "uiToggle", "uiSortable", "uiTinymce" 22 | ]; 23 | 24 | window.myCustomTags = window.myCustomTags || []; // externally defined by developer using angular-ui directives 25 | tags.push.apply(tags, window.myCustomTags); 26 | 27 | var toCustomElements = function (str) { 28 | var result = []; 29 | var dashed = str.replace(/([A-Z])/g, function ($1) { 30 | return " " + $1.toLowerCase(); 31 | }); 32 | var tokens = dashed.split(' '); 33 | 34 | // If a token is just a single name (i.e. no namespace) then we juse define the elements the name given 35 | if (tokens.length === 1) { 36 | var name = tokens[0]; 37 | 38 | result.push(name); 39 | result.push("x-" + name); 40 | result.push("data-" + name); 41 | } else { 42 | var ns = tokens[0]; 43 | var dirname = tokens.slice(1).join('-'); 44 | 45 | // this is finite list and it seemed senseless to create a custom method 46 | result.push(ns + ":" + dirname); 47 | result.push(ns + "-" + dirname); 48 | result.push("x-" + ns + "-" + dirname); 49 | result.push("data-" + ns + "-" + dirname); 50 | } 51 | return result; 52 | }; 53 | 54 | for (var i = 0, tlen = tags.length; i < tlen; i++) { 55 | var customElements = toCustomElements(tags[i]); 56 | for (var j = 0, clen = customElements.length; j < clen; j++) { 57 | var customElement = customElements[j]; 58 | document.createElement(customElement); 59 | } 60 | } 61 | 62 | })(window); 63 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% include header.html %} 6 | 7 | 8 | 9 | 10 | 11 | {% include nav-main.html %} 12 | 13 | 14 |
          15 |
          16 |

          {{ page.title }}

          17 |

          {{ page.lead }}

          18 | {% include ads.html %} 19 |
          20 |
          21 | 22 | 23 | {% include old-bs-docs.html %} 24 | 25 |
          26 |
          27 |
          28 |
          29 | 42 |
          43 |
          44 |
          45 | {{ content }} 46 |
          47 |
          48 | 49 |
          50 | 51 | 52 | Back to top 53 | 54 | 56 | 69 | 70 | 71 | {% include footer.html %} 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/mask/demo/index.html: -------------------------------------------------------------------------------- 1 |
          2 | 5 |
          6 |
          7 |
          8 |
          9 | 10 |
          11 |

          uiMask Directive Demo

          12 |
          13 | 14 | 15 | 16 |
          17 | 19 | 20 | 21 |
          Model value: {{ x }}
          22 |
          Model value: undefined
          23 |
          NgModelController.$viewValue: {{ demo.masked.$viewValue 24 | }}
          25 |
          NgModelController.$viewValue: undefined
          26 |
          27 |
          28 |
          29 |
          30 | 31 | 32 |
          33 | 34 | A Any letter.
          9 Any number.
          * Any letter or number.
          35 |
          36 |
          37 | 38 |
          39 | 40 | 41 |
          42 |

          43 | 44 |

          45 |
          46 |
          47 |

          48 | 49 |

          50 |
          51 |
          52 |

          53 | 54 |

          55 |
          56 |
          57 |

          58 | 59 |

          60 |
          61 |
          62 |
          63 | 64 |
          65 |
          66 |

          How?

          67 | 68 |

          TODO !! 69 |

          70 | 
          71 |
          72 |
          73 |
          -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/route/route.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Set a $uiRoute boolean to see if the current route matches 3 | */ 4 | angular.module('ui.route', []).directive('uiRoute', ['$location', '$parse', function ($location, $parse) { 5 | return { 6 | restrict: 'AC', 7 | scope: true, 8 | compile: function(tElement, tAttrs) { 9 | var useProperty; 10 | if (tAttrs.uiRoute) { 11 | useProperty = 'uiRoute'; 12 | } else if (tAttrs.ngHref) { 13 | useProperty = 'ngHref'; 14 | } else if (tAttrs.href) { 15 | useProperty = 'href'; 16 | } else { 17 | throw new Error('uiRoute missing a route or href property on ' + tElement[0]); 18 | } 19 | return function ($scope, elm, attrs) { 20 | var modelSetter = $parse(attrs.ngModel || attrs.routeModel || '$uiRoute').assign; 21 | var watcher = angular.noop; 22 | 23 | // Used by href and ngHref 24 | function staticWatcher(newVal) { 25 | if ((hash = newVal.indexOf('#')) > -1){ 26 | newVal = newVal.substr(hash + 1); 27 | } 28 | watcher = function watchHref() { 29 | modelSetter($scope, ($location.path().indexOf(newVal) > -1)); 30 | }; 31 | watcher(); 32 | } 33 | // Used by uiRoute 34 | function regexWatcher(newVal) { 35 | if ((hash = newVal.indexOf('#')) > -1){ 36 | newVal = newVal.substr(hash + 1); 37 | } 38 | watcher = function watchRegex() { 39 | var regexp = new RegExp('^' + newVal + '$', ['i']); 40 | modelSetter($scope, regexp.test($location.path())); 41 | }; 42 | watcher(); 43 | } 44 | 45 | switch (useProperty) { 46 | case 'uiRoute': 47 | // if uiRoute={{}} this will be undefined, otherwise it will have a value and $observe() never gets triggered 48 | if (attrs.uiRoute){ 49 | regexWatcher(attrs.uiRoute); 50 | }else{ 51 | attrs.$observe('uiRoute', regexWatcher); 52 | } 53 | break; 54 | case 'ngHref': 55 | // Setup watcher() every time ngHref changes 56 | if (attrs.ngHref){ 57 | staticWatcher(attrs.ngHref); 58 | }else{ 59 | attrs.$observe('ngHref', staticWatcher); 60 | } 61 | break; 62 | case 'href': 63 | // Setup watcher() 64 | staticWatcher(attrs.href); 65 | } 66 | 67 | $scope.$on('$routeChangeSuccess', function(){ 68 | watcher(); 69 | }); 70 | 71 | //Added for compatibility with ui-router 72 | $scope.$on('$stateChangeSuccess', function(){ 73 | watcher(); 74 | }); 75 | }; 76 | } 77 | }; 78 | }]); 79 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/jq/jq.js: -------------------------------------------------------------------------------- 1 | /** 2 | * General-purpose jQuery wrapper. Simply pass the plugin name as the expression. 3 | * 4 | * It is possible to specify a default set of parameters for each jQuery plugin. 5 | * Under the jq key, namespace each plugin by that which will be passed to ui-jq. 6 | * Unfortunately, at this time you can only pre-define the first parameter. 7 | * @example { jq : { datepicker : { showOn:'click' } } } 8 | * 9 | * @param ui-jq {string} The $elm.[pluginName]() to call. 10 | * @param [ui-options] {mixed} Expression to be evaluated and passed as options to the function 11 | * Multiple parameters can be separated by commas 12 | * @param [ui-refresh] {expression} Watch expression and refire plugin on changes 13 | * 14 | * @example 15 | */ 16 | angular.module('ui.jq',[]). 17 | value('uiJqConfig',{}). 18 | directive('uiJq', ['uiJqConfig', '$timeout', function uiJqInjectingFunction(uiJqConfig, $timeout) { 19 | 20 | return { 21 | restrict: 'A', 22 | compile: function uiJqCompilingFunction(tElm, tAttrs) { 23 | 24 | if (!angular.isFunction(tElm[tAttrs.uiJq])) { 25 | throw new Error('ui-jq: The "' + tAttrs.uiJq + '" function does not exist'); 26 | } 27 | var options = uiJqConfig && uiJqConfig[tAttrs.uiJq]; 28 | 29 | return function uiJqLinkingFunction(scope, elm, attrs) { 30 | 31 | var linkOptions = []; 32 | 33 | // If ui-options are passed, merge (or override) them onto global defaults and pass to the jQuery method 34 | if (attrs.uiOptions) { 35 | linkOptions = scope.$eval('[' + attrs.uiOptions + ']'); 36 | if (angular.isObject(options) && angular.isObject(linkOptions[0])) { 37 | linkOptions[0] = angular.extend({}, options, linkOptions[0]); 38 | } 39 | } else if (options) { 40 | linkOptions = [options]; 41 | } 42 | // If change compatibility is enabled, the form input's "change" event will trigger an "input" event 43 | if (attrs.ngModel && elm.is('select,input,textarea')) { 44 | elm.bind('change', function() { 45 | elm.trigger('input'); 46 | }); 47 | } 48 | 49 | // Call jQuery method and pass relevant options 50 | function callPlugin() { 51 | $timeout(function() { 52 | elm[attrs.uiJq].apply(elm, linkOptions); 53 | }, 0, false); 54 | } 55 | 56 | // If ui-refresh is used, re-fire the the method upon every change 57 | if (attrs.uiRefresh) { 58 | scope.$watch(attrs.uiRefresh, function(newVal) { 59 | callPlugin(); 60 | }); 61 | } 62 | callPlugin(); 63 | }; 64 | } 65 | }; 66 | }]); 67 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/showhide/demo/index.html: -------------------------------------------------------------------------------- 1 | 12 |
          13 | 16 |
          17 |
          18 |

          What?

          19 | 20 |

          Instead of doing ng-show and ng-hide which simply sets 21 | display:block/none a ui-show and 22 | ui-hide class will be added which can give you tighter control over how things appear or disappear. 23 |

          24 | 25 |
          26 |

          Toggle State: {{!!showHideAn}}

          27 | 28 |

          29 | Show 30 | Hide 31 | Toggle 32 |

          33 |
          34 |
          35 |
          36 |

          Why?

          37 | 38 |

          CSS3 transitions of course! Applying a class means you can specify exactly how these two states behave. In addition, the show/hide variants do not enforce css rules when they are false (unless you use toggle), so the default CSS can still apply.

          39 |
          But can't you just do ng-class="{ ui-show : someExpression }"?
          40 |

          ... shutup.

          41 | 42 |

          In all seriousness, this is just a convenience wrapper for using 43 | ng-class. This way you can simply swap out instances of ng for 44 | ui to immediately get your customized approach.

          45 |
          46 |
          47 | 48 |

          How?

          49 |
          50 | <p><a ng-click="showHide=!showHide">Toggle State: {{!!showHide}}</a></p>
          51 | <div ui-show="showHide">Show</div>
          52 | <div ui-hide="showHide">Hide</div>
          53 | <div ui-toggle="showHide">Toggle</div>
          54 | 
          55 | <style>
          56 | .ui-show {
          57 |   color: blue;
          58 |   transition: all 0.5s ease; /* You should probably browser-prefix this */
          59 | }
          60 | .ui-hide {
          61 |   opacity: 0;
          62 |   transition: all 0.5s ease; /* You should probably browser-prefix this */
          63 | }
          64 | </style>
          65 | 
          66 |

          Using ui-show or ui-hide will add a class of the same name when the expression is true. 67 |

          68 | 69 |

          Use ui-toggle if you want to leverage both classes, as 70 | ui-show will be added when true and ui-hide when false.

          71 |
          -------------------------------------------------------------------------------- /bower_components/bootstrap/less/progress-bars.less: -------------------------------------------------------------------------------- 1 | // 2 | // Progress bars 3 | // -------------------------------------------------- 4 | 5 | 6 | // Bar animations 7 | // ------------------------- 8 | 9 | // Webkit 10 | @-webkit-keyframes progress-bar-stripes { 11 | from { background-position: 40px 0; } 12 | to { background-position: 0 0; } 13 | } 14 | 15 | // Firefox 16 | @-moz-keyframes progress-bar-stripes { 17 | from { background-position: 40px 0; } 18 | to { background-position: 0 0; } 19 | } 20 | 21 | // IE9 22 | @-ms-keyframes progress-bar-stripes { 23 | from { background-position: 40px 0; } 24 | to { background-position: 0 0; } 25 | } 26 | 27 | // Opera 28 | @-o-keyframes progress-bar-stripes { 29 | from { background-position: 0 0; } 30 | to { background-position: 40px 0; } 31 | } 32 | 33 | // Spec 34 | @keyframes progress-bar-stripes { 35 | from { background-position: 40px 0; } 36 | to { background-position: 0 0; } 37 | } 38 | 39 | 40 | 41 | // Bar itself 42 | // ------------------------- 43 | 44 | // Outer container 45 | .progress { 46 | overflow: hidden; 47 | height: @line-height-computed; 48 | margin-bottom: @line-height-computed; 49 | background-color: @progress-bg; 50 | border-radius: @border-radius-base; 51 | .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); 52 | } 53 | 54 | // Bar of progress 55 | .progress-bar { 56 | float: left; 57 | width: 0%; 58 | height: 100%; 59 | font-size: @font-size-small; 60 | color: @progress-bar-color; 61 | text-align: center; 62 | background-color: @progress-bar-bg; 63 | .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); 64 | .transition(width .6s ease); 65 | } 66 | 67 | // Striped bars 68 | .progress-striped .progress-bar { 69 | #gradient > .striped(@progress-bar-bg); 70 | .background-size(40px 40px); 71 | } 72 | 73 | // Call animation for the active one 74 | .progress.active .progress-bar { 75 | -webkit-animation: progress-bar-stripes 2s linear infinite; 76 | -moz-animation: progress-bar-stripes 2s linear infinite; 77 | -ms-animation: progress-bar-stripes 2s linear infinite; 78 | -o-animation: progress-bar-stripes 2s linear infinite; 79 | animation: progress-bar-stripes 2s linear infinite; 80 | } 81 | 82 | 83 | 84 | // Variations 85 | // ------------------------- 86 | 87 | // Danger (red) 88 | .progress-bar-danger { 89 | .progress-bar-variant(@progress-bar-danger-bg); 90 | } 91 | 92 | // Success (green) 93 | .progress-bar-success { 94 | .progress-bar-variant(@progress-bar-success-bg); 95 | } 96 | 97 | // Warning (orange) 98 | .progress-bar-warning { 99 | .progress-bar-variant(@progress-bar-warning-bg); 100 | } 101 | 102 | // Info (teal) 103 | .progress-bar-info { 104 | .progress-bar-variant(@progress-bar-info-bg); 105 | } 106 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/event/test/eventSpec.js: -------------------------------------------------------------------------------- 1 | describe('uiEvent', function () { 2 | var $scope, $rootScope, $compile; 3 | 4 | beforeEach(module('ui.event')); 5 | beforeEach(inject(function (_$rootScope_, _$compile_) { 6 | $compile = _$compile_; 7 | $rootScope = _$rootScope_; 8 | })); 9 | 10 | //helper for creating event elements 11 | function eventElement(scope, eventObject) { 12 | scope._uiEvent = eventObject || {}; 13 | return $compile('')(scope); 14 | } 15 | 16 | describe('test', function () { 17 | it('should work with dblclick event and assignment', function () { 18 | $scope = $rootScope.$new(); 19 | var elm = eventElement($scope, {'dblclick': 'dbl=true'}); 20 | expect($scope.dbl).toBeUndefined(); 21 | elm.triggerHandler('dblclick'); 22 | expect($scope.dbl).toBe(true); 23 | }); 24 | 25 | it('should work with two events in one key a function', function () { 26 | $scope = $rootScope.$new(); 27 | $scope.counter = 0; 28 | $scope.myfn = function () { 29 | $scope.counter++; 30 | }; 31 | var elm = eventElement($scope, {'keyup mouseenter': 'myfn()'}); 32 | elm.triggerHandler('keyup'); 33 | elm.triggerHandler('mouseenter'); 34 | expect($scope.counter).toBe(2); 35 | }); 36 | 37 | it('should work work with multiple entries', function () { 38 | $scope = $rootScope.$new(); 39 | $scope.amount = 5; 40 | var elm = eventElement($scope, { 41 | 'click': 'amount=amount*2', 42 | 'mouseenter': 'amount=amount*4', 43 | 'keyup': 'amount=amount*3' 44 | }); 45 | elm.triggerHandler('click'); 46 | expect($scope.amount).toBe(10); 47 | elm.triggerHandler('mouseenter'); 48 | expect($scope.amount).toBe(40); 49 | elm.triggerHandler('keyup'); 50 | expect($scope.amount).toBe(120); 51 | }); 52 | 53 | it('should allow passing of $event object', function () { 54 | $scope = $rootScope.$new(); 55 | $scope.clicky = function (par1, $event, par2) { 56 | expect($event.foo).toBe('bar'); 57 | expect(par1).toBe(1); 58 | expect(par2).toBe(2); 59 | }; 60 | var elm = eventElement($scope, {'click': 'clicky(1, $event, 2)'}); 61 | elm.triggerHandler({ 62 | type: 'click', 63 | foo: 'bar' 64 | }); 65 | }); 66 | 67 | it('should allow passing of $params object', function () { 68 | $scope = $rootScope.$new(); 69 | $scope.onStuff = function ($event, $params) { 70 | expect($event.type).toBe('stuff'); 71 | expect($params[0]).toBe('foo'); 72 | expect($params[1]).toBe('bar'); 73 | }; 74 | var elm = eventElement($scope, {'stuff': 'onStuff($event, $params)'}); 75 | elm.triggerHandler('stuff', ['foo', 'bar']); 76 | }); 77 | }); 78 | 79 | }); -------------------------------------------------------------------------------- /bower_components/bootstrap/less/tooltip.less: -------------------------------------------------------------------------------- 1 | // 2 | // Tooltips 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .tooltip { 8 | position: absolute; 9 | z-index: @zindex-tooltip; 10 | display: block; 11 | visibility: visible; 12 | font-size: @font-size-small; 13 | line-height: 1.4; 14 | .opacity(0); 15 | 16 | &.in { .opacity(1); } 17 | &.top { margin-top: -3px; padding: 5px 0; } 18 | &.right { margin-left: 3px; padding: 0 5px; } 19 | &.bottom { margin-top: 3px; padding: 5px 0; } 20 | &.left { margin-left: -3px; padding: 0 5px; } 21 | } 22 | 23 | // Wrapper for the tooltip content 24 | .tooltip-inner { 25 | max-width: @tooltip-max-width; 26 | padding: 3px 8px; 27 | color: @tooltip-color; 28 | text-align: center; 29 | text-decoration: none; 30 | background-color: @tooltip-bg; 31 | border-radius: @border-radius-base; 32 | } 33 | 34 | // Arrows 35 | .tooltip-arrow { 36 | position: absolute; 37 | width: 0; 38 | height: 0; 39 | border-color: transparent; 40 | border-style: solid; 41 | } 42 | .tooltip { 43 | &.top .tooltip-arrow { 44 | bottom: 0; 45 | left: 50%; 46 | margin-left: -@tooltip-arrow-width; 47 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 48 | border-top-color: @tooltip-arrow-color; 49 | } 50 | &.top-left .tooltip-arrow { 51 | bottom: 0; 52 | left: 5px; 53 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 54 | border-top-color: @tooltip-arrow-color; 55 | } 56 | &.top-right .tooltip-arrow { 57 | bottom: 0; 58 | right: 5px; 59 | border-width: @tooltip-arrow-width @tooltip-arrow-width 0; 60 | border-top-color: @tooltip-arrow-color; 61 | } 62 | &.right .tooltip-arrow { 63 | top: 50%; 64 | left: 0; 65 | margin-top: -@tooltip-arrow-width; 66 | border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; 67 | border-right-color: @tooltip-arrow-color; 68 | } 69 | &.left .tooltip-arrow { 70 | top: 50%; 71 | right: 0; 72 | margin-top: -@tooltip-arrow-width; 73 | border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; 74 | border-left-color: @tooltip-arrow-color; 75 | } 76 | &.bottom .tooltip-arrow { 77 | top: 0; 78 | left: 50%; 79 | margin-left: -@tooltip-arrow-width; 80 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 81 | border-bottom-color: @tooltip-arrow-color; 82 | } 83 | &.bottom-left .tooltip-arrow { 84 | top: 0; 85 | left: 5px; 86 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 87 | border-bottom-color: @tooltip-arrow-color; 88 | } 89 | &.bottom-right .tooltip-arrow { 90 | top: 0; 91 | right: 5px; 92 | border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; 93 | border-bottom-color: @tooltip-arrow-color; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/responsive-utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // IE10 Metro responsive 7 | // Required for Windows 8 Metro split-screen snapping with IE10 8 | // 9 | // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ 10 | @-ms-viewport{ 11 | width: device-width; 12 | } 13 | 14 | // IE10 on Windows Phone 8 15 | // IE10 on WP8 doesn't report CSS pixels, but actual device pixels. In 16 | // other words, say on a Lumia, you'll get 768px as the device width, 17 | // meaning users will see the tablet styles and not phone styles. 18 | // 19 | // Alternatively you can override this with JS (see source below), but 20 | // we won't be doing that here given our limited scope. 21 | // 22 | // Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ 23 | @media screen and (max-width: 400px) { 24 | @-ms-viewport{ 25 | width: 320px; 26 | } 27 | } 28 | 29 | // Hide from screenreaders and browsers 30 | // Credit: HTML5 Boilerplate 31 | .hidden { 32 | display: none !important; 33 | visibility: hidden !important; 34 | } 35 | 36 | // Visibility utilities 37 | 38 | // For Phones 39 | .visible-sm { 40 | .responsive-visibility(); 41 | } 42 | .visible-md { 43 | .responsive-invisibility(); 44 | } 45 | .visible-lg { 46 | .responsive-invisibility(); 47 | } 48 | 49 | .hidden-sm { 50 | .responsive-invisibility(); 51 | } 52 | .hidden-md { 53 | .responsive-visibility(); 54 | } 55 | .hidden-lg { 56 | .responsive-visibility(); 57 | } 58 | 59 | 60 | // Tablets & small desktops only 61 | @media (min-width: @screen-tablet) and (max-width: @screen-tablet-max) { 62 | .visible-sm { 63 | .responsive-invisibility(); 64 | } 65 | .visible-md { 66 | .responsive-visibility(); 67 | } 68 | .visible-lg { 69 | .responsive-invisibility(); 70 | } 71 | 72 | .hidden-sm { 73 | .responsive-visibility(); 74 | } 75 | .hidden-md { 76 | .responsive-invisibility(); 77 | } 78 | .hidden-lg { 79 | .responsive-visibility(); 80 | } 81 | } 82 | 83 | // For desktops 84 | @media (min-width: @screen-desktop) { 85 | .visible-sm { 86 | .responsive-invisibility(); 87 | } 88 | .visible-md { 89 | .responsive-invisibility(); 90 | } 91 | .visible-lg { 92 | .responsive-visibility(); 93 | } 94 | 95 | .hidden-sm { 96 | .responsive-visibility(); 97 | } 98 | .hidden-md { 99 | .responsive-visibility(); 100 | } 101 | .hidden-lg { 102 | .responsive-invisibility(); 103 | } 104 | } 105 | 106 | // Print utilities 107 | .visible-print { 108 | .responsive-invisibility(); 109 | } 110 | .hidden-print { } 111 | 112 | @media print { 113 | .visible-print { 114 | .responsive-visibility(); 115 | } 116 | .hidden-print { 117 | .responsive-invisibility(); 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/panels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Panels 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .panel { 8 | padding: 15px; 9 | margin-bottom: 20px; 10 | background-color: @panel-bg; 11 | border: 1px solid @panel-border; 12 | border-radius: @panel-border-radius; 13 | .box-shadow(0 1px 1px rgba(0,0,0,.05)); 14 | } 15 | 16 | // Optional heading 17 | .panel-heading { 18 | margin: -15px -15px 15px; 19 | padding: 10px 15px; 20 | background-color: @panel-heading-bg; 21 | border-bottom: 1px solid @panel-border; 22 | border-top-left-radius: (@panel-border-radius - 1); 23 | border-top-right-radius: (@panel-border-radius - 1); 24 | } 25 | 26 | // Within heading, strip any `h*` tag of it's default margins for spacing. 27 | .panel-title { 28 | margin-top: 0; 29 | margin-bottom: 0; 30 | font-size: (@font-size-base * 1.25); 31 | font-weight: 500; 32 | } 33 | 34 | // Optional footer (stays gray in every modifier class) 35 | .panel-footer { 36 | margin: 15px -15px -15px; 37 | padding: 10px 15px; 38 | background-color: @panel-footer-bg; 39 | border-top: 1px solid @panel-border; 40 | border-bottom-left-radius: (@panel-border-radius - 1); 41 | border-bottom-right-radius: (@panel-border-radius - 1); 42 | } 43 | 44 | // Contextual variations 45 | .panel-primary { 46 | border-color: @panel-primary-border; 47 | .panel-heading { 48 | color: @panel-primary-text; 49 | background-color: @panel-primary-heading-bg; 50 | border-color: @panel-primary-border; 51 | } 52 | } 53 | .panel-success { 54 | border-color: @panel-success-border; 55 | .panel-heading { 56 | color: @panel-success-text; 57 | background-color: @panel-success-heading-bg; 58 | border-color: @panel-success-border; 59 | } 60 | } 61 | .panel-warning { 62 | border-color: @panel-warning-border; 63 | .panel-heading { 64 | color: @panel-warning-text; 65 | background-color: @panel-warning-heading-bg; 66 | border-color: @panel-warning-border; 67 | } 68 | } 69 | .panel-danger { 70 | border-color: @panel-danger-border; 71 | .panel-heading { 72 | color: @panel-danger-text; 73 | background-color: @panel-danger-heading-bg; 74 | border-color: @panel-danger-border; 75 | } 76 | } 77 | .panel-info { 78 | border-color: @panel-info-border; 79 | .panel-heading { 80 | color: @panel-info-text; 81 | background-color: @panel-info-heading-bg; 82 | border-color: @panel-info-border; 83 | } 84 | } 85 | 86 | // List groups in panels 87 | .list-group-flush { 88 | margin: 15px -15px -15px; 89 | 90 | .list-group-item { 91 | border-width: 1px 0; 92 | 93 | // Remove border radius for top one 94 | &:first-child { 95 | .border-top-radius(0); 96 | } 97 | // But keep it for the last one 98 | &:last-child { 99 | border-bottom: 0; 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/unique/demo/index.html: -------------------------------------------------------------------------------- 1 | 21 |
          22 | 25 |
          26 |
          27 |

          What?

          28 | 29 |

          Filters out all duplicate objects items from an array by checking the specified key

          30 | 31 |
          32 |

          Select an attribute to check for uniqueness

          33 | 40 |
          {{items | unique:attribute | json}}
          41 |
          42 |
          43 |
          44 |

          How?

          45 | 46 |

          The filter can take the name of the key to check for uniqueness or set to a non-string truthy value to check the entire object.

          47 |
          48 | <select ng-model="attribute">
          49 | <option value="">-- No Filter --</option>
          50 | <option>firstName</option>
          51 | <option>lastName</option>
          52 | <option>id</option>
          53 | <option>gender</option>
          54 | </select>
          55 | <pre>{{items | unique:attribute | json}}</pre>
          56 | 
          57 | <script>
          58 | $scope.items = [
          59 | { firstName: 'Dean', lastName: 'Sofer',
          60 | id: 1, gender: 'Male' },
          61 | { firstName: 'Dean', lastName: 'Kuntz',
          62 | id: 2, gender: 'Male' },
          63 | { firstName: 'Peter', lastName: 'Piper',
          64 | id: 3, gender: 'Female' },
          65 | { firstName: 'Peter', lastName: 'Darwin',
          66 | id: 4, gender: 'Male' },
          67 | { firstName: 'Janet', lastName: 'Piper',
          68 | id: 5, gender: 'Female' },
          69 | { firstName: 'Dan', lastName: 'Doyon',
          70 | id: 6, gender: 'Male' },
          71 | { firstName: 'Andy', lastName: 'Joslin',
          72 | id: 1, gender: 'Male' },
          73 | ];
          74 | </script>
          75 | 
          76 |
          77 |
          78 |
          -------------------------------------------------------------------------------- /bower_components/bootstrap/js/alert.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: alert.js v3.0.0 3 | * http://twbs.github.com/bootstrap/javascript.html#alerts 4 | * ======================================================================== 5 | * Copyright 2013 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ======================================================================== */ 19 | 20 | 21 | +function ($) { "use strict"; 22 | 23 | // ALERT CLASS DEFINITION 24 | // ====================== 25 | 26 | var dismiss = '[data-dismiss="alert"]' 27 | var Alert = function (el) { 28 | $(el).on('click', dismiss, this.close) 29 | } 30 | 31 | Alert.prototype.close = function (e) { 32 | var $this = $(this) 33 | var selector = $this.attr('data-target') 34 | 35 | if (!selector) { 36 | selector = $this.attr('href') 37 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 38 | } 39 | 40 | var $parent = $(selector) 41 | 42 | if (e) e.preventDefault() 43 | 44 | if (!$parent.length) { 45 | $parent = $this.hasClass('alert') ? $this : $this.parent() 46 | } 47 | 48 | $parent.trigger(e = $.Event('close.bs.alert')) 49 | 50 | if (e.isDefaultPrevented()) return 51 | 52 | $parent.removeClass('in') 53 | 54 | function removeElement() { 55 | $parent.trigger('closed.bs.alert').remove() 56 | } 57 | 58 | $.support.transition && $parent.hasClass('fade') ? 59 | $parent 60 | .one($.support.transition.end, removeElement) 61 | .emulateTransitionEnd(150) : 62 | removeElement() 63 | } 64 | 65 | 66 | // ALERT PLUGIN DEFINITION 67 | // ======================= 68 | 69 | var old = $.fn.alert 70 | 71 | $.fn.alert = function (option) { 72 | return this.each(function () { 73 | var $this = $(this) 74 | var data = $this.data('bs.alert') 75 | 76 | if (!data) $this.data('bs.alert', (data = new Alert(this))) 77 | if (typeof option == 'string') data[option].call($this) 78 | }) 79 | } 80 | 81 | $.fn.alert.Constructor = Alert 82 | 83 | 84 | // ALERT NO CONFLICT 85 | // ================= 86 | 87 | $.fn.alert.noConflict = function () { 88 | $.fn.alert = old 89 | return this 90 | } 91 | 92 | 93 | // ALERT DATA-API 94 | // ============== 95 | 96 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 97 | 98 | }(window.jQuery); 99 | -------------------------------------------------------------------------------- /bower_components/bootstrap/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Bootstrap 2 | 3 | Looking to contribute something to Bootstrap? **Here's how you can help.** 4 | 5 | 6 | 7 | ## Reporting issues 8 | 9 | We only accept issues that are bug reports or feature requests. Bugs must be isolated and reproducible problems that we can fix within the Bootstrap core. Please read the following guidelines before opening any issue. 10 | 11 | 1. **Search for existing issues.** We get a lot of duplicate issues, and you'd help us out a lot by first checking if someone else has reported the same issue. Moreover, the issue may have already been resolved with a fix available. 12 | 2. **Create an isolated and reproducible test case.** Be sure the problem exists in Bootstrap's code with a [reduced test case](http://css-tricks.com/reduced-test-cases/) that should be included in each bug report. 13 | 3. **Include a live example.** Make use of jsFiddle or jsBin to share your isolated test cases. 14 | 4. **Share as much information as possible.** Include operating system and version, browser and version, version of Bootstrap, customized or vanilla build, etc. where appropriate. Also include steps to reproduce the bug. 15 | 16 | 17 | 18 | ## Key branches 19 | 20 | - `master` is the latest, deployed version. 21 | - `gh-pages` is the hosted docs (not to be used for pull requests). 22 | - `*-wip` is the official work in progress branch for the next release. 23 | 24 | 25 | 26 | ## Pull requests 27 | 28 | - Try to submit pull requests against the latest `*-wip` branch for easier merging 29 | - CSS changes must be done in .less files first, never just the compiled files 30 | - If modifying the .less files, always recompile and commit the compiled files bootstrap.css and bootstrap.min.css 31 | - Try not to pollute your pull request with unintended changes--keep them simple and small 32 | - Try to share which browsers your code has been tested in before submitting a pull request 33 | 34 | 35 | 36 | ## Coding standards 37 | 38 | ### HTML 39 | 40 | - Two spaces for indentation, never tabs 41 | - Double quotes only, never single quotes 42 | - Always use proper indentation 43 | - Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags) 44 | 45 | ### CSS 46 | 47 | - Adhere to the [Recess CSS property order](http://markdotto.com/2011/11/29/css-property-order/) 48 | - Multiple-line approach (one property and value per line) 49 | - Always a space after a property's colon (.e.g, `display: block;` and not `display:block;`) 50 | - End all lines with a semi-colon 51 | - For multiple, comma-separated selectors, place each selector on it's own line 52 | - Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks). 53 | 54 | ### JS 55 | 56 | - No semicolons 57 | - Comma first 58 | - 2 spaces (no tabs) 59 | - strict mode 60 | - "Attractive" 61 | 62 | 63 | 64 | ## License 65 | 66 | By contributing your code, you agree to license your contribution under the terms of the APLv2: https://github.com/twbs/bootstrap/blob/master/LICENSE 67 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/jq/demo/index.html: -------------------------------------------------------------------------------- 1 |
          2 | 5 |
          6 |
          7 |

          What?

          8 | 9 |

          Call the jQuery function or plugin specified on the element.

          10 | 11 |

          This example shows how to call 12 | the bootstrap tooltip with almost no work: 13 |

          14 | 15 |
          16 |

          17 | Hover over me for static Tooltip 18 |

          19 | 20 |

          21 | Fill the input for a dynamic Tooltip: 22 | 23 |

          24 |
          25 |
          26 |
          27 |

          Why?

          28 | 29 |

          Not every jQuery plugin requires creating a new directive just to use it. Instead, use the pass-through directive to rapidly port functionality. It is probably the best solution for 75% of the cases you will encounter.

          30 | 31 |

          If a plugin requires more robust integration with AngularJS then you may need to look into creating a custom directive instead, or 32 | contact us with a request. 33 |

          34 |
          35 |
          36 | 37 |

          How?

          38 | 39 |

          To call something like $.fn.tooltip() simply do 40 | ui-jq="tooltip". Note that the name of the function must be identical. This also works for normal jQuery commands such as 41 | $.fn.slideUp().

          42 | 43 |

          To pass parameters use the ui-options attribute. The value will be evaluated in the 44 | $scope context and passed to the function. If defaults are set, the passed options will extend them. If a string is passed, the default options will be ignored. 45 |

          46 | 47 |

          Use the directive name jq for namespacing inside 48 | uiJqConfig. Then sub-namespace options for each function by the name of that function (exactly as it is passed to 49 | ui-jq) so that you don't have to pass options every time you call the directive.

          50 |
          51 | <a title="Easiest. Binding. Ever!" ui-jq="tooltip">Hover over me for static Tooltip</a>
          52 | 
          53 | <a data-original-title="{{tooltip}}" ui-jq="tooltip">Fill the input for a dynamic Tooltip:</a>
          54 | <input type="text" ng-model="tooltip" placeholder="Tooltip Content">
          55 | 
          56 | <script>
          57 |     myModule.value('uiJqConfig', {
          58 |         // The Tooltip namespace
          59 |         tooltip: {
          60 |              // Tooltip options. This object will be used as the defaults
          61 |             placement: 'right'
          62 |         }
          63 |     });
          64 | </script>
          65 | 
          66 |
          67 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/tests/unit/tab.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | module("tabs") 4 | 5 | test("should provide no conflict", function () { 6 | var tab = $.fn.tab.noConflict() 7 | ok(!$.fn.tab, 'tab was set back to undefined (org value)') 8 | $.fn.tab = tab 9 | }) 10 | 11 | test("should be defined on jquery object", function () { 12 | ok($(document.body).tab, 'tabs method is defined') 13 | }) 14 | 15 | test("should return element", function () { 16 | ok($(document.body).tab()[0] == document.body, 'document.body returned') 17 | }) 18 | 19 | test("should activate element by tab id", function () { 20 | var tabsHTML = 21 | '' 25 | 26 | $('
          ').appendTo("#qunit-fixture") 27 | 28 | $(tabsHTML).find('li:last a').tab('show') 29 | equals($("#qunit-fixture").find('.active').attr('id'), "profile") 30 | 31 | $(tabsHTML).find('li:first a').tab('show') 32 | equals($("#qunit-fixture").find('.active').attr('id'), "home") 33 | }) 34 | 35 | test("should activate element by tab id", function () { 36 | var pillsHTML = 37 | '' 41 | 42 | $('
          ').appendTo("#qunit-fixture") 43 | 44 | $(pillsHTML).find('li:last a').tab('show') 45 | equals($("#qunit-fixture").find('.active').attr('id'), "profile") 46 | 47 | $(pillsHTML).find('li:first a').tab('show') 48 | equals($("#qunit-fixture").find('.active').attr('id'), "home") 49 | }) 50 | 51 | 52 | test("should not fire closed when close is prevented", function () { 53 | $.support.transition = false 54 | stop(); 55 | $('
          ') 56 | .on('show.bs.tab', function (e) { 57 | e.preventDefault(); 58 | ok(true); 59 | start(); 60 | }) 61 | .on('shown.bs.tab', function () { 62 | ok(false); 63 | }) 64 | .tab('show') 65 | }) 66 | 67 | test("show and shown events should reference correct relatedTarget", function () { 68 | var dropHTML = 69 | '
            ' 70 | + '' 76 | + '
          ' 77 | 78 | $(dropHTML).find('ul>li:first a').tab('show').end() 79 | .find('ul>li:last a').on('show', function(event){ 80 | equals(event.relatedTarget.hash, "#1-1") 81 | }).on('shown', function(event){ 82 | equals(event.relatedTarget.hash, "#1-1") 83 | }).tab('show') 84 | }) 85 | 86 | }) 87 | -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/css/pygments-manni.css: -------------------------------------------------------------------------------- 1 | .hll { background-color: #ffffcc } 2 | /*{ background: #f0f3f3; }*/ 3 | .c { color: #999; } /* Comment */ 4 | .err { color: #AA0000; background-color: #FFAAAA } /* Error */ 5 | .k { color: #006699; } /* Keyword */ 6 | .o { color: #555555 } /* Operator */ 7 | .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ 8 | .cp { color: #009999 } /* Comment.Preproc */ 9 | .c1 { color: #999; } /* Comment.Single */ 10 | .cs { color: #999; } /* Comment.Special */ 11 | .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ 12 | .ge { font-style: italic } /* Generic.Emph */ 13 | .gr { color: #FF0000 } /* Generic.Error */ 14 | .gh { color: #003300; } /* Generic.Heading */ 15 | .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ 16 | .go { color: #AAAAAA } /* Generic.Output */ 17 | .gp { color: #000099; } /* Generic.Prompt */ 18 | .gs { } /* Generic.Strong */ 19 | .gu { color: #003300; } /* Generic.Subheading */ 20 | .gt { color: #99CC66 } /* Generic.Traceback */ 21 | .kc { color: #006699; } /* Keyword.Constant */ 22 | .kd { color: #006699; } /* Keyword.Declaration */ 23 | .kn { color: #006699; } /* Keyword.Namespace */ 24 | .kp { color: #006699 } /* Keyword.Pseudo */ 25 | .kr { color: #006699; } /* Keyword.Reserved */ 26 | .kt { color: #007788; } /* Keyword.Type */ 27 | .m { color: #FF6600 } /* Literal.Number */ 28 | .s { color: #d44950 } /* Literal.String */ 29 | .na { color: #4f9fcf } /* Name.Attribute */ 30 | .nb { color: #336666 } /* Name.Builtin */ 31 | .nc { color: #00AA88; } /* Name.Class */ 32 | .no { color: #336600 } /* Name.Constant */ 33 | .nd { color: #9999FF } /* Name.Decorator */ 34 | .ni { color: #999999; } /* Name.Entity */ 35 | .ne { color: #CC0000; } /* Name.Exception */ 36 | .nf { color: #CC00FF } /* Name.Function */ 37 | .nl { color: #9999FF } /* Name.Label */ 38 | .nn { color: #00CCFF; } /* Name.Namespace */ 39 | .nt { color: #2f6f9f; } /* Name.Tag */ 40 | .nv { color: #003333 } /* Name.Variable */ 41 | .ow { color: #000000; } /* Operator.Word */ 42 | .w { color: #bbbbbb } /* Text.Whitespace */ 43 | .mf { color: #FF6600 } /* Literal.Number.Float */ 44 | .mh { color: #FF6600 } /* Literal.Number.Hex */ 45 | .mi { color: #FF6600 } /* Literal.Number.Integer */ 46 | .mo { color: #FF6600 } /* Literal.Number.Oct */ 47 | .sb { color: #CC3300 } /* Literal.String.Backtick */ 48 | .sc { color: #CC3300 } /* Literal.String.Char */ 49 | .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ 50 | .s2 { color: #CC3300 } /* Literal.String.Double */ 51 | .se { color: #CC3300; } /* Literal.String.Escape */ 52 | .sh { color: #CC3300 } /* Literal.String.Heredoc */ 53 | .si { color: #AA0000 } /* Literal.String.Interpol */ 54 | .sx { color: #CC3300 } /* Literal.String.Other */ 55 | .sr { color: #33AAAA } /* Literal.String.Regex */ 56 | .s1 { color: #CC3300 } /* Literal.String.Single */ 57 | .ss { color: #FFCC33 } /* Literal.String.Symbol */ 58 | .bp { color: #336666 } /* Name.Builtin.Pseudo */ 59 | .vc { color: #003333 } /* Name.Variable.Class */ 60 | .vg { color: #003333 } /* Name.Variable.Global */ 61 | .vi { color: #003333 } /* Name.Variable.Instance */ 62 | .il { color: #FF6600 } /* Literal.Number.Integer.Long */ 63 | 64 | .css .o, 65 | .css .o + .nt, 66 | .css .nt + .nt { color: #999; } 67 | -------------------------------------------------------------------------------- /bower_components/bootstrap/_includes/nav-css.html: -------------------------------------------------------------------------------- 1 |
        27. 2 | Overview 3 | 11 |
        28. 12 |
        29. 13 | Glyphicons 14 |
        30. 15 |
        31. 16 | Grid system 17 | 27 |
        32. 28 |
        33. 29 | Typography 30 | 39 |
        34. 40 |
        35. Code
        36. 41 |
        37. 42 | Tables 43 | 51 |
        38. 52 |
        39. 53 | Forms 54 | 64 |
        40. 65 |
        41. 66 | Buttons 67 | 73 |
        42. 74 |
        43. Images
        44. 75 |
        45. Helper classes
        46. 76 |
        47. Responsive utilities
        48. 77 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/unique/test/uniqueSpec.js: -------------------------------------------------------------------------------- 1 | describe('unique', function () { 2 | var uniqueFilter; 3 | 4 | beforeEach(module('ui.unique')); 5 | beforeEach(inject(function ($filter) { 6 | uniqueFilter = $filter('unique'); 7 | })); 8 | 9 | it('should return unique entries based on object equality', function () { 10 | var arrayToFilter = [ 11 | {key: 'value'}, 12 | {key: 'value2'}, 13 | {key: 'value'} 14 | ]; 15 | expect(uniqueFilter(arrayToFilter)).toEqual([ 16 | {key: 'value'}, 17 | {key: 'value2'} 18 | ]); 19 | }); 20 | 21 | it('should return unique entries based on object equality for complex objects', function () { 22 | var arrayToFilter = [ 23 | {key: 'value', other: 'other1'}, 24 | {key: 'value2', other: 'other2'}, 25 | {other: 'other1', key: 'value'} 26 | ]; 27 | expect(uniqueFilter(arrayToFilter)).toEqual([ 28 | {key: 'value', other: 'other1'}, 29 | {key: 'value2', other: 'other2'} 30 | ]); 31 | }); 32 | 33 | it('should return unique entries based on the key provided', function () { 34 | var arrayToFilter = [ 35 | {key: 'value'}, 36 | {key: 'value2'}, 37 | {key: 'value'} 38 | ]; 39 | expect(uniqueFilter(arrayToFilter, 'key')).toEqual([ 40 | {key: 'value'}, 41 | {key: 'value2'} 42 | ]); 43 | }); 44 | 45 | it('should return unique entries based on the key provided for complex objects', function () { 46 | var arrayToFilter = [ 47 | {key: 'value', other: 'other1'}, 48 | {key: 'value2', other: 'other2'}, 49 | {key: 'value', other: 'other3'} 50 | ]; 51 | expect(uniqueFilter(arrayToFilter, 'key')).toEqual([ 52 | { key: 'value', other: 'other1' }, 53 | { key: 'value2', other: 'other2' } 54 | ]); 55 | }); 56 | 57 | it('should return unique entries based on the subkey provided for complex objects', function () { 58 | var arrayToFilter = [ 59 | {key: 'value', other: {subkey: 'sub1'}}, 60 | {key: 'value', other: {subkey: 'sub2'}}, 61 | {key: 'value2', other: {subkey: 'sub1'}} 62 | ]; 63 | expect(uniqueFilter(arrayToFilter, 'other.subkey')).toEqual([ 64 | {key: 'value', other: {subkey: 'sub1'}}, 65 | {key: 'value', other: {subkey: 'sub2'}} 66 | ]); 67 | }); 68 | 69 | it('should return unique primitives in arrays', function () { 70 | expect(uniqueFilter([1, 2, 1, 3])).toEqual([1, 2, 3]); 71 | }); 72 | 73 | it('should work correctly for arrays of mixed elements and object equality', function () { 74 | expect(uniqueFilter([1, {key: 'value'}, 1, {key: 'value'}, 2, "string", 3])).toEqual([1, {key: 'value'}, 2, "string", 3]); 75 | }); 76 | 77 | it('should work correctly for arrays of mixed elements and a key specified', function () { 78 | expect(uniqueFilter([1, {key: 'value'}, 1, {key: 'value'}, 2, "string", 3], 'key')).toEqual([1, {key: 'value'}, 2, "string", 3]); 79 | }); 80 | 81 | it('should return unmodified object if not array', function () { 82 | expect(uniqueFilter('string', 'someKey')).toEqual('string'); 83 | }); 84 | 85 | it('should return unmodified array if provided key === false', function () { 86 | var arrayToFilter = [ 87 | {key: 'value1'}, 88 | {key: 'value2'} 89 | ]; 90 | expect(uniqueFilter(arrayToFilter, false)).toEqual(arrayToFilter); 91 | }); 92 | 93 | }); -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/validate/demo/index.html: -------------------------------------------------------------------------------- 1 | 9 |
          10 | 13 |

          What?

          14 | 15 |
          16 |
          17 |

          The ui-validate directive makes it very easy to create custom validator expressions.

          18 | 19 |
          20 |
          21 |

          e-mail

          22 | 23 | This e-mail is black-listed! 24 |
          is form valid: {{form.$valid}} 25 |
          email errors: {{form.email.$error | json}} 26 | 27 |

          password

          28 | 29 | 30 | Passwords do not match! 31 |
          is form valid: {{form.$valid}} 32 |
          password errors: {{form.confirm_password.$error | json}} 33 |
          34 |
          35 |

          Why?

          36 | 37 |

          AngularJS comes with several built-in validation mechanism for input fields (ngRequired, ngPattern etc.) but using an arbitrary validation function requires creation of custom formatters and / or parsers. The ui-validate directive makes it easy to use any function(s) defined in scope as a validator function(s).

          38 |
          39 |
          40 |
          41 | <input name="email" ng-model="email"
          42 | ui-validate='{blacklist : 'notBlackListed($value)' }'>
          43 | Is e-mail is black-listed? {{!!form.email.$error.blacklist}}
          44 | 
          45 | <input name="password" required ng-model="password">
          46 | <input name="confirm_password"
          47 | ui-validate=" '$value==password' "
          48 | ui-validate-watch=" 'password' ">
          49 | Passwords match? {{!!form.confirm_password.$error.validator}}
          50 | 
          51 | ...
          52 | 
          53 | $scope.notBlackListed = function(value) {
          54 | var blacklist = ['bad@domain.com','verybad@domain.com'];
          55 | return blacklist.indexOf(value) === -1;
          56 | }
          57 | 
          58 |

          How?

          59 | 60 |

          Create an expression inside a string. If it evaluates to 61 | true the input is valid, the rule name will be validator by default.

          62 |
          ui-validate=" 'validateFoo($value)' "
          63 | Input is valid: {{!!myForm.myInput.$error.validator}}
          64 |

          65 | Or define multiple rules by creating an object where the key is the rule name and the value is the expression string. 66 |

          67 |
          ui-validate="{foo:'valFoo($value)', bar:'$value == someVar'}"
          68 | Foo rule passes: {{!!myForm.myInput.$error.foo}}
          69 | Bar rule passes: {{!!myForm.myInput.$error.bar}}
          70 | 
          71 |
          72 |
          73 |
          -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/validate/validate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * General-purpose validator for ngModel. 3 | * angular.js comes with several built-in validation mechanism for input fields (ngRequired, ngPattern etc.) but using 4 | * an arbitrary validation function requires creation of a custom formatters and / or parsers. 5 | * The ui-validate directive makes it easy to use any function(s) defined in scope as a validator function(s). 6 | * A validator function will trigger validation on both model and input changes. 7 | * 8 | * @example 9 | * @example 10 | * @example 11 | * @example 12 | * 13 | * @param ui-validate {string|object literal} If strings is passed it should be a scope's function to be used as a validator. 14 | * If an object literal is passed a key denotes a validation error key while a value should be a validator function. 15 | * In both cases validator function should take a value to validate as its argument and should return true/false indicating a validation result. 16 | */ 17 | angular.module('ui.validate',[]).directive('uiValidate', function () { 18 | 19 | return { 20 | restrict: 'A', 21 | require: 'ngModel', 22 | link: function (scope, elm, attrs, ctrl) { 23 | var validateFn, watch, validators = {}, 24 | validateExpr = scope.$eval(attrs.uiValidate); 25 | 26 | if (!validateExpr){ return;} 27 | 28 | if (angular.isString(validateExpr)) { 29 | validateExpr = { validator: validateExpr }; 30 | } 31 | 32 | angular.forEach(validateExpr, function (exprssn, key) { 33 | validateFn = function (valueToValidate) { 34 | var expression = scope.$eval(exprssn, { '$value' : valueToValidate }); 35 | if (angular.isObject(expression) && angular.isFunction(expression.then)) { 36 | // expression is a promise 37 | expression.then(function(){ 38 | ctrl.$setValidity(key, true); 39 | }, function(){ 40 | ctrl.$setValidity(key, false); 41 | }); 42 | return valueToValidate; 43 | } else if (expression) { 44 | // expression is true 45 | ctrl.$setValidity(key, true); 46 | return valueToValidate; 47 | } else { 48 | // expression is false 49 | ctrl.$setValidity(key, false); 50 | return undefined; 51 | } 52 | }; 53 | validators[key] = validateFn; 54 | ctrl.$formatters.push(validateFn); 55 | ctrl.$parsers.push(validateFn); 56 | }); 57 | 58 | // Support for ui-validate-watch 59 | if (attrs.uiValidateWatch) { 60 | watch = scope.$eval(attrs.uiValidateWatch); 61 | if (angular.isString(watch)) { 62 | scope.$watch(watch, function(){ 63 | angular.forEach(validators, function(validatorFn, key){ 64 | validatorFn(ctrl.$modelValue); 65 | }); 66 | }); 67 | } else { 68 | angular.forEach(watch, function(expression, key){ 69 | scope.$watch(expression, function(){ 70 | validators[key](ctrl.$modelValue); 71 | }); 72 | }); 73 | } 74 | } 75 | } 76 | }; 77 | }); 78 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/button.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: button.js v3.0.0 3 | * http://twbs.github.com/bootstrap/javascript.html#buttons 4 | * ======================================================================== 5 | * Copyright 2013 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ======================================================================== */ 19 | 20 | 21 | +function ($) { "use strict"; 22 | 23 | // BUTTON PUBLIC CLASS DEFINITION 24 | // ============================== 25 | 26 | var Button = function (element, options) { 27 | this.$element = $(element) 28 | this.options = $.extend({}, Button.DEFAULTS, options) 29 | } 30 | 31 | Button.DEFAULTS = { 32 | loadingText: 'loading...' 33 | } 34 | 35 | Button.prototype.setState = function (state) { 36 | var d = 'disabled' 37 | var $el = this.$element 38 | var val = $el.is('input') ? 'val' : 'html' 39 | var data = $el.data() 40 | 41 | state = state + 'Text' 42 | 43 | if (!data.resetText) $el.data('resetText', $el[val]()) 44 | 45 | $el[val](data[state] || this.options[state]) 46 | 47 | // push to event loop to allow forms to submit 48 | setTimeout(function () { 49 | state == 'loadingText' ? 50 | $el.addClass(d).attr(d, d) : 51 | $el.removeClass(d).removeAttr(d); 52 | }, 0) 53 | } 54 | 55 | Button.prototype.toggle = function () { 56 | var $parent = this.$element.closest('[data-toggle="buttons"]') 57 | 58 | if ($parent.length) { 59 | var $input = this.$element.find('input').prop('checked', !this.$element.hasClass('active')) 60 | if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') 61 | } 62 | 63 | this.$element.toggleClass('active') 64 | } 65 | 66 | 67 | // BUTTON PLUGIN DEFINITION 68 | // ======================== 69 | 70 | var old = $.fn.button 71 | 72 | $.fn.button = function (option) { 73 | return this.each(function () { 74 | var $this = $(this) 75 | var data = $this.data('button') 76 | var options = typeof option == 'object' && option 77 | 78 | if (!data) $this.data('bs.button', (data = new Button(this, options))) 79 | 80 | if (option == 'toggle') data.toggle() 81 | else if (option) data.setState(option) 82 | }) 83 | } 84 | 85 | $.fn.button.Constructor = Button 86 | 87 | 88 | // BUTTON NO CONFLICT 89 | // ================== 90 | 91 | $.fn.button.noConflict = function () { 92 | $.fn.button = old 93 | return this 94 | } 95 | 96 | 97 | // BUTTON DATA-API 98 | // =============== 99 | 100 | $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { 101 | var $btn = $(e.target) 102 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') 103 | $btn.button('toggle') 104 | e.preventDefault() 105 | }) 106 | 107 | }(window.jQuery); 108 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/modals.less: -------------------------------------------------------------------------------- 1 | // 2 | // Modals 3 | // -------------------------------------------------- 4 | 5 | // .modal-open - body class for killing the scroll 6 | // .modal - container to scroll within 7 | // .modal-dialog - positioning shell for the actual modal 8 | // .modal-content - actual modal w/ bg and corners and shit 9 | 10 | // Kill the scroll on the body 11 | .modal-open { 12 | overflow: hidden; 13 | } 14 | 15 | // Container that the modal scrolls within 16 | .modal { 17 | display: none; 18 | overflow: auto; 19 | overflow-y: scroll; 20 | position: fixed; 21 | top: 0; 22 | right: 0; 23 | bottom: 0; 24 | left: 0; 25 | z-index: @zindex-modal-background; 26 | 27 | // When fading in the modal, animate it to slide down 28 | &.fade .modal-dialog { 29 | .translate(0, -25%); 30 | .transition-transform(~"0.3s ease-out"); 31 | } 32 | &.fade.in .modal-dialog { .translate(0, 0)} 33 | } 34 | 35 | // Shell div to position the modal with bottom padding 36 | .modal-dialog { 37 | position: relative; 38 | top: 0; 39 | left: 0; 40 | right: 0; 41 | width: auto; 42 | padding: 10px; 43 | z-index: (@zindex-modal-background + 10); 44 | } 45 | 46 | // Actual modal 47 | .modal-content { 48 | position: relative; 49 | background-color: @modal-content-bg; 50 | border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc) 51 | border: 1px solid @modal-content-border-color; 52 | border-radius: @border-radius-large; 53 | .box-shadow(0 3px 9px rgba(0,0,0,.5)); 54 | .background-clip(padding-box); 55 | // Remove focus outline from opened modal 56 | outline: none; 57 | } 58 | 59 | // Modal background 60 | .modal-backdrop { 61 | position: fixed; 62 | top: 0; 63 | right: 0; 64 | bottom: 0; 65 | left: 0; 66 | z-index: (@zindex-modal-background - 10); 67 | background-color: @modal-backdrop-bg; 68 | // Fade for backdrop 69 | &.fade { .opacity(0); } 70 | &.fade.in { .opacity(.5); } 71 | } 72 | 73 | // Modal header 74 | // Top section of the modal w/ title and dismiss 75 | .modal-header { 76 | padding: @modal-title-padding; 77 | border-bottom: 1px solid @modal-header-border-color; 78 | min-height: (@modal-title-padding + @modal-title-line-height); 79 | } 80 | // Close icon 81 | .modal-header .close { 82 | margin-top: -2px; 83 | } 84 | 85 | // Title text within header 86 | .modal-title { 87 | margin: 0; 88 | line-height: @modal-title-line-height; 89 | } 90 | 91 | // Modal body 92 | // Where all modal content resides (sibling of .modal-header and .modal-footer) 93 | .modal-body { 94 | position: relative; 95 | padding: @modal-inner-padding; 96 | } 97 | 98 | // Footer (for actions) 99 | .modal-footer { 100 | margin-top: 15px; 101 | padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding; 102 | text-align: right; // right align buttons 103 | border-top: 1px solid @modal-footer-border-color; 104 | .clearfix(); // clear it in case folks use .pull-* classes on buttons 105 | 106 | // Properly space out buttons 107 | .btn + .btn { 108 | margin-left: 5px; 109 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs 110 | } 111 | // but override that for button groups 112 | .btn-group .btn + .btn { 113 | margin-left: -1px; 114 | } 115 | // and override it for block buttons as well 116 | .btn-block + .btn-block { 117 | margin-left: 0; 118 | } 119 | } 120 | 121 | // Scale up the modal 122 | @media screen and (min-width: @screen-tablet) { 123 | 124 | .modal-dialog { 125 | left: 50%; 126 | right: auto; 127 | width: 560px; 128 | margin-left: -280px; 129 | padding-top: 30px; 130 | padding-bottom: 30px; 131 | } 132 | .modal-content { 133 | .box-shadow(0 5px 15px rgba(0,0,0,.5)); 134 | } 135 | 136 | } 137 | -------------------------------------------------------------------------------- /bower_components/bootstrap/js/popover.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: popover.js v3.0.0 3 | * http://twbs.github.com/bootstrap/javascript.html#popovers 4 | * ======================================================================== 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ======================================================================== */ 19 | 20 | 21 | +function ($) { "use strict"; 22 | 23 | // POPOVER PUBLIC CLASS DEFINITION 24 | // =============================== 25 | 26 | var Popover = function (element, options) { 27 | this.init('popover', element, options) 28 | } 29 | 30 | if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') 31 | 32 | Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, { 33 | placement: 'right' 34 | , trigger: 'click' 35 | , content: '' 36 | , template: '

          ' 37 | }) 38 | 39 | 40 | // NOTE: POPOVER EXTENDS tooltip.js 41 | // ================================ 42 | 43 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) 44 | 45 | Popover.prototype.constructor = Popover 46 | 47 | Popover.prototype.getDefaults = function () { 48 | return Popover.DEFAULTS 49 | } 50 | 51 | Popover.prototype.setContent = function () { 52 | var $tip = this.tip() 53 | var title = this.getTitle() 54 | var content = this.getContent() 55 | 56 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) 57 | $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) 58 | 59 | $tip.removeClass('fade top bottom left right in') 60 | 61 | $tip.find('.popover-title:empty').hide() 62 | } 63 | 64 | Popover.prototype.hasContent = function () { 65 | return this.getTitle() || this.getContent() 66 | } 67 | 68 | Popover.prototype.getContent = function () { 69 | var $e = this.$element 70 | var o = this.options 71 | 72 | return $e.attr('data-content') 73 | || (typeof o.content == 'function' ? 74 | o.content.call($e[0]) : 75 | o.content) 76 | } 77 | 78 | Popover.prototype.tip = function () { 79 | if (!this.$tip) this.$tip = $(this.options.template) 80 | return this.$tip 81 | } 82 | 83 | Popover.prototype.destroy = function () { 84 | this.hide().$element.off('.' + this.type).removeData(this.type) 85 | } 86 | 87 | 88 | // POPOVER PLUGIN DEFINITION 89 | // ========================= 90 | 91 | var old = $.fn.popover 92 | 93 | $.fn.popover = function (option) { 94 | return this.each(function () { 95 | var $this = $(this) 96 | var data = $this.data('bs.popover') 97 | var options = typeof option == 'object' && option 98 | 99 | if (!data) $this.data('bs.popover', (data = new Popover(this, options))) 100 | if (typeof option == 'string') data[option]() 101 | }) 102 | } 103 | 104 | $.fn.popover.Constructor = Popover 105 | 106 | 107 | // POPOVER NO CONFLICT 108 | // =================== 109 | 110 | $.fn.popover.noConflict = function () { 111 | $.fn.popover = old 112 | return this 113 | } 114 | 115 | }(window.jQuery); 116 | -------------------------------------------------------------------------------- /bower_components/bootstrap/assets/js/respond.min.js: -------------------------------------------------------------------------------- 1 | /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ 2 | /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ 3 | window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); 4 | 5 | /*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ 6 | (function(a){"use strict";function x(){u(!0)}var b={};a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,b.mediaQueriesSupported;var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var a=m.shift();v(a.href,function(b){p(b,a.href,a.media),h[a.href]=!0,setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(a){var b="clientWidth",h=d[b],k="CSS1Compat"===c.compatMode&&h||c.body[b]||h,m={},n=l[l.length-1],o=(new Date).getTime();if(a&&q&&i>o-q)return clearTimeout(r),r=setTimeout(u,i),void 0;q=o;for(var p in e)if(e.hasOwnProperty(p)){var v=e[p],w=v.minw,x=v.maxw,y=null===w,z=null===x,A="em";w&&(w=parseFloat(w)*(w.indexOf(A)>-1?t||s():1)),x&&(x=parseFloat(x)*(x.indexOf(A)>-1?t||s():1)),v.hasquery&&(y&&z||!(y||k>=w)||!(z||x>=k))||(m[v.media]||(m[v.media]=[]),m[v.media].push(f[v.rules]))}for(var B in g)g.hasOwnProperty(B)&&g[B]&&g[B].parentNode===j&&j.removeChild(g[B]);for(var C in m)if(m.hasOwnProperty(C)){var D=c.createElement("style"),E=m[C].join("\n");D.type="text/css",D.media=C,j.insertBefore(D,n.nextSibling),D.styleSheet?D.styleSheet.cssText=E:D.appendChild(c.createTextNode(E)),g.push(D)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)})(this); 7 | -------------------------------------------------------------------------------- /bower_components/bootstrap/less/buttons.less: -------------------------------------------------------------------------------- 1 | // 2 | // Buttons 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // -------------------------------------------------- 8 | 9 | // Core styles 10 | .btn { 11 | display: inline-block; 12 | padding: @padding-base-vertical @padding-base-horizontal; 13 | margin-bottom: 0; // For input.btn 14 | font-size: @font-size-base; 15 | font-weight: 500; 16 | line-height: @line-height-base; 17 | text-align: center; 18 | vertical-align: middle; 19 | cursor: pointer; 20 | border: 1px solid transparent; 21 | border-radius: @border-radius-base; 22 | white-space: nowrap; 23 | 24 | &:focus { 25 | .tab-focus(); 26 | } 27 | 28 | &:hover, 29 | &:focus { 30 | color: @btn-hover-color; 31 | text-decoration: none; 32 | } 33 | 34 | &:active, 35 | &.active { 36 | outline: 0; 37 | .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); 38 | } 39 | 40 | &.disabled, 41 | &[disabled], 42 | fieldset[disabled] & { 43 | cursor: default; 44 | pointer-events: none; // Future-proof disabling of clicks 45 | .opacity(.65); 46 | .box-shadow(none); 47 | } 48 | 49 | } 50 | 51 | 52 | // Alternate buttons 53 | // -------------------------------------------------- 54 | 55 | .btn-default { 56 | .btn-pseudo-states(@btn-default-color, @btn-default-bg, @btn-default-border); 57 | } 58 | .btn-primary { 59 | .btn-pseudo-states(@btn-primary-color, @btn-primary-bg, @btn-primary-border); 60 | } 61 | // Warning appears as orange 62 | .btn-warning { 63 | .btn-pseudo-states(@btn-warning-color, @btn-warning-bg, @btn-warning-border); 64 | } 65 | // Danger and error appear as red 66 | .btn-danger { 67 | .btn-pseudo-states(@btn-danger-color, @btn-danger-bg, @btn-danger-border); 68 | } 69 | // Success appears as green 70 | .btn-success { 71 | .btn-pseudo-states(@btn-success-color, @btn-success-bg, @btn-success-border); 72 | } 73 | // Info appears as blue-green 74 | .btn-info { 75 | .btn-pseudo-states(@btn-info-color, @btn-info-bg, @btn-info-border); 76 | } 77 | 78 | 79 | // Link buttons 80 | // ------------------------- 81 | 82 | // Make a button look and behave like a link 83 | .btn-link { 84 | color: @link-color; 85 | font-weight: normal; 86 | cursor: pointer; 87 | border-radius: 0; 88 | 89 | &, 90 | &:active, 91 | &[disabled], 92 | fieldset[disabled] & { 93 | background-color: transparent; 94 | .box-shadow(none); 95 | } 96 | &, 97 | &:hover, 98 | &:focus, 99 | &:active { 100 | border-color: transparent; 101 | } 102 | &:hover, 103 | &:focus { 104 | color: @link-hover-color; 105 | text-decoration: underline; 106 | background-color: transparent; 107 | } 108 | &[disabled], 109 | fieldset[disabled] & { 110 | &:hover, 111 | &:focus { 112 | color: @gray-dark; 113 | text-decoration: none; 114 | } 115 | } 116 | } 117 | 118 | 119 | // Button Sizes 120 | // -------------------------------------------------- 121 | 122 | .btn-large { 123 | padding: @padding-large-vertical @padding-large-horizontal; 124 | font-size: @font-size-large; 125 | border-radius: @border-radius-large; 126 | } 127 | .btn-small { 128 | padding: @padding-small-vertical @padding-small-horizontal; 129 | font-size: @font-size-small; 130 | line-height: 1.5; // ensure proper height of button next to small input 131 | border-radius: @border-radius-small; 132 | } 133 | 134 | 135 | // Block button 136 | // -------------------------------------------------- 137 | 138 | .btn-block { 139 | display: block; 140 | width: 100%; 141 | padding-left: 0; 142 | padding-right: 0; 143 | } 144 | 145 | // Vertically space out multiple block buttons 146 | .btn-block + .btn-block { 147 | margin-top: 5px; 148 | } 149 | 150 | // Specificity overrides 151 | input[type="submit"], 152 | input[type="reset"], 153 | input[type="button"] { 154 | &.btn-block { 155 | width: 100%; 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /bower_components/angular-ui-utils/modules/route/demo/index.html: -------------------------------------------------------------------------------- 1 |
          2 | 5 | 6 |
          7 |
          8 |

          What?

          9 | 10 |

          Route Matching Magic. It matches your routes ... magically!

          11 | 12 |
          13 |

          Clicking 14 | "Make Active" will reload the page. Pay attention to the routes.

          15 |
            16 |
          • uiRoute Info 17 | IS 18 | is NOT active. 19 |
          • 20 |
          • 21 | Route {{ route }} 22 | IS 23 | is NOT active. 24 | Make Active 25 |
          • 26 |
          27 |
          28 |
          29 | 30 |
          31 |

          Why?

          32 | 33 |

          It would be nice if your app knew what the address path was and acted accordingly, right? Right.

          34 |
          35 | 36 |
          37 |

          Options

          38 |
            39 |
          • Out of the box this directive ships with a boolean to determine if the route matches or not: 40 | $uiRoute. 41 |
              42 |
            • Example Usage: <a ui-route="/page" ng-class="{active: $uiRoute}">link</a>
            • 43 |
            44 |
          • 45 |
          • Using ui-route as an attribute with value supports the following: 46 |
              47 |
            • Static: <a ui-route="/page">
            • 48 |
            • Regular Expression: <a ui-route="/page/[0-9]*">
            • 49 |
            • Template Vars: <a ui-route="/page/{{ sample }}">
            • 50 |
            • Template Vars && RegEx: <a ui-route="/page/{{ sample }}/[0-9]*">
            • 51 |
            52 |
          • 53 |
          • Using ui-route with ng-href attribute: 54 |
              55 |
            • Static: <a ui-route ng-href="/page">
            • 56 |
            • Template Vars: <a ui-route ng-href="/page/{{ sample }}">
            • 57 |
            58 |
          • 59 |
          • Using ui-route with href attribute: 60 |
              61 |
            • Static Only: <a ui-route href="/page">
            • 62 |
            63 |
          • 64 |
          • You can also pass a model to ui-route. This model could then be used the same as 65 | $uiRoute. 66 |
              67 |
            • <li ui-route="/page/{{ sample }}" ng-model="current">
            • 68 |
            69 |
          • 70 |
          71 |
          72 | 73 |
          74 | 75 |
          76 |
          77 |

          How?

          78 |
          79 | <ul>
          80 | <li ui-route="#/route-1">Route 1
          81 | <strong ui-if="$uiRoute">IS</strong>
          82 | <strong ui-if="!$uiRoute">is NOT</strong> active.
          83 | </li>
          84 | <li ui-route="#/route-2">Route 2
          85 | <strong ui-if="$uiRoute">IS</strong>
          86 | <strong ui-if="!$uiRoute">is NOT</strong> active.
          87 | </li>
          88 | <li ui-route="#/route-3">Route 3
          89 | <strong ui-if="$uiRoute">IS</strong>
          90 | <strong ui-if="!$uiRoute">is NOT</strong> active.
          91 | </li>
          92 | </ul>
          93 | 
          94 |
          95 | 96 |
          97 |
          --------------------------------------------------------------------------------