├── .bowerrc
├── .gitignore
├── LICENSE
├── README.md
├── bower.json
├── config.xml
├── gulpfile.js
├── hooks
├── README.md
└── after_prepare
│ └── 010_add_platform_class.js
├── ionic.project
├── media
├── icons
│ └── icon.png
└── splashscreen
│ ├── Default-568h@2x~iphone.png
│ ├── Default@2x~iphone.png
│ └── Default~iphone.png
├── package.json
├── scss
└── ionic.app.scss
└── www
├── api
└── data.json
├── css
└── style.css
├── img
└── logo.jpg
├── index.html
├── js
└── app.js
├── lib
├── angular-animate
│ ├── .bower.json
│ ├── README.md
│ ├── angular-animate.js
│ ├── angular-animate.min.js
│ ├── angular-animate.min.js.map
│ └── bower.json
├── angular-sanitize
│ ├── .bower.json
│ ├── README.md
│ ├── angular-sanitize.js
│ ├── angular-sanitize.min.js
│ ├── angular-sanitize.min.js.map
│ └── bower.json
├── angular-ui-router
│ ├── .bower.json
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── release
│ │ ├── angular-ui-router.js
│ │ └── angular-ui-router.min.js
│ └── src
│ │ ├── common.js
│ │ ├── compat.js
│ │ ├── resolve.js
│ │ ├── state.js
│ │ ├── stateDirectives.js
│ │ ├── stateFilters.js
│ │ ├── templateFactory.js
│ │ ├── urlMatcherFactory.js
│ │ ├── urlRouter.js
│ │ ├── view.js
│ │ ├── viewDirective.js
│ │ └── viewScroll.js
├── angular
│ ├── .bower.json
│ ├── README.md
│ ├── angular-csp.css
│ ├── angular.js
│ ├── angular.min.js
│ ├── angular.min.js.gzip
│ ├── angular.min.js.map
│ └── bower.json
├── angularfire
│ ├── .bower.json
│ ├── README.md
│ ├── bower.json
│ └── dist
│ │ ├── angularfire.js
│ │ └── angularfire.min.js
├── collide
│ ├── .bower.json
│ ├── .gitignore
│ ├── README.md
│ ├── bower.json
│ ├── collide.js
│ ├── package.json
│ ├── test.html
│ └── test
│ │ ├── animator.spec.js
│ │ ├── core
│ │ └── timeline.spec.js
│ │ └── util
│ │ └── simple-emitter.spec.js
├── firebase-simple-login
│ ├── .bower.json
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── firebase-simple-login-debug.js
│ └── firebase-simple-login.js
├── firebase
│ ├── .bower.json
│ ├── LICENSE
│ ├── README.md
│ ├── bower.json
│ ├── firebase-debug.js
│ └── firebase.js
├── ionic
│ ├── .bower.json
│ ├── README.md
│ ├── bower.json
│ ├── css
│ │ ├── ionic.css
│ │ └── ionic.min.css
│ ├── fonts
│ │ ├── ionicons.eot
│ │ ├── ionicons.svg
│ │ ├── ionicons.ttf
│ │ └── ionicons.woff
│ ├── js
│ │ ├── ionic-angular.js
│ │ ├── ionic-angular.min.js
│ │ ├── ionic.bundle.js
│ │ ├── ionic.bundle.min.js
│ │ ├── ionic.js
│ │ └── ionic.min.js
│ └── scss
│ │ ├── _action-sheet.scss
│ │ ├── _animations.scss
│ │ ├── _backdrop.scss
│ │ ├── _badge.scss
│ │ ├── _bar.scss
│ │ ├── _button-bar.scss
│ │ ├── _button.scss
│ │ ├── _checkbox.scss
│ │ ├── _form.scss
│ │ ├── _grid.scss
│ │ ├── _items.scss
│ │ ├── _list.scss
│ │ ├── _loading.scss
│ │ ├── _menu.scss
│ │ ├── _mixins.scss
│ │ ├── _modal.scss
│ │ ├── _platform.scss
│ │ ├── _popover.scss
│ │ ├── _popup.scss
│ │ ├── _progress.scss
│ │ ├── _radio.scss
│ │ ├── _range.scss
│ │ ├── _reset.scss
│ │ ├── _scaffolding.scss
│ │ ├── _select.scss
│ │ ├── _slide-box.scss
│ │ ├── _split-pane.scss
│ │ ├── _tabs.scss
│ │ ├── _toggle.scss
│ │ ├── _type.scss
│ │ ├── _util.scss
│ │ ├── _variables.scss
│ │ ├── ionic.scss
│ │ └── ionicons
│ │ ├── _ionicons-animation.scss
│ │ ├── _ionicons-font.scss
│ │ ├── _ionicons-icons.scss
│ │ ├── _ionicons-variables.scss
│ │ └── ionicons.scss
└── mockfirebase
│ ├── .bower.json
│ ├── CONTRIBUTING.md
│ ├── MAINTAINING.md
│ ├── README.md
│ ├── bower.json
│ └── dist
│ └── mockfirebase.js
└── views
├── about
└── about.html
├── events
├── events.html
└── events.js
├── food
├── food.html
├── food.js
└── preview.html
├── home
├── comments.html
├── home.html
└── home.js
├── local
├── beaches.html
├── food.html
├── local.html
└── sights.html
├── reservation
├── reservation.html
└── reservation.js
├── tour
├── tour.html
└── tour.js
└── weather
├── weather.html
└── weather.js
/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "www/lib"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Specifies intentionally untracked files to ignore when using Git
2 | # http://git-scm.com/docs/gitignore
3 |
4 | node_modules/
5 | platforms/
6 | plugins/
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014
4 | Jeremy Wilken (Gnome on the run)
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in
14 | all copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 | THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Ionic Framework Demo App
2 |
3 | This is a demo app built with the Ionic Framework that you can preview in the browser or clone and run locally on an emulator or device.
4 |
5 | # View it now
6 |
7 | https://ionic-in-action.github.io/ionic-demo-resort-app/www/
8 |
9 | # Run locally
10 |
11 | This assumes you already have an emulator setup for iOS or Android. Substitute `ios` for `android` below to use Android.
12 |
13 | npm install -g ionic cordova
14 | git clone https://github.com/ionic-in-action/ionic-demo-resort-app.git
15 | cd ionic-demo-resort-app
16 | ionic platform add ios
17 | ionic emulate ios
18 |
19 | # LICENSE
20 |
21 | Ionic is licensed under the MIT Open Source license. For more information, see the LICENSE file in this repository.
22 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic-in-action-demo",
3 | "private": "true",
4 | "dependencies": {
5 | "ionic": "driftyco/ionic-bower#1.0.0-beta.12",
6 | "firebase": "~1.0.21",
7 | "angularfire": "~0.8.2"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Ionic In Action
4 |
5 | Demo of Ionic.
6 |
7 |
8 | Ionic in Action
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var gulp = require('gulp');
2 | var gutil = require('gulp-util');
3 | var bower = require('bower');
4 | var concat = require('gulp-concat');
5 | var sass = require('gulp-sass');
6 | var minifyCss = require('gulp-minify-css');
7 | var rename = require('gulp-rename');
8 | var sh = require('shelljs');
9 |
10 | var paths = {
11 | sass: ['./scss/**/*.scss']
12 | };
13 |
14 | gulp.task('default', ['sass']);
15 |
16 | gulp.task('sass', function(done) {
17 | gulp.src('./scss/ionic.app.scss')
18 | .pipe(sass())
19 | .pipe(gulp.dest('./www/css/'))
20 | .pipe(minifyCss({
21 | keepSpecialComments: 0
22 | }))
23 | .pipe(rename({ extname: '.min.css' }))
24 | .pipe(gulp.dest('./www/css/'))
25 | .on('end', done);
26 | });
27 |
28 | gulp.task('watch', function() {
29 | gulp.watch(paths.sass, ['sass']);
30 | });
31 |
32 | gulp.task('install', ['git-check'], function() {
33 | return bower.commands.install()
34 | .on('log', function(data) {
35 | gutil.log('bower', gutil.colors.cyan(data.id), data.message);
36 | });
37 | });
38 |
39 | gulp.task('git-check', function(done) {
40 | if (!sh.which('git')) {
41 | console.log(
42 | ' ' + gutil.colors.red('Git is not installed.'),
43 | '\n Git, the version control system, is required to download Ionic.',
44 | '\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.',
45 | '\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.'
46 | );
47 | process.exit(1);
48 | }
49 | done();
50 | });
51 |
--------------------------------------------------------------------------------
/hooks/README.md:
--------------------------------------------------------------------------------
1 |
21 | # Cordova Hooks
22 |
23 | This directory may contain scripts used to customize cordova commands. This
24 | directory used to exist at `.cordova/hooks`, but has now been moved to the
25 | project root. Any scripts you add to these directories will be executed before
26 | and after the commands corresponding to the directory name. Useful for
27 | integrating your own build systems or integrating with version control systems.
28 |
29 | __Remember__: Make your scripts executable.
30 |
31 | ## Hook Directories
32 | The following subdirectories will be used for hooks:
33 |
34 | after_build/
35 | after_compile/
36 | after_docs/
37 | after_emulate/
38 | after_platform_add/
39 | after_platform_rm/
40 | after_platform_ls/
41 | after_plugin_add/
42 | after_plugin_ls/
43 | after_plugin_rm/
44 | after_plugin_search/
45 | after_prepare/
46 | after_run/
47 | after_serve/
48 | before_build/
49 | before_compile/
50 | before_docs/
51 | before_emulate/
52 | before_platform_add/
53 | before_platform_rm/
54 | before_platform_ls/
55 | before_plugin_add/
56 | before_plugin_ls/
57 | before_plugin_rm/
58 | before_plugin_search/
59 | before_prepare/
60 | before_run/
61 | before_serve/
62 | pre_package/ <-- Windows 8 and Windows Phone only.
63 |
64 | ## Script Interface
65 |
66 | All scripts are run from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables:
67 |
68 | * CORDOVA_VERSION - The version of the Cordova-CLI.
69 | * CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios).
70 | * CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer)
71 | * CORDOVA_HOOK - Path to the hook that is being executed.
72 | * CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate)
73 |
74 | If a script returns a non-zero exit code, then the parent cordova command will be aborted.
75 |
76 |
77 | ## Writing hooks
78 |
79 | We highly recommend writting your hooks using Node.js so that they are
80 | cross-platform. Some good examples are shown here:
81 |
82 | [http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/)
83 |
84 |
--------------------------------------------------------------------------------
/hooks/after_prepare/010_add_platform_class.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | // Add Platform Class
4 | // v1.0
5 | // Automatically adds the platform class to the body tag
6 | // after the `prepare` command. By placing the platform CSS classes
7 | // directly in the HTML built for the platform, it speeds up
8 | // rendering the correct layout/style for the specific platform
9 | // instead of waiting for the JS to figure out the correct classes.
10 |
11 | var fs = require('fs');
12 | var path = require('path');
13 |
14 | var rootdir = process.argv[2];
15 |
16 | function addPlatformBodyTag(indexPath, platform) {
17 | // add the platform class to the body tag
18 | try {
19 | var platformClass = 'platform-' + platform;
20 | var cordovaClass = 'platform-cordova platform-webview';
21 |
22 | var html = fs.readFileSync(indexPath, 'utf8');
23 |
24 | var bodyTag = findBodyTag(html);
25 | if(!bodyTag) return; // no opening body tag, something's wrong
26 |
27 | if(bodyTag.indexOf(platformClass) > -1) return; // already added
28 |
29 | var newBodyTag = bodyTag;
30 |
31 | var classAttr = findClassAttr(bodyTag);
32 | if(classAttr) {
33 | // body tag has existing class attribute, add the classname
34 | var endingQuote = classAttr.substring(classAttr.length-1);
35 | var newClassAttr = classAttr.substring(0, classAttr.length-1);
36 | newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote;
37 | newBodyTag = bodyTag.replace(classAttr, newClassAttr);
38 |
39 | } else {
40 | // add class attribute to the body tag
41 | newBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">');
42 | }
43 |
44 | html = html.replace(bodyTag, newBodyTag);
45 |
46 | fs.writeFileSync(indexPath, html, 'utf8');
47 |
48 | process.stdout.write('add to body class: ' + platformClass + '\n');
49 | } catch(e) {
50 | process.stdout.write(e);
51 | }
52 | }
53 |
54 | function findBodyTag(html) {
55 | // get the body tag
56 | try{
57 | return html.match(/
])(.*?)>/gi)[0];
58 | }catch(e){}
59 | }
60 |
61 | function findClassAttr(bodyTag) {
62 | // get the body tag's class attribute
63 | try{
64 | return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0];
65 | }catch(e){}
66 | }
67 |
68 | if (rootdir) {
69 |
70 | // go through each of the platform directories that have been prepared
71 | var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []);
72 |
73 | for(var x=0; x
2 |
3 |
4 |
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 | Sunshine Resort
43 |
44 |
45 |
46 | Home
47 | Reservation
48 | Call Concierge
49 | Weather
50 | Events
51 | Local Places
52 | Order Room Service
53 | About
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/www/js/app.js:
--------------------------------------------------------------------------------
1 | angular.module('App', ['ionic', 'firebase'])
2 |
3 | .config(function ($stateProvider, $urlRouterProvider) {
4 | $stateProvider
5 | .state('tour', {
6 | url: '/tour',
7 | templateUrl: 'views/tour/tour.html',
8 | controller: 'TourCtrl'
9 | })
10 | .state('home', {
11 | url: '/',
12 | templateUrl: 'views/home/home.html',
13 | controller: 'HomeCtrl'
14 | })
15 | .state('about', {
16 | url: '/about',
17 | templateUrl: 'views/about/about.html'
18 | })
19 | .state('reservation', {
20 | url: '/reservation',
21 | templateUrl: 'views/reservation/reservation.html',
22 | controller: 'ReservationCtrl'
23 | })
24 | .state('events', {
25 | url: '/events',
26 | templateUrl: 'views/events/events.html',
27 | controller: 'EventsCtrl'
28 | })
29 | .state('food', {
30 | url: '/food',
31 | templateUrl: 'views/food/food.html',
32 | controller: 'FoodCtrl'
33 | })
34 | .state('weather', {
35 | url: '/weather',
36 | templateUrl: 'views/weather/weather.html',
37 | controller: 'WeatherCtrl'
38 | })
39 | .state('local', {
40 | abstract: true,
41 | url: '/local',
42 | templateUrl: 'views/local/local.html'
43 | })
44 | .state('local.food', {
45 | url: '/food',
46 | views: {
47 | 'local-food': {
48 | templateUrl: 'views/local/food.html'
49 | }
50 | }
51 | })
52 | .state('local.beaches', {
53 | url: '/beaches',
54 | views: {
55 | 'local-beaches': {
56 | templateUrl: 'views/local/beaches.html'
57 | }
58 | }
59 | })
60 | .state('local.sights', {
61 | url: '/sights',
62 | views: {
63 | 'local-sights': {
64 | templateUrl: 'views/local/sights.html'
65 | }
66 | }
67 | });
68 |
69 | $urlRouterProvider.otherwise('/');
70 | })
71 |
72 | .run(function($ionicPlatform, $location) {
73 | $ionicPlatform.ready(function() {
74 | // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
75 | // for form inputs)
76 | if(window.cordova && window.cordova.plugins.Keyboard) {
77 | cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
78 | }
79 | if(window.StatusBar) {
80 | StatusBar.styleDefault();
81 | }
82 | });
83 |
84 | var firstVisit = localStorage.getItem('firstVisit');
85 | if (!firstVisit) {
86 | $location.url('/tour');
87 | }
88 | })
89 |
90 | .factory('EventsService', function ($firebase) {
91 | var firebase = new Firebase('https://ionic-in-action-demo.firebaseio.com/events');
92 | var service = $firebase(firebase);
93 | return service;
94 | })
95 |
96 | .factory('MenuService', function ($firebase) {
97 | var firebase = new Firebase('https://ionic-in-action-demo.firebaseio.com/menu');
98 | var service = $firebase(firebase);
99 | return service;
100 | })
101 |
102 | .controller('NavbarCtrl', function ($scope, $ionicSideMenuDelegate) {
103 |
104 | $scope.openMenu = function () {
105 | $ionicSideMenuDelegate.toggleLeft();
106 | };
107 | });
108 |
--------------------------------------------------------------------------------
/www/lib/angular-animate/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-animate",
3 | "version": "1.2.24",
4 | "main": "./angular-animate.js",
5 | "dependencies": {
6 | "angular": "1.2.24"
7 | },
8 | "homepage": "https://github.com/angular/bower-angular-animate",
9 | "_release": "1.2.24",
10 | "_resolution": {
11 | "type": "version",
12 | "tag": "v1.2.24",
13 | "commit": "953019049bd1f4a90888c7b92328eb307a1290b5"
14 | },
15 | "_source": "git://github.com/angular/bower-angular-animate.git",
16 | "_target": "~1.2.17",
17 | "_originalSource": "angular-animate"
18 | }
--------------------------------------------------------------------------------
/www/lib/angular-animate/README.md:
--------------------------------------------------------------------------------
1 | # bower-angular-animate
2 |
3 | This repo is for distribution on `bower`. The source for this module is in the
4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate).
5 | Please file issues and pull requests against that repo.
6 |
7 | ## Install
8 |
9 | Install with `bower`:
10 |
11 | ```shell
12 | bower install angular-animate
13 | ```
14 |
15 | Add a `
19 | ```
20 |
21 | And add `ngAnimate` as a dependency for your app:
22 |
23 | ```javascript
24 | angular.module('myApp', ['ngAnimate']);
25 | ```
26 |
27 | ## Documentation
28 |
29 | Documentation is available on the
30 | [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate).
31 |
32 | ## License
33 |
34 | The MIT License
35 |
36 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
37 |
38 | Permission is hereby granted, free of charge, to any person obtaining a copy
39 | of this software and associated documentation files (the "Software"), to deal
40 | in the Software without restriction, including without limitation the rights
41 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42 | copies of the Software, and to permit persons to whom the Software is
43 | furnished to do so, subject to the following conditions:
44 |
45 | The above copyright notice and this permission notice shall be included in
46 | all copies or substantial portions of the Software.
47 |
48 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
54 | THE SOFTWARE.
55 |
--------------------------------------------------------------------------------
/www/lib/angular-animate/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-animate",
3 | "version": "1.2.24",
4 | "main": "./angular-animate.js",
5 | "dependencies": {
6 | "angular": "1.2.24"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/www/lib/angular-sanitize/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-sanitize",
3 | "version": "1.2.24",
4 | "main": "./angular-sanitize.js",
5 | "dependencies": {
6 | "angular": "1.2.24"
7 | },
8 | "homepage": "https://github.com/angular/bower-angular-sanitize",
9 | "_release": "1.2.24",
10 | "_resolution": {
11 | "type": "version",
12 | "tag": "v1.2.24",
13 | "commit": "0cf487e8e13ff5d61388ed7359bed7386724385e"
14 | },
15 | "_source": "git://github.com/angular/bower-angular-sanitize.git",
16 | "_target": "~1.2.17",
17 | "_originalSource": "angular-sanitize"
18 | }
--------------------------------------------------------------------------------
/www/lib/angular-sanitize/README.md:
--------------------------------------------------------------------------------
1 | # bower-angular-sanitize
2 |
3 | This repo is for distribution on `bower`. The source for this module is in the
4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize).
5 | Please file issues and pull requests against that repo.
6 |
7 | ## Install
8 |
9 | Install with `bower`:
10 |
11 | ```shell
12 | bower install angular-sanitize
13 | ```
14 |
15 | Add a `
19 | ```
20 |
21 | And add `ngSanitize` as a dependency for your app:
22 |
23 | ```javascript
24 | angular.module('myApp', ['ngSanitize']);
25 | ```
26 |
27 | ## Documentation
28 |
29 | Documentation is available on the
30 | [AngularJS docs site](http://docs.angularjs.org/api/ngSanitize).
31 |
32 | ## License
33 |
34 | The MIT License
35 |
36 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
37 |
38 | Permission is hereby granted, free of charge, to any person obtaining a copy
39 | of this software and associated documentation files (the "Software"), to deal
40 | in the Software without restriction, including without limitation the rights
41 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42 | copies of the Software, and to permit persons to whom the Software is
43 | furnished to do so, subject to the following conditions:
44 |
45 | The above copyright notice and this permission notice shall be included in
46 | all copies or substantial portions of the Software.
47 |
48 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
54 | THE SOFTWARE.
55 |
--------------------------------------------------------------------------------
/www/lib/angular-sanitize/angular-sanitize.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | AngularJS v1.2.24
3 | (c) 2010-2014 Google, Inc. http://angularjs.org
4 | License: MIT
5 | */
6 | (function(q,g,r){'use strict';function F(a){var d=[];t(d,g.noop).chars(a);return d.join("")}function m(a){var d={};a=a.split(",");var c;for(c=0;c=c;e--)d.end&&d.end(f[e]);f.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,l,f=[],n=a,h;for(f.last=function(){return f[f.length-1]};a;){h="";l=!0;if(f.last()&&y[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(a,b){b=b.replace(I,"$1").replace(J,"$1");d.chars&&d.chars(s(b));return""}),e("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(d.comment&&d.comment(a.substring(4,
8 | b)),a=a.substring(b+3),l=!1);else if(z.test(a)){if(b=a.match(z))a=a.replace(b[0],""),l=!1}else if(K.test(a)){if(b=a.match(A))a=a.substring(b[0].length),b[0].replace(A,e),l=!1}else L.test(a)&&((b=a.match(B))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(B,c)),l=!1):(h+="<",a=a.substring(1)));l&&(b=a.indexOf("<"),h+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),d.chars&&d.chars(s(h)))}if(a==n)throw M("badparse",a);n=a}e()}function s(a){if(!a)return"";var d=N.exec(a);a=d[1];var c=d[3];if(d=d[2])p.innerHTML=
9 | d.replace(//g,">")}function t(a,d){var c=!1,e=g.bind(a,a.push);return{start:function(a,l,f){a=g.lowercase(a);!c&&y[a]&&(c=a);c||!0!==D[a]||(e("<"),e(a),g.forEach(l,function(c,f){var k=
10 | g.lowercase(f),l="img"===a&&"src"===k||"background"===k;!0!==Q[k]||!0===E[k]&&!d(c,l)||(e(" "),e(f),e('="'),e(C(c)),e('"'))}),e(f?"/>":">"))},end:function(a){a=g.lowercase(a);c||!0!==D[a]||(e(""),e(a),e(">"));a==c&&(c=!1)},chars:function(a){c||e(C(a))}}}var M=g.$$minErr("$sanitize"),B=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,A=/^<\/\s*([\w:-]+)[^>]*>/,H=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,L=/^,
11 | K=/^<\//,I=/\x3c!--(.*?)--\x3e/g,z=/]*?)>/i,J=/"]/,c=/^mailto:/;return function(e,b){function l(a){a&&k.push(F(a))}function f(a,c){k.push("');l(c);k.push(" ")}
14 | if(!e)return e;for(var n,h=e,k=[],m,p;n=h.match(d);)m=n[0],n[2]==n[3]&&(m="mailto:"+m),p=n.index,l(h.substr(0,p)),f(m,n[0].replace(c,"")),h=h.substring(p+n[0].length);l(h);return a(k.join(""))}}])})(window,window.angular);
15 | //# sourceMappingURL=angular-sanitize.min.js.map
16 |
--------------------------------------------------------------------------------
/www/lib/angular-sanitize/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-sanitize",
3 | "version": "1.2.24",
4 | "main": "./angular-sanitize.js",
5 | "dependencies": {
6 | "angular": "1.2.24"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-ui-router",
3 | "version": "0.2.10",
4 | "main": "./release/angular-ui-router.js",
5 | "dependencies": {
6 | "angular": ">= 1.0.8"
7 | },
8 | "ignore": [
9 | "**/.*",
10 | "node_modules",
11 | "bower_components",
12 | "component.json",
13 | "package.json",
14 | "lib",
15 | "config",
16 | "sample",
17 | "test",
18 | "tests",
19 | "ngdoc_assets",
20 | "Gruntfile.js",
21 | "files.js"
22 | ],
23 | "homepage": "https://github.com/angular-ui/ui-router",
24 | "_release": "0.2.10",
25 | "_resolution": {
26 | "type": "version",
27 | "tag": "0.2.10",
28 | "commit": "4f509d6393452c933aa5908939d0a17e47b59388"
29 | },
30 | "_source": "git://github.com/angular-ui/ui-router.git",
31 | "_target": "0.2.10",
32 | "_originalSource": "angular-ui-router"
33 | }
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/CHANGELOG.md:
--------------------------------------------------------------------------------
1 |
2 | ### v0.2.8 (2014-01-16)
3 |
4 |
5 | #### Bug Fixes
6 |
7 | * **$state:** allow null to be passed as 'params' param ([094dc30e](https://github.com/angular-ui/ui-router/commit/094dc30e883e1bd14e50a475553bafeaade3b178))
8 | * **$state.go:** param inheritance shouldn't inherit from siblings ([aea872e0](https://github.com/angular-ui/ui-router/commit/aea872e0b983cb433436ce5875df10c838fccedb))
9 | * **uiSrefActive:** annotate controller injection ([85921422](https://github.com/angular-ui/ui-router/commit/85921422ff7fb0effed358136426d616cce3d583), closes [#671](https://github.com/angular-ui/ui-router/issues/671))
10 | * **uiView:**
11 | * autoscroll tests pass on 1.2.4 & 1.1.5 ([86eacac0](https://github.com/angular-ui/ui-router/commit/86eacac09ca5e9000bd3b9c7ba6e2cc95d883a3a))
12 | * don't animate initial load ([83b6634d](https://github.com/angular-ui/ui-router/commit/83b6634d27942ca74766b2b1244a7fc52c5643d9))
13 | * test pass against 1.0.8 and 1.2.4 ([a402415a](https://github.com/angular-ui/ui-router/commit/a402415a2a28b360c43b9fe8f4f54c540f6c33de))
14 | * it should autoscroll when expr is missing. ([8bb9e27a](https://github.com/angular-ui/ui-router/commit/8bb9e27a2986725f45daf44c4c9f846385095aff))
15 |
16 |
17 | #### Features
18 |
19 | * **uiSref:** add target attribute behaviour ([c12bf9a5](https://github.com/angular-ui/ui-router/commit/c12bf9a520d30d70294e3d82de7661900f8e394e))
20 | * **uiView:**
21 | * merge autoscroll expression test. ([b89e0f87](https://github.com/angular-ui/ui-router/commit/b89e0f871d5cc35c10925ede986c10684d5c9252))
22 | * cache and test autoscroll expression ([ee262282](https://github.com/angular-ui/ui-router/commit/ee2622828c2ce83807f006a459ac4e11406d9258))
23 |
24 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Copyright (c) 2014 The AngularUI Team, Karsten Sperling
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 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-ui-router",
3 | "version": "0.2.10",
4 | "main": "./release/angular-ui-router.js",
5 | "dependencies": {
6 | "angular": ">= 1.0.8"
7 | },
8 | "ignore": [
9 | "**/.*",
10 | "node_modules",
11 | "bower_components",
12 | "component.json",
13 | "package.json",
14 | "lib",
15 | "config",
16 | "sample",
17 | "test",
18 | "tests",
19 | "ngdoc_assets",
20 | "Gruntfile.js",
21 | "files.js"
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/src/common.js:
--------------------------------------------------------------------------------
1 | /*jshint globalstrict:true*/
2 | /*global angular:false*/
3 | 'use strict';
4 |
5 | var isDefined = angular.isDefined,
6 | isFunction = angular.isFunction,
7 | isString = angular.isString,
8 | isObject = angular.isObject,
9 | isArray = angular.isArray,
10 | forEach = angular.forEach,
11 | extend = angular.extend,
12 | copy = angular.copy;
13 |
14 | function inherit(parent, extra) {
15 | return extend(new (extend(function() {}, { prototype: parent }))(), extra);
16 | }
17 |
18 | function merge(dst) {
19 | forEach(arguments, function(obj) {
20 | if (obj !== dst) {
21 | forEach(obj, function(value, key) {
22 | if (!dst.hasOwnProperty(key)) dst[key] = value;
23 | });
24 | }
25 | });
26 | return dst;
27 | }
28 |
29 | /**
30 | * Finds the common ancestor path between two states.
31 | *
32 | * @param {Object} first The first state.
33 | * @param {Object} second The second state.
34 | * @return {Array} Returns an array of state names in descending order, not including the root.
35 | */
36 | function ancestors(first, second) {
37 | var path = [];
38 |
39 | for (var n in first.path) {
40 | if (first.path[n] !== second.path[n]) break;
41 | path.push(first.path[n]);
42 | }
43 | return path;
44 | }
45 |
46 | /**
47 | * IE8-safe wrapper for `Object.keys()`.
48 | *
49 | * @param {Object} object A JavaScript object.
50 | * @return {Array} Returns the keys of the object as an array.
51 | */
52 | function keys(object) {
53 | if (Object.keys) {
54 | return Object.keys(object);
55 | }
56 | var result = [];
57 |
58 | angular.forEach(object, function(val, key) {
59 | result.push(key);
60 | });
61 | return result;
62 | }
63 |
64 | /**
65 | * IE8-safe wrapper for `Array.prototype.indexOf()`.
66 | *
67 | * @param {Array} array A JavaScript array.
68 | * @param {*} value A value to search the array for.
69 | * @return {Number} Returns the array index value of `value`, or `-1` if not present.
70 | */
71 | function arraySearch(array, value) {
72 | if (Array.prototype.indexOf) {
73 | return array.indexOf(value, Number(arguments[2]) || 0);
74 | }
75 | var len = array.length >>> 0, from = Number(arguments[2]) || 0;
76 | from = (from < 0) ? Math.ceil(from) : Math.floor(from);
77 |
78 | if (from < 0) from += len;
79 |
80 | for (; from < len; from++) {
81 | if (from in array && array[from] === value) return from;
82 | }
83 | return -1;
84 | }
85 |
86 | /**
87 | * Merges a set of parameters with all parameters inherited between the common parents of the
88 | * current state and a given destination state.
89 | *
90 | * @param {Object} currentParams The value of the current state parameters ($stateParams).
91 | * @param {Object} newParams The set of parameters which will be composited with inherited params.
92 | * @param {Object} $current Internal definition of object representing the current state.
93 | * @param {Object} $to Internal definition of object representing state to transition to.
94 | */
95 | function inheritParams(currentParams, newParams, $current, $to) {
96 | var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
97 |
98 | for (var i in parents) {
99 | if (!parents[i].params || !parents[i].params.length) continue;
100 | parentParams = parents[i].params;
101 |
102 | for (var j in parentParams) {
103 | if (arraySearch(inheritList, parentParams[j]) >= 0) continue;
104 | inheritList.push(parentParams[j]);
105 | inherited[parentParams[j]] = currentParams[parentParams[j]];
106 | }
107 | }
108 | return extend({}, inherited, newParams);
109 | }
110 |
111 | /**
112 | * Normalizes a set of values to string or `null`, filtering them by a list of keys.
113 | *
114 | * @param {Array} keys The list of keys to normalize/return.
115 | * @param {Object} values An object hash of values to normalize.
116 | * @return {Object} Returns an object hash of normalized string values.
117 | */
118 | function normalize(keys, values) {
119 | var normalized = {};
120 |
121 | forEach(keys, function (name) {
122 | var value = values[name];
123 | normalized[name] = (value != null) ? String(value) : null;
124 | });
125 | return normalized;
126 | }
127 |
128 | /**
129 | * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.
130 | *
131 | * @param {Object} a The first object.
132 | * @param {Object} b The second object.
133 | * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,
134 | * it defaults to the list of keys in `a`.
135 | * @return {Boolean} Returns `true` if the keys match, otherwise `false`.
136 | */
137 | function equalForKeys(a, b, keys) {
138 | if (!keys) {
139 | keys = [];
140 | for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility
141 | }
142 |
143 | for (var i=0; i
228 | *
229 | *
230 | *
231 | *
232 | *
233 | *
234 | *
238 | *
239 | *
240 | *
241 | *
242 | *
243 | */
244 | angular.module('ui.router', ['ui.router.state']);
245 |
246 | angular.module('ui.router.compat', ['ui.router']);
247 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/src/compat.js:
--------------------------------------------------------------------------------
1 | /*
2 | * @ngdoc object
3 | * @name ui.router.compat.$routeProvider
4 | *
5 | * @requires ui.router.state.$stateProvider
6 | * @requires ui.router.router.$urlRouterProvider
7 | *
8 | * @description
9 | * `$routeProvider` of the `ui.router.compat` module overwrites the existing
10 | * `routeProvider` from the core. This is done to provide compatibility between
11 | * the UI Router and the core router.
12 | *
13 | * It also provides a `when()` method to register routes that map to certain urls.
14 | * Behind the scenes it actually delegates either to
15 | * {@link ui.router.router.$urlRouterProvider $urlRouterProvider} or to the
16 | * {@link ui.router.state.$stateProvider $stateProvider} to postprocess the given
17 | * router definition object.
18 | */
19 | $RouteProvider.$inject = ['$stateProvider', '$urlRouterProvider'];
20 | function $RouteProvider( $stateProvider, $urlRouterProvider) {
21 |
22 | var routes = [];
23 |
24 | onEnterRoute.$inject = ['$$state'];
25 | function onEnterRoute( $$state) {
26 | /*jshint validthis: true */
27 | this.locals = $$state.locals.globals;
28 | this.params = this.locals.$stateParams;
29 | }
30 |
31 | function onExitRoute() {
32 | /*jshint validthis: true */
33 | this.locals = null;
34 | this.params = null;
35 | }
36 |
37 | this.when = when;
38 | /*
39 | * @ngdoc function
40 | * @name ui.router.compat.$routeProvider#when
41 | * @methodOf ui.router.compat.$routeProvider
42 | *
43 | * @description
44 | * Registers a route with a given route definition object. The route definition
45 | * object has the same interface the angular core route definition object has.
46 | *
47 | * @example
48 | *
49 | * var app = angular.module('app', ['ui.router.compat']);
50 | *
51 | * app.config(function ($routeProvider) {
52 | * $routeProvider.when('home', {
53 | * controller: function () { ... },
54 | * templateUrl: 'path/to/template'
55 | * });
56 | * });
57 | *
58 | *
59 | * @param {string} url URL as string
60 | * @param {object} route Route definition object
61 | *
62 | * @return {object} $routeProvider - $routeProvider instance
63 | */
64 | function when(url, route) {
65 | /*jshint validthis: true */
66 | if (route.redirectTo != null) {
67 | // Redirect, configure directly on $urlRouterProvider
68 | var redirect = route.redirectTo, handler;
69 | if (isString(redirect)) {
70 | handler = redirect; // leave $urlRouterProvider to handle
71 | } else if (isFunction(redirect)) {
72 | // Adapt to $urlRouterProvider API
73 | handler = function (params, $location) {
74 | return redirect(params, $location.path(), $location.search());
75 | };
76 | } else {
77 | throw new Error("Invalid 'redirectTo' in when()");
78 | }
79 | $urlRouterProvider.when(url, handler);
80 | } else {
81 | // Regular route, configure as state
82 | $stateProvider.state(inherit(route, {
83 | parent: null,
84 | name: 'route:' + encodeURIComponent(url),
85 | url: url,
86 | onEnter: onEnterRoute,
87 | onExit: onExitRoute
88 | }));
89 | }
90 | routes.push(route);
91 | return this;
92 | }
93 |
94 | /*
95 | * @ngdoc object
96 | * @name ui.router.compat.$route
97 | *
98 | * @requires ui.router.state.$state
99 | * @requires $rootScope
100 | * @requires $routeParams
101 | *
102 | * @property {object} routes - Array of registered routes.
103 | * @property {object} params - Current route params as object.
104 | * @property {string} current - Name of the current route.
105 | *
106 | * @description
107 | * The `$route` service provides interfaces to access defined routes. It also let's
108 | * you access route params through `$routeParams` service, so you have fully
109 | * control over all the stuff you would actually get from angular's core `$route`
110 | * service.
111 | */
112 | this.$get = $get;
113 | $get.$inject = ['$state', '$rootScope', '$routeParams'];
114 | function $get( $state, $rootScope, $routeParams) {
115 |
116 | var $route = {
117 | routes: routes,
118 | params: $routeParams,
119 | current: undefined
120 | };
121 |
122 | function stateAsRoute(state) {
123 | return (state.name !== '') ? state : undefined;
124 | }
125 |
126 | $rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {
127 | $rootScope.$broadcast('$routeChangeStart', stateAsRoute(to), stateAsRoute(from));
128 | });
129 |
130 | $rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {
131 | $route.current = stateAsRoute(to);
132 | $rootScope.$broadcast('$routeChangeSuccess', stateAsRoute(to), stateAsRoute(from));
133 | copy(toParams, $route.params);
134 | });
135 |
136 | $rootScope.$on('$stateChangeError', function (ev, to, toParams, from, fromParams, error) {
137 | $rootScope.$broadcast('$routeChangeError', stateAsRoute(to), stateAsRoute(from), error);
138 | });
139 |
140 | return $route;
141 | }
142 | }
143 |
144 | angular.module('ui.router.compat')
145 | .provider('$route', $RouteProvider)
146 | .directive('ngView', $ViewDirective);
147 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/src/stateFilters.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @ngdoc filter
3 | * @name ui.router.state.filter:isState
4 | *
5 | * @requires ui.router.state.$state
6 | *
7 | * @description
8 | * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}.
9 | */
10 | $IsStateFilter.$inject = ['$state'];
11 | function $IsStateFilter($state) {
12 | return function(state) {
13 | return $state.is(state);
14 | };
15 | }
16 |
17 | /**
18 | * @ngdoc filter
19 | * @name ui.router.state.filter:includedByState
20 | *
21 | * @requires ui.router.state.$state
22 | *
23 | * @description
24 | * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.
25 | */
26 | $IncludedByStateFilter.$inject = ['$state'];
27 | function $IncludedByStateFilter($state) {
28 | return function(state) {
29 | return $state.includes(state);
30 | };
31 | }
32 |
33 | angular.module('ui.router.state')
34 | .filter('isState', $IsStateFilter)
35 | .filter('includedByState', $IncludedByStateFilter);
36 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/src/templateFactory.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @ngdoc object
3 | * @name ui.router.util.$templateFactory
4 | *
5 | * @requires $http
6 | * @requires $templateCache
7 | * @requires $injector
8 | *
9 | * @description
10 | * Service. Manages loading of templates.
11 | */
12 | $TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];
13 | function $TemplateFactory( $http, $templateCache, $injector) {
14 |
15 | /**
16 | * @ngdoc function
17 | * @name ui.router.util.$templateFactory#fromConfig
18 | * @methodOf ui.router.util.$templateFactory
19 | *
20 | * @description
21 | * Creates a template from a configuration object.
22 | *
23 | * @param {object} config Configuration object for which to load a template.
24 | * The following properties are search in the specified order, and the first one
25 | * that is defined is used to create the template:
26 | *
27 | * @param {string|object} config.template html string template or function to
28 | * load via {@link ui.router.util.$templateFactory#fromString fromString}.
29 | * @param {string|object} config.templateUrl url to load or a function returning
30 | * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.
31 | * @param {Function} config.templateProvider function to invoke via
32 | * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.
33 | * @param {object} params Parameters to pass to the template function.
34 | * @param {object} locals Locals to pass to `invoke` if the template is loaded
35 | * via a `templateProvider`. Defaults to `{ params: params }`.
36 | *
37 | * @return {string|object} The template html as a string, or a promise for
38 | * that string,or `null` if no template is configured.
39 | */
40 | this.fromConfig = function (config, params, locals) {
41 | return (
42 | isDefined(config.template) ? this.fromString(config.template, params) :
43 | isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :
44 | isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :
45 | null
46 | );
47 | };
48 |
49 | /**
50 | * @ngdoc function
51 | * @name ui.router.util.$templateFactory#fromString
52 | * @methodOf ui.router.util.$templateFactory
53 | *
54 | * @description
55 | * Creates a template from a string or a function returning a string.
56 | *
57 | * @param {string|object} template html template as a string or function that
58 | * returns an html template as a string.
59 | * @param {object} params Parameters to pass to the template function.
60 | *
61 | * @return {string|object} The template html as a string, or a promise for that
62 | * string.
63 | */
64 | this.fromString = function (template, params) {
65 | return isFunction(template) ? template(params) : template;
66 | };
67 |
68 | /**
69 | * @ngdoc function
70 | * @name ui.router.util.$templateFactory#fromUrl
71 | * @methodOf ui.router.util.$templateFactory
72 | *
73 | * @description
74 | * Loads a template from the a URL via `$http` and `$templateCache`.
75 | *
76 | * @param {string|Function} url url of the template to load, or a function
77 | * that returns a url.
78 | * @param {Object} params Parameters to pass to the url function.
79 | * @return {string|Promise.} The template html as a string, or a promise
80 | * for that string.
81 | */
82 | this.fromUrl = function (url, params) {
83 | if (isFunction(url)) url = url(params);
84 | if (url == null) return null;
85 | else return $http
86 | .get(url, { cache: $templateCache })
87 | .then(function(response) { return response.data; });
88 | };
89 |
90 | /**
91 | * @ngdoc function
92 | * @name ui.router.util.$templateFactory#fromUrl
93 | * @methodOf ui.router.util.$templateFactory
94 | *
95 | * @description
96 | * Creates a template by invoking an injectable provider function.
97 | *
98 | * @param {Function} provider Function to invoke via `$injector.invoke`
99 | * @param {Object} params Parameters for the template.
100 | * @param {Object} locals Locals to pass to `invoke`. Defaults to
101 | * `{ params: params }`.
102 | * @return {string|Promise.} The template html as a string, or a promise
103 | * for that string.
104 | */
105 | this.fromProvider = function (provider, params, locals) {
106 | return $injector.invoke(provider, null, locals || { params: params });
107 | };
108 | }
109 |
110 | angular.module('ui.router.util').service('$templateFactory', $TemplateFactory);
111 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/src/view.js:
--------------------------------------------------------------------------------
1 |
2 | $ViewProvider.$inject = [];
3 | function $ViewProvider() {
4 |
5 | this.$get = $get;
6 | /**
7 | * @ngdoc object
8 | * @name ui.router.state.$view
9 | *
10 | * @requires ui.router.util.$templateFactory
11 | * @requires $rootScope
12 | *
13 | * @description
14 | *
15 | */
16 | $get.$inject = ['$rootScope', '$templateFactory'];
17 | function $get( $rootScope, $templateFactory) {
18 | return {
19 | // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })
20 | /**
21 | * @ngdoc function
22 | * @name ui.router.state.$view#load
23 | * @methodOf ui.router.state.$view
24 | *
25 | * @description
26 | *
27 | * @param {string} name name
28 | * @param {object} options option object.
29 | */
30 | load: function load(name, options) {
31 | var result, defaults = {
32 | template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}
33 | };
34 | options = extend(defaults, options);
35 |
36 | if (options.view) {
37 | result = $templateFactory.fromConfig(options.view, options.params, options.locals);
38 | }
39 | if (result && options.notify) {
40 | /**
41 | * @ngdoc event
42 | * @name ui.router.state.$state#$viewContentLoading
43 | * @eventOf ui.router.state.$view
44 | * @eventType broadcast on root scope
45 | * @description
46 | *
47 | * Fired once the view **begins loading**, *before* the DOM is rendered.
48 | *
49 | * @param {Object} event Event object.
50 | * @param {Object} viewConfig The view config properties (template, controller, etc).
51 | *
52 | * @example
53 | *
54 | *
55 | * $scope.$on('$viewContentLoading',
56 | * function(event, viewConfig){
57 | * // Access to all the view config properties.
58 | * // and one special property 'targetView'
59 | * // viewConfig.targetView
60 | * });
61 | *
62 | */
63 | $rootScope.$broadcast('$viewContentLoading', options);
64 | }
65 | return result;
66 | }
67 | };
68 | }
69 | }
70 |
71 | angular.module('ui.router.state').provider('$view', $ViewProvider);
72 |
--------------------------------------------------------------------------------
/www/lib/angular-ui-router/src/viewScroll.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @ngdoc object
3 | * @name ui.router.state.$uiViewScrollProvider
4 | *
5 | * @description
6 | * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.
7 | */
8 | function $ViewScrollProvider() {
9 |
10 | var useAnchorScroll = false;
11 |
12 | /**
13 | * @ngdoc function
14 | * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll
15 | * @methodOf ui.router.state.$uiViewScrollProvider
16 | *
17 | * @description
18 | * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for
19 | * scrolling based on the url anchor.
20 | */
21 | this.useAnchorScroll = function () {
22 | useAnchorScroll = true;
23 | };
24 |
25 | /**
26 | * @ngdoc object
27 | * @name ui.router.state.$uiViewScroll
28 | *
29 | * @requires $anchorScroll
30 | * @requires $timeout
31 | *
32 | * @description
33 | * When called with a jqLite element, it scrolls the element into view (after a
34 | * `$timeout` so the DOM has time to refresh).
35 | *
36 | * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,
37 | * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.
38 | */
39 | this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {
40 | if (useAnchorScroll) {
41 | return $anchorScroll;
42 | }
43 |
44 | return function ($element) {
45 | $timeout(function () {
46 | $element[0].scrollIntoView();
47 | }, 0, false);
48 | };
49 | }];
50 | }
51 |
52 | angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);
53 |
--------------------------------------------------------------------------------
/www/lib/angular/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular",
3 | "version": "1.2.24",
4 | "main": "./angular.js",
5 | "dependencies": {},
6 | "homepage": "https://github.com/angular/bower-angular",
7 | "_release": "1.2.24",
8 | "_resolution": {
9 | "type": "version",
10 | "tag": "v1.2.24",
11 | "commit": "e2acb3e79e8f571bd36e12f31c7b2587e0c9dff3"
12 | },
13 | "_source": "git://github.com/angular/bower-angular.git",
14 | "_target": "~1.2.17",
15 | "_originalSource": "angular"
16 | }
--------------------------------------------------------------------------------
/www/lib/angular/README.md:
--------------------------------------------------------------------------------
1 | # bower-angular
2 |
3 | This repo is for distribution on `bower`. The source for this module is in the
4 | [main AngularJS repo](https://github.com/angular/angular.js).
5 | Please file issues and pull requests against that repo.
6 |
7 | ## Install
8 |
9 | Install with `bower`:
10 |
11 | ```shell
12 | bower install angular
13 | ```
14 |
15 | Add a `
19 | ```
20 |
21 | ## Documentation
22 |
23 | Documentation is available on the
24 | [AngularJS docs site](http://docs.angularjs.org/).
25 |
26 | ## License
27 |
28 | The MIT License
29 |
30 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
31 |
32 | Permission is hereby granted, free of charge, to any person obtaining a copy
33 | of this software and associated documentation files (the "Software"), to deal
34 | in the Software without restriction, including without limitation the rights
35 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
36 | copies of the Software, and to permit persons to whom the Software is
37 | furnished to do so, subject to the following conditions:
38 |
39 | The above copyright notice and this permission notice shall be included in
40 | all copies or substantial portions of the Software.
41 |
42 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
44 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
45 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
46 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
47 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
48 | THE SOFTWARE.
49 |
--------------------------------------------------------------------------------
/www/lib/angular/angular-csp.css:
--------------------------------------------------------------------------------
1 | /* Include this file in your html if you are using the CSP mode. */
2 |
3 | @charset "UTF-8";
4 |
5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
6 | .ng-cloak, .x-ng-cloak,
7 | .ng-hide {
8 | display: none !important;
9 | }
10 |
11 | ng\:form {
12 | display: block;
13 | }
14 |
15 | .ng-animate-block-transitions {
16 | transition:0s all!important;
17 | -webkit-transition:0s all!important;
18 | }
19 |
20 | /* show the element during a show/hide animation when the
21 | * animation is ongoing, but the .ng-hide class is active */
22 | .ng-hide-add-active, .ng-hide-remove {
23 | display: block!important;
24 | }
25 |
--------------------------------------------------------------------------------
/www/lib/angular/angular.min.js.gzip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-in-action/ionic-demo-resort-app/45ffed0175699c674b7aa88379513a9dff68c320/www/lib/angular/angular.min.js.gzip
--------------------------------------------------------------------------------
/www/lib/angular/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular",
3 | "version": "1.2.24",
4 | "main": "./angular.js",
5 | "dependencies": {
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/www/lib/angularfire/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angularfire",
3 | "description": "The officially supported AngularJS binding for Firebase",
4 | "version": "0.8.2",
5 | "authors": [
6 | "Firebase (https://www.firebase.com/)"
7 | ],
8 | "homepage": "https://github.com/firebase/angularfire",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/firebase/angularfire.git"
12 | },
13 | "license": "MIT",
14 | "keywords": [
15 | "angular",
16 | "angularjs",
17 | "firebase",
18 | "realtime"
19 | ],
20 | "main": "dist/angularfire.min.js",
21 | "ignore": [
22 | "**/.*",
23 | "src",
24 | "tests",
25 | "node_modules",
26 | "bower_components",
27 | "firebase.json",
28 | "package.json",
29 | "Gruntfile.js",
30 | "changelog.txt"
31 | ],
32 | "dependencies": {
33 | "angular": "1.2.x || 1.3.x",
34 | "firebase": "1.0.x",
35 | "firebase-simple-login": "1.6.x",
36 | "mockfirebase": "~0.2.9"
37 | },
38 | "devDependencies": {
39 | "lodash": "~2.4.1",
40 | "angular-mocks": "~1.2.18"
41 | },
42 | "_release": "0.8.2",
43 | "_resolution": {
44 | "type": "version",
45 | "tag": "v0.8.2",
46 | "commit": "e1345a96b6299fa23850403e5af2119ab4f62fb1"
47 | },
48 | "_source": "git://github.com/firebase/angularFire.git",
49 | "_target": "~0.8.2",
50 | "_originalSource": "angularfire",
51 | "_direct": true
52 | }
--------------------------------------------------------------------------------
/www/lib/angularfire/README.md:
--------------------------------------------------------------------------------
1 |
2 | # AngularFire
3 |
4 | [](https://travis-ci.org/firebase/angularfire)
5 | [](https://coveralls.io/r/firebase/angularfire)
6 | [](http://badge.fury.io/gh/firebase%2Fangularfire)
7 |
8 | AngularFire is the officially supported [AngularJS](http://angularjs.org/) binding for
9 | [Firebase](http://www.firebase.com/?utm_medium=web&utm_source=angularfire). Firebase is a full
10 | backend so you don't need servers to build your Angular app. AngularFire provides you with the
11 | `$firebase` service which allows you to easily keep your `$scope` variables in sync with your
12 | Firebase backend.
13 |
14 |
15 | ## Downloading AngularFire
16 |
17 | In order to use AngularFire in your project, you need to include the following files in your HTML:
18 |
19 | ```html
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | ```
29 |
30 | Use the URL above to download both the minified and non-minified versions of AngularFire from the
31 | Firebase CDN. You can also download them from the
32 | [releases page of this GitHub repository](https://github.com/firebase/angularfire/releases).
33 | [Firebase](https://www.firebase.com/docs/web/quickstart.html?utm_medium=web&utm_source=angularfire) and
34 | [Angular](https://angularjs.org/) can be downloaded directly from their respective websites.
35 |
36 | You can also install AngularFire via Bower and its dependencies will be downloaded automatically:
37 |
38 | ```bash
39 | $ bower install angularfire --save
40 | ```
41 |
42 | Once you've included AngularFire and its dependencies into your project, you will have access to
43 | the `$firebase` service.
44 |
45 | You can also start hacking on AngularFire in a matter of seconds on
46 | [Nitrous.IO](https://www.nitrous.io/?utm_source=github.com&utm_campaign=angularfire&utm_medium=hackonnitrous):
47 |
48 | [](https://www.nitrous.io/hack_button?source=embed&runtime=nodejs&repo=firebase%2Fangularfire&file_to_open=README.md)
50 |
51 |
52 | ## Getting Started with Firebase
53 |
54 | AngularFire requires Firebase in order to sync data. You can
55 | [sign up here](https://www.firebase.com/signup/?utm_medium=web&utm_source=angularfire) for a free
56 | account.
57 |
58 |
59 | ## Documentation
60 |
61 | The Firebase docs have a [quickstart](https://www.firebase.com/docs/web/bindings/angular/quickstart.html?utm_medium=web&utm_source=angularfire),
62 | [guide](https://www.firebase.com/docs/web/bindings/angular/guide.html?utm_medium=web&utm_source=angularfire),
63 | and [full API reference](https://www.firebase.com/docs/web/bindings/angular/api.html?utm_medium=web&utm_source=angularfire)
64 | for AngularFire.
65 |
66 | We also have a [tutorial](https://www.firebase.com/tutorial/#tutorial/angular/0?utm_medium=web&utm_source=angularfire)
67 | to help you get started with AngularFire.
68 |
69 | Join our [Firebase + Angular Google Group](https://groups.google.com/forum/#!forum/firebase-angular)
70 | to ask questions, provide feedback, and share apps you've built with AngularFire.
71 |
72 |
73 | ## Contributing
74 |
75 | If you'd like to contribute to AngularFire, you'll need to run the following commands to get your
76 | environment set up:
77 |
78 | ```bash
79 | $ git clone https://github.com/firebase/angularfire.git
80 | $ cd angularfire # go to the angularfire directory
81 | $ npm install -g grunt-cli # globally install grunt task runner
82 | $ npm install -g bower # globally install Bower package manager
83 | $ npm install # install local npm build / test dependencies
84 | $ bower install # install local JavaScript dependencies
85 | $ grunt install # install Selenium server for end-to-end tests
86 | $ grunt watch # watch for source file changes
87 | ```
88 |
89 | `grunt watch` will watch for changes in the `/src/` directory and lint, concatenate, and minify the
90 | source files when a change occurs. The output files - `angularfire.js` and `angularfire.min.js` -
91 | are written to the `/dist/` directory. `grunt watch` will also re-run the unit tests every time you
92 | update any source files.
93 |
94 | You can run the entire test suite via the command line using `grunt test`. To only run the unit
95 | tests, run `grunt test:unit`. To only run the end-to-end [Protractor](https://github.com/angular/protractor/)
96 | tests, run `grunt test:e2e`.
97 |
98 | In addition to the automated test suite, there is an additional manual test suite that ensures that
99 | the `$firebaseSimpleLogin` service is working properly with the authentication providers. These tests
100 | can be run with `grunt test:manual`. Note that you must click "Close this window", login to Twitter,
101 | etc. when prompted in order for these tests to complete successfully.
102 |
--------------------------------------------------------------------------------
/www/lib/angularfire/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angularfire",
3 | "description": "The officially supported AngularJS binding for Firebase",
4 | "version": "0.0.0",
5 | "authors": [
6 | "Firebase (https://www.firebase.com/)"
7 | ],
8 | "homepage": "https://github.com/firebase/angularfire",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/firebase/angularfire.git"
12 | },
13 | "license": "MIT",
14 | "keywords": [
15 | "angular",
16 | "angularjs",
17 | "firebase",
18 | "realtime"
19 | ],
20 | "main": "dist/angularfire.min.js",
21 | "ignore": [
22 | "**/.*",
23 | "src",
24 | "tests",
25 | "node_modules",
26 | "bower_components",
27 | "firebase.json",
28 | "package.json",
29 | "Gruntfile.js",
30 | "changelog.txt"
31 | ],
32 | "dependencies": {
33 | "angular": "1.2.x || 1.3.x",
34 | "firebase": "1.0.x",
35 | "firebase-simple-login": "1.6.x",
36 | "mockfirebase": "~0.2.9"
37 | },
38 | "devDependencies": {
39 | "lodash": "~2.4.1",
40 | "angular-mocks": "~1.2.18"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/www/lib/collide/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "collide",
3 | "version": "1.0.0-beta.1",
4 | "main": "collide.js",
5 | "ignore": [
6 | "src"
7 | ],
8 | "dependencies": {},
9 | "homepage": "https://github.com/driftyco/collide",
10 | "_release": "1.0.0-beta.1",
11 | "_resolution": {
12 | "type": "version",
13 | "tag": "v1.0.0-beta.1",
14 | "commit": "bbc4a1c2b160181d4115c2c7369ae82243cbb475"
15 | },
16 | "_source": "git://github.com/driftyco/collide.git",
17 | "_target": "1.0.0-beta.1",
18 | "_originalSource": "collide"
19 | }
--------------------------------------------------------------------------------
/www/lib/collide/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 |
5 | # Runtime data
6 | pids
7 | *.pid
8 | *.seed
9 |
10 | # Directory for instrumented libs generated by jscoverage/JSCover
11 | lib-cov
12 |
13 | # Coverage directory used by tools like istanbul
14 | coverage
15 |
16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17 | .grunt
18 |
19 | # Compiled binary addons (http://nodejs.org/api/addons.html)
20 | build/Release
21 |
22 | # Dependency directory
23 | # Commenting this out is preferred by some people, see
24 | # https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git
25 | node_modules
26 | bower_components
27 |
28 | # Users Environment Variables
29 | .lock-wscript
30 |
31 | # Built files
32 | dist
33 |
--------------------------------------------------------------------------------
/www/lib/collide/README.md:
--------------------------------------------------------------------------------
1 | Collide
2 | --------
3 |
4 | Collide is a powerful yet simple javascript animation engine for web and hybrid mobile apps, inspired by [Facebook Pop](https://github.com/facebook/pop), built by the [Ionic Framework](http://ionicframework.com/) team.
5 |
6 | Animations in Collide have more power and control than CSS animations or transitions, all without sacrificing performance.
7 |
8 | Collide allows the user to pause, play, reverse, repeat, and skip to any part of an animation at any time, and has support for non-cubic bezier curves, enabling powerful Physics animations (Springs, Gravity, and Velocity) without the complexity of a full-fledged physics engine.
9 |
10 | We built Collide because we wanted to give Ionic developers the power to build complicated animation and gesture driven mobile apps with HTML5 and Javascript, something that wasn't possible before.
11 |
12 | Collide solves the problems with CSS animations using a simple Javascript animation engine and API. It also provides a tweening API similar to WebAnimations, and allows the developer to hook into every frame for full control over the behavior of the animation.
13 |
14 | Coming Soon:
15 |
16 | - Animation decay. Set a velocity on an animation and let it decelerate to a certain point.
17 |
18 | ### Development
19 |
20 | - `npm install`
21 | - `npm install -g browserify`
22 | - `npm run test` runs jasmine-node tests. `npm run autotest` will watch and test
23 | - `npm run build`
24 | - Generated file `dist/collide.js` is require/CommonJS/window friendly. If you include it, it will be included as `window.collide`.
25 | - Note: the `collide.js` found in project root is only updated on release. The built version in dist is not added to git and should be used while developing.
26 |
27 | ### API
28 |
29 | **This is in flux, better documentation coming after API is stable**
30 |
31 | ```js
32 | var animator = collide.animator({
33 | // 'linear|ease|ease-in|ease-out|ease-in-out|cubic-bezer(x1,y1,x2,y2)',
34 | // or function(t, duration),
35 | // or a dynamics configuration (see below)
36 | easing: 'ease-in-out',
37 | duration: 1000,
38 | percent: 0,
39 | reverse: false
40 | });
41 |
42 | // Actions, all of these return `this` and are chainable
43 | // .on('step' callback is given a 'percent', 0-1, as argument (for springs it could be outside 0-1 range)
44 | // .on('stop' callback is given a boolean, wasCompleted
45 | animator.on(/step|destroy|start|stop|complete/, function() {})
46 | animator.once(...) //same event types
47 | animator.off(...) //works like jquery.off
48 | animator.stop(); //stop/pause at current position
49 | animator.start(); //start from current position
50 | animator.restrart(); //start over
51 | animator.destroy(); //unbind all events & deallocate
52 |
53 | animator.isRunning(); //boolean getter
54 |
55 | //These are getters and setters.
56 | //No arguments is a getter, argument is a chainable setter.
57 | animator.percent(newPercent); //0-1
58 | animator.duration(duration); //milliseconds
59 | animator.reverse(isReverse);
60 | animator.easing(easing); //setter, string|function(t,duration)|dynamicsConfiguration.
61 | // Dynamics configuration looks like this one of these:
62 | // animator.easing({
63 | // type: 'spring',
64 | // frequency: 15,
65 | // friction: 200,
66 | // initialForce: false
67 | // });
68 | // animator.easing({
69 | // type: 'gravity',
70 | // frequency: 15,
71 | // friction: 200,
72 | // initialForce: false
73 | // });
74 |
75 | ```
76 |
77 | ### Examples
78 |
79 | See test.html.
80 |
81 | ```js
82 | var animator = collide.animator({
83 | duration: 1000,
84 | easing: 'ease-in-out'
85 | })
86 | .on('step', function(v) {
87 | //Have the element spring over 400px
88 | myElement.css('webkitTransform', 'translateX(' + (v*400) + 'px)');
89 | })
90 | .start();
91 | ```
92 |
--------------------------------------------------------------------------------
/www/lib/collide/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "collide",
3 | "version": "1.0.0-beta.1",
4 | "main": "collide.js",
5 | "ignore": [
6 | "src"
7 | ],
8 | "dependencies": {}
9 | }
10 |
--------------------------------------------------------------------------------
/www/lib/collide/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "collide",
3 | "version": "0.0.4",
4 | "main": "collide.js",
5 | "scripts": {
6 | "build": "mkdir -p dist && browserify src/index.js -s collide > dist/collide.js",
7 | "test": "node_modules/.bin/jasmine-node test --color",
8 | "autotest": "node_modules/.bin/jasmine-node test --watch src --autotest --color"
9 | },
10 | "dependencies": {
11 | "raf": "^2.0.1",
12 | "feature": "^0.1.4",
13 | "performance-now": "^0.1.3"
14 | },
15 | "devDependencies": {
16 | "jasmine-node": "^1.14.5",
17 | "proxyquire": "^1.0.1"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/www/lib/collide/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
74 | {{animationResult}}
75 |
76 |
77 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/www/lib/collide/test/core/timeline.spec.js:
--------------------------------------------------------------------------------
1 |
2 | var lastRafId;
3 | var nextRafCb;
4 | function mockRaf(cb) {
5 | nextRafCb = cb;
6 | return lastRafId++;
7 | }
8 | mockRaf.cancel = jasmine.createSpy('rafCancel');
9 |
10 | var nextTime = 0;
11 | function mockTime() {
12 | return nextTime;
13 | }
14 |
15 | var proxyquire = require('proxyquire');
16 | var timeline = proxyquire('../../src/core/timeline', {
17 | 'raf': mockRaf,
18 | 'performance-now': mockTime
19 | });
20 |
21 | describe('timeline', function() {
22 |
23 | beforeEach(function() {
24 | lastRafId = 0;
25 | nextRafCb = null;
26 | nextTime = 0;
27 | });
28 |
29 | it('starting animation should start ticking only on first animation', function() {
30 | spyOn(timeline, 'tick').andCallThrough();
31 | timeline.animationStarted({ _: { id: 0 } });
32 | expect(timeline.tick).toHaveBeenCalled();
33 | expect(timeline.isTicking).toBe(true);
34 |
35 | timeline.tick.reset();
36 | timeline.animationStarted({ _: { id: 1 } });
37 | expect(timeline.tick).not.toHaveBeenCalled();
38 | });
39 |
40 | it('stopping animation should maybeStopTicking', function() {
41 | spyOn(timeline, 'maybeStopTicking');
42 | timeline.animationStopped({ _: { id: 0 } });
43 | expect(timeline.maybeStopTicking).toHaveBeenCalled();
44 | });
45 |
46 | it('maybeStopTicking should stop ticking if no animations left', function() {
47 | timeline._running = { 1: true };
48 | timeline.isTicking = true;
49 | timeline._rafId = 0;
50 | timeline.maybeStopTicking();
51 | expect(mockRaf.cancel).not.toHaveBeenCalled();
52 |
53 | timeline._running = {};
54 | timeline.maybeStopTicking();
55 | expect(mockRaf.cancel).toHaveBeenCalledWith(timeline._rafId);
56 | });
57 |
58 | it('tick() should step every frame, and tick running with deltaT', function() {
59 | var tickSpy = jasmine.createSpy('tick');
60 | timeline._running = {
61 | 0: { _tick: tickSpy }
62 | };
63 | nextTime = 0;
64 | timeline.tick();
65 | expect(tickSpy).not.toHaveBeenCalled();
66 |
67 | nextTime = 100;
68 | nextRafCb();
69 | expect(tickSpy).toHaveBeenCalledWith(100);
70 |
71 | nextTime = 149;
72 | nextRafCb();
73 | expect(tickSpy).toHaveBeenCalledWith(49);
74 | });
75 | });
76 |
--------------------------------------------------------------------------------
/www/lib/collide/test/util/simple-emitter.spec.js:
--------------------------------------------------------------------------------
1 | var Emitter = require('../../src/util/simple-emitter');
2 |
3 | describe('SimpleEmitter', function() {
4 |
5 | it('should on() and emit()', function() {
6 | var receive = jasmine.createSpy('receive');
7 | var emitter = new Emitter();
8 | emitter.on('send', receive);
9 | emitter.emit('send');
10 | expect(receive).toHaveBeenCalledWith();
11 |
12 | receive.reset();
13 | emitter.emit('send', 1);
14 | expect(receive).toHaveBeenCalledWith(1);
15 | });
16 |
17 | it('should on() and off()', function() {
18 | var receive = jasmine.createSpy('receive');
19 | var emitter = new Emitter();
20 | emitter.on('send', receive);
21 |
22 | emitter.emit('send');
23 | expect(receive).toHaveBeenCalledWith();
24 |
25 | emitter.off('send', receive);
26 | receive.reset();
27 | emitter.emit('send');
28 | expect(receive).not.toHaveBeenCalled();
29 | });
30 |
31 | it('should on() and off() with multiple listeners', function() {
32 | var receive = jasmine.createSpy('receive');
33 | var receive2 = jasmine.createSpy('receive2');
34 | var emitter = new Emitter();
35 | emitter.on('send', receive);
36 | emitter.on('send', receive2);
37 | emitter.emit('send', 2);
38 |
39 | expect(receive).toHaveBeenCalledWith(2);
40 | expect(receive2).toHaveBeenCalledWith(2);
41 |
42 | emitter.off('send', receive2);
43 | receive.reset();
44 | receive2.reset();
45 |
46 | emitter.emit('send');
47 | expect(receive).toHaveBeenCalledWith();
48 | expect(receive2).not.toHaveBeenCalled();
49 | });
50 |
51 | it('should once()', function() {
52 | var receive = jasmine.createSpy('receive');
53 | var emitter = new Emitter();
54 | emitter.once('send', receive);
55 | emitter.emit('send');
56 | expect(receive).toHaveBeenCalledWith();
57 | receive.reset();
58 | emitter.emit('send');
59 | expect(receive).not.toHaveBeenCalled();
60 | });
61 |
62 | it('should off() all events for a type', function() {
63 | var receive = jasmine.createSpy('receive');
64 | var receive2 = jasmine.createSpy('receive2');
65 | var emitter = new Emitter();
66 | emitter.on('send', receive);
67 | emitter.on('send', receive2);
68 | emitter.off('send');
69 |
70 | emitter.emit('send');
71 | expect(receive).not.toHaveBeenCalledWith();
72 | expect(receive2).not.toHaveBeenCalled();
73 | });
74 |
75 | it('should off() all events', function() {
76 | var receive = jasmine.createSpy('receive');
77 | var receive2 = jasmine.createSpy('receive2');
78 | var emitter = new Emitter();
79 | emitter.on('send1', receive);
80 | emitter.on('send2', receive2);
81 | emitter.off();
82 |
83 | emitter.emit('send1');
84 | emitter.emit('send2');
85 |
86 | expect(receive).not.toHaveBeenCalledWith();
87 | expect(receive2).not.toHaveBeenCalled();
88 | });
89 |
90 | });
91 |
--------------------------------------------------------------------------------
/www/lib/firebase-simple-login/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "firebase-simple-login",
3 | "description": "Firebase Simple Login web client",
4 | "version": "1.6.3",
5 | "authors": [
6 | "Firebase (https://www.firebase.com/)"
7 | ],
8 | "homepage": "https://github.com/firebase/firebase-simple-login/",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/firebase/firebase-simple-login.git"
12 | },
13 | "license": "MIT",
14 | "keywords": [
15 | "login",
16 | "email",
17 | "password",
18 | "realtime",
19 | "Firebase",
20 | "websocket",
21 | "authentication",
22 | "synchronization"
23 | ],
24 | "main": "firebase-simple-login.js",
25 | "ignore": [
26 | "**/.*",
27 | "js/",
28 | "lib/",
29 | "node_modules/",
30 | "bower_components/",
31 | "firebase-simple-login-java/",
32 | "firebase-simple-login-objc/",
33 | "bower.json",
34 | "release.sh",
35 | "Gruntfile.js",
36 | "package.json",
37 | "CONTRIBUTING.md"
38 | ],
39 | "dependencies": {
40 | "firebase": "1.0.x"
41 | },
42 | "devDependencies": {
43 | "jasmine": "2.0.x",
44 | "jquery": "2.1.x"
45 | },
46 | "_release": "1.6.3",
47 | "_resolution": {
48 | "type": "version",
49 | "tag": "v1.6.3",
50 | "commit": "ca9b28c20fb1308788d164b6032e8eae532dba32"
51 | },
52 | "_source": "git://github.com/firebase/firebase-simple-login.git",
53 | "_target": "1.6.x",
54 | "_originalSource": "firebase-simple-login"
55 | }
--------------------------------------------------------------------------------
/www/lib/firebase-simple-login/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | v1.6.3
2 | -------------
3 | Release Date: 2014-08-15
4 |
5 | * The callback argument for `createUser()`, `changePassword()`, `sendPasswordResetEmail()`, and `removeUser()` is now optional.
6 | * Fixed issue where we accidentally formatted error messages twice resulting in wrong error messages.
7 | * Fixed bug where we assumed a script tag existed for the JSONP transport.
8 | * Removed `displayName` from the anonymous authentication user payload.
9 |
10 | v1.6.2
11 | -------------
12 | Release Date: 2014-07-18
13 |
14 | * Fixed bug in PhoneGap, Trigger.io, and Windows Metro transports which caused response payloads with an "&" in them to be improperly handled, resulting in an "UNKNOWN ERROR".
15 |
16 | v1.6.1
17 | -------------
18 | Release Date: 2014-06-20
19 |
20 | * Add (internal) option to keep pop-up window alive after communicating reply to opener.
21 | * Fixed issue where we accidentally formatted error messages twice resulting in wrong error messages.
22 |
23 | v1.6.0
24 | -------------
25 | Release Date: 2014-06-12
26 |
27 | * NOTE: This update modifies the Firebase Simple Login persistence, so updating to this version will have the effect
28 | of blowing away your users' existing, persisted sessions.
29 | * Remove dependency on cookies / SJCL to better support the PhoneGap / Cordova environments.
30 | * Increase the PhoneGap / Cordova InAppBrowser timeout from 40 to 120 seconds (thanks @VishalRJoshi).
31 |
32 | v1.5.0
33 | -------------
34 | Release Date: 2014-06-02
35 |
36 | * Persona provider officially removed
37 |
38 | v1.4.1
39 | -------------
40 | Release Date: 2014-04-29
41 |
42 | * Add Persona provider deprecation warning (will be removed on 2014-06-02)
43 |
44 | v1.4.0
45 | -------------
46 | Release Date: 2014-04-17
47 |
48 | * Fixes issue with cross-domain XHR in IE9
49 | * Return Promises/A+ standards-compliant promises (using RSVP) from all asynchronous login / user management methods
50 | * Expose `FirebaseSimpleLogin.VERSION` attribute in the client for programmatic detection
51 |
52 | v1.3.2
53 | -------------
54 | Release Date: 2014-03-30
55 |
56 | * Fixes issue with session persistence ([#22](https://github.com/firebase/firebase-simple-login/issues/22))
57 |
58 | v1.3.1
59 | -------------
60 | Release Date: 2014-03-29
61 |
62 | * Add support for `isTemporaryPassword` flag when logging in using the email / password provider ([#17](https://github.com/firebase/firebase-simple-login/issues/17))
63 | * Reduce filesize by using a custom XHR integration ([#13](https://github.com/firebase/firebase-simple-login/issues/13))
64 |
65 | v1.3.0
66 | -------------
67 | Release Date: 2014-02-28
68 |
69 | * Add support for Google / Google+ authentication ([#1](https://github.com/firebase/firebase-simple-login/issues/1))
70 | * Enable automatic redirect-based OAuth for iOS standalone apps, Chrome on iOS, and the Twitter / Facebook iOS preview panes ([#7](https://github.com/firebase/firebase-simple-login/issues/7))
71 | * Enable optional redirect-based OAuth via the `preferRedirect: true` flag for all OAuth-based `.login(...)` methods ([#10](https://github.com/firebase/firebase-simple-login/issues/10))
72 | * Support extra options for Mozilla Persona login ([#8](https://github.com/firebase/firebase-simple-login/issues/8))
73 |
74 | v1.2.5
75 | -------------
76 | Release Date: 2014-02-05
77 |
78 | * Fix bug impacting persisting sessions across page refreshes
79 |
80 | v1.2.4
81 | -------------
82 | Release Date: 2014-02-05
83 |
84 | * Adds support for Windows Metro applications via WebAuthenticationBroker
85 |
86 | v1.2.3
87 | -------------
88 | Release Date: 2014-01-27
89 |
90 | * Fix intermittent eventing issues with multiple clients on a single page
91 |
92 | v1.2.2
93 | -------------
94 | Release Date: 2014-01-24
95 |
96 | * Fix [#5 - sessionLengthDays not used when setting the session in attemptAuth](https://github.com/firebase/firebase-simple-login/issues/5)
97 |
98 | v1.2.1
99 | -------------
100 | Release Date: 2014-01-19
101 |
102 | * Fix [#4 - Persona not working](https://github.com/firebase/firebase-simple-login/pull/4)
103 |
104 | v1.2.0
105 | -------------
106 | Release Date: 2014-01-15
107 |
108 | * Add support for password resets (see [https://www.firebase.com/docs/javascript/simplelogin/sendpasswordresetemail.html](https://www.firebase.com/docs/javascript/simplelogin/sendpasswordresetemail.html))
109 |
--------------------------------------------------------------------------------
/www/lib/firebase-simple-login/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright © 2014 Firebase
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9 | of the Software, and to permit persons to whom the Software is furnished to do
10 | so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | 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 THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/www/lib/firebase-simple-login/README.md:
--------------------------------------------------------------------------------
1 | # Firebase Simple Login - Web Client
2 |
3 | [](http://badge.fury.io/gh/firebase%2Ffirebase-simple-login)
4 | [](https://travis-ci.org/firebase/firebase-simple-login)
5 | [](https://gemnasium.com/firebase/firebase-simple-login)
6 |
7 | Firebase Simple Login is a simple, easy-to-use authentication service built on top of
8 | [Firebase Custom Login](https://www.firebase.com/docs/web/guide/simple-login/custom.html),
9 | allowing you to authenticate users without any server-side code.
10 |
11 | Firebase Simple Login offers several types of authentication: email/password, anonymous, and
12 | third-party integration with Facebook, GitHub, Google, and Twitter. It allows you to authenticate
13 | your users without having to manually store authentication credentials or run a server.
14 |
15 |
16 | ## Installation
17 |
18 | In order to use Firebase Simple Login in your project, you need to include the following files
19 | in your HTML:
20 |
21 | ```html
22 |
23 |
24 |
25 |
26 |
27 | ```
28 |
29 | Use the URL above to download both the minified (`firebase-simple-login.js`) and non-minified
30 | (`firebase-simple-login-debug.js`) versions of Firebase Simple Login from the Firebase CDN.
31 |
32 | The only dependency is the Firebase web client, which is also available on the Firebase CDN
33 | using the above URL. Alternatively, you can download the latest client version from the
34 | [Firebase developer documentation](https://www.firebase.com/docs/web/).
35 |
36 | You can also install Firebase Simple Login via Bower and its dependencies will be downloaded
37 | automatically:
38 |
39 | ```bash
40 | $ bower install firebase-simple-login --save
41 | ```
42 |
43 | ## Getting Started with Firebase
44 |
45 | Firebase Simple Login requires Firebase in order to authenticate your users. You can
46 | [sign up here for a free account](https://www.firebase.com/signup/).
47 |
48 |
49 | ## Documentation & API Reference
50 |
51 | You can read through [the complete documentation](https://www.firebase.com/docs/web/guide/user-auth.html)
52 | as well as [the full API reference](https://www.firebase.com/docs/web/api/firebasesimplelogin/)
53 | in the Firebase developer documentation.
54 |
55 |
56 | ## Configuration
57 |
58 | Before adding authentication to your application, you need enable the authentication providers
59 | you want to use. You can do this from the "Simple Login" tab in your Firebase's Dashboard, at
60 | `https://.firebaseio.com`. From there you can enable/disable authentication
61 | providers, setup OAuth credentials, and configure valid OAuth request origins.
62 |
63 | Our developer documentation contains more information about how to
64 | [configure each of the authentication providers](https://www.firebase.com/docs/web/guide/user-auth.html#section-providers).
65 |
66 |
67 | ## Usage
68 |
69 | Start monitoring user authentication state in your application by instantiating
70 | the Firebase Simple Login client with a Firebase reference and a callback.
71 |
72 | This `function(error, user)` callback will be invoked once after instantiation,
73 | and again every time the user's authentication state changes:
74 |
75 | ```javascript
76 | var ref = new Firebase('https://.firebaseio.com');
77 | var auth = new FirebaseSimpleLogin(ref, function(error, user) {
78 | if (error) {
79 | console.log('Authentication error: ', error);
80 | } else if (user) {
81 | console.log('User ' + user.id + ' authenticated via the ' + user.provider + ' provider!');
82 | } else {
83 | console.log("User is logged out.")
84 | }
85 | });
86 | ```
87 |
88 | If the user is logged out, try authenticating using the provider of your choice:
89 |
90 | ```javascript
91 | auth.login(''); // 'password', 'anonymous', 'facebook', 'github', etc.
92 | ```
93 |
94 | You can read through [the complete documentation](https://www.firebase.com/docs/web/guide/user-auth.html)
95 | as well as [the full API reference](https://www.firebase.com/docs/web/api/firebasesimplelogin/)
96 | in the Firebase developer documentation.
97 |
98 |
99 | ## Contributing
100 |
101 | Firebase Simple Login is an open-source project and we welcome contributions to the library.
102 | Please read the [Contribution Guidelines](./CONTRIBUTING.md) in addition to following the steps
103 | below.
104 |
105 | If you'd like to contribute to Firebase Simple Login, you'll need to run the following commands
106 | to get your environment set up:
107 |
108 | ```bash
109 | $ git clone https://github.com/firebase/firebase-simple-login.git
110 | $ cd firebase-simple-login # go to the firebase-simple-login directory
111 | $ git submodule update --init lib/ # update the Google Closure library submodule
112 | $ npm install -g grunt-cli # globally install gulp task runner
113 | $ npm install -g bower # globally install Bower package manager
114 | $ npm install -g phantomjs # globally install PhantomJS test framework
115 | $ npm install -g casperjs # globally install CasperJS test framework
116 | $ npm install # install local npm build / test dependencies
117 | $ bower install # install local JavaScript dependencies
118 | ```
119 |
120 | The source files are located at `/js/src/simple-login/`. Once you've made a change in one of
121 | those files, run `grunt build` to generate the distribution files `firebase-simple-login.js`
122 | and `firebase-simple-login-debug.js` which can be found at the root of this repository.
123 |
124 | You can run the test suite via the command line by running `grunt test`. This will run both
125 | the Jasmine and Casper test suites. If you just want to run one, use `grunt test:jasmine` or
126 | `grunt test:casper`.
127 |
128 | You can also run the Jasmine test suite from within the browser. You first need to spin up a
129 | local server:
130 |
131 | ```bash
132 | $ python -m SimpleHTTPServer 7070
133 | ```
134 |
135 | Then, navigate to `http://localhost:7070/js/test/jasmine/index.html` and the test suite will
136 | start automatically.
137 |
--------------------------------------------------------------------------------
/www/lib/firebase/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "firebase",
3 | "version": "1.0.21",
4 | "homepage": "https://firebase.com",
5 | "authors": [
6 | "Firebase "
7 | ],
8 | "description": "Firebase Web Client",
9 | "main": "firebase.js",
10 | "keywords": [
11 | "Firebase",
12 | "synchronization",
13 | "real-time",
14 | "websocket"
15 | ],
16 | "license": "MIT",
17 | "private": false,
18 | "ignore": [
19 | "**/.*",
20 | "node_modules",
21 | "bower_components",
22 | "test",
23 | "tests"
24 | ],
25 | "_release": "1.0.21",
26 | "_resolution": {
27 | "type": "version",
28 | "tag": "v1.0.21",
29 | "commit": "e7feeb9b49eb9794cc57de423919816259a45d5f"
30 | },
31 | "_source": "git://github.com/firebase/firebase-bower.git",
32 | "_target": "1.0.x",
33 | "_originalSource": "firebase"
34 | }
--------------------------------------------------------------------------------
/www/lib/firebase/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright © 2014 Firebase
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of
4 | this software and associated documentation files (the "Software"), to deal in
5 | the Software without restriction, including without limitation the rights to
6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7 | of the Software, and to permit persons to whom the Software is furnished to do
8 | so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 | SOFTWARE.
20 |
--------------------------------------------------------------------------------
/www/lib/firebase/README.md:
--------------------------------------------------------------------------------
1 | firebase-bower
2 | ==============
3 |
4 | Firebase Bower
5 |
--------------------------------------------------------------------------------
/www/lib/firebase/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "firebase",
3 | "version": "1.0.21",
4 | "homepage": "https://firebase.com",
5 | "authors": [
6 | "Firebase "
7 | ],
8 | "description": "Firebase Web Client",
9 | "main": "firebase.js",
10 | "keywords": [
11 | "Firebase",
12 | "synchronization",
13 | "real-time",
14 | "websocket"
15 | ],
16 | "license": "MIT",
17 | "private": false,
18 | "ignore": [
19 | "**/.*",
20 | "node_modules",
21 | "bower_components",
22 | "test",
23 | "tests"
24 | ]
25 | }
--------------------------------------------------------------------------------
/www/lib/ionic/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic",
3 | "version": "1.0.0-beta.12",
4 | "codename": "krypton-koala",
5 | "homepage": "https://github.com/driftyco/ionic",
6 | "authors": [
7 | "Max Lynch ",
8 | "Adam Bradley ",
9 | "Ben Sperry "
10 | ],
11 | "description": "Advanced HTML5 hybrid mobile app development framework.",
12 | "main": [
13 | "css/ionic.css",
14 | "fonts/*",
15 | "js/ionic.js",
16 | "js/ionic-angular.js"
17 | ],
18 | "keywords": [
19 | "mobile",
20 | "html5",
21 | "ionic",
22 | "cordova",
23 | "phonegap",
24 | "trigger",
25 | "triggerio",
26 | "angularjs",
27 | "angular"
28 | ],
29 | "license": "MIT",
30 | "private": false,
31 | "dependencies": {
32 | "angular": "~1.2.17",
33 | "angular-animate": "~1.2.17",
34 | "angular-sanitize": "~1.2.17",
35 | "angular-ui-router": "0.2.10",
36 | "collide": "1.0.0-beta.1"
37 | },
38 | "_release": "1.0.0-beta.12",
39 | "_resolution": {
40 | "type": "version",
41 | "tag": "v1.0.0-beta.12",
42 | "commit": "e1fee0fbab52f6137c1d3da74a94d56e19fbaa6f"
43 | },
44 | "_source": "git://github.com/driftyco/ionic-bower.git",
45 | "_target": "1.0.0-beta.12",
46 | "_originalSource": "driftyco/ionic-bower"
47 | }
--------------------------------------------------------------------------------
/www/lib/ionic/README.md:
--------------------------------------------------------------------------------
1 | # ionic-bower
2 |
3 | Bower repository for [Ionic Framework](http://github.com/driftyco/ionic)
4 |
5 | ### Usage
6 |
7 | Include `js/ionic.bundle.js` to get ionic and all of its dependencies.
8 |
9 | Alternatively, include the individual ionic files with the dependencies separately.
10 |
11 | ### Versions
12 |
13 | To install the latest stable version, `bower install driftyco/ionic-bower`
14 |
15 | To install the latest nightly release, `bower install driftyco/ionic-bower#master`
16 |
--------------------------------------------------------------------------------
/www/lib/ionic/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic",
3 | "version": "1.0.0-beta.12",
4 | "codename": "krypton-koala",
5 | "homepage": "https://github.com/driftyco/ionic",
6 | "authors": [
7 | "Max Lynch ",
8 | "Adam Bradley ",
9 | "Ben Sperry "
10 | ],
11 | "description": "Advanced HTML5 hybrid mobile app development framework.",
12 | "main": [
13 | "css/ionic.css",
14 | "fonts/*",
15 | "js/ionic.js",
16 | "js/ionic-angular.js"
17 | ],
18 | "keywords": [
19 | "mobile",
20 | "html5",
21 | "ionic",
22 | "cordova",
23 | "phonegap",
24 | "trigger",
25 | "triggerio",
26 | "angularjs",
27 | "angular"
28 | ],
29 | "license": "MIT",
30 | "private": false,
31 | "dependencies": {
32 | "angular": "~1.2.17",
33 | "angular-animate": "~1.2.17",
34 | "angular-sanitize": "~1.2.17",
35 | "angular-ui-router": "0.2.10",
36 | "collide": "1.0.0-beta.1"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/www/lib/ionic/fonts/ionicons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-in-action/ionic-demo-resort-app/45ffed0175699c674b7aa88379513a9dff68c320/www/lib/ionic/fonts/ionicons.eot
--------------------------------------------------------------------------------
/www/lib/ionic/fonts/ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-in-action/ionic-demo-resort-app/45ffed0175699c674b7aa88379513a9dff68c320/www/lib/ionic/fonts/ionicons.ttf
--------------------------------------------------------------------------------
/www/lib/ionic/fonts/ionicons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ionic-in-action/ionic-demo-resort-app/45ffed0175699c674b7aa88379513a9dff68c320/www/lib/ionic/fonts/ionicons.woff
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_action-sheet.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Action Sheets
3 | * --------------------------------------------------
4 | */
5 |
6 | .action-sheet-backdrop {
7 | @include transition(background-color 300ms ease-in-out);
8 | position: fixed;
9 | top: 0;
10 | left: 0;
11 | z-index: $z-index-action-sheet;
12 | width: 100%;
13 | height: 100%;
14 | background-color: rgba(0,0,0,0);
15 |
16 | &.active {
17 | background-color: rgba(0,0,0,0.5);
18 | }
19 | }
20 |
21 | .action-sheet-wrapper {
22 | @include translate3d(0, 100%, 0);
23 | @include transition(all ease-in-out 300ms);
24 | position: absolute;
25 | bottom: 0;
26 | width: 100%;
27 | }
28 |
29 | .action-sheet-up {
30 | @include translate3d(0, 0, 0);
31 | }
32 |
33 | .action-sheet {
34 | margin-left: 15px;
35 | margin-right: 15px;
36 | width: auto;
37 | z-index: $z-index-action-sheet;
38 | overflow: hidden;
39 |
40 | .button {
41 | display: block;
42 | padding: 1px;
43 | width: 100%;
44 | border-radius: 0;
45 |
46 | background-color: transparent;
47 |
48 | color: $positive;
49 | font-size: 18px;
50 |
51 | &.destructive {
52 | color: $assertive;
53 | }
54 | }
55 | }
56 |
57 | .action-sheet-title {
58 | padding: 10px;
59 | color: lighten($base-color, 40%);
60 | text-align: center;
61 | font-size: 12px;
62 | }
63 |
64 | .action-sheet-group {
65 | margin-bottom: 5px;
66 | border-radius: $sheet-border-radius;
67 | background-color: #fff;
68 | .button {
69 | border-width: 1px 0px 0px 0px;
70 | border-radius: 0;
71 |
72 | &.active {
73 | background-color: transparent;
74 | color: inherit;
75 | }
76 | }
77 | .button:first-child:last-child {
78 | border-width: 0;
79 | }
80 | }
81 |
82 | .action-sheet-open {
83 | pointer-events: none;
84 |
85 | &.modal-open .modal {
86 | pointer-events: none;
87 | }
88 |
89 | .action-sheet-backdrop {
90 | pointer-events: auto;
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_backdrop.scss:
--------------------------------------------------------------------------------
1 |
2 | .backdrop {
3 | position: fixed;
4 | top: 0;
5 | left: 0;
6 | z-index: $z-index-backdrop;
7 |
8 | width: 100%;
9 | height: 100%;
10 |
11 | background-color: rgba(0,0,0,0.4);
12 |
13 | visibility: hidden;
14 | opacity: 0;
15 |
16 | &.visible {
17 | visibility: visible;
18 | }
19 | &.active {
20 | opacity: 1;
21 | }
22 |
23 | @include transition(0.1s opacity linear);
24 | }
25 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_badge.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Badges
4 | * --------------------------------------------------
5 | */
6 |
7 | .badge {
8 | @include badge-style($badge-default-bg, $badge-default-text);
9 | z-index: $z-index-badge;
10 | display: inline-block;
11 | padding: 3px 8px;
12 | min-width: 10px;
13 | border-radius: $badge-border-radius;
14 | vertical-align: baseline;
15 | text-align: center;
16 | white-space: nowrap;
17 | font-weight: $badge-font-weight;
18 | font-size: $badge-font-size;
19 | line-height: $badge-line-height;
20 |
21 | &:empty {
22 | display: none;
23 | }
24 | }
25 |
26 | //Be sure to override specificity of rule that 'badge color matches tab color by default'
27 | .tabs .tab-item .badge,
28 | .badge {
29 | &.badge-light {
30 | @include badge-style($badge-light-bg, $badge-light-text);
31 | }
32 | &.badge-stable {
33 | @include badge-style($badge-stable-bg, $badge-stable-text);
34 | }
35 | &.badge-positive {
36 | @include badge-style($badge-positive-bg, $badge-positive-text);
37 | }
38 | &.badge-calm {
39 | @include badge-style($badge-calm-bg, $badge-calm-text);
40 | }
41 | &.badge-assertive {
42 | @include badge-style($badge-assertive-bg, $badge-assertive-text);
43 | }
44 | &.badge-balanced {
45 | @include badge-style($badge-balanced-bg, $badge-balanced-text);
46 | }
47 | &.badge-energized {
48 | @include badge-style($badge-energized-bg, $badge-energized-text);
49 | }
50 | &.badge-royal {
51 | @include badge-style($badge-royal-bg, $badge-royal-text);
52 | }
53 | &.badge-dark {
54 | @include badge-style($badge-dark-bg, $badge-dark-text);
55 | }
56 | }
57 |
58 | // Quick fix for labels/badges in buttons
59 | .button .badge {
60 | position: relative;
61 | top: -1px;
62 | }
63 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_button-bar.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Button Bar
4 | * --------------------------------------------------
5 | */
6 |
7 | .button-bar {
8 | @include display-flex();
9 | @include flex(1);
10 | width: 100%;
11 |
12 | &.button-bar-inline {
13 | display: block;
14 | width: auto;
15 |
16 | @include clearfix();
17 |
18 | > .button {
19 | width: auto;
20 | display: inline-block;
21 | float: left;
22 | }
23 | }
24 | }
25 |
26 | .button-bar > .button {
27 | @include flex(1);
28 | display: block;
29 |
30 | overflow: hidden;
31 |
32 | padding: 0 16px;
33 |
34 | width: 0;
35 |
36 | border-width: 1px 0px 1px 1px;
37 | border-radius: 0;
38 | text-align: center;
39 | text-overflow: ellipsis;
40 | white-space: nowrap;
41 |
42 | &:before,
43 | .icon:before {
44 | line-height: 44px;
45 | }
46 |
47 | &:first-child {
48 | border-radius: 2px 0px 0px 2px;
49 | }
50 | &:last-child {
51 | border-right-width: 1px;
52 | border-radius: 0px 2px 2px 0px;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_button.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Buttons
4 | * --------------------------------------------------
5 | */
6 |
7 | .button {
8 | // set the color defaults
9 | @include button-style($button-default-bg, $button-default-border, $button-default-active-bg, $button-default-active-border, $button-default-text);
10 |
11 | position: relative;
12 | display: inline-block;
13 | margin: 0;
14 | padding: 0 $button-padding;
15 |
16 | min-width: ($button-padding * 3) + $button-font-size;
17 | min-height: $button-height + 5px;
18 |
19 | border-width: $button-border-width;
20 | border-style: solid;
21 | border-radius: $button-border-radius;
22 |
23 | vertical-align: top;
24 | text-align: center;
25 |
26 | text-overflow: ellipsis;
27 | font-size: $button-font-size;
28 | line-height: $button-height - $button-border-width + 1px;
29 |
30 | cursor: pointer;
31 |
32 | &:after {
33 | // used to create a larger button "hit" area
34 | position: absolute;
35 | top: -6px;
36 | right: -6px;
37 | bottom: -6px;
38 | left: -6px;
39 | content: ' ';
40 | }
41 |
42 | .icon {
43 | vertical-align: top;
44 | pointer-events: none;
45 | }
46 |
47 | .icon:before,
48 | &.icon:before,
49 | &.icon-left:before,
50 | &.icon-right:before {
51 | display: inline-block;
52 | padding: 0 0 $button-border-width 0;
53 | vertical-align: inherit;
54 | font-size: $button-icon-size;
55 | line-height: $button-height - $button-border-width;
56 | pointer-events: none;
57 | }
58 | &.icon-left:before {
59 | float: left;
60 | padding-right: .2em;
61 | padding-left: 0;
62 | }
63 | &.icon-right:before {
64 | float: right;
65 | padding-right: 0;
66 | padding-left: .2em;
67 | }
68 |
69 | &.button-block, &.button-full {
70 | margin-top: $button-block-margin;
71 | margin-bottom: $button-block-margin;
72 | }
73 |
74 | &.button-light {
75 | @include button-style($button-light-bg, $button-light-border, $button-light-active-bg, $button-light-active-border, $button-light-text);
76 | @include button-clear($button-light-border);
77 | @include button-outline($button-light-border);
78 | }
79 |
80 | &.button-stable {
81 | @include button-style($button-stable-bg, $button-stable-border, $button-stable-active-bg, $button-stable-active-border, $button-stable-text);
82 | @include button-clear($button-stable-border);
83 | @include button-outline($button-stable-border);
84 | }
85 |
86 | &.button-positive {
87 | @include button-style($button-positive-bg, $button-positive-border, $button-positive-active-bg, $button-positive-active-border, $button-positive-text);
88 | @include button-clear($button-positive-bg);
89 | @include button-outline($button-positive-bg);
90 | }
91 |
92 | &.button-calm {
93 | @include button-style($button-calm-bg, $button-calm-border, $button-calm-active-bg, $button-calm-active-border, $button-calm-text);
94 | @include button-clear($button-calm-bg);
95 | @include button-outline($button-calm-bg);
96 | }
97 |
98 | &.button-assertive {
99 | @include button-style($button-assertive-bg, $button-assertive-border, $button-assertive-active-bg, $button-assertive-active-border, $button-assertive-text);
100 | @include button-clear($button-assertive-bg);
101 | @include button-outline($button-assertive-bg);
102 | }
103 |
104 | &.button-balanced {
105 | @include button-style($button-balanced-bg, $button-balanced-border, $button-balanced-active-bg, $button-balanced-active-border, $button-balanced-text);
106 | @include button-clear($button-balanced-bg);
107 | @include button-outline($button-balanced-bg);
108 | }
109 |
110 | &.button-energized {
111 | @include button-style($button-energized-bg, $button-energized-border, $button-energized-active-bg, $button-energized-active-border, $button-energized-text);
112 | @include button-clear($button-energized-bg);
113 | @include button-outline($button-energized-bg);
114 | }
115 |
116 | &.button-royal {
117 | @include button-style($button-royal-bg, $button-royal-border, $button-royal-active-bg, $button-royal-active-border, $button-royal-text);
118 | @include button-clear($button-royal-bg);
119 | @include button-outline($button-royal-bg);
120 | }
121 |
122 | &.button-dark {
123 | @include button-style($button-dark-bg, $button-dark-border, $button-dark-active-bg, $button-dark-active-border, $button-dark-text);
124 | @include button-clear($button-dark-bg);
125 | @include button-outline($button-dark-bg);
126 | }
127 | }
128 |
129 | .button-small {
130 | padding: 2px $button-small-padding 1px;
131 | min-width: $button-small-height;
132 | min-height: $button-small-height + 2;
133 | font-size: $button-small-font-size;
134 | line-height: $button-small-height - $button-border-width - 1;
135 |
136 | .icon:before,
137 | &.icon:before,
138 | &.icon-left:before,
139 | &.icon-right:before {
140 | font-size: $button-small-icon-size;
141 | line-height: $button-small-icon-size + 3;
142 | margin-top: 3px;
143 | }
144 | }
145 |
146 | .button-large {
147 | padding: 0 $button-large-padding;
148 | min-width: ($button-large-padding * 3) + $button-large-font-size;
149 | min-height: $button-large-height + 5;
150 | font-size: $button-large-font-size;
151 | line-height: $button-large-height - $button-border-width;
152 |
153 | .icon:before,
154 | &.icon:before,
155 | &.icon-left:before,
156 | &.icon-right:before {
157 | padding-bottom: ($button-border-width * 2);
158 | font-size: $button-large-icon-size;
159 | line-height: $button-large-height - ($button-border-width * 2) - 1;
160 | }
161 | }
162 |
163 | .button-icon {
164 | @include transition(opacity .1s);
165 | padding: 0 6px;
166 | min-width: initial;
167 | border-color: transparent;
168 | background: none;
169 |
170 | &.button.active,
171 | &.button.activated {
172 | border-color: transparent;
173 | background: none;
174 | box-shadow: none;
175 | opacity: 0.3;
176 | }
177 |
178 | .icon:before,
179 | &.icon:before {
180 | font-size: $button-large-icon-size;
181 | }
182 | }
183 |
184 | .button-clear {
185 | @include button-clear($button-default-border);
186 | @include transition(opacity .1s);
187 | padding: 0 $button-clear-padding;
188 | max-height: $button-height;
189 | border-color: transparent;
190 | background: none;
191 | box-shadow: none;
192 |
193 | &.active,
194 | &.activated {
195 | opacity: 0.3;
196 | }
197 | }
198 |
199 | .button-outline {
200 | @include button-outline($button-default-border);
201 | @include transition(opacity .1s);
202 | background: none;
203 | box-shadow: none;
204 | }
205 |
206 | .padding > .button.button-block:first-child {
207 | margin-top: 0;
208 | }
209 |
210 | .button-block {
211 | display: block;
212 | clear: both;
213 |
214 | &:after {
215 | clear: both;
216 | }
217 | }
218 |
219 | .button-full,
220 | .button-full > .button {
221 | display: block;
222 | margin-right: 0;
223 | margin-left: 0;
224 | border-right-width: 0;
225 | border-left-width: 0;
226 | border-radius: 0;
227 | }
228 |
229 | button.button-block,
230 | button.button-full,
231 | .button-full > button.button,
232 | input.button.button-block {
233 | width: 100%;
234 | }
235 |
236 | a.button {
237 | text-decoration: none;
238 |
239 | .icon:before,
240 | &.icon:before,
241 | &.icon-left:before,
242 | &.icon-right:before {
243 | margin-top: 2px;
244 | }
245 | }
246 |
247 | .button.disabled,
248 | .button[disabled] {
249 | opacity: .4;
250 | cursor: default !important;
251 | pointer-events: none;
252 | }
253 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_checkbox.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Checkbox
4 | * --------------------------------------------------
5 | */
6 |
7 | .checkbox {
8 | // set the color defaults
9 | @include checkbox-style($checkbox-off-border-default, $checkbox-on-bg-default);
10 |
11 | position: relative;
12 | display: inline-block;
13 | padding: ($checkbox-height / 4) ($checkbox-width / 4);
14 | cursor: pointer;
15 | }
16 | .checkbox-light {
17 | @include checkbox-style($checkbox-off-border-light, $checkbox-on-bg-light);
18 | }
19 | .checkbox-stable {
20 | @include checkbox-style($checkbox-off-border-stable, $checkbox-on-bg-stable);
21 | }
22 | .checkbox-positive {
23 | @include checkbox-style($checkbox-off-border-positive, $checkbox-on-bg-positive);
24 | }
25 | .checkbox-calm {
26 | @include checkbox-style($checkbox-off-border-calm, $checkbox-on-bg-calm);
27 | }
28 | .checkbox-assertive {
29 | @include checkbox-style($checkbox-off-border-assertive, $checkbox-on-bg-assertive);
30 | }
31 | .checkbox-balanced {
32 | @include checkbox-style($checkbox-off-border-balanced, $checkbox-on-bg-balanced);
33 | }
34 | .checkbox-energized{
35 | @include checkbox-style($checkbox-off-border-energized, $checkbox-on-bg-energized);
36 | }
37 | .checkbox-royal {
38 | @include checkbox-style($checkbox-off-border-royal, $checkbox-on-bg-royal);
39 | }
40 | .checkbox-dark {
41 | @include checkbox-style($checkbox-off-border-dark, $checkbox-on-bg-dark);
42 | }
43 |
44 | .checkbox input:disabled:before,
45 | .checkbox input:disabled + .checkbox-icon:before {
46 | border-color: $checkbox-off-border-light;
47 | }
48 |
49 | .checkbox input:disabled:checked:before,
50 | .checkbox input:disabled:checked + .checkbox-icon:before {
51 | background: $checkbox-on-bg-light;
52 | }
53 |
54 |
55 | .checkbox.checkbox-input-hidden input {
56 | display: none !important;
57 | }
58 |
59 | .checkbox input,
60 | .checkbox-icon {
61 | position: relative;
62 | width: $checkbox-width;
63 | height: $checkbox-height;
64 | display: block;
65 | border: 0;
66 | background: transparent;
67 | cursor: pointer;
68 | -webkit-appearance: none;
69 |
70 | &:before {
71 | // what the checkbox looks like when its not checked
72 | display: table;
73 | width: 100%;
74 | height: 100%;
75 | border-width: $checkbox-border-width;
76 | border-style: solid;
77 | border-radius: $checkbox-border-radius;
78 | background: $checkbox-off-bg-color;
79 | content: ' ';
80 | transition: background-color 20ms ease-in-out;
81 | }
82 | }
83 |
84 | .checkbox input:checked:before,
85 | input:checked + .checkbox-icon:before {
86 | border-width: $checkbox-border-width + 1;
87 | }
88 |
89 | // the checkmark within the box
90 | .checkbox input:after,
91 | .checkbox-icon:after {
92 | @include transition(opacity .05s ease-in-out);
93 | @include rotate(-45deg);
94 | position: absolute;
95 | top: 30%;
96 | left: 26%;
97 | display: table;
98 | width: ($checkbox-width / 2) + 1;
99 | height: ($checkbox-width / 3) + 1;
100 | border: $checkbox-check-width solid $checkbox-check-color;
101 | border-top: 0;
102 | border-right: 0;
103 | content: ' ';
104 | opacity: 0;
105 | }
106 |
107 | .grade-c .checkbox input:after,
108 | .grade-c .checkbox-icon:after {
109 | @include rotate(0);
110 | top: 3px;
111 | left: 4px;
112 | border: none;
113 | color: $checkbox-check-color;
114 | content: '\2713';
115 | font-weight: bold;
116 | font-size: 20px;
117 | }
118 |
119 | // what the checkmark looks like when its checked
120 | .checkbox input:checked:after,
121 | input:checked + .checkbox-icon:after {
122 | opacity: 1;
123 | }
124 |
125 | // make sure item content have enough padding on left to fit the checkbox
126 | .item-checkbox {
127 | padding-left: ($item-padding * 2) + $checkbox-width;
128 |
129 | &.active {
130 | box-shadow: none;
131 | }
132 | }
133 |
134 | // position the checkbox to the left within an item
135 | .item-checkbox .checkbox {
136 | position: absolute;
137 | top: 50%;
138 | right: $item-padding / 2;
139 | left: $item-padding / 2;
140 | z-index: $z-index-item-checkbox;
141 | margin-top: (($checkbox-height + ($checkbox-height / 2)) / 2) * -1;
142 | }
143 |
144 |
145 | .item-checkbox.item-checkbox-right {
146 | padding-right: ($item-padding * 2) + $checkbox-width;
147 | padding-left: $item-padding;
148 | }
149 |
150 | .item-checkbox-right .checkbox input,
151 | .item-checkbox-right .checkbox-icon {
152 | float: right;
153 | }
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_form.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Forms
3 | * --------------------------------------------------
4 | */
5 |
6 | // Make all forms have space below them
7 | form {
8 | margin: 0 0 $line-height-base;
9 | }
10 |
11 | // Groups of fields with labels on top (legends)
12 | legend {
13 | display: block;
14 | margin-bottom: $line-height-base;
15 | padding: 0;
16 | width: 100%;
17 | border: $input-border-width solid $input-border;
18 | color: $dark;
19 | font-size: $font-size-base * 1.5;
20 | line-height: $line-height-base * 2;
21 |
22 | small {
23 | color: $stable;
24 | font-size: $line-height-base * .75;
25 | }
26 | }
27 |
28 | // Set font for forms
29 | label,
30 | input,
31 | button,
32 | select,
33 | textarea {
34 | @include font-shorthand($font-size-base, normal, $line-height-base); // Set size, weight, line-height here
35 | }
36 | input,
37 | button,
38 | select,
39 | textarea {
40 | font-family: $font-family-base; // And only set font-family here for those that need it (note the missing label element)
41 | }
42 |
43 |
44 | // Input List
45 | // -------------------------------
46 |
47 | .item-input {
48 | @include display-flex();
49 | @include align-items(center);
50 | position: relative;
51 | overflow: hidden;
52 | padding: 6px 0 5px 16px;
53 |
54 | input {
55 | @include border-radius(0);
56 | @include flex(1, 0, 220px);
57 | @include appearance(none);
58 | margin: 0;
59 | padding-right: 24px;
60 | background-color: transparent;
61 | }
62 |
63 | .button .icon {
64 | @include flex(0, 0, 24px);
65 | position: static;
66 | display: inline-block;
67 | height: auto;
68 | text-align: center;
69 | font-size: 16px;
70 | }
71 |
72 | .button-bar {
73 | @include border-radius(0);
74 | @include flex(1, 0, 220px);
75 | @include appearance(none);
76 | }
77 |
78 | .icon {
79 | min-width: 14px;
80 | }
81 | }
82 |
83 | .item-input-inset {
84 | @include display-flex();
85 | @include align-items(center);
86 | position: relative;
87 | overflow: hidden;
88 | padding: ($item-padding / 3) * 2;
89 | }
90 |
91 | .item-input-wrapper {
92 | @include display-flex();
93 | @include flex(1, 0);
94 | @include align-items(center);
95 | @include border-radius(4px);
96 | padding-right: 8px;
97 | padding-left: 8px;
98 | background: #eee;
99 | }
100 |
101 | .item-input-inset .item-input-wrapper input {
102 | padding-left: 4px;
103 | height: 29px;
104 | background: transparent;
105 | line-height: 18px;
106 | }
107 |
108 | .item-input-wrapper ~ .button {
109 | margin-left: ($item-padding / 3) * 2;
110 | }
111 |
112 | .input-label {
113 | @include flex(1, 0, 100px);
114 | display: table;
115 | padding: 7px 10px 7px 0px;
116 | max-width: 200px;
117 | width: 35%;
118 | color: $input-label-color;
119 | font-size: 16px;
120 | }
121 |
122 | .placeholder-icon {
123 | color: #aaa;
124 | &:first-child {
125 | padding-right: 6px;
126 | }
127 | &:last-child {
128 | padding-left: 6px;
129 | }
130 | }
131 |
132 | .item-stacked-label {
133 | display: block;
134 | background-color: transparent;
135 | box-shadow: none;
136 |
137 | .input-label, .icon {
138 | display: inline-block;
139 | padding: 4px 0 0 0px;
140 | vertical-align: middle;
141 | }
142 | }
143 |
144 | .item-stacked-label input,
145 | .item-stacked-label textarea {
146 | @include border-radius(2px);
147 | padding: 4px 8px 3px 0;
148 | border: none;
149 | background-color: $input-bg;
150 | }
151 | .item-stacked-label input {
152 | overflow: hidden;
153 | height: $line-height-computed + $font-size-base + 12px;
154 | }
155 |
156 | .item-floating-label {
157 | display: block;
158 | background-color: transparent;
159 | box-shadow: none;
160 |
161 | .input-label {
162 | position: relative;
163 | padding: 5px 0 0 0;
164 | opacity: 0;
165 | top: 10px;
166 | @include transition(opacity .15s ease-in, top .2s linear);
167 |
168 | &.has-input {
169 | opacity: 1;
170 | top: 0;
171 | @include transition(opacity .15s ease-in, top .2s linear);
172 | }
173 | }
174 | }
175 |
176 |
177 | // Form Controls
178 | // -------------------------------
179 |
180 | // Shared size and type resets
181 | textarea,
182 | input[type="text"],
183 | input[type="password"],
184 | input[type="datetime"],
185 | input[type="datetime-local"],
186 | input[type="date"],
187 | input[type="month"],
188 | input[type="time"],
189 | input[type="week"],
190 | input[type="number"],
191 | input[type="email"],
192 | input[type="url"],
193 | input[type="search"],
194 | input[type="tel"],
195 | input[type="color"] {
196 | display: block;
197 | padding-top: 2px;
198 | padding-left: 0;
199 | height: $line-height-computed + $font-size-base;
200 | color: $input-color;
201 | vertical-align: middle;
202 | font-size: $font-size-base;
203 | line-height: $font-size-base + 2;
204 | }
205 |
206 | .platform-ios,
207 | .platform-android {
208 | input[type="datetime-local"],
209 | input[type="date"],
210 | input[type="month"],
211 | input[type="time"],
212 | input[type="week"] {
213 | padding-top: 8px;
214 | }
215 | }
216 |
217 | input,
218 | textarea {
219 | width: 100%;
220 | }
221 | textarea {
222 | padding-left: 0;
223 | @include placeholder($input-color-placeholder, -3px);
224 | }
225 |
226 | // Reset height since textareas have rows
227 | textarea {
228 | height: auto;
229 | }
230 |
231 | // Everything else
232 | textarea,
233 | input[type="text"],
234 | input[type="password"],
235 | input[type="datetime"],
236 | input[type="datetime-local"],
237 | input[type="date"],
238 | input[type="month"],
239 | input[type="time"],
240 | input[type="week"],
241 | input[type="number"],
242 | input[type="email"],
243 | input[type="url"],
244 | input[type="search"],
245 | input[type="tel"],
246 | input[type="color"] {
247 | border: 0;
248 | }
249 |
250 | // Position radios and checkboxes better
251 | input[type="radio"],
252 | input[type="checkbox"] {
253 | margin: 0;
254 | line-height: normal;
255 | }
256 |
257 | // Reset width of input images, buttons, radios, checkboxes
258 | input[type="file"],
259 | input[type="image"],
260 | input[type="submit"],
261 | input[type="reset"],
262 | input[type="button"],
263 | input[type="radio"],
264 | input[type="checkbox"] {
265 | width: auto; // Override of generic input selector
266 | }
267 |
268 | // Set the height of file to match text inputs
269 | input[type="file"] {
270 | line-height: $input-height-base;
271 | }
272 |
273 | // Text input classes to hide text caret during scroll
274 | .previous-input-focus,
275 | .cloned-text-input + input,
276 | .cloned-text-input + textarea {
277 | position: absolute !important;
278 | left: -9999px;
279 | width: 200px;
280 | }
281 |
282 |
283 | // Placeholder
284 | // -------------------------------
285 | input,
286 | textarea {
287 | @include placeholder();
288 | }
289 |
290 |
291 | // DISABLED STATE
292 | // -------------------------------
293 |
294 | // Disabled and read-only inputs
295 | input[disabled],
296 | select[disabled],
297 | textarea[disabled],
298 | input[readonly]:not(.cloned-text-input),
299 | textarea[readonly]:not(.cloned-text-input),
300 | select[readonly] {
301 | background-color: $input-bg-disabled;
302 | cursor: not-allowed;
303 | }
304 | // Explicitly reset the colors here
305 | input[type="radio"][disabled],
306 | input[type="checkbox"][disabled],
307 | input[type="radio"][readonly],
308 | input[type="checkbox"][readonly] {
309 | background-color: transparent;
310 | }
311 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_grid.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * Grid
3 | * --------------------------------------------------
4 | * Using flexbox for the grid, inspired by Philip Walton:
5 | * http://philipwalton.github.io/solved-by-flexbox/demos/grids/
6 | * By default each .col within a .row will evenly take up
7 | * available width, and the height of each .col with take
8 | * up the height of the tallest .col in the same .row.
9 | */
10 |
11 | .row {
12 | @include display-flex();
13 | padding: ($grid-padding-width / 2);
14 | width: 100%;
15 | }
16 |
17 | .row-wrap {
18 | @include flex-wrap(wrap);
19 | }
20 |
21 | .row + .row {
22 | margin-top: ($grid-padding-width / 2) * -1;
23 | padding-top: 0;
24 | }
25 |
26 | .col {
27 | @include flex(1);
28 | display: block;
29 | padding: ($grid-padding-width / 2);
30 | width: 100%;
31 | }
32 |
33 |
34 | /* Vertically Align Columns */
35 | /* .row-* vertically aligns every .col in the .row */
36 | .row-top {
37 | @include align-items(flex-start);
38 | }
39 | .row-bottom {
40 | @include align-items(flex-end);
41 | }
42 | .row-center {
43 | @include align-items(center);
44 | }
45 | .row-stretch {
46 | @include align-items(stretch);
47 | }
48 | .row-baseline {
49 | @include align-items(baseline);
50 | }
51 |
52 | /* .col-* vertically aligns an individual .col */
53 | .col-top {
54 | @include align-self(flex-start);
55 | }
56 | .col-bottom {
57 | @include align-self(flex-end);
58 | }
59 | .col-center {
60 | @include align-self(center);
61 | }
62 |
63 | /* Column Offsets */
64 | .col-offset-10 {
65 | margin-left: 10%;
66 | }
67 | .col-offset-20 {
68 | margin-left: 20%;
69 | }
70 | .col-offset-25 {
71 | margin-left: 25%;
72 | }
73 | .col-offset-33, .col-offset-34 {
74 | margin-left: 33.3333%;
75 | }
76 | .col-offset-50 {
77 | margin-left: 50%;
78 | }
79 | .col-offset-66, .col-offset-67 {
80 | margin-left: 66.6666%;
81 | }
82 | .col-offset-75 {
83 | margin-left: 75%;
84 | }
85 | .col-offset-80 {
86 | margin-left: 80%;
87 | }
88 | .col-offset-90 {
89 | margin-left: 90%;
90 | }
91 |
92 |
93 | /* Explicit Column Percent Sizes */
94 | /* By default each grid column will evenly distribute */
95 | /* across the grid. However, you can specify individual */
96 | /* columns to take up a certain size of the available area */
97 | .col-10 {
98 | @include flex(0, 0, 10%);
99 | max-width: 10%;
100 | }
101 | .col-20 {
102 | @include flex(0, 0, 20%);
103 | max-width: 20%;
104 | }
105 | .col-25 {
106 | @include flex(0, 0, 25%);
107 | max-width: 25%;
108 | }
109 | .col-33, .col-34 {
110 | @include flex(0, 0, 33.3333%);
111 | max-width: 33.3333%;
112 | }
113 | .col-50 {
114 | @include flex(0, 0, 50%);
115 | max-width: 50%;
116 | }
117 | .col-66, .col-67 {
118 | @include flex(0, 0, 66.6666%);
119 | max-width: 66.6666%;
120 | }
121 | .col-75 {
122 | @include flex(0, 0, 75%);
123 | max-width: 75%;
124 | }
125 | .col-80 {
126 | @include flex(0, 0, 80%);
127 | max-width: 80%;
128 | }
129 | .col-90 {
130 | @include flex(0, 0, 90%);
131 | max-width: 90%;
132 | }
133 |
134 |
135 | /* Responsive Grid Classes */
136 | /* Adding a class of responsive-X to a row */
137 | /* will trigger the flex-direction to */
138 | /* change to column and add some margin */
139 | /* to any columns in the row for clearity */
140 |
141 | @include responsive-grid-break('.responsive-sm', $grid-responsive-sm-break);
142 | @include responsive-grid-break('.responsive-md', $grid-responsive-md-break);
143 | @include responsive-grid-break('.responsive-lg', $grid-responsive-lg-break);
144 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_list.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Lists
4 | * --------------------------------------------------
5 | */
6 |
7 | .list {
8 | position: relative;
9 | padding-top: $item-border-width;
10 | padding-bottom: $item-border-width;
11 | padding-left: 0; // reset padding because ul and ol
12 | margin-bottom: 20px;
13 | }
14 | .list:last-child {
15 | margin-bottom: 0px;
16 | &.card{
17 | margin-bottom:40px;
18 | }
19 | }
20 |
21 |
22 | /**
23 | * List Header
24 | * --------------------------------------------------
25 | */
26 |
27 | .list-header {
28 | margin-top: $list-header-margin-top;
29 | padding: $list-header-padding;
30 | background-color: $list-header-bg;
31 | color: $list-header-color;
32 | font-weight: bold;
33 | }
34 |
35 | // when its a card make sure it doesn't duplicate top and bottom borders
36 | .card.list .list-item {
37 | padding-right: 1px;
38 | padding-left: 1px;
39 | }
40 |
41 |
42 | /**
43 | * Cards and Inset Lists
44 | * --------------------------------------------------
45 | * A card and list-inset are close to the same thing, except a card as a box shadow.
46 | */
47 |
48 | .card,
49 | .list-inset {
50 | overflow: hidden;
51 | margin: ($content-padding * 2) $content-padding;
52 | border-radius: $card-border-radius;
53 | background-color: $card-body-bg;
54 | }
55 |
56 | .card {
57 | padding-top: $item-border-width;
58 | padding-bottom: $item-border-width;
59 | box-shadow: 0 1px 4px rgba(0, 0, 0, .25);
60 | }
61 |
62 | .padding {
63 | .card, .list-inset {
64 | margin-left: 0;
65 | margin-right: 0;
66 | }
67 | }
68 |
69 | .card .item,
70 | .list-inset .item,
71 | .padding > .list .item
72 | {
73 | &:first-child {
74 | border-top-left-radius: $card-border-radius;
75 | border-top-right-radius: $card-border-radius;
76 |
77 | .item-content {
78 | border-top-left-radius: $card-border-radius;
79 | border-top-right-radius: $card-border-radius;
80 | }
81 | }
82 | &:last-child {
83 | border-bottom-right-radius: $card-border-radius;
84 | border-bottom-left-radius: $card-border-radius;
85 |
86 | .item-content {
87 | border-bottom-right-radius: $card-border-radius;
88 | border-bottom-left-radius: $card-border-radius;
89 | }
90 | }
91 | }
92 |
93 | .card .item:last-child,
94 | .list-inset .item:last-child {
95 | margin-bottom: $item-border-width * -1;
96 | }
97 |
98 | .card .item,
99 | .list-inset .item,
100 | .padding > .list .item,
101 | .padding-horizontal > .list .item {
102 | margin-right: 0;
103 | margin-left: 0;
104 |
105 | &.item-input input {
106 | padding-right: 44px;
107 | }
108 | }
109 | .padding-left > .list .item {
110 | margin-left: 0;
111 | }
112 | .padding-right > .list .item {
113 | margin-right: 0;
114 | }
115 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_loading.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Loading
4 | * --------------------------------------------------
5 | */
6 |
7 | .loading-container {
8 | position: absolute;
9 | left: 0;
10 | top: 0;
11 | right: 0;
12 | bottom: 0;
13 |
14 | z-index: $z-index-loading;
15 |
16 | @include display-flex();
17 | @include justify-content(center);
18 | @include align-items(center);
19 |
20 | @include transition(0.2s opacity linear);
21 | visibility: hidden;
22 | opacity: 0;
23 |
24 | &.visible {
25 | visibility: visible;
26 | }
27 | &.active {
28 | opacity: 1;
29 | }
30 |
31 | .loading {
32 | padding: $loading-padding;
33 |
34 | border-radius: $loading-border-radius;
35 | background-color: $loading-bg-color;
36 |
37 | color: $loading-text-color;
38 |
39 | text-align: center;
40 | text-overflow: ellipsis;
41 | font-size: $loading-font-size;
42 |
43 | h1, h2, h3, h4, h5, h6 {
44 | color: $loading-text-color;
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_menu.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Menus
4 | * --------------------------------------------------
5 | * Side panel structure
6 | */
7 |
8 | .menu {
9 | position: absolute;
10 | top: 0;
11 | bottom: 0;
12 | z-index: $z-index-menu;
13 | overflow: hidden;
14 |
15 | min-height: 100%;
16 | max-height: 100%;
17 | width: $menu-width;
18 |
19 | background-color: $menu-bg;
20 |
21 | .scroll-content {
22 | z-index: $z-index-menu-scroll-content;
23 | }
24 |
25 | .bar-header {
26 | z-index: $z-index-menu-bar-header;
27 | }
28 | }
29 |
30 | .menu-content {
31 | @include transform(none);
32 | box-shadow: $menu-side-shadow;
33 | }
34 |
35 | .menu-open .menu-content .pane,
36 | .menu-open .menu-content .scroll-content {
37 | pointer-events: none;
38 | }
39 |
40 | .grade-b .menu-content,
41 | .grade-c .menu-content {
42 | @include box-sizing(content-box);
43 | right: -1px;
44 | left: -1px;
45 | border-right: 1px solid #ccc;
46 | border-left: 1px solid #ccc;
47 | box-shadow: none;
48 | }
49 |
50 | .menu-left {
51 | left: 0;
52 | }
53 |
54 | .menu-right {
55 | right: 0;
56 | }
57 |
58 | .aside-open.aside-resizing .menu-right {
59 | display: none;
60 | }
61 |
62 | .menu-animated {
63 | @include transition-transform($menu-animation-speed ease);
64 | }
65 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_modal.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Modals
4 | * --------------------------------------------------
5 | * Modals are independent windows that slide in from off-screen.
6 | */
7 |
8 | .modal-backdrop {
9 | @include transition(background-color 300ms ease-in-out);
10 | position: fixed;
11 | top: 0;
12 | left: 0;
13 | z-index: $z-index-modal;
14 | width: 100%;
15 | height: 100%;
16 | background-color: $modal-backdrop-bg-inactive;
17 |
18 | &.active {
19 | background-color: $modal-backdrop-bg-active;
20 | }
21 | }
22 |
23 | .modal {
24 | display: block;
25 | position: absolute;
26 | top: 0;
27 | z-index: $z-index-modal;
28 | overflow: hidden;
29 | min-height: 100%;
30 | width: 100%;
31 | background-color: $modal-bg-color;
32 | }
33 |
34 | @media (min-width: $modal-inset-mode-break-point) {
35 | // inset mode is when the modal doesn't fill the entire
36 | // display but instead is centered within a large display
37 | .modal {
38 | top: $modal-inset-mode-top;
39 | right: $modal-inset-mode-right;
40 | bottom: $modal-inset-mode-bottom;
41 | left: $modal-inset-mode-left;
42 | overflow: visible;
43 | min-height: $modal-inset-mode-min-height;
44 | width: (100% - $modal-inset-mode-left - $modal-inset-mode-right);
45 | }
46 |
47 | .modal.ng-leave-active {
48 | bottom: 0;
49 | }
50 |
51 | // remove ios header padding from inset header
52 | .platform-ios.platform-cordova .modal-wrapper .modal{
53 | .bar-header:not(.bar-subheader) {
54 | height: $bar-height;
55 | > * {
56 | margin-top: 0;
57 | }
58 | }
59 | .tabs-top > .tabs,
60 | .tabs.tabs-top {
61 | top: $bar-height;
62 | }
63 | .has-header,
64 | .bar-subheader {
65 | top: $bar-height;
66 | }
67 | .has-subheader {
68 | top: (2 * $bar-height);
69 | }
70 | .has-tabs-top {
71 | top: $bar-height + $tabs-height;
72 | }
73 | .has-header.has-subheader.has-tabs-top {
74 | top: 2 * $bar-height + $tabs-height;
75 | }
76 | }
77 | }
78 |
79 | // disable clicks on all but the modal
80 | .modal-open {
81 | pointer-events: none;
82 |
83 | .modal,
84 | .modal-backdrop {
85 | pointer-events: auto;
86 | }
87 | // prevent clicks on modal when loading overlay is active though
88 | &.loading-active {
89 | .modal,
90 | .modal-backdrop {
91 | pointer-events: none;
92 | }
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_platform.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Platform
4 | * --------------------------------------------------
5 | * Platform specific tweaks
6 | */
7 |
8 |
9 | /**
10 | * Apply roboto font
11 | */
12 |
13 | .roboto {
14 | font-family: "Roboto", $font-family-base;
15 |
16 | input {
17 | font-family: "Roboto", $font-family-base;
18 | }
19 | }
20 | /*
21 | .platform-android {
22 |
23 |
24 | .bar {
25 | padding: 0;
26 |
27 | line-height: 40px;
28 |
29 | .button {
30 | line-height: 40px;
31 | }
32 |
33 | .button-icon:before {
34 | font-size: 24px;
35 | }
36 | }
37 |
38 | .back-button {
39 | &.button-icon:before {
40 | line-height: 40px;
41 | }
42 | margin-left: -3px;
43 | padding: 0px 2px !important;
44 | &.ion-android-arrow-back:before {
45 | font-size: 12px;
46 | }
47 |
48 | &.back-button.active,
49 | &.back-button.activated {
50 | background-color: rgba(0,0,0,0.1);
51 | }
52 | }
53 |
54 | .item-divider {
55 | background: none;
56 | border-top-width: 0;
57 | border-bottom-width: 2px;
58 | text-transform: uppercase;
59 | margin-top: 10px;
60 | font-size: 14px;
61 | }
62 | .item {
63 | border-left-width: 0;
64 | border-right-width: 0;
65 | }
66 |
67 | .item-divider ~ .item:not(.item-divider) {
68 | border-bottom-width: 0;
69 | }
70 |
71 | .back-button:not(.ng-hide) + .left-buttons + .title {
72 | // Don't allow normal titles in this mode
73 | display: none;
74 | }
75 |
76 | .bar .title {
77 | text-align: left;
78 | font-weight: normal;
79 | }
80 |
81 | font-family: 'Roboto';
82 |
83 | h1, h2, h3, h4, h5 {
84 | font-family: 'Roboto', $font-family-base;
85 | }
86 |
87 | .tab-item {
88 | font-family: 'Roboto', $font-family-base;
89 | }
90 |
91 |
92 | input, button, select, textarea {
93 | font-family: 'Roboto', $font-family-base;
94 | }
95 | */
96 | //}
97 |
98 | .platform-ios.platform-cordova {
99 | // iOS7/8 has a status bar which sits on top of the header.
100 | // Bump down everything to make room for it. However, if
101 | // if its in Cordova, and set to fullscreen, then disregard the bump.
102 | &:not(.fullscreen) {
103 | .bar-header:not(.bar-subheader) {
104 | height: $bar-height + $ios-statusbar-height;
105 |
106 | &.item-input-inset .item-input-wrapper {
107 | margin-top: 19px !important;
108 | }
109 |
110 | > * {
111 | margin-top: $ios-statusbar-height;
112 | }
113 | }
114 | .tabs-top > .tabs,
115 | .tabs.tabs-top {
116 | top: $bar-height + $ios-statusbar-height;
117 | }
118 |
119 | .has-header,
120 | .bar-subheader {
121 | top: $bar-height + $ios-statusbar-height;
122 | }
123 | .has-subheader {
124 | top: (2 * $bar-height) + $ios-statusbar-height;
125 | }
126 | .has-tabs-top {
127 | top: $bar-height + $tabs-height + $ios-statusbar-height;
128 | }
129 | .has-header.has-subheader.has-tabs-top {
130 | top: 2 * $bar-height + $tabs-height + $ios-statusbar-height;
131 | }
132 | }
133 | &.status-bar-hide {
134 | // Cordova doesn't adjust the body height correctly, this makes up for it
135 | margin-bottom: 20px;
136 | }
137 | }
138 |
139 | @media (orientation:landscape) {
140 | .platform-ios.platform-browser.platform-ipad {
141 | position: fixed; // required for iPad 7 Safari
142 | }
143 | }
144 |
145 | .platform-c:not(.enable-transitions) * {
146 | // disable transitions on grade-c devices (Android 2)
147 | -webkit-transition: none !important;
148 | transition: none !important;
149 | }
150 |
151 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_popover.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Popovers
4 | * --------------------------------------------------
5 | * Popovers are independent views which float over content
6 | */
7 |
8 | .popover-backdrop {
9 | position: fixed;
10 | top: 0;
11 | left: 0;
12 | z-index: $z-index-popover;
13 | width: 100%;
14 | height: 100%;
15 | background-color: $popover-backdrop-bg-inactive;
16 |
17 | &.active {
18 | background-color: $popover-backdrop-bg-active;
19 | }
20 | }
21 |
22 | .popover {
23 | position: absolute;
24 | top: 25%;
25 | left: 50%;
26 | z-index: $z-index-popover;
27 | display: block;
28 | margin-left: -$popover-width / 2;
29 | height: $popover-height;
30 | width: $popover-width;
31 | background-color: $popover-bg-color;
32 | box-shadow: $popover-box-shadow;
33 | opacity: 0;
34 |
35 | .item:first-child {
36 | border-top: 0;
37 | }
38 |
39 | .item:last-child {
40 | border-bottom: 0;
41 | }
42 |
43 | &.popover-top {
44 | margin-top: 12px;
45 | }
46 | &.popover-bottom {
47 | margin-top: -12px;
48 | }
49 | }
50 |
51 |
52 | // Set popover border-radius
53 | .popover,
54 | .popover .bar-header {
55 | border-radius: $popover-border-radius;
56 | }
57 | .popover .scroll-content {
58 | z-index: 1;
59 | margin: 2px 0;
60 | }
61 | .popover .bar-header {
62 | border-bottom-right-radius: 0;
63 | border-bottom-left-radius: 0;
64 | }
65 | .popover .has-header {
66 | border-top-right-radius: 0;
67 | border-top-left-radius: 0;
68 | }
69 | .popover-arrow {
70 | display: none;
71 | }
72 |
73 |
74 | // iOS Popover
75 | .platform-ios {
76 |
77 | .popover {
78 | box-shadow: $popover-box-shadow-ios;
79 | }
80 |
81 | .popover,
82 | .popover .bar-header {
83 | border-radius: $popover-border-radius-ios;
84 | }
85 | .popover .scroll-content {
86 | margin: 8px 0;
87 | border-radius: $popover-border-radius-ios;
88 | }
89 | .popover .scroll-content.has-header {
90 | margin-top: 0;
91 | }
92 | .popover-arrow {
93 | position: absolute;
94 | display: block;
95 | width: 30px;
96 | height: 19px;
97 | overflow: hidden;
98 |
99 | &:after {
100 | position: absolute;
101 | top: 12px;
102 | left: 5px;
103 | width: 20px;
104 | height: 20px;
105 | background-color: $popover-bg-color;
106 | border-radius: 3px;
107 | content: '';
108 | @include rotate(-45deg);
109 | }
110 | }
111 | .popover-top .popover-arrow {
112 | top: -17px;
113 | }
114 | .popover-bottom .popover-arrow {
115 | bottom: -10px;
116 | &:after {
117 | top: -6px;
118 | }
119 | }
120 | }
121 |
122 |
123 | // Android Popover
124 | .platform-android {
125 |
126 | .popover {
127 | background-color: $popover-bg-color-android;
128 | box-shadow: $popover-box-shadow-android;
129 |
130 | .item {
131 | border-color: $popover-bg-color-android;
132 | background-color: $popover-bg-color-android;
133 | color: #4d4d4d;
134 | }
135 | &.popover-top {
136 | margin-top: -32px;
137 | }
138 | &.popover-bottom {
139 | margin-top: 32px;
140 | }
141 | }
142 |
143 | .popover-backdrop,
144 | .popover-backdrop.active {
145 | background-color: transparent;
146 | }
147 | }
148 |
149 |
150 | // disable clicks on all but the popover
151 | .popover-open {
152 | pointer-events: none;
153 |
154 | .popover,
155 | .popover-backdrop {
156 | pointer-events: auto;
157 | }
158 | // prevent clicks on popover when loading overlay is active though
159 | &.loading-active {
160 | .popover,
161 | .popover-backdrop {
162 | pointer-events: none;
163 | }
164 | }
165 | }
166 |
167 |
168 | // wider popover on larger viewports
169 | @media (min-width: $popover-large-break-point) {
170 | .popover {
171 | width: $popover-large-width;
172 | }
173 | }
174 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_popup.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Popups
4 | * --------------------------------------------------
5 | */
6 |
7 | .popup-container {
8 | position: absolute;
9 | top: 0;
10 | left: 0;
11 | bottom: 0;
12 | right: 0;
13 | background: rgba(0,0,0,0);
14 |
15 | @include display-flex();
16 | @include justify-content(center);
17 | @include align-items(center);
18 |
19 | z-index: $z-index-popup;
20 |
21 | // Start hidden
22 | visibility: hidden;
23 | &.popup-showing {
24 | visibility: visible;
25 | }
26 |
27 | &.popup-hidden .popup {
28 | @include animation-name(scaleOut);
29 | @include animation-duration($popup-leave-animation-duration);
30 | @include animation-timing-function(ease-in-out);
31 | @include animation-fill-mode(both);
32 | }
33 |
34 | &.active .popup {
35 | @include animation-name(superScaleIn);
36 | @include animation-duration($popup-enter-animation-duration);
37 | @include animation-timing-function(ease-in-out);
38 | @include animation-fill-mode(both);
39 | }
40 |
41 | .popup {
42 | width: $popup-width;
43 | max-width: 100%;
44 | max-height: 90%;
45 |
46 | border-radius: $popup-border-radius;
47 | background-color: $popup-background-color;
48 |
49 | @include display-flex();
50 | @include flex-direction(column);
51 | }
52 | }
53 |
54 | .popup-head {
55 | padding: 15px 0px;
56 | border-bottom: 1px solid #eee;
57 | text-align: center;
58 | }
59 | .popup-title {
60 | margin: 0;
61 | padding: 0;
62 | font-size: 15px;
63 | }
64 | .popup-sub-title {
65 | margin: 5px 0 0 0;
66 | padding: 0;
67 | font-weight: normal;
68 | font-size: 11px;
69 | }
70 | .popup-body {
71 | padding: 10px;
72 | overflow: scroll;
73 | }
74 |
75 | .popup-buttons {
76 | @include display-flex();
77 | @include flex-direction(row);
78 | padding: 10px;
79 | min-height: $popup-button-min-height + 20;
80 |
81 | .button {
82 | @include flex(1);
83 | min-height: $popup-button-min-height;
84 | border-radius: $popup-button-border-radius;
85 | line-height: $popup-button-line-height;
86 |
87 | margin-right: 5px;
88 | &:last-child {
89 | margin-right: 0px;
90 | }
91 | }
92 | }
93 |
94 | .popup-open {
95 | pointer-events: none;
96 |
97 | &.modal-open .modal {
98 | pointer-events: none;
99 | }
100 |
101 | .popup-backdrop, .popup {
102 | pointer-events: auto;
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_progress.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Progress
4 | * --------------------------------------------------
5 | */
6 |
7 | progress {
8 | display: block;
9 | margin: $progress-margin;
10 | width: $progress-width;
11 | }
12 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_radio.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Radio Button Inputs
4 | * --------------------------------------------------
5 | */
6 |
7 | .item-radio {
8 | padding: 0;
9 |
10 | &:hover {
11 | cursor: pointer;
12 | }
13 | }
14 |
15 | .item-radio .item-content {
16 | /* give some room to the right for the checkmark icon */
17 | padding-right: $item-padding * 4;
18 | }
19 |
20 | .item-radio .radio-icon {
21 | /* checkmark icon will be hidden by default */
22 | position: absolute;
23 | top: 0;
24 | right: 0;
25 | z-index: $z-index-item-radio;
26 | visibility: hidden;
27 | padding: $item-padding - 2;
28 | height: 100%;
29 | font-size: 24px;
30 | }
31 |
32 | .item-radio input {
33 | /* hide any radio button inputs elements (the ugly circles) */
34 | position: absolute;
35 | left: -9999px;
36 |
37 | &:checked ~ .item-content {
38 | /* style the item content when its checked */
39 | background: #f7f7f7;
40 | }
41 |
42 | &:checked ~ .radio-icon {
43 | /* show the checkmark icon when its checked */
44 | visibility: visible;
45 | }
46 | }
47 |
48 | // Hack for Android to correctly display the checked item
49 | // http://timpietrusky.com/advanced-checkbox-hack
50 | .platform-android.grade-b .item-radio,
51 | .platform-android.grade-c .item-radio {
52 | -webkit-animation: androidCheckedbugfix infinite 1s;
53 | }
54 | @-webkit-keyframes androidCheckedbugfix {
55 | from { padding: 0; }
56 | to { padding: 0; }
57 | }
58 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_range.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Range
4 | * --------------------------------------------------
5 | */
6 |
7 | input[type="range"] {
8 | display: inline-block;
9 | overflow: hidden;
10 | margin-top: 5px;
11 | margin-bottom: 5px;
12 | padding-right: 2px;
13 | padding-left: 1px;
14 | width: auto;
15 | height: $range-slider-height + 15;
16 | outline: none;
17 | background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, $range-default-track-bg), color-stop(100%, $range-default-track-bg));
18 | background: linear-gradient(to right, $range-default-track-bg 0%, $range-default-track-bg 100%);
19 | background-position: center;
20 | background-size: 99% $range-track-height;
21 | background-repeat: no-repeat;
22 | -webkit-appearance: none;
23 |
24 | &::-webkit-slider-thumb {
25 | position: relative;
26 | width: $range-slider-width;
27 | height: $range-slider-height;
28 | border-radius: $range-slider-border-radius;
29 | background-color: $toggle-handle-off-bg-color;
30 | box-shadow: 0 0 2px rgba(0,0,0,.5), 1px 3px 5px rgba(0,0,0,0.25);
31 | cursor: pointer;
32 | -webkit-appearance: none;
33 | }
34 |
35 | &::-webkit-slider-thumb:before {
36 | /* what creates the colorful line on the left side of the slider */
37 | position: absolute;
38 | top: ($range-slider-height / 2) - ($range-track-height / 2);
39 | left: -2001px;
40 | width: 2000px;
41 | height: $range-track-height;
42 | background: $dark;
43 | content: ' ';
44 | }
45 |
46 | &::-webkit-slider-thumb:after {
47 | /* create a larger (but hidden) hit area */
48 | position: absolute;
49 | top: -20px;
50 | left: -20px;
51 | padding: 30px;
52 | content: ' ';
53 | //background: red;
54 | //opacity: .5;
55 | }
56 |
57 | }
58 |
59 | .range {
60 | @include display-flex();
61 | @include align-items(center);
62 | padding: 2px 11px;
63 |
64 | &.range-light {
65 | input { @include range-style($range-light-track-bg); }
66 | }
67 | &.range-stable {
68 | input { @include range-style($range-stable-track-bg); }
69 | }
70 | &.range-positive {
71 | input { @include range-style($range-positive-track-bg); }
72 | }
73 | &.range-calm {
74 | input { @include range-style($range-calm-track-bg); }
75 | }
76 | &.range-balanced {
77 | input { @include range-style($range-balanced-track-bg); }
78 | }
79 | &.range-assertive {
80 | input { @include range-style($range-assertive-track-bg); }
81 | }
82 | &.range-energized {
83 | input { @include range-style($range-energized-track-bg); }
84 | }
85 | &.range-royal {
86 | input { @include range-style($range-royal-track-bg); }
87 | }
88 | &.range-dark {
89 | input { @include range-style($range-dark-track-bg); }
90 | }
91 | }
92 |
93 | .range .icon {
94 | @include flex(0);
95 | display: block;
96 | min-width: $range-icon-size;
97 | text-align: center;
98 | font-size: $range-icon-size;
99 | }
100 |
101 | .range input {
102 | @include flex(1);
103 | display: block;
104 | margin-right: 10px;
105 | margin-left: 10px;
106 | }
107 |
108 | .range-label {
109 | @include flex(0, 0, auto);
110 | display: block;
111 | white-space: nowrap;
112 | }
113 |
114 | .range-label:first-child {
115 | padding-left: 5px;
116 | }
117 | .range input + .range-label {
118 | padding-right: 5px;
119 | padding-left: 0;
120 | }
121 |
122 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_select.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Select
4 | * --------------------------------------------------
5 | */
6 |
7 | .item-select {
8 | position: relative;
9 |
10 | select {
11 | @include appearance(none);
12 | position: absolute;
13 | top: 0;
14 | right: 0;
15 | padding: ($item-padding - 2) ($item-padding * 3) ($item-padding) $item-padding;
16 | max-width: 65%;
17 |
18 | border: none;
19 | background: $item-default-bg;
20 | color: #333;
21 |
22 | // hack to hide default dropdown arrow in FF
23 | text-indent: .01px;
24 | text-overflow: '';
25 |
26 | white-space: nowrap;
27 | font-size: $font-size-base;
28 |
29 | cursor: pointer;
30 | direction: rtl; // right align the select text
31 | }
32 |
33 | select::-ms-expand {
34 | // hide default dropdown arrow in IE
35 | display: none;
36 | }
37 |
38 | option {
39 | direction: ltr;
40 | }
41 |
42 | &:after {
43 | position: absolute;
44 | top: 50%;
45 | right: $item-padding;
46 | margin-top: -3px;
47 | width: 0;
48 | height: 0;
49 | border-top: 5px solid;
50 | border-right: 5px solid rgba(0, 0, 0, 0);
51 | border-left: 5px solid rgba(0, 0, 0, 0);
52 | color: #999;
53 | content: "";
54 | pointer-events: none;
55 | }
56 | &.item-light {
57 | select{
58 | background:$item-light-bg;
59 | color:$item-light-text;
60 | }
61 | }
62 | &.item-stable {
63 | select{
64 | background:$item-stable-bg;
65 | color:$item-stable-text;
66 | }
67 | &:after, .input-label{
68 | color:darken($item-stable-border,30%);
69 | }
70 | }
71 | &.item-positive {
72 | select{
73 | background:$item-positive-bg;
74 | color:$item-positive-text;
75 | }
76 | &:after, .input-label{
77 | color:$item-positive-text;
78 | }
79 | }
80 | &.item-calm {
81 | select{
82 | background:$item-calm-bg;
83 | color:$item-calm-text;
84 | }
85 | &:after, .input-label{
86 | color:$item-calm-text;
87 | }
88 | }
89 | &.item-assertive {
90 | select{
91 | background:$item-assertive-bg;
92 | color:$item-assertive-text;
93 | }
94 | &:after, .input-label{
95 | color:$item-assertive-text;
96 | }
97 | }
98 | &.item-balanced {
99 | select{
100 | background:$item-balanced-bg;
101 | color:$item-balanced-text;
102 | }
103 | &:after, .input-label{
104 | color:$item-balanced-text;
105 | }
106 | }
107 | &.item-energized {
108 | select{
109 | background:$item-energized-bg;
110 | color:$item-energized-text;
111 | }
112 | &:after, .input-label{
113 | color:$item-energized-text;
114 | }
115 | }
116 | &.item-royal {
117 | select{
118 | background:$item-royal-bg;
119 | color:$item-royal-text;
120 | }
121 | &:after, .input-label{
122 | color:$item-royal-text;
123 | }
124 | }
125 | &.item-dark {
126 | select{
127 | background:$item-dark-bg;
128 | color:$item-dark-text;
129 | }
130 | &:after, .input-label{
131 | color:$item-dark-text;
132 | }
133 | }
134 | }
135 |
136 | select {
137 | &[multiple],
138 | &[size] {
139 | height: auto;
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_slide-box.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Slide Box
4 | * --------------------------------------------------
5 | */
6 |
7 | .slider {
8 | position: relative;
9 | visibility: hidden;
10 | // Make sure items don't scroll over ever
11 | overflow: hidden;
12 | }
13 |
14 | .slider-slides {
15 | position: relative;
16 | height: 100%;
17 | }
18 |
19 | .slider-slide {
20 | position: relative;
21 | display: block;
22 | float: left;
23 | width: 100%;
24 | height: 100%;
25 | vertical-align: top;
26 | }
27 |
28 | .slider-slide-image {
29 | > img {
30 | width: 100%;
31 | }
32 | }
33 |
34 | .slider-pager {
35 | position: absolute;
36 | bottom: 20px;
37 | z-index: $z-index-slider-pager;
38 | width: 100%;
39 | height: 15px;
40 | text-align: center;
41 |
42 | .slider-pager-page {
43 | display: inline-block;
44 | margin: 0px 3px;
45 | width: 15px;
46 | color: #000;
47 | text-decoration: none;
48 |
49 | opacity: 0.3;
50 |
51 | &.active {
52 | @include transition(opacity 0.4s ease-in);
53 | opacity: 1;
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_split-pane.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Split Pane
4 | * --------------------------------------------------
5 | */
6 |
7 | .split-pane {
8 | @include display-flex();
9 | @include align-items(stretch);
10 | width: 100%;
11 | height: 100%;
12 | }
13 |
14 | .split-pane-menu {
15 | @include flex(0, 0, $split-pane-menu-width);
16 |
17 | overflow-y: auto;
18 | width: $split-pane-menu-width;
19 | height: 100%;
20 | border-right: 1px solid $split-pane-menu-border-color;
21 |
22 | @media all and (max-width: 568px) {
23 | border-right: none;
24 | }
25 | }
26 |
27 | .split-pane-content {
28 | @include flex(1, 0, auto);
29 | }
30 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_toggle.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Toggle
4 | * --------------------------------------------------
5 | */
6 |
7 | .item-toggle {
8 | pointer-events: none;
9 | }
10 |
11 | .toggle {
12 | // set the color defaults
13 | @include toggle-style($toggle-on-default-border, $toggle-on-default-bg);
14 |
15 | position: relative;
16 | display: inline-block;
17 | pointer-events: auto;
18 | margin: -$toggle-hit-area-expansion;
19 | padding: $toggle-hit-area-expansion;
20 |
21 | &.dragging {
22 | .handle {
23 | background-color: $toggle-handle-dragging-bg-color !important;
24 | }
25 | }
26 |
27 | &.toggle-light {
28 | @include toggle-style($toggle-on-light-border, $toggle-on-light-bg);
29 | }
30 | &.toggle-stable {
31 | @include toggle-style($toggle-on-stable-border, $toggle-on-stable-bg);
32 | }
33 | &.toggle-positive {
34 | @include toggle-style($toggle-on-positive-border, $toggle-on-positive-bg);
35 | }
36 | &.toggle-calm {
37 | @include toggle-style($toggle-on-calm-border, $toggle-on-calm-bg);
38 | }
39 | &.toggle-assertive {
40 | @include toggle-style($toggle-on-assertive-border, $toggle-on-assertive-bg);
41 | }
42 | &.toggle-balanced {
43 | @include toggle-style($toggle-on-balanced-border, $toggle-on-balanced-bg);
44 | }
45 | &.toggle-energized {
46 | @include toggle-style($toggle-on-energized-border, $toggle-on-energized-bg);
47 | }
48 | &.toggle-royal {
49 | @include toggle-style($toggle-on-royal-border, $toggle-on-royal-bg);
50 | }
51 | &.toggle-dark {
52 | @include toggle-style($toggle-on-dark-border, $toggle-on-dark-bg);
53 | }
54 | }
55 |
56 | .toggle input {
57 | // hide the actual input checkbox
58 | display: none;
59 | }
60 |
61 | /* the track appearance when the toggle is "off" */
62 | .toggle .track {
63 | @include transition-timing-function(ease-in-out);
64 | @include transition-duration($toggle-transition-duration);
65 | @include transition-property((background-color, border));
66 |
67 | display: inline-block;
68 | box-sizing: border-box;
69 | width: $toggle-width;
70 | height: $toggle-height;
71 | border: solid $toggle-border-width $toggle-off-border-color;
72 | border-radius: $toggle-border-radius;
73 | background-color: $toggle-off-bg-color;
74 | content: ' ';
75 | cursor: pointer;
76 | pointer-events: none;
77 | }
78 |
79 | /* Fix to avoid background color bleeding */
80 | /* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */
81 | .platform-android4_2 .toggle .track {
82 | -webkit-background-clip: padding-box;
83 | }
84 |
85 | /* the handle (circle) thats inside the toggle's track area */
86 | /* also the handle's appearance when it is "off" */
87 | .toggle .handle {
88 | @include transition($toggle-transition-duration ease-in-out);
89 | position: absolute;
90 | display: block;
91 | width: $toggle-handle-width;
92 | height: $toggle-handle-height;
93 | border-radius: $toggle-handle-radius;
94 | background-color: $toggle-handle-off-bg-color;
95 | top: $toggle-border-width + $toggle-hit-area-expansion;
96 | left: $toggle-border-width + $toggle-hit-area-expansion;
97 |
98 | &:before {
99 | // used to create a larger (but hidden) hit area to slide the handle
100 | position: absolute;
101 | top: -4px;
102 | left: ( ($toggle-handle-width / 2) * -1) - 8;
103 | padding: ($toggle-handle-height / 2) + 5 ($toggle-handle-width + 7);
104 | content: " ";
105 | }
106 | }
107 |
108 | .toggle input:checked + .track .handle {
109 | // the handle when the toggle is "on"
110 | @include translate3d($toggle-width - $toggle-handle-width - ($toggle-border-width * 2), 0, 0);
111 | background-color: $toggle-handle-on-bg-color;
112 | }
113 |
114 | .item-toggle.active {
115 | box-shadow: none;
116 | }
117 |
118 | .item-toggle,
119 | .item-toggle.item-complex .item-content {
120 | // make sure list item content have enough padding on right to fit the toggle
121 | padding-right: ($item-padding * 3) + $toggle-width;
122 | }
123 |
124 | .item-toggle.item-complex {
125 | padding-right: 0;
126 | }
127 |
128 | .item-toggle .toggle {
129 | // position the toggle to the right within a list item
130 | position: absolute;
131 | top: $item-padding / 2;
132 | right: $item-padding;
133 | z-index: $z-index-item-toggle;
134 | }
135 |
136 | .toggle input:disabled + .track {
137 | opacity: .6;
138 | }
139 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_type.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Typography
4 | * --------------------------------------------------
5 | */
6 |
7 |
8 | // Body text
9 | // -------------------------
10 |
11 | p {
12 | margin: 0 0 ($line-height-computed / 2);
13 | }
14 |
15 |
16 | // Emphasis & misc
17 | // -------------------------
18 |
19 | small { font-size: 85%; }
20 | cite { font-style: normal; }
21 |
22 |
23 | // Alignment
24 | // -------------------------
25 |
26 | .text-left { text-align: left; }
27 | .text-right { text-align: right; }
28 | .text-center { text-align: center; }
29 |
30 |
31 | // Headings
32 | // -------------------------
33 |
34 | h1, h2, h3, h4, h5, h6,
35 | .h1, .h2, .h3, .h4, .h5, .h6 {
36 | color: $base-color;
37 | font-weight: $headings-font-weight;
38 | font-family: $headings-font-family;
39 | line-height: $headings-line-height;
40 |
41 | small {
42 | font-weight: normal;
43 | line-height: 1;
44 | }
45 | }
46 |
47 | h1, .h1,
48 | h2, .h2,
49 | h3, .h3 {
50 | margin-top: $line-height-computed;
51 | margin-bottom: ($line-height-computed / 2);
52 |
53 | &:first-child {
54 | margin-top: 0;
55 | }
56 |
57 | + h1, + .h1,
58 | + h2, + .h2,
59 | + h3, + .h3 {
60 | margin-top: ($line-height-computed / 2);
61 | }
62 | }
63 |
64 | h4, .h4,
65 | h5, .h5,
66 | h6, .h6 {
67 | margin-top: ($line-height-computed / 2);
68 | margin-bottom: ($line-height-computed / 2);
69 | }
70 |
71 | h1, .h1 { font-size: floor($font-size-base * 2.60); } // ~36px
72 | h2, .h2 { font-size: floor($font-size-base * 2.15); } // ~30px
73 | h3, .h3 { font-size: ceil($font-size-base * 1.70); } // ~24px
74 | h4, .h4 { font-size: ceil($font-size-base * 1.25); } // ~18px
75 | h5, .h5 { font-size: $font-size-base; }
76 | h6, .h6 { font-size: ceil($font-size-base * 0.85); } // ~12px
77 |
78 | h1 small, .h1 small { font-size: ceil($font-size-base * 1.70); } // ~24px
79 | h2 small, .h2 small { font-size: ceil($font-size-base * 1.25); } // ~18px
80 | h3 small, .h3 small,
81 | h4 small, .h4 small { font-size: $font-size-base; }
82 |
83 |
84 | // Description Lists
85 | // -------------------------
86 |
87 | dl {
88 | margin-bottom: $line-height-computed;
89 | }
90 | dt,
91 | dd {
92 | line-height: $line-height-base;
93 | }
94 | dt {
95 | font-weight: bold;
96 | }
97 |
98 |
99 | // Blockquotes
100 | // -------------------------
101 |
102 | blockquote {
103 | margin: 0 0 $line-height-computed;
104 | padding: ($line-height-computed / 2) $line-height-computed;
105 | border-left: 5px solid gray;
106 |
107 | p {
108 | font-weight: 300;
109 | font-size: ($font-size-base * 1.25);
110 | line-height: 1.25;
111 | }
112 |
113 | p:last-child {
114 | margin-bottom: 0;
115 | }
116 |
117 | small {
118 | display: block;
119 | line-height: $line-height-base;
120 | &:before {
121 | content: '\2014 \00A0';// EM DASH, NBSP;
122 | }
123 | }
124 | }
125 |
126 |
127 | // Quotes
128 | // -------------------------
129 |
130 | q:before,
131 | q:after,
132 | blockquote:before,
133 | blockquote:after {
134 | content: "";
135 | }
136 |
137 |
138 | // Addresses
139 | // -------------------------
140 |
141 | address {
142 | display: block;
143 | margin-bottom: $line-height-computed;
144 | font-style: normal;
145 | line-height: $line-height-base;
146 | }
147 |
148 |
149 | // Links
150 | // -------------------------
151 |
152 | a.subdued {
153 | padding-right: 10px;
154 | color: #888;
155 | text-decoration: none;
156 |
157 | &:hover {
158 | text-decoration: none;
159 | }
160 | &:last-child {
161 | padding-right: 0;
162 | }
163 | }
164 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/_util.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Utility Classes
4 | * --------------------------------------------------
5 | */
6 |
7 | .hide {
8 | display: none;
9 | }
10 | .opacity-hide {
11 | opacity: 0;
12 | }
13 | .grade-b .opacity-hide,
14 | .grade-c .opacity-hide {
15 | opacity: 1;
16 | display: none;
17 | }
18 | .show {
19 | display: block;
20 | }
21 | .opacity-show {
22 | opacity: 1;
23 | }
24 | .invisible {
25 | visibility: hidden;
26 | }
27 |
28 | .keyboard-open .hide-on-keyboard-open {
29 | display: none;
30 | }
31 |
32 | .keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs,
33 | .keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer {
34 | bottom: 0;
35 | }
36 |
37 | .inline {
38 | display: inline-block;
39 | }
40 |
41 | .disable-pointer-events {
42 | pointer-events: none;
43 | }
44 |
45 | .enable-pointer-events {
46 | pointer-events: auto;
47 | }
48 |
49 | .disable-user-behavior {
50 | // used to prevent the browser from doing its native behavior. this doesnt
51 | // prevent the scrolling, but cancels the contextmenu, tap highlighting, etc
52 |
53 | @include user-select(none);
54 | @include touch-callout(none);
55 | @include tap-highlight-transparent();
56 |
57 | -webkit-user-drag: none;
58 |
59 | -ms-touch-action: none;
60 | -ms-content-zooming: none;
61 | }
62 |
63 | // Fill the screen to block clicks (a better pointer-events: none) for the body
64 | // to avoid full-page reflows and paints which can cause flickers
65 | .click-block {
66 | position: absolute;
67 | top: 0;
68 | left: 0;
69 | z-index: $z-index-click-block;
70 | width: 100%;
71 | height: 100%;
72 | background: transparent;
73 | }
74 |
75 | .no-resize {
76 | resize: none;
77 | }
78 |
79 | .block {
80 | display: block;
81 | clear: both;
82 | &:after {
83 | display: block;
84 | visibility: hidden;
85 | clear: both;
86 | height: 0;
87 | content: ".";
88 | }
89 | }
90 |
91 | .full-image {
92 | width: 100%;
93 | }
94 |
95 | .clearfix {
96 | *zoom: 1;
97 | &:before,
98 | &:after {
99 | display: table;
100 | content: "";
101 | // Fixes Opera/contenteditable bug:
102 | // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
103 | line-height: 0;
104 | }
105 | &:after {
106 | clear: both;
107 | }
108 | }
109 |
110 | /**
111 | * Content Padding
112 | * --------------------------------------------------
113 | */
114 |
115 | .padding {
116 | padding: $content-padding;
117 | }
118 |
119 | .padding-top,
120 | .padding-vertical {
121 | padding-top: $content-padding;
122 | }
123 |
124 | .padding-right,
125 | .padding-horizontal {
126 | padding-right: $content-padding;
127 | }
128 |
129 | .padding-bottom,
130 | .padding-vertical {
131 | padding-bottom: $content-padding;
132 | }
133 |
134 | .padding-left,
135 | .padding-horizontal {
136 | padding-left: $content-padding;
137 | }
138 |
139 |
140 | /**
141 | * Rounded
142 | * --------------------------------------------------
143 | */
144 |
145 | .rounded {
146 | border-radius: $border-radius-base;
147 | }
148 |
149 |
150 | /**
151 | * Utility Colors
152 | * --------------------------------------------------
153 | * Utility colors are added to help set a naming convention. You'll
154 | * notice we purposely do not use words like "red" or "blue", but
155 | * instead have colors which represent an emotion or generic theme.
156 | */
157 |
158 | .light, a.light {
159 | color: $light;
160 | }
161 | .light-bg {
162 | background-color: $light;
163 | }
164 | .light-border {
165 | border-color: $button-light-border;
166 | }
167 |
168 | .stable, a.stable {
169 | color: $stable;
170 | }
171 | .stable-bg {
172 | background-color: $stable;
173 | }
174 | .stable-border {
175 | border-color: $button-stable-border;
176 | }
177 |
178 | .positive, a.positive {
179 | color: $positive;
180 | }
181 | .positive-bg {
182 | background-color: $positive;
183 | }
184 | .positive-border {
185 | border-color: $button-positive-border;
186 | }
187 |
188 | .calm, a.calm {
189 | color: $calm;
190 | }
191 | .calm-bg {
192 | background-color: $calm;
193 | }
194 | .calm-border {
195 | border-color: $button-calm-border;
196 | }
197 |
198 | .assertive, a.assertive {
199 | color: $assertive;
200 | }
201 | .assertive-bg {
202 | background-color: $assertive;
203 | }
204 | .assertive-border {
205 | border-color: $button-assertive-border;
206 | }
207 |
208 | .balanced, a.balanced {
209 | color: $balanced;
210 | }
211 | .balanced-bg {
212 | background-color: $balanced;
213 | }
214 | .balanced-border {
215 | border-color: $button-balanced-border;
216 | }
217 |
218 | .energized, a.energized {
219 | color: $energized;
220 | }
221 | .energized-bg {
222 | background-color: $energized;
223 | }
224 | .energized-border {
225 | border-color: $button-energized-border;
226 | }
227 |
228 | .royal, a.royal {
229 | color: $royal;
230 | }
231 | .royal-bg {
232 | background-color: $royal;
233 | }
234 | .royal-border {
235 | border-color: $button-royal-border;
236 | }
237 |
238 | .dark, a.dark {
239 | color: $dark;
240 | }
241 | .dark-bg {
242 | background-color: $dark;
243 | }
244 | .dark-border {
245 | border-color: $button-dark-border;
246 | }
247 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/ionic.scss:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | @import
4 | // Ionicons
5 | "ionicons/ionicons.scss",
6 |
7 | // Variables
8 | "mixins",
9 | "variables",
10 |
11 | // Base
12 | "reset",
13 | "scaffolding",
14 | "type",
15 |
16 | // Components
17 | "action-sheet",
18 | "backdrop",
19 | "bar",
20 | "tabs",
21 | "menu",
22 | "modal",
23 | "popover",
24 | "popup",
25 | "loading",
26 | "items",
27 | "list",
28 | "badge",
29 | "slide-box",
30 |
31 | // Forms
32 | "form",
33 | "checkbox",
34 | "toggle",
35 | "radio",
36 | "range",
37 | "select",
38 | "progress",
39 |
40 | // Buttons
41 | "button",
42 | "button-bar",
43 |
44 | // Util
45 | "animations",
46 | "grid",
47 | "util",
48 | "platform";
49 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/ionicons/_ionicons-animation.scss:
--------------------------------------------------------------------------------
1 | // Animation Icons
2 | // --------------------------
3 |
4 | .#{$ionicons-prefix}spin {
5 | -webkit-animation: spin 1s infinite linear;
6 | -moz-animation: spin 1s infinite linear;
7 | -o-animation: spin 1s infinite linear;
8 | animation: spin 1s infinite linear;
9 | }
10 |
11 | @-moz-keyframes spin {
12 | 0% { -moz-transform: rotate(0deg); }
13 | 100% { -moz-transform: rotate(359deg); }
14 | }
15 | @-webkit-keyframes spin {
16 | 0% { -webkit-transform: rotate(0deg); }
17 | 100% { -webkit-transform: rotate(359deg); }
18 | }
19 | @-o-keyframes spin {
20 | 0% { -o-transform: rotate(0deg); }
21 | 100% { -o-transform: rotate(359deg); }
22 | }
23 | @-ms-keyframes spin {
24 | 0% { -ms-transform: rotate(0deg); }
25 | 100% { -ms-transform: rotate(359deg); }
26 | }
27 | @keyframes spin {
28 | 0% { transform: rotate(0deg); }
29 | 100% { transform: rotate(359deg); }
30 | }
31 |
32 |
33 | .#{$ionicons-prefix}loading-a,
34 | .#{$ionicons-prefix}loading-b,
35 | .#{$ionicons-prefix}loading-c,
36 | .#{$ionicons-prefix}loading-d,
37 | .#{$ionicons-prefix}looping,
38 | .#{$ionicons-prefix}refreshing,
39 | .#{$ionicons-prefix}ios7-reloading {
40 | @extend .ion;
41 | @extend .#{$ionicons-prefix}spin;
42 | }
43 |
44 | .#{$ionicons-prefix}loading-a {
45 | -webkit-animation-timing-function: steps(8, start);
46 | -moz-animation-timing-function: steps(8, start);
47 | animation-timing-function: steps(8, start);
48 | }
49 |
50 | .#{$ionicons-prefix}loading-a:before {
51 | @extend .#{$ionicons-prefix}load-a:before;
52 | }
53 |
54 | .#{$ionicons-prefix}loading-b:before {
55 | @extend .#{$ionicons-prefix}load-b:before;
56 | }
57 |
58 | .#{$ionicons-prefix}loading-c:before {
59 | @extend .#{$ionicons-prefix}load-c:before;
60 | }
61 |
62 | .#{$ionicons-prefix}loading-d:before {
63 | @extend .#{$ionicons-prefix}load-d:before;
64 | }
65 |
66 | .#{$ionicons-prefix}looping:before {
67 | @extend .#{$ionicons-prefix}loop:before;
68 | }
69 |
70 | .#{$ionicons-prefix}refreshing:before {
71 | @extend .#{$ionicons-prefix}refresh:before;
72 | }
73 |
74 | .#{$ionicons-prefix}ios7-reloading:before {
75 | @extend .#{$ionicons-prefix}ios7-reload:before;
76 | }
77 |
--------------------------------------------------------------------------------
/www/lib/ionic/scss/ionicons/_ionicons-font.scss:
--------------------------------------------------------------------------------
1 | // Ionicons Font Path
2 | // --------------------------
3 |
4 | @font-face {
5 | font-family: $ionicons-font-family;
6 | src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}");
7 | src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix") format("embedded-opentype"),
8 | url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype"),
9 | url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"),
10 | url("#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons") format("svg");
11 | font-weight: normal;
12 | font-style: normal;
13 | }
14 |
15 | .ion {
16 | display: inline-block;
17 | font-family: $ionicons-font-family;
18 | speak: none;
19 | font-style: normal;
20 | font-weight: normal;
21 | font-variant: normal;
22 | text-transform: none;
23 | text-rendering: auto;
24 | line-height: 1;
25 | -webkit-font-smoothing: antialiased;
26 | -moz-osx-font-smoothing: grayscale;
27 | }
--------------------------------------------------------------------------------
/www/lib/ionic/scss/ionicons/ionicons.scss:
--------------------------------------------------------------------------------
1 | @import "ionicons-variables";
2 | /*!
3 | Ionicons, v1.5.2
4 | Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
5 | https://twitter.com/benjsperry https://twitter.com/ionicframework
6 | MIT License: https://github.com/driftyco/ionicons
7 | */
8 |
9 | @import "ionicons-font";
10 | @import "ionicons-animation";
11 | @import "ionicons-icons";
12 |
--------------------------------------------------------------------------------
/www/lib/mockfirebase/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mockfirebase",
3 | "version": "0.2.9",
4 | "homepage": "https://github.com/katowulf/mockfirebase",
5 | "authors": [
6 | "Kato"
7 | ],
8 | "description": "An experimental Firebase stub/spy library for writing unit tests (not supported by Firebase)",
9 | "main": "./dist/mockfirebase.js",
10 | "moduleType": [
11 | "amd",
12 | "globals",
13 | "node"
14 | ],
15 | "keywords": [
16 | "firebase",
17 | "mock"
18 | ],
19 | "license": "MIT",
20 | "ignore": [
21 | "**/.*",
22 | "node_modules",
23 | "test",
24 | "helpers",
25 | "gulpfile.js",
26 | "package.json",
27 | "src"
28 | ],
29 | "_release": "0.2.9",
30 | "_resolution": {
31 | "type": "version",
32 | "tag": "v0.2.9",
33 | "commit": "4f8b874a3d83fa1ccd55681137d4f0fed1218cbe"
34 | },
35 | "_source": "git://github.com/katowulf/mockfirebase.git",
36 | "_target": "~0.2.9",
37 | "_originalSource": "mockfirebase"
38 | }
--------------------------------------------------------------------------------
/www/lib/mockfirebase/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Issues
2 |
3 | If you've encountered a bug or want to request new functionality, go ahead and file an issue. Please provide as much detail as possible, including a live example, reproduction steps, and debugging steps you've already taken where possible.
4 |
5 | # Contributing
6 |
7 | * Fork the repo
8 | * `npm install`
9 | * make your additions in src/
10 | * add test units in test/
11 | * `npm test`
12 | * submit a pull request when all tests pass
13 |
--------------------------------------------------------------------------------
/www/lib/mockfirebase/MAINTAINING.md:
--------------------------------------------------------------------------------
1 | # Releasing
2 |
3 | Call `gulp release` to release a new patch version. For *minor* or *major* releases, use the `--type` flag:
4 |
5 | ```bash
6 | $ gulp release --type minor
7 | ```
8 |
9 | To push the release commit and tag:
10 |
11 | ```bash
12 | $ git push --follow-tags
13 | ```
14 |
--------------------------------------------------------------------------------
/www/lib/mockfirebase/README.md:
--------------------------------------------------------------------------------
1 | MockFirebase
2 | ============
3 |
4 | **This is an experimental library. It is not supported by Firebase. Use with caution and submit PRs for fixes and enhancements.**
5 |
6 | A Firebase stub useful for unit testing.
7 |
8 | [](https://travis-ci.org/katowulf/mockfirebase)
9 |
10 | ## Installation
11 |
12 | ### Node.js
13 |
14 | ```bash
15 | $ npm install mockfirebase
16 | ```
17 |
18 | ### Web
19 | ```html
20 |
21 |
22 |
23 | ```
24 | ### Browser Support
25 |
26 | Works by default with IE 9 and up. To add support for older versions, just include polyfills for [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility),
27 | [Array.prototype.indexOf](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf#Polyfill), and [Array.prototype.forEach](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Polyfill).
28 |
29 | Jasmine tests will run in the browser without any configuration. To add support for any other test suite (e.g. Mocha),
30 | just include [sinon.js](http://sinonjs.org/) in the browser script tags, Karma config, etc.
31 |
32 | ## Usage
33 |
34 | MockFirebase is designed to be used synchronously or asynchronously for unit testing by allowing you complete
35 | control over when each event is triggered, via the `flush()` command.
36 |
37 | ```js
38 | var fb = new MockFirebase(ANY_URLISH_STRING); // loads the default data
39 | var spy = sinon.spy();
40 | fb.on('value', spy);
41 | fb.set({ foo: 'bar' });
42 | expect(spy.called).to.be(false); // it is!
43 | fb.flush();
44 | expect(spy.called).to.be(true); // it is!
45 | ```
46 |
47 | See [angularFire's unit tests](https://github.com/firebase/angularFire/blob/master/tests/unit/AngularFire.spec.js) for examples of the MockFirebase in action.
48 |
49 | ## Specifying data
50 |
51 | You can specify the default data to be used by setting `MockFirebase.DEFAULT_DATA` to an object. You can also
52 | specify data per-instance by adding a second arg to the constructor: `new MockFirebase(ANY_URLISH_STRING, dataToUse);`
53 |
54 | ## API
55 |
56 | All the regular Firebase methods are(?) supported. In addition, the following test-related methods exist:
57 |
58 | ### flush
59 |
60 | @param {boolean|int} [delay] in milliseconds
61 | @returns {MockFirebase}
62 |
63 | Invoke all the operations that have been queued thus far. If a numeric delay is specified, this
64 | occurs asynchronously. Otherwise, it is a synchronous event (at the time flush is called).
65 |
66 | This allows Firebase to be used in synchronous tests without waiting for async callbacks. It also
67 | provides a rudimentary mechanism for simulating locally cached data (events are triggered
68 | synchronously when you do on('value') or on('child_added'))
69 |
70 | If you call this multiple times with different delay values, you can invoke the events out
71 | of order, as might happen on a network with some latency, or if multiple users update values "simultaneously".
72 |
73 | ### autoFlush
74 |
75 | @param {int|boolean} [delay] in milliseconds
76 |
77 | Automatically trigger a flush event after each operation. If a numeric delay is specified, this is an
78 | asynchronous event. If value is set to true, it is synchronous (flush is triggered immediately). Setting
79 | this to false disabled autoFlush
80 |
81 | ### failNext
82 |
83 | @param {String} methodName currently only supports `set` and `transaction`
84 | @param {String|Error} error
85 |
86 | Simulate a failure by specifying that the next invocation of methodName should fail with the provided error.
87 |
88 | ## getData
89 |
90 | @returns {*}
91 |
92 | Returns a copy of the current data
93 |
94 | # Proxying Firebase
95 |
96 | When writing unit tests, you'll probably want to patch calls to `Firebase` in your source code with `MockFirebase`.
97 |
98 | ## Browser
99 |
100 | If `Firebase` is attached to the `window`, you can just replace it using the override method:
101 |
102 | ```js
103 | MockFirebase.override();
104 | ```
105 |
106 | Make sure to include `MockFirebase` before overwriting Firebase and then add your tests after the patch.
107 |
108 | ## Node/Browserify
109 | In Node/Browserify, you need to patch `require` itself. [proxyquire](https://github.com/thlorenz/proxyquire) and [proxyquireify](https://github.com/thlorenz/proxyquireify) make this easy.
110 |
111 | ```js
112 | // ./mySrc.js
113 | var Firebase = require('firebase');
114 | var ref = new Firebase('myRefUrl');
115 | ref.on('value', function (snapshot) {
116 | console.log(snapshot.val());
117 | });
118 | ```
119 |
120 | In order to test the above source code, we use proxyquire like this:
121 |
122 | ```js
123 | // ./test.js
124 | var proxyquire = require('proxyquire');
125 | var mySrc = proxyquire('./mySrc', {
126 | firebase: require('mockfirebase').MockFirebase.autoFlush()
127 | });
128 | // data is logged
129 | ```
130 |
131 | Note that the key in the stubs object matches the module name (`'firebase'`) and not the capitalized variable name.
132 |
133 | # Support
134 |
135 | Use the [issues list](https://github.com/katowulf/mockfirebase/issues) for questions and troubleshooting help.
136 |
--------------------------------------------------------------------------------
/www/lib/mockfirebase/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mockfirebase",
3 | "version": "0.2.9",
4 | "homepage": "https://github.com/katowulf/mockfirebase",
5 | "authors": [
6 | "Kato"
7 | ],
8 | "description": "An experimental Firebase stub/spy library for writing unit tests (not supported by Firebase)",
9 | "main": "./dist/mockfirebase.js",
10 | "moduleType": [
11 | "amd",
12 | "globals",
13 | "node"
14 | ],
15 | "keywords": [
16 | "firebase",
17 | "mock"
18 | ],
19 | "license": "MIT",
20 | "ignore": [
21 | "**/.*",
22 | "node_modules",
23 | "test",
24 | "helpers",
25 | "gulpfile.js",
26 | "package.json",
27 | "src"
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/www/views/about/about.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | App built as an example for demonstrating many features of the Ionic Framework. Built by Jeremy Wilken, @gnomeontherun .
5 | Projects Used
6 |
12 | Want to make improvements, found a bug, or just have questions? Open an issue on the GitHub project .
13 | Icon and Splashscreen licensed as CC 3.0 BY-SA/BYCG by Manamedia.com.
14 |
15 |
16 |
--------------------------------------------------------------------------------
/www/views/events/events.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{day.day}}
6 |
7 | {{event.event}}
8 | {{event.time}}, {{event.location}}
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/www/views/events/events.js:
--------------------------------------------------------------------------------
1 | angular.module('App').controller('EventsCtrl', function ($scope, EventsService) {
2 |
3 | var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
4 | var day = new Date().getDay();
5 | var index = 0;
6 | $scope.events = EventsService.$asArray();
7 |
8 | $scope.events.$loaded().then(function () {
9 | while (day != index && index < 7) {
10 | $scope.events.push($scope.events.shift());
11 | index++;
12 | }
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/www/views/food/food.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Preview
4 |
5 |
6 | Total: {{order.total | currency}}, Items {{order.items.length}}
7 |
8 |
9 |
10 |
11 | {{course.meal}}
12 |
13 | {{item.item}} {{item.price | currency}}
14 | Order
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/www/views/food/food.js:
--------------------------------------------------------------------------------
1 | angular.module('App').controller('FoodCtrl', function ($scope, $ionicListDelegate, $ionicLoading, $ionicModal, $ionicPopup, MenuService) {
2 |
3 | $scope.sendOrder = function () {
4 | $ionicPopup.alert({
5 | title: 'Order submitted',
6 | template: 'Your order will be delieved to your room within 30 minutes.',
7 | }).then(function (code) {
8 | $scope.modal.hide();
9 | });
10 | }
11 |
12 | $scope.openPreview = function() {
13 | $ionicModal.fromTemplateUrl('views/food/preview.html', {
14 | scope: $scope,
15 | animation: 'slide-in-up'
16 | }).then(function(modal) {
17 | $scope.modal = modal;
18 | $scope.modal.show();
19 | });
20 | };
21 |
22 | $scope.cancelPreview = function () {
23 | $scope.modal.hide();
24 | };
25 |
26 | $scope.$on('$destroy', function() {
27 | if ($scope.modal) {
28 | $scope.modal.remove();
29 | }
30 | });
31 |
32 | $scope.order = {
33 | items: [],
34 | total: 0
35 | };
36 |
37 | $scope.add = function (item) {
38 | $ionicListDelegate.closeOptionButtons();
39 | $scope.order.items.push(angular.copy(item));
40 | $scope.order.total += item.price;
41 | };
42 |
43 | $scope.remove = function (index) {
44 | $scope.order.total -= $scope.order.items[index].price;
45 | $scope.order.items.splice(index, 1);
46 | };
47 |
48 | $ionicLoading.show({
49 | template: ' Loading menu'
50 | });
51 |
52 | $scope.menu = MenuService.$asArray();
53 | $scope.menu.$loaded().then(function () {
54 | $ionicLoading.hide();
55 | });
56 |
57 | });
58 |
--------------------------------------------------------------------------------
/www/views/food/preview.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Cancel
5 |
6 | Preview Order
7 |
8 | Submit
9 |
10 |
11 |
12 |
13 | No items
14 |
15 | {{item.item}} {{item.price | currency}}
16 | Remove
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/www/views/home/comments.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Send Us Comments
4 |
5 | Cancel
6 |
7 |
8 |
30 |
31 |
--------------------------------------------------------------------------------
/www/views/home/home.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Welcome to Sunshine Resort
5 |
6 | We hope you enjoy your stay! Here you can see the daily schedule. You can view the events list to add things to your schedule or discover local places in the menu.
7 |
8 |
9 |
10 |
11 |
Current Weather
12 |
13 |
14 |
Currently {{weather.main.temp}}°F and {{weather.weather[0].description}}.
15 |
16 |
See Forecast
17 |
18 |
19 |
20 |
Today's Events
21 |
22 |
{{item.event}}, {{item.time}}
23 |
See all events
24 |
25 |
26 |
27 |
28 | Send us a comment
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/www/views/home/home.js:
--------------------------------------------------------------------------------
1 | angular.module('App').controller('HomeCtrl', function ($scope, $http, $timeout, $ionicModal, $ionicLoading, $ionicPopup, EventsService) {
2 |
3 | var comment = {
4 | message: '',
5 | rating: 5
6 | };
7 | $scope.comment = angular.copy(comment);
8 |
9 | $scope.sendComments = function () {
10 | // Send comment
11 | $scope.cancelComments();
12 | $ionicPopup.alert({
13 | title: 'Thank you!',
14 | template: 'We appreciate your comments!',
15 | okText: 'Close'
16 | });
17 | };
18 |
19 | $scope.cancelComments = function () {
20 | $scope.comment = angular.copy(comment);
21 | $scope.modal.hide();
22 | }
23 |
24 | $scope.openComments = function() {
25 | $ionicModal.fromTemplateUrl('views/home/comments.html', {
26 | scope: $scope,
27 | animation: 'slide-in-up'
28 | }).then(function(modal) {
29 | $scope.modal = modal;
30 | $scope.modal.show();
31 | });
32 | };
33 |
34 | //Cleanup the modal when we're done with it!
35 | $scope.$on('$destroy', function() {
36 | if ($scope.modal) {
37 | $scope.modal.remove();
38 | }
39 | });
40 |
41 | $http.get('http://api.openweathermap.org/data/2.5/weather?q=Key%20West,FL&units=imperial').success(function (data) {
42 | $scope.weather = data;
43 | });
44 |
45 | var events = EventsService.$asArray();
46 | events.$loaded().then(function () {
47 | $scope.today = events[new Date().getDay()];
48 | });
49 |
50 | });
51 |
--------------------------------------------------------------------------------
/www/views/local/beaches.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Public
5 |
6 | Green Beach
7 | 0.4 miles
8 |
9 |
10 | Marty's Pointe
11 | 1.0 miles
12 |
13 |
14 | Shipwreck Beach
15 | 4.2 miles
16 |
17 |
18 | Seal Beach
19 | 5.7 miles
20 |
21 |
22 | Glass Beach
23 | 8.6 miles
24 |
25 | Private
26 |
27 | East Pointe Beach, $5
28 | 3.2 miles
29 |
30 |
31 | Secret Beach, $10
32 | 6.7 miles
33 |
34 |
35 | Tide Pool Beach, $8
36 | 9.3 miles
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/www/views/local/food.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Casual
5 |
6 | Route 66 Cafe
7 | 1.4 miles
8 |
9 |
10 | Applebee's
11 | 1.5 miles
12 |
13 |
14 | Sally's Sundaes
15 | 3.2 miles
16 |
17 |
18 | Cafe 888
19 | 3.6 miles
20 |
21 |
22 | La Fiesta
23 | 4.3 miles
24 |
25 | Fine Dining
26 |
27 | Italiano
28 | 3.2 miles
29 |
30 |
31 | John's Steakhouse
32 | 3.5 miles
33 |
34 |
35 | Gulf Coast Seafood
36 | 5.4 miles
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/www/views/local/local.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/www/views/local/sights.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Natural
5 |
6 | Botanical Gardens
7 | 4.4 miles
8 |
9 |
10 | Hidden Falls
11 | 7.5 miles
12 |
13 |
14 | Lookout Point
15 | 8.2 miles
16 |
17 |
18 | Natural Stone Arches
19 | 12.3 miles
20 |
21 | Kid Friendly
22 |
23 | Zoo
24 | 3.8 miles
25 |
26 |
27 | Amusement Park
28 | 7.5 miles
29 |
30 |
31 | Putt Putt
32 | 10.4 miles
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/www/views/reservation/reservation.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Check in: {{reservation.checkin | date}}
6 |
7 |
8 | Check out: {{reservation.checkout | date}}
9 |
10 |
11 | Room service: {{reservation.service | date}}
12 |
13 |
14 | Room: {{reservation.room}}
15 |
16 |
17 | Type: 2 Bed, 1 Bath
18 |
19 |
20 | Parking space: {{reservation.parkingSpace}}
21 |
22 |
23 | Daily rate: {{reservation.rate | currency}}
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/www/views/reservation/reservation.js:
--------------------------------------------------------------------------------
1 | angular.module('App').controller('ReservationCtrl', function ($scope, $timeout, $ionicModal, $ionicLoading, $ionicPopup) {
2 |
3 | $ionicLoading.show({
4 | template: ' Loading your reservation details'
5 | });
6 |
7 | $timeout(function () {
8 | var today = new Date();
9 | $scope.reservation = {
10 | checkin: today,
11 | checkout: new Date(today.getTime() + 1000 * 60 * 60 * 24 * 7),
12 | service: new Date(today.getTime() + 1000 * 60 * 60 * 24 * 4),
13 | room: 156,
14 | parkingSpace: 324,
15 | rate: 149
16 | };
17 | $ionicLoading.hide();
18 | }, 2000);
19 |
20 | });
21 |
--------------------------------------------------------------------------------
/www/views/tour/tour.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Welcome to Sunshine Resort
8 |
9 |
10 | View your reservation
11 | Call the concierge
12 | Order room service
13 | Discover resort events
14 | Find local places
15 | and much more!
16 |
17 |
18 |
19 | Get Started
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/www/views/tour/tour.js:
--------------------------------------------------------------------------------
1 | angular.module('App').controller('TourCtrl', function ($scope, $location, $ionicPopup) {
2 |
3 | $scope.login = function () {
4 | $ionicPopup.prompt({
5 | title: 'Login',
6 | inputPlaceholder: 'Enter reservation code',
7 | okText: 'Login'
8 | }).then(function (code) {
9 | // Login with code
10 | localStorage.setItem('firstVisit', '1');
11 | $location.url('/');
12 | });
13 | }
14 |
15 | });
16 |
--------------------------------------------------------------------------------
/www/views/weather/weather.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Sunshine Resort Forecast
5 |
6 |
{{day.dt | date:'EEEE'}}, {{day.weather[0].description}}
7 |
High: {{day.temp.max}}°F Low: {{day.temp.min}}°F
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/www/views/weather/weather.js:
--------------------------------------------------------------------------------
1 | angular.module('App').controller('WeatherCtrl', function ($scope, $http, $ionicLoading) {
2 |
3 | $ionicLoading.show({
4 | template: ' Loading forecast'
5 | });
6 |
7 | // You need to get a key from Open Weather Map and put the key in API_KEY_HERE
8 | $http.get('http://api.openweathermap.org/data/2.5/forecast/daily?q=Key%20West,FL&cnt=7&units=imperial&APPID=API_KEY_HERE').success(function (data) {
9 | $ionicLoading.hide();
10 | $scope.weather = data;
11 | });
12 |
13 | });
14 |
--------------------------------------------------------------------------------