├── IONIC-README.md ├── README.md ├── config.xml ├── gulpfile.js ├── hooks ├── .gitignore └── README.md ├── ionic.project ├── package.json ├── platforms └── .gitignore ├── plugins ├── .gitignore ├── org.apache.cordova.console │ ├── .fetch.json │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── RELEASENOTES.md │ ├── doc │ │ └── index.md │ ├── package.json │ ├── plugin.xml │ ├── src │ │ ├── ios │ │ │ ├── CDVLogger.h │ │ │ └── CDVLogger.m │ │ ├── ubuntu │ │ │ ├── console.cpp │ │ │ └── console.h │ │ └── wp │ │ │ └── DebugConsole.cs │ └── www │ │ ├── console-via-logger.js │ │ └── logger.js ├── org.apache.cordova.device │ ├── .fetch.json │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── RELEASENOTES.md │ ├── doc │ │ └── index.md │ ├── package.json │ ├── plugin.xml │ ├── src │ │ ├── android │ │ │ └── Device.java │ │ ├── blackberry10 │ │ │ └── index.js │ │ ├── firefoxos │ │ │ └── DeviceProxy.js │ │ ├── ios │ │ │ ├── CDVDevice.h │ │ │ └── CDVDevice.m │ │ ├── tizen │ │ │ └── DeviceProxy.js │ │ ├── ubuntu │ │ │ ├── device.cpp │ │ │ ├── device.h │ │ │ └── device.js │ │ ├── windows8 │ │ │ └── DeviceProxy.js │ │ └── wp │ │ │ └── Device.cs │ └── www │ │ └── device.js └── org.apache.cordova.statusbar │ ├── .fetch.json │ ├── README.md │ ├── package.json │ ├── plugin.xml │ ├── src │ └── ios │ │ ├── CDVStatusBar.h │ │ └── CDVStatusBar.m │ └── www │ └── statusbar.js ├── scss └── ionic.app.scss └── www ├── .gitignore ├── config.xml ├── css └── style.css ├── img └── ionic.png ├── index.html ├── js ├── app.js ├── controllers.js └── services.js ├── lib ├── ionic │ ├── css │ │ ├── ionic.css │ │ └── ionic.min.css │ ├── fonts │ │ ├── ionicons.eot │ │ ├── ionicons.svg │ │ ├── ionicons.ttf │ │ └── ionicons.woff │ ├── js │ │ ├── angular-ui │ │ │ ├── angular-ui-router.js │ │ │ └── angular-ui-router.min.js │ │ ├── angular │ │ │ ├── angular-animate.js │ │ │ ├── angular-animate.min.js │ │ │ ├── angular-resource.js │ │ │ ├── angular-resource.min.js │ │ │ ├── angular-sanitize.js │ │ │ ├── angular-sanitize.min.js │ │ │ ├── angular.js │ │ │ └── angular.min.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 │ │ ├── _badge.scss │ │ ├── _bar.scss │ │ ├── _button-bar.scss │ │ ├── _button.scss │ │ ├── _checkbox.scss │ │ ├── _form.scss │ │ ├── _grid.scss │ │ ├── _items.scss │ │ ├── _list.scss │ │ ├── _menu.scss │ │ ├── _mixins.scss │ │ ├── _modal.scss │ │ ├── _platform.scss │ │ ├── _popup.scss │ │ ├── _progress.scss │ │ ├── _radio.scss │ │ ├── _range.scss │ │ ├── _reset.scss │ │ ├── _scaffolding.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 └── userapp │ ├── angularjs.userapp.js │ ├── phonegap.userapp.js │ └── userapp.client.js └── templates ├── friend-detail.html ├── login-facebook.html ├── login.html ├── signup.html ├── tab-account.html ├── tab-dash.html ├── tab-friends.html └── tabs.html /IONIC-README.md: -------------------------------------------------------------------------------- 1 | Ionic App Base 2 | ===================== 3 | 4 | A starting project for Ionic that optionally supports 5 | using custom SCSS. 6 | 7 | ## Using this project 8 | 9 | We recommend using the `ionic` utility to create new Ionic projects that are based on this project but use a ready-made starter template. 10 | 11 | For example, to start a new Ionic project with the default tabs interface, make sure the `ionic` utility is installed: 12 | 13 | ```bash 14 | $ sudo npm install -g ionic 15 | ``` 16 | 17 | Then run: 18 | 19 | ```bash 20 | $ sudo npm install -g ionic 21 | $ ionic start myProject tabs 22 | ``` 23 | 24 | More info on this can be found on the Ionic [Getting Started](http://ionicframework.com/getting-started) page. 25 | 26 | ## Installation 27 | 28 | While we recommend using the `ionic` utility to create new Ionic projects, you can use this repo as a barebones starting point to your next Ionic app. 29 | 30 | To use this project as is, first clone the repo from GitHub, then run: 31 | 32 | ```bash 33 | $ cd ionic-app-base 34 | $ sudo npm install -g cordova ionic gulp 35 | $ npm install 36 | $ gulp init 37 | ``` 38 | 39 | ## Using Sass (optional) 40 | 41 | This project makes it easy to use Sass (the SCSS syntax) in your projects. This enables you to override styles from Ionic, and benefit from 42 | Sass's great features. 43 | 44 | Just update the `./scss/ionic.app.scss` file, and run `gulp` or `gulp watch` to rebuild the CSS files for Ionic. 45 | 46 | Note: if you choose to use the Sass method, make sure to remove the included `ionic.css` file in `index.html`, and then uncomment 47 | the include to your `ionic.app.css` file which now contains all your Sass code and Ionic itself: 48 | 49 | ```html 50 | 53 | ``` 54 | ## Issues 55 | Issues have been disabled on this repo, if you do find an issue or have a question consider posting it on the [Ionic Forum](http://forum.ionicframework.com/). Or else if there is truly an error, follow our guidelines for [submitting an issue](http://ionicframework.com/contribute/#issues) to the main Ionic repository. On the other hand, pull requests are welcome here! 56 | 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | UserApp Ionic Example 2 | ===================== 3 | 4 | Example app based on the [Ionic Framework](http://ionicframework.com/) and [UserApp](https://www.userapp.io/). 5 | 6 | ## Getting Started 7 | 8 | **Install Ionic** 9 | 10 | If you haven't installed Ionic already, follow the instructions [here](http://ionicframework.com/getting-started/). 11 | 12 | **Insert your App Id** 13 | 14 | Open the file `www/js/app.js` and replace `YOUR-USERAPP-APP-ID` with your App Id. 15 | 16 | [How do I find my App Id?](https://help.userapp.io/customer/portal/articles/1322336-how-do-i-find-my-app-id-) 17 | 18 | **Add your platforms** 19 | 20 | $ ionic platform add android 21 | 22 | **Add AppInBrowser plugin** 23 | 24 | Install the [InAppBrowser](http://docs.phonegap.com/en/3.0.0/cordova_inappbrowser_inappbrowser.md.html) plugin: 25 | 26 | $ cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git 27 | 28 | **Run the app with Ionic** 29 | 30 | $ ionic build android 31 | $ ionic emulate android 32 | 33 | ## UserApp Dependencies 34 | 35 | * [UserApp JavaScript SDK](https://app.userapp.io/#/docs/libs/javascript/) - API wrapper library for the UserApp API 36 | * [UserApp AngularJS SDK](https://app.userapp.io/#/docs/libs/angularjs/) - Adds user authentication to an AngularJS app 37 | * [UserApp PhoneGap Library](https://app.userapp.io/#/docs/libs/phonegap/) - Extends the above SDKs with PhoneGap specific functionality 38 | 39 | ## Help 40 | 41 | Contact us via email at support@userapp.io or visit our [support center](https://help.userapp.io). You can also see the [UserApp documentation](https://app.userapp.io/#/docs/) for more information. 42 | 43 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | HelloCordova 4 | 5 | An Ionic Framework and Cordova project. 6 | 7 | 8 | Ionic Framework Team 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var concat = require('gulp-concat'); 3 | var sass = require('gulp-sass'); 4 | var minifyCss = require('gulp-minify-css'); 5 | var rename = require('gulp-rename'); 6 | 7 | var paths = { 8 | sass: ['./scss/**/*.scss'] 9 | }; 10 | 11 | gulp.task('sass', function(done) { 12 | gulp.src('./scss/ionic.app.scss') 13 | .pipe(sass()) 14 | .pipe(gulp.dest('./www/css/')) 15 | .pipe(minifyCss({ 16 | keepSpecialComments: 0 17 | })) 18 | .pipe(rename({ extname: '.min.css' })) 19 | .pipe(gulp.dest('./www/css/')) 20 | .on('end', done); 21 | }); 22 | 23 | gulp.task('watch', function() { 24 | gulp.watch(paths.sass, ['sass']); 25 | }); 26 | 27 | gulp.task('default', ['sass']); 28 | -------------------------------------------------------------------------------- /hooks/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/hooks/.gitignore -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /ionic.project: -------------------------------------------------------------------------------- 1 | { 2 | "name": "myApp2", 3 | "email": "", 4 | "app_id": "", 5 | "package_name": "" 6 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic-project", 3 | "version": "1.0.0", 4 | "description": "An Ionic project", 5 | "dependencies": { 6 | "gulp": "^3.5.6", 7 | "gulp-sass": "^0.7.1", 8 | "gulp-concat": "^2.2.0", 9 | "gulp-minify-css": "^0.3.0", 10 | "gulp-rename": "^1.2.0" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /platforms/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/platforms/.gitignore -------------------------------------------------------------------------------- /plugins/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/plugins/.gitignore -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/.fetch.json: -------------------------------------------------------------------------------- 1 | {"source":{"type":"local","path":"/tmp/org.apache.cordova.console/package"}} -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/NOTICE: -------------------------------------------------------------------------------- 1 | Apache Cordova 2 | Copyright 2012 The Apache Software Foundation 3 | 4 | This product includes software developed at 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/README.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | # org.apache.cordova.console 21 | 22 | Plugin documentation: [doc/index.md](doc/index.md) 23 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/RELEASENOTES.md: -------------------------------------------------------------------------------- 1 | 21 | # Release Notes 22 | 23 | ### 0.2.3 (Sept 25, 2013) 24 | * CB-4889 bumping&resetting version 25 | * CB-4889 renaming org.apache.cordova.core.console to org.apache.cordova.console 26 | * Rename CHANGELOG.md -> RELEASENOTES.md 27 | * [CB-4752] Incremented plugin version on dev branch. 28 | 29 | ### 0.2.4 (Oct 28, 2013) 30 | * CB-5154 log formatting incorrectly to native 31 | * CB-5128: added repo + issue tag to plugin.xml for console plugin 32 | * [CB-4915] Incremented plugin version on dev branch. 33 | 34 | ### 0.2.5 (Dec 4, 2013) 35 | * add ubuntu platform 36 | 37 | ### 0.2.6 (Jan 02, 2014) 38 | * CB-5658 Add doc/index.md for Console plugin 39 | 40 | ### 0.2.7 (Feb 05, 2014) 41 | * Native console needs to be called DebugConsole to avoid ambiguous reference. This commit requires the 3.4.0 version of the native class factory 42 | * CB-4718 fixed Console plugin not working on wp 43 | 44 | ### 0.2.8 (Apr 17, 2014) 45 | * CB-6460: Update license headers 46 | * Add NOTICE file 47 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/doc/index.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | # org.apache.cordova.console 21 | 22 | This plugin is meant to ensure that console.log() is as useful as it can be. If 23 | you are not unhappy with how console.log() works for you, then you probably 24 | don't need this plugin. 25 | 26 | ## Installation 27 | 28 | cordova plugin add org.apache.cordova.console 29 | 30 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.8", 3 | "name": "org.apache.cordova.console", 4 | "cordova_name": "Console", 5 | "description": "Cordova Console Plugin", 6 | "license": "Apache 2.0", 7 | "repo": "https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git", 8 | "issue": "https://issues.apache.org/jira/browse/CB/component/12320644", 9 | "keywords": [ 10 | "cordova", 11 | "console" 12 | ], 13 | "platforms": [ 14 | "ios", 15 | "ubuntu", 16 | "wp7", 17 | "wp8", 18 | "windows8" 19 | ], 20 | "engines": [], 21 | "englishdoc": "\n\n# org.apache.cordova.console\n\nThis plugin is meant to ensure that console.log() is as useful as it can be. If\nyou are not unhappy with how console.log() works for you, then you probably\ndon't need this plugin.\n\n## Installation\n\n cordova plugin add org.apache.cordova.console\n\n" 22 | } -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 24 | 25 | Console 26 | Cordova Console Plugin 27 | Apache 2.0 28 | cordova,console 29 | https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git 30 | https://issues.apache.org/jira/browse/CB/component/12320644 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/src/ios/CDVLogger.h: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | #import 21 | 22 | @interface CDVLogger : CDVPlugin 23 | 24 | - (void)logLevel:(CDVInvokedUrlCommand*)command; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/src/ios/CDVLogger.m: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | #import "CDVLogger.h" 21 | #import 22 | 23 | @implementation CDVLogger 24 | 25 | /* log a message */ 26 | - (void)logLevel:(CDVInvokedUrlCommand*)command 27 | { 28 | id level = [command.arguments objectAtIndex:0]; 29 | id message = [command.arguments objectAtIndex:1]; 30 | 31 | if ([level isEqualToString:@"LOG"]) { 32 | NSLog(@"%@", message); 33 | } else { 34 | NSLog(@"%@: %@", level, message); 35 | } 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/src/ubuntu/console.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | 15 | #include "console.h" 16 | 17 | #include 18 | 19 | Console::Console(Cordova *cordova) : CPlugin(cordova) { 20 | } 21 | 22 | void Console::logLevel(int scId, int ecId, QString level, QString message) { 23 | Q_UNUSED(scId) 24 | Q_UNUSED(ecId) 25 | 26 | if (level != "LOG") 27 | std::cout << "[" << level.toStdString() << "] "; 28 | std::cout << message.toStdString() << std::endl; 29 | } 30 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/src/ubuntu/console.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed under the Apache License, Version 2.0 (the "License"); 3 | * you may not use this file except in compliance with the License. 4 | * You may obtain a copy of the License at 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | 15 | #ifndef CONSOLE_H_FDSVCXGFRS 16 | #define CONSOLE_H_FDSVCXGFRS 17 | 18 | #include 19 | 20 | #include 21 | 22 | class Console : public CPlugin { 23 | Q_OBJECT 24 | public: 25 | explicit Console(Cordova *cordova); 26 | 27 | virtual const QString fullName() override { 28 | return Console::fullID(); 29 | } 30 | 31 | virtual const QString shortName() override { 32 | return "Console"; 33 | } 34 | 35 | static const QString fullID() { 36 | return "Console"; 37 | } 38 | 39 | public slots: 40 | void logLevel(int scId, int ecId, QString level, QString message); 41 | }; 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/src/wp/DebugConsole.cs: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. 13 | */ 14 | 15 | using System; 16 | using System.Net; 17 | using System.Windows; 18 | using System.Windows.Controls; 19 | using System.Windows.Documents; 20 | using System.Windows.Ink; 21 | using System.Windows.Input; 22 | using System.Windows.Media; 23 | using System.Windows.Media.Animation; 24 | using System.Windows.Shapes; 25 | using System.Diagnostics; 26 | 27 | namespace WPCordovaClassLib.Cordova.Commands 28 | { 29 | public class DebugConsole : BaseCommand 30 | { 31 | public void logLevel(string options) 32 | { 33 | string[] args = JSON.JsonHelper.Deserialize(options); 34 | string level = args[0]; 35 | string msg = args[1]; 36 | 37 | if (level.Equals("LOG")) 38 | { 39 | Debug.WriteLine(msg); 40 | } 41 | else 42 | { 43 | Debug.WriteLine(level + ": " + msg); 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.console/www/console-via-logger.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | //------------------------------------------------------------------------------ 23 | 24 | var logger = require("./logger"); 25 | var utils = require("cordova/utils"); 26 | 27 | //------------------------------------------------------------------------------ 28 | // object that we're exporting 29 | //------------------------------------------------------------------------------ 30 | var console = module.exports; 31 | 32 | //------------------------------------------------------------------------------ 33 | // copy of the original console object 34 | //------------------------------------------------------------------------------ 35 | var WinConsole = window.console; 36 | 37 | //------------------------------------------------------------------------------ 38 | // whether to use the logger 39 | //------------------------------------------------------------------------------ 40 | var UseLogger = false; 41 | 42 | //------------------------------------------------------------------------------ 43 | // Timers 44 | //------------------------------------------------------------------------------ 45 | var Timers = {}; 46 | 47 | //------------------------------------------------------------------------------ 48 | // used for unimplemented methods 49 | //------------------------------------------------------------------------------ 50 | function noop() {} 51 | 52 | //------------------------------------------------------------------------------ 53 | // used for unimplemented methods 54 | //------------------------------------------------------------------------------ 55 | console.useLogger = function (value) { 56 | if (arguments.length) UseLogger = !!value; 57 | 58 | if (UseLogger) { 59 | if (logger.useConsole()) { 60 | throw new Error("console and logger are too intertwingly"); 61 | } 62 | } 63 | 64 | return UseLogger; 65 | }; 66 | 67 | //------------------------------------------------------------------------------ 68 | console.log = function() { 69 | if (logger.useConsole()) return; 70 | logger.log.apply(logger, [].slice.call(arguments)); 71 | }; 72 | 73 | //------------------------------------------------------------------------------ 74 | console.error = function() { 75 | if (logger.useConsole()) return; 76 | logger.error.apply(logger, [].slice.call(arguments)); 77 | }; 78 | 79 | //------------------------------------------------------------------------------ 80 | console.warn = function() { 81 | if (logger.useConsole()) return; 82 | logger.warn.apply(logger, [].slice.call(arguments)); 83 | }; 84 | 85 | //------------------------------------------------------------------------------ 86 | console.info = function() { 87 | if (logger.useConsole()) return; 88 | logger.info.apply(logger, [].slice.call(arguments)); 89 | }; 90 | 91 | //------------------------------------------------------------------------------ 92 | console.debug = function() { 93 | if (logger.useConsole()) return; 94 | logger.debug.apply(logger, [].slice.call(arguments)); 95 | }; 96 | 97 | //------------------------------------------------------------------------------ 98 | console.assert = function(expression) { 99 | if (expression) return; 100 | 101 | var message = logger.format.apply(logger.format, [].slice.call(arguments, 1)); 102 | console.log("ASSERT: " + message); 103 | }; 104 | 105 | //------------------------------------------------------------------------------ 106 | console.clear = function() {}; 107 | 108 | //------------------------------------------------------------------------------ 109 | console.dir = function(object) { 110 | console.log("%o", object); 111 | }; 112 | 113 | //------------------------------------------------------------------------------ 114 | console.dirxml = function(node) { 115 | console.log(node.innerHTML); 116 | }; 117 | 118 | //------------------------------------------------------------------------------ 119 | console.trace = noop; 120 | 121 | //------------------------------------------------------------------------------ 122 | console.group = console.log; 123 | 124 | //------------------------------------------------------------------------------ 125 | console.groupCollapsed = console.log; 126 | 127 | //------------------------------------------------------------------------------ 128 | console.groupEnd = noop; 129 | 130 | //------------------------------------------------------------------------------ 131 | console.time = function(name) { 132 | Timers[name] = new Date().valueOf(); 133 | }; 134 | 135 | //------------------------------------------------------------------------------ 136 | console.timeEnd = function(name) { 137 | var timeStart = Timers[name]; 138 | if (!timeStart) { 139 | console.warn("unknown timer: " + name); 140 | return; 141 | } 142 | 143 | var timeElapsed = new Date().valueOf() - timeStart; 144 | console.log(name + ": " + timeElapsed + "ms"); 145 | }; 146 | 147 | //------------------------------------------------------------------------------ 148 | console.timeStamp = noop; 149 | 150 | //------------------------------------------------------------------------------ 151 | console.profile = noop; 152 | 153 | //------------------------------------------------------------------------------ 154 | console.profileEnd = noop; 155 | 156 | //------------------------------------------------------------------------------ 157 | console.count = noop; 158 | 159 | //------------------------------------------------------------------------------ 160 | console.exception = console.log; 161 | 162 | //------------------------------------------------------------------------------ 163 | console.table = function(data, columns) { 164 | console.log("%o", data); 165 | }; 166 | 167 | //------------------------------------------------------------------------------ 168 | // return a new function that calls both functions passed as args 169 | //------------------------------------------------------------------------------ 170 | function wrappedOrigCall(orgFunc, newFunc) { 171 | return function() { 172 | var args = [].slice.call(arguments); 173 | try { orgFunc.apply(WinConsole, args); } catch (e) {} 174 | try { newFunc.apply(console, args); } catch (e) {} 175 | }; 176 | } 177 | 178 | //------------------------------------------------------------------------------ 179 | // For every function that exists in the original console object, that 180 | // also exists in the new console object, wrap the new console method 181 | // with one that calls both 182 | //------------------------------------------------------------------------------ 183 | for (var key in console) { 184 | if (typeof WinConsole[key] == "function") { 185 | console[key] = wrappedOrigCall(WinConsole[key], console[key]); 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/.fetch.json: -------------------------------------------------------------------------------- 1 | {"source":{"type":"local","path":"/tmp/org.apache.cordova.device/package"}} -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/NOTICE: -------------------------------------------------------------------------------- 1 | Apache Cordova 2 | Copyright 2012 The Apache Software Foundation 3 | 4 | This product includes software developed at 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/README.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | # org.apache.cordova.device 21 | 22 | Plugin documentation: [doc/index.md](doc/index.md) 23 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/RELEASENOTES.md: -------------------------------------------------------------------------------- 1 | 21 | # Release Notes 22 | 23 | ### 0.2.1 (Sept 5, 2013) 24 | * removed extraneous print statement 25 | * [CB-4432] copyright notice change 26 | 27 | ### 0.2.3 (Sept 25, 2013) 28 | * CB-4889 bumping&resetting version 29 | * [windows8] commandProxy has moved 30 | * [BlackBerry10] removed uneeded permission tags in plugin.xml 31 | * CB-4889 renaming org.apache.cordova.core.device to org.apache.cordova.device 32 | * Rename CHANGELOG.md -> RELEASENOTES.md 33 | * updated to use commandProxy for ffos 34 | * add firefoxos support 35 | * [CB-4752] Incremented plugin version on dev branch. 36 | 37 | ### 0.2.4 (Oct 28, 2013) 38 | * CB-5128: added repo + issue tag in plugin.xml for device plugin 39 | * CB-5085 device.cordova returning wrong value 40 | * [CB-4915] Incremented plugin version on dev branch. 41 | 42 | ### 0.2.5 (Dec 4, 2013) 43 | * CB-5316 Spell Cordova as a brand unless it's a command or script 44 | * [ubuntu] use cordova/exec/proxy 45 | * add ubuntu platform 46 | * Modify Device.platform logic to use amazon-fireos as the platform for Amazon Devices 47 | * 1. Added amazon-fireos platform. 2. Change to use cordova-amazon-fireos as the platform if user agent contains 'cordova-amazon-fireos' 48 | 49 | ### 0.2.6 (Jan 02, 2014) 50 | * CB-5658 Add doc/index.md for Device plugin 51 | * CB-5504 Moving Telephony Logic out of Device 52 | 53 | ### 0.2.7 (Jan 07, 2014) 54 | * CB-5737 Fix exception on close caused by left over telephony code from CB-5504 55 | 56 | ### 0.2.8 (Feb 05, 2014) 57 | * Tizen support added 58 | 59 | ### 0.2.9 (Apr 17, 2014) 60 | * CB-5105: [Android, windows8, WP, BlackBerry10] Removed dead code for device.version 61 | * CB-6422: [windows8] use cordova/exec/proxy 62 | * CB-6460: Update license headers 63 | * Add NOTICE file 64 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/doc/index.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | # org.apache.cordova.device 21 | 22 | This plugin defines a global `device` object, which describes the device's hardware and software. 23 | Although the object is in the global scope, it is not available until after the `deviceready` event. 24 | 25 | document.addEventListener("deviceready", onDeviceReady, false); 26 | function onDeviceReady() { 27 | console.log(device.cordova); 28 | } 29 | 30 | ## Installation 31 | 32 | cordova plugin add org.apache.cordova.device 33 | 34 | ## Properties 35 | 36 | - device.cordova 37 | - device.model 38 | - device.name 39 | - device.platform 40 | - device.uuid 41 | - device.version 42 | 43 | ## device.cordova 44 | 45 | Get the version of Cordova running on the device. 46 | 47 | ### Supported Platforms 48 | 49 | - Amazon Fire OS 50 | - Android 51 | - BlackBerry 10 52 | - Firefox OS 53 | - iOS 54 | - Tizen 55 | - Windows Phone 7 and 8 56 | - Windows 8 57 | 58 | ## device.model 59 | 60 | The `device.model` returns the name of the device's model or 61 | product. The value is set by the device manufacturer and may be 62 | different across versions of the same product. 63 | 64 | ### Supported Platforms 65 | 66 | - Android 67 | - BlackBerry 10 68 | - iOS 69 | - Tizen 70 | - Windows Phone 7 and 8 71 | - Windows 8 72 | 73 | ### Quick Example 74 | 75 | // Android: Nexus One returns "Passion" (Nexus One code name) 76 | // Motorola Droid returns "voles" 77 | // BlackBerry: Torch 9800 returns "9800" 78 | // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models 79 | // 80 | var model = device.model; 81 | 82 | ### Android Quirks 83 | 84 | - Gets the [product name](http://developer.android.com/reference/android/os/Build.html#PRODUCT) instead of the [model name](http://developer.android.com/reference/android/os/Build.html#MODEL), which is often the production code name. For example, the Nexus One returns `Passion`, and Motorola Droid returns `voles`. 85 | 86 | ### Tizen Quirks 87 | 88 | - Returns the device model assigned by the vendor, for example, `TIZEN` 89 | 90 | ### Windows Phone 7 and 8 Quirks 91 | 92 | - Returns the device model specified by the manufacturer. For example, the Samsung Focus returns `SGH-i917`. 93 | 94 | ## device.name 95 | 96 | __WARNING__: `device.name` is deprecated as of version 2.3.0. Use `device.model` instead. 97 | 98 | ## device.platform 99 | 100 | Get the device's operating system name. 101 | 102 | var string = device.platform; 103 | 104 | ### Supported Platforms 105 | 106 | - Android 107 | - BlackBerry 10 108 | - Firefox OS 109 | - iOS 110 | - Tizen 111 | - Windows Phone 7 and 8 112 | - Windows 8 113 | 114 | ### Quick Example 115 | 116 | // Depending on the device, a few examples are: 117 | // - "Android" 118 | // - "BlackBerry 10" 119 | // - "iOS" 120 | // - "WinCE" 121 | // - "Tizen" 122 | var devicePlatform = device.platform; 123 | 124 | ### Windows Phone 7 Quirks 125 | 126 | Windows Phone 7 devices report the platform as `WinCE`. 127 | 128 | ### Windows Phone 8 Quirks 129 | 130 | Windows Phone 8 devices report the platform as `Win32NT`. 131 | 132 | ## device.uuid 133 | 134 | Get the device's Universally Unique Identifier ([UUID](http://en.wikipedia.org/wiki/Universally_Unique_Identifier)). 135 | 136 | var string = device.uuid; 137 | 138 | ### Description 139 | 140 | The details of how a UUID is generated are determined by the device manufacturer and are specific to the device's platform or model. 141 | 142 | ### Supported Platforms 143 | 144 | - Android 145 | - BlackBerry 10 146 | - iOS 147 | - Tizen 148 | - Windows Phone 7 and 8 149 | - Windows 8 150 | 151 | ### Quick Example 152 | 153 | // Android: Returns a random 64-bit integer (as a string, again!) 154 | // The integer is generated on the device's first boot 155 | // 156 | // BlackBerry: Returns the PIN number of the device 157 | // This is a nine-digit unique integer (as a string, though!) 158 | // 159 | // iPhone: (Paraphrased from the UIDevice Class documentation) 160 | // Returns a string of hash values created from multiple hardware identifies. 161 | // It is guaranteed to be unique for every device and can't be tied 162 | // to the user account. 163 | // Windows Phone 7 : Returns a hash of device+current user, 164 | // if the user is not defined, a guid is generated and will persist until the app is uninstalled 165 | // Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number 166 | // unique to every GSM and UMTS mobile phone. 167 | var deviceID = device.uuid; 168 | 169 | ### iOS Quirk 170 | 171 | The `uuid` on iOS is not unique to a device, but varies for each 172 | application, for each installation. It changes if you delete and 173 | re-install the app, and possibly also when you upgrade iOS, or even 174 | upgrade the app per version (apparent in iOS 5.1). The `uuid` is not 175 | a reliable value. 176 | 177 | ### Windows Phone 7 and 8 Quirks 178 | 179 | The `uuid` for Windows Phone 7 requires the permission 180 | `ID_CAP_IDENTITY_DEVICE`. Microsoft will likely deprecate this 181 | property soon. If the capability is not available, the application 182 | generates a persistent guid that is maintained for the duration of the 183 | application's installation on the device. 184 | 185 | ## device.version 186 | 187 | Get the operating system version. 188 | 189 | var string = device.version; 190 | 191 | ### Supported Platforms 192 | 193 | - Android 2.1+ 194 | - BlackBerry 10 195 | - iOS 196 | - Tizen 197 | - Windows Phone 7 and 8 198 | - Windows 8 199 | 200 | ### Quick Example 201 | 202 | // Android: Froyo OS would return "2.2" 203 | // Eclair OS would return "2.1", "2.0.1", or "2.0" 204 | // Version can also return update level "2.1-update1" 205 | // 206 | // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 207 | // 208 | // iPhone: iOS 3.2 returns "3.2" 209 | // 210 | // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 211 | // Tizen: returns "TIZEN_20120425_2" 212 | var deviceVersion = device.version; 213 | 214 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.9", 3 | "name": "org.apache.cordova.device", 4 | "cordova_name": "Device", 5 | "description": "Cordova Device Plugin", 6 | "license": "Apache 2.0", 7 | "repo": "https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git", 8 | "issue": "https://issues.apache.org/jira/browse/CB/component/12320648", 9 | "keywords": [ 10 | "cordova", 11 | "device" 12 | ], 13 | "platforms": [ 14 | "firefoxos", 15 | "tizen", 16 | "android", 17 | "amazon-fireos", 18 | "ubuntu", 19 | "ios", 20 | "blackberry10", 21 | "wp7", 22 | "wp8", 23 | "windows8" 24 | ], 25 | "engines": [], 26 | "englishdoc": "\n\n# org.apache.cordova.device\n\nThis plugin defines a global `device` object, which describes the device's hardware and software.\nAlthough the object is in the global scope, it is not available until after the `deviceready` event.\n\n document.addEventListener(\"deviceready\", onDeviceReady, false);\n function onDeviceReady() {\n console.log(device.cordova);\n }\n\n## Installation\n\n cordova plugin add org.apache.cordova.device\n\n## Properties\n\n- device.cordova\n- device.model\n- device.name\n- device.platform\n- device.uuid\n- device.version\n\n## device.cordova\n\nGet the version of Cordova running on the device.\n\n### Supported Platforms\n\n- Amazon Fire OS\n- Android\n- BlackBerry 10\n- Firefox OS\n- iOS\n- Tizen\n- Windows Phone 7 and 8\n- Windows 8\n\n## device.model\n\nThe `device.model` returns the name of the device's model or\nproduct. The value is set by the device manufacturer and may be\ndifferent across versions of the same product.\n\n### Supported Platforms\n\n- Android\n- BlackBerry 10\n- iOS\n- Tizen\n- Windows Phone 7 and 8\n- Windows 8\n\n### Quick Example\n\n // Android: Nexus One returns \"Passion\" (Nexus One code name)\n // Motorola Droid returns \"voles\"\n // BlackBerry: Torch 9800 returns \"9800\"\n // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models\n //\n var model = device.model;\n\n### Android Quirks\n\n- Gets the [product name](http://developer.android.com/reference/android/os/Build.html#PRODUCT) instead of the [model name](http://developer.android.com/reference/android/os/Build.html#MODEL), which is often the production code name. For example, the Nexus One returns `Passion`, and Motorola Droid returns `voles`.\n\n### Tizen Quirks\n\n- Returns the device model assigned by the vendor, for example, `TIZEN`\n\n### Windows Phone 7 and 8 Quirks\n\n- Returns the device model specified by the manufacturer. For example, the Samsung Focus returns `SGH-i917`.\n\n## device.name\n\n__WARNING__: `device.name` is deprecated as of version 2.3.0. Use `device.model` instead.\n\n## device.platform\n\nGet the device's operating system name.\n\n var string = device.platform;\n\n### Supported Platforms\n\n- Android\n- BlackBerry 10\n- Firefox OS\n- iOS\n- Tizen\n- Windows Phone 7 and 8\n- Windows 8\n\n### Quick Example\n\n // Depending on the device, a few examples are:\n // - \"Android\"\n // - \"BlackBerry 10\"\n // - \"iOS\"\n // - \"WinCE\"\n // - \"Tizen\"\n var devicePlatform = device.platform;\n\n### Windows Phone 7 Quirks\n\nWindows Phone 7 devices report the platform as `WinCE`.\n\n### Windows Phone 8 Quirks\n\nWindows Phone 8 devices report the platform as `Win32NT`.\n\n## device.uuid\n\nGet the device's Universally Unique Identifier ([UUID](http://en.wikipedia.org/wiki/Universally_Unique_Identifier)).\n\n var string = device.uuid;\n\n### Description\n\nThe details of how a UUID is generated are determined by the device manufacturer and are specific to the device's platform or model.\n\n### Supported Platforms\n\n- Android\n- BlackBerry 10\n- iOS\n- Tizen\n- Windows Phone 7 and 8\n- Windows 8\n\n### Quick Example\n\n // Android: Returns a random 64-bit integer (as a string, again!)\n // The integer is generated on the device's first boot\n //\n // BlackBerry: Returns the PIN number of the device\n // This is a nine-digit unique integer (as a string, though!)\n //\n // iPhone: (Paraphrased from the UIDevice Class documentation)\n // Returns a string of hash values created from multiple hardware identifies.\n // It is guaranteed to be unique for every device and can't be tied\n // to the user account.\n // Windows Phone 7 : Returns a hash of device+current user,\n // if the user is not defined, a guid is generated and will persist until the app is uninstalled\n // Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number\n // unique to every GSM and UMTS mobile phone.\n var deviceID = device.uuid;\n\n### iOS Quirk\n\nThe `uuid` on iOS is not unique to a device, but varies for each\napplication, for each installation. It changes if you delete and\nre-install the app, and possibly also when you upgrade iOS, or even\nupgrade the app per version (apparent in iOS 5.1). The `uuid` is not\na reliable value.\n\n### Windows Phone 7 and 8 Quirks\n\nThe `uuid` for Windows Phone 7 requires the permission\n`ID_CAP_IDENTITY_DEVICE`. Microsoft will likely deprecate this\nproperty soon. If the capability is not available, the application\ngenerates a persistent guid that is maintained for the duration of the\napplication's installation on the device.\n\n## device.version\n\nGet the operating system version.\n\n var string = device.version;\n\n### Supported Platforms\n\n- Android 2.1+\n- BlackBerry 10\n- iOS\n- Tizen\n- Windows Phone 7 and 8\n- Windows 8\n\n### Quick Example\n\n // Android: Froyo OS would return \"2.2\"\n // Eclair OS would return \"2.1\", \"2.0.1\", or \"2.0\"\n // Version can also return update level \"2.1-update1\"\n //\n // BlackBerry: Torch 9800 using OS 6.0 would return \"6.0.0.600\"\n //\n // iPhone: iOS 3.2 returns \"3.2\"\n //\n // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720\n // Tizen: returns \"TIZEN_20120425_2\"\n var deviceVersion = device.version;\n\n" 27 | } -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 26 | Device 27 | Cordova Device Plugin 28 | Apache 2.0 29 | cordova,device 30 | https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git 31 | https://issues.apache.org/jira/browse/CB/component/12320648 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | read_device_identifying_information 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/android/Device.java: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | package org.apache.cordova.device; 20 | 21 | import java.util.TimeZone; 22 | 23 | import org.apache.cordova.CordovaWebView; 24 | import org.apache.cordova.CallbackContext; 25 | import org.apache.cordova.CordovaPlugin; 26 | import org.apache.cordova.CordovaInterface; 27 | import org.json.JSONArray; 28 | import org.json.JSONException; 29 | import org.json.JSONObject; 30 | 31 | import android.provider.Settings; 32 | 33 | public class Device extends CordovaPlugin { 34 | public static final String TAG = "Device"; 35 | 36 | public static String platform; // Device OS 37 | public static String uuid; // Device UUID 38 | 39 | private static final String ANDROID_PLATFORM = "Android"; 40 | private static final String AMAZON_PLATFORM = "amazon-fireos"; 41 | private static final String AMAZON_DEVICE = "Amazon"; 42 | 43 | /** 44 | * Constructor. 45 | */ 46 | public Device() { 47 | } 48 | 49 | /** 50 | * Sets the context of the Command. This can then be used to do things like 51 | * get file paths associated with the Activity. 52 | * 53 | * @param cordova The context of the main Activity. 54 | * @param webView The CordovaWebView Cordova is running in. 55 | */ 56 | public void initialize(CordovaInterface cordova, CordovaWebView webView) { 57 | super.initialize(cordova, webView); 58 | Device.uuid = getUuid(); 59 | } 60 | 61 | /** 62 | * Executes the request and returns PluginResult. 63 | * 64 | * @param action The action to execute. 65 | * @param args JSONArry of arguments for the plugin. 66 | * @param callbackContext The callback id used when calling back into JavaScript. 67 | * @return True if the action was valid, false if not. 68 | */ 69 | public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 70 | if (action.equals("getDeviceInfo")) { 71 | JSONObject r = new JSONObject(); 72 | r.put("uuid", Device.uuid); 73 | r.put("version", this.getOSVersion()); 74 | r.put("platform", this.getPlatform()); 75 | r.put("model", this.getModel()); 76 | callbackContext.success(r); 77 | } 78 | else { 79 | return false; 80 | } 81 | return true; 82 | } 83 | 84 | //-------------------------------------------------------------------------- 85 | // LOCAL METHODS 86 | //-------------------------------------------------------------------------- 87 | 88 | /** 89 | * Get the OS name. 90 | * 91 | * @return 92 | */ 93 | public String getPlatform() { 94 | String platform; 95 | if (isAmazonDevice()) { 96 | platform = AMAZON_PLATFORM; 97 | } else { 98 | platform = ANDROID_PLATFORM; 99 | } 100 | return platform; 101 | } 102 | 103 | /** 104 | * Get the device's Universally Unique Identifier (UUID). 105 | * 106 | * @return 107 | */ 108 | public String getUuid() { 109 | String uuid = Settings.Secure.getString(this.cordova.getActivity().getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 110 | return uuid; 111 | } 112 | 113 | public String getModel() { 114 | String model = android.os.Build.MODEL; 115 | return model; 116 | } 117 | 118 | public String getProductName() { 119 | String productname = android.os.Build.PRODUCT; 120 | return productname; 121 | } 122 | 123 | /** 124 | * Get the OS version. 125 | * 126 | * @return 127 | */ 128 | public String getOSVersion() { 129 | String osversion = android.os.Build.VERSION.RELEASE; 130 | return osversion; 131 | } 132 | 133 | public String getSDKVersion() { 134 | @SuppressWarnings("deprecation") 135 | String sdkversion = android.os.Build.VERSION.SDK; 136 | return sdkversion; 137 | } 138 | 139 | public String getTimeZoneID() { 140 | TimeZone tz = TimeZone.getDefault(); 141 | return (tz.getID()); 142 | } 143 | 144 | /** 145 | * Function to check if the device is manufactured by Amazon 146 | * 147 | * @return 148 | */ 149 | public boolean isAmazonDevice() { 150 | if (android.os.Build.MANUFACTURER.equals(AMAZON_DEVICE)) { 151 | return true; 152 | } 153 | return false; 154 | } 155 | 156 | } 157 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/blackberry10/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | function getModelName () { 23 | var modelName = window.qnx.webplatform.device.modelName; 24 | //Pre 10.2 (meaning Z10 or Q10) 25 | if (typeof modelName === "undefined") { 26 | if (window.screen.height === 720 && window.screen.width === 720) { 27 | if ( window.matchMedia("(-blackberry-display-technology: -blackberry-display-oled)").matches) { 28 | modelName = "Q10"; 29 | } else { 30 | modelName = "Q5"; 31 | } 32 | } else if ((window.screen.height === 1280 && window.screen.width === 768) || 33 | (window.screen.height === 768 && window.screen.width === 1280)) { 34 | modelName = "Z10"; 35 | } else { 36 | modelName = window.qnx.webplatform.deviceName; 37 | } 38 | } 39 | 40 | return modelName; 41 | } 42 | 43 | function getUUID () { 44 | var uuid = ""; 45 | try { 46 | //Must surround by try catch because this will throw if the app is missing permissions 47 | uuid = window.qnx.webplatform.device.devicePin; 48 | } catch (e) { 49 | //DO Nothing 50 | } 51 | return uuid; 52 | } 53 | 54 | module.exports = { 55 | getDeviceInfo: function (success, fail, args, env) { 56 | var result = new PluginResult(args, env), 57 | modelName = getModelName(), 58 | uuid = getUUID(), 59 | info = { 60 | platform: "blackberry10", 61 | version: window.qnx.webplatform.device.scmBundle, 62 | model: modelName, 63 | uuid: uuid 64 | }; 65 | 66 | result.ok(info); 67 | } 68 | }; 69 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/firefoxos/DeviceProxy.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | var firefoxos = require('cordova/platform'); 23 | var cordova = require('cordova'); 24 | 25 | module.exports = { 26 | getDeviceInfo: function(success, error) { 27 | setTimeout(function () { 28 | success({ 29 | cordova: firefoxos.cordovaVersion, 30 | platform: 'firefoxos', 31 | model: null, 32 | version: null, 33 | uuid: null 34 | }); 35 | }, 0); 36 | } 37 | }; 38 | 39 | require("cordova/firefoxos/commandProxy").add("Device", module.exports); 40 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/ios/CDVDevice.h: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | #import 21 | #import 22 | 23 | @interface CDVDevice : CDVPlugin 24 | {} 25 | 26 | + (NSString*)cordovaVersion; 27 | 28 | - (void)getDeviceInfo:(CDVInvokedUrlCommand*)command; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/ios/CDVDevice.m: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | #include 21 | #include 22 | 23 | #import 24 | #import "CDVDevice.h" 25 | 26 | @implementation UIDevice (ModelVersion) 27 | 28 | - (NSString*)modelVersion 29 | { 30 | size_t size; 31 | 32 | sysctlbyname("hw.machine", NULL, &size, NULL, 0); 33 | char* machine = malloc(size); 34 | sysctlbyname("hw.machine", machine, &size, NULL, 0); 35 | NSString* platform = [NSString stringWithUTF8String:machine]; 36 | free(machine); 37 | 38 | return platform; 39 | } 40 | 41 | @end 42 | 43 | @interface CDVDevice () {} 44 | @end 45 | 46 | @implementation CDVDevice 47 | 48 | - (void)getDeviceInfo:(CDVInvokedUrlCommand*)command 49 | { 50 | NSDictionary* deviceProperties = [self deviceProperties]; 51 | CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:deviceProperties]; 52 | 53 | /* Settings.plist 54 | * Read the optional Settings.plist file and push these user-defined settings down into the web application. 55 | * This can be useful for supplying build-time configuration variables down to the app to change its behavior, 56 | * such as specifying Full / Lite version, or localization (English vs German, for instance). 57 | */ 58 | // TODO: turn this into an iOS only plugin 59 | NSDictionary* temp = [CDVViewController getBundlePlist:@"Settings"]; 60 | 61 | if ([temp respondsToSelector:@selector(JSONString)]) { 62 | NSLog(@"Deprecation warning: window.Setting will be removed Aug 2013. Refer to https://issues.apache.org/jira/browse/CB-2433"); 63 | NSString* js = [NSString stringWithFormat:@"window.Settings = %@;", [temp JSONString]]; 64 | [self.commandDelegate evalJs:js]; 65 | } 66 | 67 | [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 68 | } 69 | 70 | - (NSDictionary*)deviceProperties 71 | { 72 | UIDevice* device = [UIDevice currentDevice]; 73 | NSMutableDictionary* devProps = [NSMutableDictionary dictionaryWithCapacity:4]; 74 | 75 | [devProps setObject:[device modelVersion] forKey:@"model"]; 76 | [devProps setObject:@"iOS" forKey:@"platform"]; 77 | [devProps setObject:[device systemVersion] forKey:@"version"]; 78 | [devProps setObject:[device uniqueAppInstanceIdentifier] forKey:@"uuid"]; 79 | [devProps setObject:[[self class] cordovaVersion] forKey:@"cordova"]; 80 | 81 | NSDictionary* devReturn = [NSDictionary dictionaryWithDictionary:devProps]; 82 | return devReturn; 83 | } 84 | 85 | + (NSString*)cordovaVersion 86 | { 87 | return CDV_VERSION; 88 | } 89 | 90 | @end 91 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/tizen/DeviceProxy.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | var tizen = require('cordova/platform'); 23 | var cordova = require('cordova'); 24 | 25 | module.exports = { 26 | getDeviceInfo: function(success, error) { 27 | setTimeout(function () { 28 | success({ 29 | cordova: tizen.cordovaVersion, 30 | platform: 'tizen', 31 | model: null, 32 | version: null, 33 | uuid: null 34 | }); 35 | }, 0); 36 | } 37 | }; 38 | 39 | require("cordova/tizen/commandProxy").add("Device", module.exports); 40 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/ubuntu/device.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2011 Wolfgang Koller - http://www.gofg.at/ 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | #include 19 | 20 | #include"device.h" 21 | 22 | #define CORDOVA "3.0.0" 23 | 24 | Device::Device(Cordova *cordova) : CPlugin(cordova) { 25 | } 26 | 27 | static QString getOSName() { 28 | #ifdef Q_OS_SYMBIAN 29 | QString platform = "Symbian"; 30 | #endif 31 | #ifdef Q_OS_WIN 32 | QString platform = "Windows"; 33 | #endif 34 | #ifdef Q_OS_WINCE 35 | QString platform = "Windows CE"; 36 | #endif 37 | #ifdef Q_OS_LINUX 38 | QString platform = "Linux"; 39 | #endif 40 | return platform; 41 | } 42 | 43 | void Device::getInfo(int scId, int ecId) { 44 | Q_UNUSED(ecId) 45 | 46 | QDeviceInfo systemDeviceInfo; 47 | QDeviceInfo systemInfo; 48 | 49 | QString platform = getOSName(); 50 | 51 | QString uuid = systemDeviceInfo.uniqueDeviceID(); 52 | if (uuid.isEmpty()) { 53 | QString deviceDescription = systemInfo.imei(0) + ";" + systemInfo.manufacturer() + ";" + systemInfo.model() + ";" + systemInfo.productName() + ";" + platform; 54 | QString user = qgetenv("USER"); 55 | if (user.isEmpty()) { 56 | user = qgetenv("USERNAME"); 57 | if (user.isEmpty()) 58 | user = QDir::homePath(); 59 | } 60 | uuid = QString(QCryptographicHash::hash((deviceDescription + ";" + user).toUtf8(), QCryptographicHash::Md5).toHex()); 61 | } 62 | 63 | this->cb(scId, systemDeviceInfo.model(), CORDOVA, platform, uuid, systemInfo.version(QDeviceInfo::Os)); 64 | } 65 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/ubuntu/device.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2011 Wolfgang Koller - http://www.gofg.at/ 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef DEVICE_H_FDSAFAS 18 | #define DEVICE_H_FDSAFAS 19 | 20 | #include 21 | 22 | #include 23 | 24 | class Device: public CPlugin { 25 | Q_OBJECT 26 | public: 27 | explicit Device(Cordova *cordova); 28 | 29 | virtual const QString fullName() override { 30 | return Device::fullID(); 31 | } 32 | 33 | virtual const QString shortName() override { 34 | return "Device"; 35 | } 36 | 37 | static const QString fullID() { 38 | return "com.cordova.Device"; 39 | } 40 | 41 | signals: 42 | 43 | public slots: 44 | void getInfo(int scId, int ecId); 45 | }; 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/ubuntu/device.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | var cordova = require('cordova'); 23 | var exec = require('cordova/exec'); 24 | 25 | module.exports = { 26 | getInfo:function(win,fail,args) { 27 | Cordova.exec(function (model, cordova, platform, uuid, version) { 28 | win({name: name, model: model, cordova: cordova, 29 | platform: platform, uuid: uuid, version: version}); 30 | }, null, "com.cordova.Device", "getInfo", []); 31 | } 32 | }; 33 | 34 | require("cordova/exec/proxy").add("Device", module.exports); 35 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/windows8/DeviceProxy.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | 23 | var cordova = require('cordova'); 24 | var utils = require('cordova/utils'); 25 | 26 | module.exports = { 27 | 28 | getDeviceInfo:function(win,fail,args) { 29 | 30 | // deviceId aka uuid, stored in Windows.Storage.ApplicationData.current.localSettings.values.deviceId 31 | var deviceId; 32 | 33 | var localSettings = Windows.Storage.ApplicationData.current.localSettings; 34 | 35 | if (localSettings.values.deviceId) { 36 | deviceId = localSettings.values.deviceId; 37 | } 38 | else { 39 | deviceId = localSettings.values.deviceId = utils.createUUID(); 40 | } 41 | 42 | setTimeout(function () { 43 | win({ platform: "windows8", version: "8", uuid: deviceId, model: window.clientInformation.platform }); 44 | }, 0); 45 | } 46 | 47 | }; 48 | 49 | require("cordova/exec/proxy").add("Device", module.exports); 50 | 51 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/src/wp/Device.cs: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed under the Apache License, Version 2.0 (the "License"); 3 | you may not use this file except in compliance with the License. 4 | You may obtain a copy of the License at 5 | 6 | http://www.apache.org/licenses/LICENSE-2.0 7 | 8 | Unless required by applicable law or agreed to in writing, software 9 | distributed under the License is distributed on an "AS IS" BASIS, 10 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | See the License for the specific language governing permissions and 12 | limitations under the License. 13 | */ 14 | 15 | using System; 16 | using System.Net; 17 | using System.Windows; 18 | using System.Windows.Controls; 19 | using System.Windows.Documents; 20 | using System.Windows.Ink; 21 | using System.Windows.Input; 22 | using System.Windows.Media; 23 | using System.Windows.Media.Animation; 24 | using System.Windows.Shapes; 25 | using Microsoft.Phone.Info; 26 | using System.IO.IsolatedStorage; 27 | using System.Windows.Resources; 28 | using System.IO; 29 | using System.Diagnostics; 30 | 31 | namespace WPCordovaClassLib.Cordova.Commands 32 | { 33 | public class Device : BaseCommand 34 | { 35 | public void getDeviceInfo(string notused) 36 | { 37 | 38 | string res = String.Format("\"name\":\"{0}\",\"platform\":\"{1}\",\"uuid\":\"{2}\",\"version\":\"{3}\",\"model\":\"{4}\"", 39 | this.name, 40 | this.platform, 41 | this.uuid, 42 | this.version, 43 | this.model); 44 | 45 | res = "{" + res + "}"; 46 | //Debug.WriteLine("Result::" + res); 47 | DispatchCommandResult(new PluginResult(PluginResult.Status.OK, res)); 48 | } 49 | 50 | public string model 51 | { 52 | get 53 | { 54 | return DeviceStatus.DeviceName; 55 | //return String.Format("{0},{1},{2}", DeviceStatus.DeviceManufacturer, DeviceStatus.DeviceHardwareVersion, DeviceStatus.DeviceFirmwareVersion); 56 | } 57 | } 58 | 59 | public string name 60 | { 61 | get 62 | { 63 | return DeviceStatus.DeviceName; 64 | 65 | } 66 | } 67 | 68 | public string platform 69 | { 70 | get 71 | { 72 | return Environment.OSVersion.Platform.ToString(); 73 | } 74 | } 75 | 76 | public string uuid 77 | { 78 | get 79 | { 80 | string returnVal = ""; 81 | object id; 82 | UserExtendedProperties.TryGetValue("ANID", out id); 83 | 84 | if (id != null) 85 | { 86 | returnVal = id.ToString().Substring(2, 32); 87 | } 88 | else 89 | { 90 | returnVal = "???unknown???"; 91 | 92 | using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 93 | { 94 | try 95 | { 96 | IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream("DeviceID.txt", FileMode.Open, FileAccess.Read, appStorage); 97 | 98 | using (StreamReader reader = new StreamReader(fileStream)) 99 | { 100 | returnVal = reader.ReadLine(); 101 | } 102 | } 103 | catch (Exception /*ex*/) 104 | { 105 | 106 | } 107 | } 108 | } 109 | 110 | return returnVal; 111 | } 112 | } 113 | 114 | public string version 115 | { 116 | get 117 | { 118 | return Environment.OSVersion.Version.ToString(); 119 | } 120 | } 121 | 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.device/www/device.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | var argscheck = require('cordova/argscheck'), 23 | channel = require('cordova/channel'), 24 | utils = require('cordova/utils'), 25 | exec = require('cordova/exec'), 26 | cordova = require('cordova'); 27 | 28 | channel.createSticky('onCordovaInfoReady'); 29 | // Tell cordova channel to wait on the CordovaInfoReady event 30 | channel.waitForInitialization('onCordovaInfoReady'); 31 | 32 | /** 33 | * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the 34 | * phone, etc. 35 | * @constructor 36 | */ 37 | function Device() { 38 | this.available = false; 39 | this.platform = null; 40 | this.version = null; 41 | this.uuid = null; 42 | this.cordova = null; 43 | this.model = null; 44 | 45 | var me = this; 46 | 47 | channel.onCordovaReady.subscribe(function() { 48 | me.getInfo(function(info) { 49 | //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js 50 | //TODO: CB-5105 native implementations should not return info.cordova 51 | var buildLabel = cordova.version; 52 | me.available = true; 53 | me.platform = info.platform; 54 | me.version = info.version; 55 | me.uuid = info.uuid; 56 | me.cordova = buildLabel; 57 | me.model = info.model; 58 | channel.onCordovaInfoReady.fire(); 59 | },function(e) { 60 | me.available = false; 61 | utils.alert("[ERROR] Error initializing Cordova: " + e); 62 | }); 63 | }); 64 | } 65 | 66 | /** 67 | * Get device info 68 | * 69 | * @param {Function} successCallback The function to call when the heading data is available 70 | * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) 71 | */ 72 | Device.prototype.getInfo = function(successCallback, errorCallback) { 73 | argscheck.checkArgs('fF', 'Device.getInfo', arguments); 74 | exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); 75 | }; 76 | 77 | module.exports = new Device(); 78 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.statusbar/.fetch.json: -------------------------------------------------------------------------------- 1 | {"source":{"type":"local","path":"/tmp/org.apache.cordova.statusbar/package"}} -------------------------------------------------------------------------------- /plugins/org.apache.cordova.statusbar/README.md: -------------------------------------------------------------------------------- 1 | StatusBar 2 | ====== 3 | 4 | > The `StatusBar` object provides some functions to customize the iOS StatusBar. 5 | 6 | The plugin reads the __StatusBarOverlaysWebView__ (boolean, defaults to true) and __StatusBarBackgroundColor__ (color hex string, defaults to #000000) values from config.xml. 7 | 8 | Methods 9 | ------- 10 | 11 | - StatusBar.overlaysWebView 12 | - StatusBar.styleDefault 13 | - StatusBar.styleLightContent 14 | - StatusBar.styleBlackTranslucent 15 | - StatusBar.styleBlackOpaque 16 | - StatusBar.backgroundColorByName 17 | - StatusBar.backgroundColorByHexString 18 | - StatusBar.hide 19 | - StatusBar.show 20 | 21 | Properties 22 | -------- 23 | 24 | - StatusBar.isVisible 25 | 26 | Permissions 27 | ----------- 28 | 29 | #### config.xml 30 | 31 | 32 | 33 | 34 | 35 | StatusBar.overlaysWebView 36 | ================= 37 | 38 | On iOS 7, make the statusbar overlay or not overlay the WebView. 39 | 40 | StatusBar.overlaysWebView(true); 41 | 42 | Description 43 | ----------- 44 | 45 | On iOS 7, set to false to make the statusbar appear like iOS 6. Set the style and background color to suit using the other functions. 46 | 47 | 48 | Supported Platforms 49 | ------------------- 50 | 51 | - iOS 52 | 53 | Quick Example 54 | ------------- 55 | 56 | StatusBar.overlaysWebView(true); 57 | StatusBar.overlaysWebView(false); 58 | 59 | StatusBar.styleDefault 60 | ================= 61 | 62 | Use the default statusbar (dark text, for light backgrounds). 63 | 64 | StatusBar.styleDefault(); 65 | 66 | 67 | Supported Platforms 68 | ------------------- 69 | 70 | - iOS 71 | 72 | StatusBar.styleLightContent 73 | ================= 74 | 75 | Use the lightContent statusbar (light text, for dark backgrounds). 76 | 77 | StatusBar.styleLightContent(); 78 | 79 | 80 | Supported Platforms 81 | ------------------- 82 | 83 | - iOS 84 | 85 | StatusBar.styleBlackTranslucent 86 | ================= 87 | 88 | Use the blackTranslucent statusbar (light text, for dark backgrounds). 89 | 90 | StatusBar.styleBlackTranslucent(); 91 | 92 | 93 | Supported Platforms 94 | ------------------- 95 | 96 | - iOS 97 | 98 | StatusBar.styleBlackOpaque 99 | ================= 100 | 101 | Use the blackOpaque statusbar (light text, for dark backgrounds). 102 | 103 | StatusBar.styleBlackOpaque(); 104 | 105 | 106 | Supported Platforms 107 | ------------------- 108 | 109 | - iOS 110 | 111 | 112 | StatusBar.backgroundColorByName 113 | ================= 114 | 115 | On iOS 7, when you set StatusBar.statusBarOverlaysWebView to false, you can set the background color of the statusbar by color name. 116 | 117 | StatusBar.backgroundColorByName("red"); 118 | 119 | Supported color names are: 120 | 121 | black, darkGray, lightGray, white, gray, red, green, blue, cyan, yellow, magenta, orange, purple, brown, clear 122 | 123 | 124 | Supported Platforms 125 | ------------------- 126 | 127 | - iOS 128 | 129 | StatusBar.backgroundColorByHexString 130 | ================= 131 | 132 | On iOS 7, when you set StatusBar.statusBarOverlaysWebView to false, you can set the background color of the statusbar by a hex string (#RRGGBB). 133 | 134 | StatusBar.backgroundColorByHexString("#C0C0C0"); 135 | 136 | 137 | Supported Platforms 138 | ------------------- 139 | 140 | - iOS 141 | 142 | StatusBar.hide 143 | ================= 144 | 145 | Hide the statusbar. 146 | 147 | StatusBar.hide(); 148 | 149 | 150 | Supported Platforms 151 | ------------------- 152 | 153 | - iOS 154 | 155 | StatusBar.show 156 | ================= 157 | 158 | Shows the statusbar. 159 | 160 | StatusBar.show(); 161 | 162 | 163 | Supported Platforms 164 | ------------------- 165 | 166 | - iOS 167 | 168 | 169 | StatusBar.isVisible 170 | ================= 171 | 172 | Read this property to see if the statusbar is visible or not. 173 | 174 | if (StatusBar.isVisible) { 175 | // do something 176 | } 177 | 178 | 179 | Supported Platforms 180 | ------------------- 181 | 182 | - iOS 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.statusbar/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.3", 3 | "name": "org.apache.cordova.statusbar", 4 | "cordova_name": "StatusBar", 5 | "description": "Cordova StatusBar Plugin", 6 | "license": "Apache 2.0", 7 | "keywords": [ 8 | "cordova", 9 | "statusbar" 10 | ], 11 | "engines": [ 12 | { 13 | "name": "cordova", 14 | "version": ">=3.0.0" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /plugins/org.apache.cordova.statusbar/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | StatusBar 9 | Cordova StatusBar Plugin 10 | Apache 2.0 11 | cordova,statusbar 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 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.statusbar/src/ios/CDVStatusBar.h: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | http://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | #import 21 | #import 22 | 23 | @interface CDVStatusBar : CDVPlugin { 24 | @protected 25 | BOOL _statusBarOverlaysWebView; 26 | @protected 27 | UIView* _statusBarBackgroundView; 28 | @protected 29 | BOOL _uiviewControllerBasedStatusBarAppearance; 30 | @protected 31 | UIColor* _statusBarBackgroundColor; 32 | } 33 | 34 | @property (atomic, assign) BOOL statusBarOverlaysWebView; 35 | 36 | - (void) overlaysWebView:(CDVInvokedUrlCommand*)command; 37 | 38 | - (void) styleDefault:(CDVInvokedUrlCommand*)command; 39 | - (void) styleLightContent:(CDVInvokedUrlCommand*)command; 40 | - (void) styleBlackTranslucent:(CDVInvokedUrlCommand*)command; 41 | - (void) styleBlackOpaque:(CDVInvokedUrlCommand*)command; 42 | 43 | - (void) backgroundColorByName:(CDVInvokedUrlCommand*)command; 44 | - (void) backgroundColorByHexString:(CDVInvokedUrlCommand*)command; 45 | 46 | - (void) hide:(CDVInvokedUrlCommand*)command; 47 | - (void) show:(CDVInvokedUrlCommand*)command; 48 | 49 | - (void) _ready:(CDVInvokedUrlCommand*)command; 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /plugins/org.apache.cordova.statusbar/www/statusbar.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Licensed to the Apache Software Foundation (ASF) under one 4 | * or more contributor license agreements. See the NOTICE file 5 | * distributed with this work for additional information 6 | * regarding copyright ownership. The ASF licenses this file 7 | * to you under the Apache License, Version 2.0 (the 8 | * "License"); you may not use this file except in compliance 9 | * with the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, 14 | * software distributed under the License is distributed on an 15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | * KIND, either express or implied. See the License for the 17 | * specific language governing permissions and limitations 18 | * under the License. 19 | * 20 | */ 21 | 22 | var argscheck = require('cordova/argscheck'), 23 | utils = require('cordova/utils'), 24 | exec = require('cordova/exec'); 25 | 26 | // prime it 27 | exec(null, null, "StatusBar", "_ready", []); 28 | 29 | var StatusBar = function() { 30 | }; 31 | 32 | StatusBar.overlaysWebView = function(doOverlay) { 33 | exec(null, null, "StatusBar", "overlaysWebView", [doOverlay]); 34 | }; 35 | 36 | StatusBar.styleDefault = function() { 37 | exec(null, null, "StatusBar", "styleDefault", []); 38 | }; 39 | 40 | StatusBar.styleLightContent = function() { 41 | exec(null, null, "StatusBar", "styleLightContent", []); 42 | }; 43 | 44 | StatusBar.styleBlackTranslucent = function() { 45 | exec(null, null, "StatusBar", "styleBlackTranslucent", []); 46 | }; 47 | 48 | StatusBar.styleBlackOpaque = function() { 49 | exec(null, null, "StatusBar", "styleBlackOpaque", []); 50 | }; 51 | 52 | StatusBar.backgroundColorByName = function(colorname) { 53 | exec(null, null, "StatusBar", "backgroundColorByName", [colorname]); 54 | } 55 | 56 | StatusBar.backgroundColorByHexString = function(hexString) { 57 | exec(null, null, "StatusBar", "backgroundColorByHexString", [hexString]); 58 | } 59 | 60 | StatusBar.hide = function() { 61 | exec(null, null, "StatusBar", "hide", []); 62 | } 63 | 64 | StatusBar.show = function() { 65 | exec(null, null, "StatusBar", "show", []); 66 | } 67 | 68 | StatusBar.isVisible = true; 69 | 70 | module.exports = StatusBar; 71 | -------------------------------------------------------------------------------- /scss/ionic.app.scss: -------------------------------------------------------------------------------- 1 | /* 2 | To customize the look and feel of Ionic, you can override the variables 3 | in ionic's _variables.scss file. 4 | 5 | For example, you might change some of the default colors: 6 | 7 | $light: #fff !default; 8 | $stable: #f8f8f8 !default; 9 | $positive: #4a87ee !default; 10 | $calm: #43cee6 !default; 11 | $balanced: #66cc33 !default; 12 | $energized: #f0b840 !default; 13 | $assertive: #ef4e3a !default; 14 | $royal: #8a6de9 !default; 15 | $dark: #444 !default; 16 | */ 17 | 18 | // The path for our ionicons font files, relative to the built CSS in www/css 19 | $ionicons-font-path: "../lib/ionic/fonts" !default; 20 | 21 | // Include all of Ionic 22 | @import "www/lib/ionic/scss/ionic"; 23 | 24 | -------------------------------------------------------------------------------- /www/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/www/.gitignore -------------------------------------------------------------------------------- /www/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | HelloCordova 4 | 5 | An Ionic Framework and Cordova project. 6 | 7 | 8 | Ionic Framework Team 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /www/css/style.css: -------------------------------------------------------------------------------- 1 | /* Empty. Add your own CSS if you like */ 2 | -------------------------------------------------------------------------------- /www/img/ionic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/www/img/ionic.png -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 35 | 36 | 37 | Back 38 | 39 | 40 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /www/js/app.js: -------------------------------------------------------------------------------- 1 | // Ionic Starter App 2 | 3 | // angular.module is a global place for creating, registering and retrieving Angular modules 4 | // 'starter' is the name of this angular module example (also set in a attribute in index.html) 5 | // the 2nd parameter is an array of 'requires' 6 | // 'starter.services' is found in services.js 7 | // 'starter.controllers' is found in controllers.js 8 | angular.module('starter', ['ionic', 'UserApp', 'starter.controllers', 'starter.services']) 9 | 10 | .run(function($ionicPlatform, user) { 11 | // Initiate the user service with your UserApp App Id 12 | // https://help.userapp.io/customer/portal/articles/1322336-how-do-i-find-my-app-id- 13 | user.init({ appId: 'YOUR-USERAPP-APP-ID' }); 14 | 15 | $ionicPlatform.ready(function() { 16 | if(window.StatusBar) { 17 | // org.apache.cordova.statusbar required 18 | StatusBar.styleDefault(); 19 | } 20 | }); 21 | }) 22 | 23 | .config(function($stateProvider, $urlRouterProvider) { 24 | 25 | // Ionic uses AngularUI Router which uses the concept of states 26 | // Learn more here: https://github.com/angular-ui/ui-router 27 | // Set up the various states which the app can be in. 28 | // Each state's controller can be found in controllers.js 29 | $stateProvider 30 | 31 | // the login with facebook route 32 | .state('login-facebook', { 33 | url: '/login-facebook', 34 | templateUrl: 'templates/login-facebook.html', 35 | data: { 36 | login: true 37 | } 38 | }) 39 | 40 | // the login route 41 | .state('login', { 42 | url: '/login', 43 | templateUrl: 'templates/login.html', 44 | data: { 45 | public: true 46 | } 47 | }) 48 | 49 | // the signup route 50 | .state('signup', { 51 | url: '/signup', 52 | templateUrl: 'templates/signup.html', 53 | data: { 54 | public: true 55 | } 56 | }) 57 | 58 | // setup an abstract state for the tabs directive 59 | .state('tab', { 60 | url: "/tab", 61 | abstract: true, 62 | templateUrl: "templates/tabs.html" 63 | }) 64 | 65 | // Each tab has its own nav history stack: 66 | 67 | .state('tab.dash', { 68 | url: '/dash', 69 | views: { 70 | 'tab-dash': { 71 | templateUrl: 'templates/tab-dash.html', 72 | controller: 'DashCtrl' 73 | } 74 | } 75 | }) 76 | 77 | .state('tab.friends', { 78 | url: '/friends', 79 | views: { 80 | 'tab-friends': { 81 | templateUrl: 'templates/tab-friends.html', 82 | controller: 'FriendsCtrl' 83 | } 84 | } 85 | }) 86 | .state('tab.friend-detail', { 87 | url: '/friend/:friendId', 88 | views: { 89 | 'tab-friends': { 90 | templateUrl: 'templates/friend-detail.html', 91 | controller: 'FriendDetailCtrl' 92 | } 93 | } 94 | }) 95 | 96 | .state('tab.account', { 97 | url: '/account', 98 | views: { 99 | 'tab-account': { 100 | templateUrl: 'templates/tab-account.html', 101 | controller: 'AccountCtrl' 102 | } 103 | } 104 | }) 105 | 106 | // if none of the above states are matched, use this as the fallback 107 | $urlRouterProvider.otherwise('/tab/dash'); 108 | 109 | }); 110 | 111 | -------------------------------------------------------------------------------- /www/js/controllers.js: -------------------------------------------------------------------------------- 1 | angular.module('starter.controllers', []) 2 | 3 | .controller('DashCtrl', function($scope) { 4 | }) 5 | 6 | .controller('FriendsCtrl', function($scope, Friends) { 7 | $scope.friends = Friends.all(); 8 | }) 9 | 10 | .controller('FriendDetailCtrl', function($scope, $stateParams, Friends) { 11 | $scope.friend = Friends.get($stateParams.friendId); 12 | }) 13 | 14 | .controller('AccountCtrl', function($scope) { 15 | }); 16 | -------------------------------------------------------------------------------- /www/js/services.js: -------------------------------------------------------------------------------- 1 | angular.module('starter.services', []) 2 | 3 | /** 4 | * A simple example service that returns some data. 5 | */ 6 | .factory('Friends', function() { 7 | // Might use a resource here that returns a JSON array 8 | 9 | // Some fake testing data 10 | var friends = [ 11 | { id: 0, name: 'Scruff McGruff' }, 12 | { id: 1, name: 'G.I. Joe' }, 13 | { id: 2, name: 'Miss Frizzle' }, 14 | { id: 3, name: 'Ash Ketchum' } 15 | ]; 16 | 17 | return { 18 | all: function() { 19 | return friends; 20 | }, 21 | get: function(friendId) { 22 | // Simple index lookup 23 | return friends[friendId]; 24 | } 25 | } 26 | }); 27 | -------------------------------------------------------------------------------- /www/lib/ionic/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/www/lib/ionic/fonts/ionicons.eot -------------------------------------------------------------------------------- /www/lib/ionic/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/www/lib/ionic/fonts/ionicons.ttf -------------------------------------------------------------------------------- /www/lib/ionic/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/userapp-io/userapp-ionic/266de16b739ed0da65c25d48205e8b9355e7044d/www/lib/ionic/fonts/ionicons.woff -------------------------------------------------------------------------------- /www/lib/ionic/js/angular/angular-resource.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.12 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)!p.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&& 7 | b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f=c;d--)e.end&&e.end(f[d]);f.length=c}}var b,g,f=[],l=a;for(f.last=function(){return f[f.length-1]};a;){g=!0;if(f.last()&&x[f.last()])a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(b,a){a=a.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(r(a));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&e.comment(a.substring(4,b)),a=a.substring(b+3),g=!1);else if(y.test(a)){if(b=a.match(y))a= 8 | a.replace(b[0],""),g=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,c),g=!1}else K.test(a)&&(b=a.match(A))&&(a=a.substring(b[0].length),b[0].replace(A,d),g=!1);g&&(b=a.indexOf("<"),g=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(r(g)))}if(a==l)throw L("badparse",a);l=a}c()}function r(a){if(!a)return"";var e=M.exec(a);a=e[1];var d=e[3];if(e=e[2])n.innerHTML=e.replace(//g,">")}function s(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,g,f){a=h.lowercase(a);!d&&x[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(g,function(d,f){var g=h.lowercase(f),k="img"===a&&"src"===g||"background"===g;!0!==O[g]||!0===D[g]&&!e(d,k)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c(""));a==d&&(d=!1)},chars:function(a){d|| 10 | c(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,z=/^<\s*\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^]*?)>/i,I=/]/,d=/^mailto:/;return function(c,b){function g(a){a&&m.push(E(a))}function f(a,c){m.push("');g(c);m.push("")}if(!c)return c;for(var l,k=c,m=[],n,p;l=k.match(e);)n=l[0],l[2]==l[3]&&(n="mailto:"+n),p=l.index,g(k.substr(0,p)),f(n,l[0].replace(d,"")),k=k.substring(p+l[0].length);g(k);return a(m.join(""))}}])})(window,window.angular); 14 | //# sourceMappingURL=angular-sanitize.min.js.map 15 | -------------------------------------------------------------------------------- /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/_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/_bar.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Bar (Headers and Footers) 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .bar { 8 | @include display-flex(); 9 | @include translate3d(0,0,0); 10 | @include user-select(none); 11 | position: absolute; 12 | right: 0; 13 | left: 0; 14 | z-index: $z-index-bar; 15 | 16 | box-sizing: border-box; 17 | padding: $bar-padding-portrait; 18 | 19 | width: 100%; 20 | height: $bar-height; 21 | border-width: 0; 22 | border-style: solid; 23 | border-top: 1px solid transparent; 24 | border-bottom: 1px solid $bar-default-border; 25 | 26 | background-color: $bar-default-bg; 27 | 28 | /* border-width: 1px will actually create 2 device pixels on retina */ 29 | /* this nifty trick sets an actual 1px border on hi-res displays */ 30 | background-size: 0; 31 | @media (min--moz-device-pixel-ratio: 1.5), 32 | (-webkit-min-device-pixel-ratio: 1.5), 33 | (min-device-pixel-ratio: 1.5), 34 | (min-resolution: 144dpi), 35 | (min-resolution: 1.5dppx) { 36 | border: none; 37 | background-image: linear-gradient(0deg, $bar-default-border, $bar-default-border 50%, transparent 50%); 38 | background-position: bottom; 39 | background-size: 100% 1px; 40 | background-repeat: no-repeat; 41 | } 42 | 43 | &.bar-clear { 44 | border: none; 45 | background: none; 46 | color: #fff; 47 | 48 | .button { 49 | color: #fff; 50 | } 51 | .title { 52 | color: #fff; 53 | } 54 | } 55 | 56 | &.item-input-inset { 57 | .item-input-wrapper { 58 | margin-top: -1px; 59 | 60 | input { 61 | padding-left: 8px; 62 | height: 28px; 63 | } 64 | } 65 | } 66 | 67 | &.bar-light { 68 | @include bar-style($bar-light-bg, $bar-light-border, $bar-light-text); 69 | } 70 | &.bar-stable { 71 | @include bar-style($bar-stable-bg, $bar-stable-border, $bar-stable-text); 72 | } 73 | &.bar-positive { 74 | @include bar-style($bar-positive-bg, $bar-positive-border, $bar-positive-text); 75 | } 76 | &.bar-calm { 77 | @include bar-style($bar-calm-bg, $bar-calm-border, $bar-calm-text); 78 | } 79 | &.bar-assertive { 80 | @include bar-style($bar-assertive-bg, $bar-assertive-border, $bar-assertive-text); 81 | } 82 | &.bar-balanced { 83 | @include bar-style($bar-balanced-bg, $bar-balanced-border, $bar-balanced-text); 84 | } 85 | &.bar-energized { 86 | @include bar-style($bar-energized-bg, $bar-energized-border, $bar-energized-text); 87 | } 88 | &.bar-royal { 89 | @include bar-style($bar-royal-bg, $bar-royal-border, $bar-royal-text); 90 | } 91 | &.bar-dark { 92 | @include bar-style($bar-dark-bg, $bar-dark-border, $bar-dark-text); 93 | } 94 | 95 | // Title inside of a bar is centered 96 | .title { 97 | position: absolute; 98 | 99 | top: 0; 100 | right: 0; 101 | left: 0; 102 | z-index: $z-index-bar-title; 103 | overflow: hidden; 104 | 105 | margin: 0 10px; 106 | 107 | min-width: 30px; 108 | 109 | text-align: center; 110 | 111 | // Go into ellipsis if too small 112 | text-overflow: ellipsis; 113 | white-space: nowrap; 114 | 115 | font-size: $bar-title-font-size; 116 | 117 | line-height: $bar-height; 118 | 119 | &.title-left { 120 | text-align: left; 121 | } 122 | &.title-right { 123 | text-align: right; 124 | } 125 | } 126 | 127 | .title a { 128 | color: inherit; 129 | } 130 | 131 | .button { 132 | z-index: $z-index-bar-button; 133 | padding: 0 $button-bar-button-padding; 134 | min-width: initial; 135 | min-height: $button-bar-button-height - 1; 136 | font-size: $button-bar-button-font-size; 137 | font-weight: 400; 138 | line-height: $button-bar-button-height; 139 | 140 | &.button-icon:before, 141 | .icon:before, 142 | &.icon:before, 143 | &.icon-left:before, 144 | &.icon-right:before { 145 | padding-right: 2px; 146 | padding-left: 2px; 147 | font-size: $button-bar-button-icon-size; 148 | line-height: $button-bar-button-height; 149 | } 150 | 151 | &.button-icon { 152 | .icon:before, 153 | &:before, 154 | &.icon-left:before, 155 | &.icon-right:before { 156 | vertical-align: top; 157 | font-size: $button-large-icon-size; 158 | line-height: $button-bar-button-height; 159 | } 160 | } 161 | &.button-clear { 162 | font-size: $bar-title-font-size; 163 | font-weight: 300; 164 | padding-right: 2px; 165 | padding-left: 2px; 166 | 167 | .icon:before, 168 | &.icon:before, 169 | &.icon-left:before, 170 | &.icon-right:before { 171 | font-size: $button-large-icon-size; 172 | line-height: $button-bar-button-height; 173 | } 174 | } 175 | 176 | &.back-button.active { 177 | opacity: 1; 178 | } 179 | } 180 | 181 | .button-bar > .button, 182 | .buttons > .button { 183 | min-height: $button-bar-button-height - 1; 184 | line-height: $button-bar-button-height; 185 | } 186 | 187 | .button-bar + .button, 188 | .button + .button-bar { 189 | margin-left: 5px; 190 | } 191 | 192 | // Place the last button in a bar on the right of the bar 193 | .title + .button:last-child, 194 | > .button + .button:last-child, 195 | > .button.pull-right, 196 | .buttons.pull-right, 197 | .title + .buttons { 198 | position: absolute; 199 | top: 5px; 200 | right: 5px; 201 | bottom: 5px; 202 | } 203 | 204 | } 205 | 206 | // Default styles for buttons inside of styled bars 207 | .bar-light { 208 | .button { 209 | @include button-style($bar-light-bg, $bar-light-border, $bar-light-active-bg, $bar-light-active-border, $bar-light-text); 210 | @include button-clear($bar-light-text, $bar-title-font-size); 211 | } 212 | } 213 | .bar-stable { 214 | .button { 215 | @include button-style($bar-stable-bg, $bar-stable-border, $bar-stable-active-bg, $bar-stable-active-border, $bar-stable-text); 216 | @include button-clear($bar-stable-text, $bar-title-font-size); 217 | } 218 | } 219 | .bar-positive { 220 | .button { 221 | @include button-style($bar-positive-bg, $bar-positive-border, $bar-positive-active-bg, $bar-positive-active-border, $bar-positive-text); 222 | @include button-clear(#fff, $bar-title-font-size); 223 | } 224 | } 225 | .bar-calm { 226 | .button { 227 | @include button-style($bar-calm-bg, $bar-calm-border, $bar-calm-active-bg, $bar-calm-active-border, $bar-calm-text); 228 | @include button-clear(#fff, $bar-title-font-size); 229 | } 230 | } 231 | .bar-assertive { 232 | .button { 233 | @include button-style($bar-assertive-bg, $bar-assertive-border, $bar-assertive-active-bg, $bar-assertive-active-border, $bar-assertive-text); 234 | @include button-clear(#fff, $bar-title-font-size); 235 | } 236 | } 237 | .bar-balanced { 238 | .button { 239 | @include button-style($bar-balanced-bg, $bar-balanced-border, $bar-balanced-active-bg, $bar-balanced-active-border, $bar-balanced-text); 240 | @include button-clear(#fff, $bar-title-font-size); 241 | } 242 | } 243 | .bar-energized { 244 | .button { 245 | @include button-style($bar-energized-bg, $bar-energized-border, $bar-energized-active-bg, $bar-energized-active-border, $bar-energized-text); 246 | @include button-clear(#fff, $bar-title-font-size); 247 | } 248 | } 249 | .bar-royal { 250 | .button { 251 | @include button-style($bar-royal-bg, $bar-royal-border, $bar-royal-active-bg, $bar-royal-active-border, $bar-royal-text); 252 | @include button-clear(#fff, $bar-title-font-size); 253 | } 254 | } 255 | .bar-dark { 256 | .button { 257 | @include button-style($bar-dark-bg, $bar-dark-border, $bar-dark-active-bg, $bar-dark-active-border, $bar-dark-text); 258 | @include button-clear(#fff, $bar-title-font-size); 259 | } 260 | } 261 | 262 | // Header at top 263 | .bar-header { 264 | top: 0; 265 | border-top-width: 0; 266 | border-bottom-width: 1px; 267 | } 268 | 269 | // Footer at bottom 270 | .bar-footer { 271 | bottom: 0; 272 | border-top-width: 1px; 273 | border-bottom-width: 0; 274 | background-position: top; 275 | } 276 | 277 | // Don't render padding if the bar is just for tabs 278 | .bar-tabs { 279 | padding: 0; 280 | } 281 | 282 | .bar-subheader { 283 | top: $bar-height; 284 | display: block; 285 | } 286 | .bar-subfooter { 287 | bottom: $bar-height; 288 | display: block; 289 | } 290 | -------------------------------------------------------------------------------- /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: 1px $button-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: -8px; 37 | bottom: -6px; 38 | left: -8px; 39 | content: ' '; 40 | } 41 | 42 | .icon { 43 | vertical-align: top; 44 | } 45 | 46 | .icon:before, 47 | &.icon:before, 48 | &.icon-left:before, 49 | &.icon-right:before { 50 | display: inline-block; 51 | padding: 0 0 $button-border-width 0; 52 | vertical-align: inherit; 53 | font-size: $button-icon-size; 54 | line-height: $button-height - $button-border-width + 1; 55 | } 56 | &.icon-left:before { 57 | float: left; 58 | padding-right: .2em; 59 | padding-left: 0; 60 | } 61 | &.icon-right:before { 62 | float: right; 63 | padding-right: 0; 64 | padding-left: .2em; 65 | } 66 | 67 | &.button-block, &.button-full { 68 | margin-top: $button-block-margin; 69 | margin-bottom: $button-block-margin; 70 | } 71 | 72 | &.button-light { 73 | @include button-style($button-light-bg, $button-light-border, $button-light-active-bg, $button-light-active-border, $button-light-text); 74 | @include button-clear($button-light-border); 75 | @include button-outline($button-light-border); 76 | } 77 | 78 | &.button-stable { 79 | @include button-style($button-stable-bg, $button-stable-border, $button-stable-active-bg, $button-stable-active-border, $button-stable-text); 80 | @include button-clear($button-stable-border); 81 | @include button-outline($button-stable-border); 82 | } 83 | 84 | &.button-positive { 85 | @include button-style($button-positive-bg, $button-positive-border, $button-positive-active-bg, $button-positive-active-border, $button-positive-text); 86 | @include button-clear($button-positive-bg); 87 | @include button-outline($button-positive-bg); 88 | } 89 | 90 | &.button-calm { 91 | @include button-style($button-calm-bg, $button-calm-border, $button-calm-active-bg, $button-calm-active-border, $button-calm-text); 92 | @include button-clear($button-calm-bg); 93 | @include button-outline($button-calm-bg); 94 | } 95 | 96 | &.button-assertive { 97 | @include button-style($button-assertive-bg, $button-assertive-border, $button-assertive-active-bg, $button-assertive-active-border, $button-assertive-text); 98 | @include button-clear($button-assertive-bg); 99 | @include button-outline($button-assertive-bg); 100 | } 101 | 102 | &.button-balanced { 103 | @include button-style($button-balanced-bg, $button-balanced-border, $button-balanced-active-bg, $button-balanced-active-border, $button-balanced-text); 104 | @include button-clear($button-balanced-bg); 105 | @include button-outline($button-balanced-bg); 106 | } 107 | 108 | &.button-energized { 109 | @include button-style($button-energized-bg, $button-energized-border, $button-energized-active-bg, $button-energized-active-border, $button-energized-text); 110 | @include button-clear($button-energized-bg); 111 | @include button-outline($button-energized-bg); 112 | } 113 | 114 | &.button-royal { 115 | @include button-style($button-royal-bg, $button-royal-border, $button-royal-active-bg, $button-royal-active-border, $button-royal-text); 116 | @include button-clear($button-royal-bg); 117 | @include button-outline($button-royal-bg); 118 | } 119 | 120 | &.button-dark { 121 | @include button-style($button-dark-bg, $button-dark-border, $button-dark-active-bg, $button-dark-active-border, $button-dark-text); 122 | @include button-clear($button-dark-bg); 123 | @include button-outline($button-dark-bg); 124 | } 125 | } 126 | 127 | .button-small { 128 | padding: 0 $button-small-padding; 129 | min-width: $button-small-height; 130 | min-height: $button-small-height + 3; 131 | font-size: $button-small-font-size; 132 | line-height: $button-small-height - $button-border-width + 1; 133 | 134 | .icon:before, 135 | &.icon:before, 136 | &.icon-left:before, 137 | &.icon-right:before { 138 | font-size: $button-small-icon-size; 139 | line-height: $button-small-height - $button-border-width - 1; 140 | } 141 | } 142 | 143 | .button-large { 144 | padding: 0 $button-large-padding; 145 | min-width: ($button-large-padding * 3) + $button-large-font-size; 146 | min-height: $button-large-height + 5; 147 | font-size: $button-large-font-size; 148 | line-height: $button-large-height - $button-border-width; 149 | 150 | .icon:before, 151 | &.icon:before, 152 | &.icon-left:before, 153 | &.icon-right:before { 154 | padding-bottom: ($button-border-width * 2); 155 | font-size: $button-large-icon-size; 156 | line-height: $button-large-height - ($button-border-width * 2) - 1; 157 | } 158 | } 159 | 160 | .button-icon { 161 | @include transition(opacity .1s); 162 | padding: 0 6px; 163 | min-width: initial; 164 | border-color: transparent; 165 | background: none; 166 | 167 | &.button.active { 168 | border-color: transparent; 169 | background: none; 170 | box-shadow: none; 171 | opacity: 0.3; 172 | } 173 | 174 | .icon:before, 175 | &.icon:before { 176 | font-size: $button-large-icon-size; 177 | } 178 | } 179 | 180 | .button-clear { 181 | @include button-clear($button-default-border); 182 | @include transition(opacity .1s); 183 | padding: 0 $button-clear-padding; 184 | max-height: $button-height; 185 | border-color: transparent; 186 | background: none; 187 | box-shadow: none; 188 | 189 | &.active { 190 | opacity: 0.3; 191 | } 192 | } 193 | 194 | .button-outline { 195 | @include button-outline($button-default-border); 196 | @include transition(opacity .1s); 197 | background: none; 198 | box-shadow: none; 199 | } 200 | 201 | .padding > .button.button-block:first-child { 202 | margin-top: 0; 203 | } 204 | 205 | .button-block { 206 | display: block; 207 | clear: both; 208 | 209 | &:after { 210 | clear: both; 211 | } 212 | } 213 | 214 | .button-full, 215 | .button-full > .button { 216 | display: block; 217 | margin-right: 0; 218 | margin-left: 0; 219 | border-right-width: 0; 220 | border-left-width: 0; 221 | border-radius: 0; 222 | } 223 | 224 | button.button-block, 225 | button.button-full, 226 | .button-full > button.button, 227 | input.button.button-block { 228 | width: 100%; 229 | } 230 | 231 | a.button { 232 | text-decoration: none; 233 | } 234 | 235 | .button.disabled, 236 | .button[disabled] { 237 | opacity: .4; 238 | cursor: default !important; 239 | pointer-events: none; 240 | } 241 | -------------------------------------------------------------------------------- /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 | 45 | .checkbox input { 46 | position: relative; 47 | width: $checkbox-width; 48 | height: $checkbox-height; 49 | border: 0; 50 | background: transparent; 51 | cursor: pointer; 52 | -webkit-appearance: none; 53 | 54 | &:before { 55 | /* what the checkbox looks like when its not checked */ 56 | display: table; 57 | width: 100%; 58 | height: 100%; 59 | border-radius: $checkbox-border-radius; 60 | background: $checkbox-off-bg-color; 61 | content: ' '; 62 | transition: background-color .1s ease-in-out; 63 | } 64 | } 65 | 66 | /* the checkmark within the box */ 67 | .checkbox input:after { 68 | @include transition(opacity .05s ease-in-out); 69 | @include rotate(-45deg); 70 | position: absolute; 71 | top: 30%; 72 | left: 26%; 73 | display: table; 74 | width: ($checkbox-width / 2) + 1; 75 | height: ($checkbox-width / 3) + 1; 76 | border: $checkbox-check-width solid $checkbox-check-color; 77 | border-top: 0; 78 | border-right: 0; 79 | content: ' '; 80 | opacity: 0; 81 | } 82 | 83 | .grade-c .checkbox input:after { 84 | @include rotate(0); 85 | top: 3px; 86 | left: 4px; 87 | border: none; 88 | color: $checkbox-check-color; 89 | font-weight: bold; 90 | font-size: 20px; 91 | content: '\2713'; 92 | } 93 | 94 | /* what the checkmark looks like when its checked */ 95 | .checkbox input:checked:after { 96 | opacity: 1; 97 | } 98 | 99 | /* make sure item content have enough padding on left to fit the checkbox */ 100 | .item-checkbox { 101 | padding-left: ($item-padding * 2) + $checkbox-width; 102 | 103 | &.active { 104 | box-shadow: none; 105 | } 106 | } 107 | 108 | /* position the checkbox to the left within an item */ 109 | .item-checkbox .checkbox { 110 | @include display-flex(); 111 | @include align-items(center); 112 | position: absolute; 113 | top: 0; 114 | left: $item-padding / 2; 115 | z-index: $z-index-item-checkbox; 116 | height: 100%; 117 | } 118 | -------------------------------------------------------------------------------- /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 8px; 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: inherit; 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 | padding: 7px 10px 7px 3px; 115 | max-width: 200px; 116 | color: $input-label-color; 117 | font-weight: bold; 118 | font-size: $font-size-base; 119 | } 120 | 121 | .placeholder-icon { 122 | color: #aaa; 123 | &:first-child { 124 | padding-right: 6px; 125 | } 126 | &:last-child { 127 | padding-left: 6px; 128 | } 129 | } 130 | 131 | .item-stacked-label { 132 | display: block; 133 | background-color: transparent; 134 | box-shadow: none; 135 | 136 | .input-label, .icon { 137 | display: inline-block; 138 | padding: 4px 0; 139 | vertical-align: middle; 140 | } 141 | } 142 | 143 | .item-stacked-label input, 144 | .item-stacked-label textarea 145 | { 146 | @include border-radius(2px); 147 | overflow: hidden; 148 | padding: 4px 8px 3px; 149 | border: none; 150 | background-color: $input-bg; 151 | } 152 | .item-stacked-label input { 153 | height: $line-height-computed + $font-size-base + 12px; 154 | } 155 | 156 | 157 | // Form Controls 158 | // ------------------------------- 159 | 160 | // Shared size and type resets 161 | select, 162 | textarea, 163 | input[type="text"], 164 | input[type="password"], 165 | input[type="datetime"], 166 | input[type="datetime-local"], 167 | input[type="date"], 168 | input[type="month"], 169 | input[type="time"], 170 | input[type="week"], 171 | input[type="number"], 172 | input[type="email"], 173 | input[type="url"], 174 | input[type="search"], 175 | input[type="tel"], 176 | input[type="color"] { 177 | display: block; 178 | padding-top: 2px; 179 | height: $line-height-computed + $font-size-base; 180 | color: $input-color; 181 | vertical-align: middle; 182 | font-size: $font-size-base; 183 | line-height: $font-size-base + 2; 184 | } 185 | 186 | input, 187 | textarea { 188 | width: 100%; 189 | } 190 | 191 | // Reset height since textareas have rows 192 | textarea { 193 | height: auto; 194 | } 195 | 196 | // Everything else 197 | textarea, 198 | input[type="text"], 199 | input[type="password"], 200 | input[type="datetime"], 201 | input[type="datetime-local"], 202 | input[type="date"], 203 | input[type="month"], 204 | input[type="time"], 205 | input[type="week"], 206 | input[type="number"], 207 | input[type="email"], 208 | input[type="url"], 209 | input[type="search"], 210 | input[type="tel"], 211 | input[type="color"] { 212 | border: 0; 213 | } 214 | 215 | // Position radios and checkboxes better 216 | input[type="radio"], 217 | input[type="checkbox"] { 218 | margin: 0; 219 | line-height: normal; 220 | } 221 | 222 | // Reset width of input images, buttons, radios, checkboxes 223 | input[type="file"], 224 | input[type="image"], 225 | input[type="submit"], 226 | input[type="reset"], 227 | input[type="button"], 228 | input[type="radio"], 229 | input[type="checkbox"] { 230 | width: auto; // Override of generic input selector 231 | } 232 | 233 | // Make multiple select elements height not fixed 234 | select[multiple], 235 | select[size] { 236 | height: auto; 237 | } 238 | 239 | // Set the height of select and file controls to match text inputs 240 | select, 241 | input[type="file"] { 242 | line-height: $input-height-base; 243 | } 244 | 245 | // Make select elements obey height by applying a border 246 | select { 247 | border: $input-border-width solid $input-border; 248 | background-color: $input-bg; // Chrome on Linux and Mobile Safari need background-color 249 | } 250 | 251 | 252 | // Placeholder 253 | // ------------------------------- 254 | input, 255 | textarea { 256 | @include placeholder(); 257 | } 258 | 259 | 260 | // DISABLED STATE 261 | // ------------------------------- 262 | 263 | // Disabled and read-only inputs 264 | input[disabled], 265 | select[disabled], 266 | textarea[disabled], 267 | input[readonly], 268 | select[readonly], 269 | textarea[readonly] { 270 | background-color: $input-bg-disabled; 271 | cursor: not-allowed; 272 | } 273 | // Explicitly reset the colors here 274 | input[type="radio"][disabled], 275 | input[type="checkbox"][disabled], 276 | input[type="radio"][readonly], 277 | input[type="checkbox"][readonly] { 278 | background-color: transparent; 279 | } 280 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Grid 4 | * -------------------------------------------------- 5 | * Using flexbox for the grid, inspired by Philip Walton: 6 | * http://philipwalton.github.io/solved-by-flexbox/demos/grids/ 7 | * By default each .col within a .row will evenly take up 8 | * available width, and the height of each .col with take 9 | * up the height of the tallest .col in the same .row. 10 | */ 11 | 12 | .row { 13 | @include display-flex(); 14 | padding: ($grid-padding-width / 2); 15 | width: 100%; 16 | } 17 | 18 | .row + .row { 19 | margin-top: ($grid-padding-width / 2) * -1; 20 | padding-top: 0; 21 | } 22 | 23 | .col { 24 | @include flex(1); 25 | display: block; 26 | padding: ($grid-padding-width / 2); 27 | width: 100%; 28 | } 29 | 30 | 31 | /* Vertically Align Columns */ 32 | /* .row-* vertically aligns every .col in the .row */ 33 | .row-top { 34 | @include align-items(flex-start); 35 | } 36 | .row-bottom { 37 | @include align-items(flex-end); 38 | } 39 | .row-center { 40 | @include align-items(center); 41 | } 42 | 43 | /* .col-* vertically aligns an individual .col */ 44 | .col-top { 45 | @include align-self(flex-start); 46 | } 47 | .col-bottom { 48 | @include align-self(flex-end); 49 | } 50 | .col-center { 51 | @include align-self(center); 52 | } 53 | 54 | /* Column Offsets */ 55 | .col-offset-10 { 56 | margin-left: 10%; 57 | } 58 | .col-offset-20 { 59 | margin-left: 20%; 60 | } 61 | .col-offset-25 { 62 | margin-left: 25%; 63 | } 64 | .col-offset-33, .col-offset-34 { 65 | margin-left: 33.3333%; 66 | } 67 | .col-offset-50 { 68 | margin-left: 50%; 69 | } 70 | .col-offset-66, .col-offset-67 { 71 | margin-left: 66.6666%; 72 | } 73 | .col-offset-75 { 74 | margin-left: 75%; 75 | } 76 | .col-offset-80 { 77 | margin-left: 80%; 78 | } 79 | .col-offset-90 { 80 | margin-left: 90%; 81 | } 82 | 83 | 84 | /* Explicit Column Percent Sizes */ 85 | /* By default each grid column will evenly distribute */ 86 | /* across the grid. However, you can specify individual */ 87 | /* columns to take up a certain size of the available area */ 88 | .col-10 { 89 | @include flex(0, 0, 10%); 90 | max-width: 10%; 91 | } 92 | .col-20 { 93 | @include flex(0, 0, 20%); 94 | max-width: 20%; 95 | } 96 | .col-25 { 97 | @include flex(0, 0, 25%); 98 | max-width: 25%; 99 | } 100 | .col-33, .col-34 { 101 | @include flex(0, 0, 33.3333%); 102 | max-width: 33.3333%; 103 | } 104 | .col-50 { 105 | @include flex(0, 0, 50%); 106 | max-width: 50%; 107 | } 108 | .col-66, .col-67 { 109 | @include flex(0, 0, 66.6666%); 110 | max-width: 66.6666%; 111 | } 112 | .col-75 { 113 | @include flex(0, 0, 75%); 114 | max-width: 75%; 115 | } 116 | .col-80 { 117 | @include flex(0, 0, 80%); 118 | max-width: 80%; 119 | } 120 | .col-90 { 121 | @include flex(0, 0, 90%); 122 | max-width: 90%; 123 | } 124 | 125 | 126 | /* Responsive Grid Classes */ 127 | /* Adding a class of responsive-X to a row */ 128 | /* will trigger the flex-direction to */ 129 | /* change to column and add some margin */ 130 | /* to any columns in the row for clearity */ 131 | 132 | @include responsive-grid-break('.responsive-sm', $grid-responsive-sm-break); 133 | @include responsive-grid-break('.responsive-md', $grid-responsive-md-break); 134 | @include responsive-grid-break('.responsive-lg', $grid-responsive-lg-break); 135 | -------------------------------------------------------------------------------- /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 | } 17 | 18 | 19 | /** 20 | * List Header 21 | * -------------------------------------------------- 22 | */ 23 | 24 | .list-header { 25 | margin-top: $list-header-margin-top; 26 | padding: $list-header-padding; 27 | background-color: $list-header-bg; 28 | color: $list-header-color; 29 | font-weight: bold; 30 | } 31 | 32 | // when its a card make sure it doesn't duplicate top and bottom borders 33 | .card.list .list-item { 34 | padding-right: 1px; 35 | padding-left: 1px; 36 | } 37 | 38 | 39 | /** 40 | * Cards and Inset Lists 41 | * -------------------------------------------------- 42 | * A card and list-inset are close to the same thing, except a card as a box shadow. 43 | */ 44 | 45 | .card, 46 | .list-inset { 47 | overflow: hidden; 48 | margin: ($content-padding * 2) $content-padding; 49 | border-radius: $card-border-radius; 50 | background-color: $card-body-bg; 51 | } 52 | 53 | .card { 54 | padding-top: $item-border-width; 55 | padding-bottom: $item-border-width; 56 | box-shadow: 0 1px 1px rgba(0, 0, 0, .1); 57 | } 58 | 59 | .card .item, 60 | .list-inset .item, 61 | .padding > .list .item 62 | { 63 | &:first-child { 64 | border-top-left-radius: $card-border-radius; 65 | border-top-right-radius: $card-border-radius; 66 | 67 | .item-content { 68 | border-top-left-radius: $card-border-radius; 69 | border-top-right-radius: $card-border-radius; 70 | } 71 | } 72 | &:last-child { 73 | border-bottom-right-radius: $card-border-radius; 74 | border-bottom-left-radius: $card-border-radius; 75 | 76 | .item-content { 77 | border-bottom-right-radius: $card-border-radius; 78 | border-bottom-left-radius: $card-border-radius; 79 | } 80 | } 81 | } 82 | 83 | .card .item:last-child, 84 | .list-inset .item:last-child { 85 | margin-bottom: $item-border-width * -1; 86 | } 87 | 88 | .card .item, 89 | .list-inset .item, 90 | .padding > .list .item, 91 | .padding-horizontal > .list .item { 92 | margin-right: 0; 93 | margin-left: 0; 94 | } 95 | .padding-left > .list .item { 96 | margin-left: 0; 97 | } 98 | .padding-right > .list .item { 99 | margin-right: 0; 100 | } 101 | -------------------------------------------------------------------------------- /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: #fff; 20 | } 21 | 22 | .menu-content { 23 | @include transform(none); 24 | box-shadow: $menu-side-shadow; 25 | } 26 | 27 | .grade-b .menu-content, 28 | .grade-c .menu-content { 29 | @include box-sizing(content-box); 30 | right: -1px; 31 | left: -1px; 32 | border-right: 1px solid #ccc; 33 | border-left: 1px solid #ccc; 34 | box-shadow: none; 35 | } 36 | 37 | .menu-left { 38 | left: 0; 39 | } 40 | 41 | .menu-right { 42 | right: 0; 43 | } 44 | 45 | .menu-animated { 46 | @include transition-transform($menu-animation-speed ease); 47 | } 48 | -------------------------------------------------------------------------------- /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 | position: absolute; 25 | top: 0; 26 | z-index: $z-index-modal; 27 | overflow: hidden; 28 | min-height: 100%; 29 | width: 100%; 30 | background-color: $modal-bg-color; 31 | } 32 | 33 | @media (min-width: $modal-inset-mode-break-point) { 34 | // inset mode is when the modal doesn't fill the entire 35 | // display but instead is centered within a large display 36 | .modal { 37 | top: $modal-inset-mode-top; 38 | right: $modal-inset-mode-right; 39 | bottom: $modal-inset-mode-bottom; 40 | left: $modal-inset-mode-left; 41 | overflow: visible; 42 | min-height: $modal-inset-mode-min-height; 43 | width: (100% - $modal-inset-mode-left - $modal-inset-mode-right); 44 | } 45 | 46 | .modal.ng-leave-active { 47 | bottom: 0; 48 | } 49 | } 50 | 51 | .modal-open { 52 | pointer-events: none; 53 | 54 | .modal { 55 | pointer-events: auto; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_platform.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Platform 4 | * -------------------------------------------------- 5 | * Platform specific tweaks when in Cordova. 6 | */ 7 | 8 | .platform-ios7.platform-cordova:not(.fullscreen) { 9 | // iOS7 has a status bar which sits on top of the header. 10 | // Bump down everything to make room for it. However, if 11 | // if its in Cordova, and set to fullscreen, then disregard the bump. 12 | 13 | .bar-header { 14 | height: 64px; 15 | 16 | &.item-input-inset .item-input-wrapper { 17 | margin-top: 19px !important; 18 | } 19 | 20 | > * { 21 | margin-top: 20px; 22 | } 23 | } 24 | 25 | .has-header, 26 | .bar-subheader { 27 | top: 64px; 28 | } 29 | 30 | .has-subheader { 31 | top: 108px; 32 | } 33 | } 34 | 35 | .platform-ios7.status-bar-hide { 36 | // Cordova doesn't adjust the body height correctly, this makes up for it 37 | margin-bottom: 20px; 38 | } 39 | 40 | .platform-android.platform-cordova { 41 | 42 | .bar-header { 43 | height: 48px; 44 | } 45 | 46 | .has-header, 47 | .bar-subheader { 48 | top: 48px; 49 | } 50 | 51 | .has-subheader { 52 | top: 96px; 53 | } 54 | 55 | .title { 56 | line-height: 48px; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_popup.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Popups 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .popup { 8 | position: fixed; 9 | top: 50%; 10 | left: 50%; 11 | z-index: $z-index-popup; 12 | 13 | // Start hidden 14 | visibility: hidden; 15 | 16 | width: $popup-width; 17 | 18 | border-radius: $popup-border-radius; 19 | background-color: $popup-background-color; 20 | 21 | &.popup-hidden { 22 | @include animation-name(scaleOut); 23 | @include animation-duration($popup-leave-animation-duration); 24 | @include animation-timing-function(ease-in-out); 25 | @include animation-fill-mode(both); 26 | } 27 | 28 | &.popup-showing { 29 | visibility: visible; 30 | } 31 | 32 | &.active { 33 | @include animation-name(superScaleIn); 34 | @include animation-duration($popup-enter-animation-duration); 35 | @include animation-timing-function(ease-in-out); 36 | @include animation-fill-mode(both); 37 | } 38 | } 39 | 40 | .popup-head { 41 | padding: 15px 0px; 42 | border-bottom: 1px solid #eee; 43 | text-align: center; 44 | } 45 | .popup-title { 46 | margin: 0; 47 | padding: 0; 48 | font-size: 15px; 49 | } 50 | .popup-sub-title { 51 | margin: 5px 0 0 0; 52 | padding: 0; 53 | font-weight: normal; 54 | font-size: 11px; 55 | } 56 | .popup-body { 57 | padding: 10px; 58 | } 59 | 60 | .popup-buttons { 61 | &.row { 62 | padding: 10px 10px; 63 | } 64 | 65 | .button { 66 | margin: 0px 5px; 67 | min-height: $popup-button-min-height; 68 | border-radius: $popup-button-border-radius; 69 | line-height: $popup-button-line-height; 70 | 71 | &:first-child { 72 | margin-left: 0px; 73 | } 74 | &:last-child { 75 | margin-right: 0px; 76 | } 77 | } 78 | } 79 | 80 | .popup-open { 81 | pointer-events: none; 82 | 83 | &.modal-open .modal { 84 | pointer-events: none; 85 | } 86 | 87 | .popup-backdrop, .popup { 88 | pointer-events: auto; 89 | } 90 | } 91 | 92 | .popup-backdrop { 93 | @include animation-name(fadeIn); 94 | @include animation-duration($popup-backdrop-fadein-duration); 95 | @include animation-timing-function(linear); 96 | @include animation-fill-mode(both); 97 | 98 | position: fixed; 99 | top: 0; 100 | left: 0; 101 | z-index: $z-index-popup-backdrop; 102 | 103 | width: 100%; 104 | height: 100%; 105 | 106 | background-color: rgba(0,0,0,0.4); 107 | } 108 | 109 | .loading-backdrop { 110 | @include transition(visibility 0s linear 0.3s); 111 | position: fixed; 112 | top: 0; 113 | left: 0; 114 | z-index: $z-index-popup-backdrop; 115 | 116 | visibility: hidden; 117 | width: 100%; 118 | height: 100%; 119 | 120 | &.active { 121 | @include transition-delay(0s); 122 | visibility: visible; 123 | &.show-backdrop { 124 | background-color: rgba(0,0,0,0.7); 125 | } 126 | } 127 | } 128 | 129 | .loading { 130 | position: fixed; 131 | top: 50%; 132 | left: 50%; 133 | padding: 20px; 134 | 135 | border-radius: 5px; 136 | background-color: rgba(0,0,0,0.7); 137 | 138 | color: #fff; 139 | 140 | text-align: center; 141 | text-overflow: ellipsis; 142 | font-size: 15px; 143 | 144 | h1, h2, h3, h4, h5, h6 { 145 | color: #fff; 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /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 | .item-radio { 51 | -webkit-animation: androidCheckedbugfix infinite 1s; 52 | } 53 | @-webkit-keyframes androidCheckedbugfix { 54 | from { padding:0; } 55 | to { padding:0; } 56 | } 57 | -------------------------------------------------------------------------------- /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 4px; 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/_reset.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Resets 4 | * -------------------------------------------------- 5 | * Adapted from normalize.css and some reset.css. We don't care even one 6 | * bit about old IE, so we don't need any hacks for that in here. 7 | * 8 | * There are probably other things we could remove here, as well. 9 | * 10 | * normalize.css v2.1.2 | MIT License | git.io/normalize 11 | 12 | * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/) 13 | * http://cssreset.com 14 | */ 15 | 16 | html, body, div, span, applet, object, iframe, 17 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 18 | a, abbr, acronym, address, big, cite, code, 19 | del, dfn, em, img, ins, kbd, q, s, samp, 20 | small, strike, strong, sub, sup, tt, var, 21 | b, i, u, center, 22 | dl, dt, dd, ol, ul, li, 23 | fieldset, form, label, legend, 24 | table, caption, tbody, tfoot, thead, tr, th, td, 25 | article, aside, canvas, details, embed, fieldset, 26 | figure, figcaption, footer, header, hgroup, 27 | menu, nav, output, ruby, section, summary, 28 | time, mark, audio, video { 29 | margin: 0; 30 | padding: 0; 31 | border: 0; 32 | vertical-align: baseline; 33 | font: inherit; 34 | font-size: 100%; 35 | } 36 | 37 | ol, ul { 38 | list-style: none; 39 | } 40 | blockquote, q { 41 | quotes: none; 42 | } 43 | blockquote:before, blockquote:after, 44 | q:before, q:after { 45 | content: ''; 46 | content: none; 47 | } 48 | 49 | /** 50 | * Prevent modern browsers from displaying `audio` without controls. 51 | * Remove excess height in iOS 5 devices. 52 | */ 53 | 54 | audio:not([controls]) { 55 | display: none; 56 | height: 0; 57 | } 58 | 59 | /** 60 | * Hide the `template` element in IE, Safari, and Firefox < 22. 61 | */ 62 | 63 | [hidden], 64 | template { 65 | display: none; 66 | } 67 | 68 | script { 69 | display: none !important; 70 | } 71 | 72 | /* ========================================================================== 73 | Base 74 | ========================================================================== */ 75 | 76 | /** 77 | * 1. Set default font family to sans-serif. 78 | * 2. Prevent iOS text size adjust after orientation change, without disabling 79 | * user zoom. 80 | */ 81 | 82 | html { 83 | @include user-select(none); 84 | font-family: sans-serif; /* 1 */ 85 | -webkit-text-size-adjust: 100%; 86 | -ms-text-size-adjust: 100%; /* 2 */ 87 | -webkit-text-size-adjust: 100%; /* 2 */ 88 | } 89 | 90 | /** 91 | * Remove default margin. 92 | */ 93 | 94 | body { 95 | margin: 0; 96 | line-height: 1; 97 | } 98 | 99 | 100 | /** 101 | * Remove default outlines. 102 | */ 103 | a, 104 | button, 105 | :focus, 106 | a:focus, 107 | button:focus, 108 | a:active, 109 | a:hover { 110 | outline: 0; 111 | } 112 | 113 | /* * 114 | * Remove tap highlight color 115 | */ 116 | 117 | a { 118 | -webkit-user-drag: none; 119 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 120 | -webkit-tap-highlight-color: transparent; 121 | 122 | &[href]:hover { 123 | cursor: pointer; 124 | } 125 | } 126 | 127 | /* ========================================================================== 128 | Typography 129 | ========================================================================== */ 130 | 131 | 132 | /** 133 | * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. 134 | */ 135 | 136 | b, 137 | strong { 138 | font-weight: bold; 139 | } 140 | 141 | /** 142 | * Address styling not present in Safari 5 and Chrome. 143 | */ 144 | 145 | dfn { 146 | font-style: italic; 147 | } 148 | 149 | /** 150 | * Address differences between Firefox and other browsers. 151 | */ 152 | 153 | hr { 154 | -moz-box-sizing: content-box; 155 | box-sizing: content-box; 156 | height: 0; 157 | } 158 | 159 | 160 | /** 161 | * Correct font family set oddly in Safari 5 and Chrome. 162 | */ 163 | 164 | code, 165 | kbd, 166 | pre, 167 | samp { 168 | font-size: 1em; 169 | font-family: monospace, serif; 170 | } 171 | 172 | /** 173 | * Improve readability of pre-formatted text in all browsers. 174 | */ 175 | 176 | pre { 177 | white-space: pre-wrap; 178 | } 179 | 180 | /** 181 | * Set consistent quote types. 182 | */ 183 | 184 | q { 185 | quotes: "\201C" "\201D" "\2018" "\2019"; 186 | } 187 | 188 | /** 189 | * Address inconsistent and variable font size in all browsers. 190 | */ 191 | 192 | small { 193 | font-size: 80%; 194 | } 195 | 196 | /** 197 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 198 | */ 199 | 200 | sub, 201 | sup { 202 | position: relative; 203 | vertical-align: baseline; 204 | font-size: 75%; 205 | line-height: 0; 206 | } 207 | 208 | sup { 209 | top: -0.5em; 210 | } 211 | 212 | sub { 213 | bottom: -0.25em; 214 | } 215 | 216 | /** 217 | * Define consistent border, margin, and padding. 218 | */ 219 | 220 | fieldset { 221 | margin: 0 2px; 222 | padding: 0.35em 0.625em 0.75em; 223 | border: 1px solid #c0c0c0; 224 | } 225 | 226 | /** 227 | * 1. Correct `color` not being inherited in IE 8/9. 228 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 229 | */ 230 | 231 | legend { 232 | padding: 0; /* 2 */ 233 | border: 0; /* 1 */ 234 | } 235 | 236 | /** 237 | * 1. Correct font family not being inherited in all browsers. 238 | * 2. Correct font size not being inherited in all browsers. 239 | * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. 240 | * 4. Remove any default :focus styles 241 | * 5. Make sure webkit font smoothing is being inherited 242 | */ 243 | 244 | button, 245 | input, 246 | select, 247 | textarea { 248 | margin: 0; /* 3 */ 249 | font-size: 100%; /* 2 */ 250 | font-family: inherit; /* 1 */ 251 | outline-offset: 0; /* 4 */ 252 | outline-style: none; /* 4 */ 253 | outline-width: 0; /* 4 */ 254 | -webkit-font-smoothing: inherit; /* 5 */ 255 | } 256 | 257 | /** 258 | * Address Firefox 4+ setting `line-height` on `input` using `importnt` in 259 | * the UA stylesheet. 260 | */ 261 | 262 | button, 263 | input { 264 | line-height: normal; 265 | } 266 | 267 | /** 268 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 269 | * All other form control elements do not inherit `text-transform` values. 270 | * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. 271 | * Correct `select` style inheritance in Firefox 4+ and Opera. 272 | */ 273 | 274 | button, 275 | select { 276 | text-transform: none; 277 | } 278 | 279 | /** 280 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 281 | * and `video` controls. 282 | * 2. Correct inability to style clickable `input` types in iOS. 283 | * 3. Improve usability and consistency of cursor style between image-type 284 | * `input` and others. 285 | */ 286 | 287 | button, 288 | html input[type="button"], /* 1 */ 289 | input[type="reset"], 290 | input[type="submit"] { 291 | cursor: pointer; /* 3 */ 292 | -webkit-appearance: button; /* 2 */ 293 | } 294 | 295 | /** 296 | * Re-set default cursor for disabled elements. 297 | */ 298 | 299 | button[disabled], 300 | html input[disabled] { 301 | cursor: default; 302 | } 303 | 304 | /** 305 | * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 306 | * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome 307 | * (include `-moz` to future-proof). 308 | */ 309 | 310 | input[type="search"] { 311 | -webkit-box-sizing: content-box; /* 2 */ 312 | -moz-box-sizing: content-box; 313 | box-sizing: content-box; 314 | -webkit-appearance: textfield; /* 1 */ 315 | } 316 | 317 | /** 318 | * Remove inner padding and search cancel button in Safari 5 and Chrome 319 | * on OS X. 320 | */ 321 | 322 | input[type="search"]::-webkit-search-cancel-button, 323 | input[type="search"]::-webkit-search-decoration { 324 | -webkit-appearance: none; 325 | } 326 | 327 | /** 328 | * Remove inner padding and border in Firefox 4+. 329 | */ 330 | 331 | button::-moz-focus-inner, 332 | input::-moz-focus-inner { 333 | padding: 0; 334 | border: 0; 335 | } 336 | 337 | /** 338 | * 1. Remove default vertical scrollbar in IE 8/9. 339 | * 2. Improve readability and alignment in all browsers. 340 | */ 341 | 342 | textarea { 343 | overflow: auto; /* 1 */ 344 | vertical-align: top; /* 2 */ 345 | } 346 | 347 | 348 | img { 349 | -webkit-user-drag: none; 350 | } 351 | 352 | /* ========================================================================== 353 | Tables 354 | ========================================================================== */ 355 | 356 | /** 357 | * Remove most spacing between table cells. 358 | */ 359 | 360 | table { 361 | border-spacing: 0; 362 | border-collapse: collapse; 363 | } 364 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_scaffolding.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Scaffolding 4 | * -------------------------------------------------- 5 | */ 6 | 7 | *, 8 | *:before, 9 | *:after { 10 | @include box-sizing(border-box); 11 | } 12 | 13 | body, 14 | .ionic-body { 15 | @include touch-callout(none); 16 | @include font-smoothing(antialiased); 17 | @include text-size-adjust(none); 18 | @include tap-highlight-transparent(); 19 | @include user-select(none); 20 | 21 | position: fixed; 22 | top: 0; 23 | right: 0; 24 | bottom: 0; 25 | left: 0; 26 | overflow: hidden; 27 | 28 | margin: 0; 29 | padding: 0; 30 | 31 | color: $base-color; 32 | word-wrap: break-word; 33 | font-size: $font-size-base; 34 | font-family: $font-family-base; 35 | line-height: $line-height-computed; 36 | text-rendering: optimizeLegibility; 37 | -webkit-backface-visibility: hidden; 38 | -webkit-user-drag: none; 39 | } 40 | 41 | body.grade-b, 42 | body.grade-c { 43 | // disable optimizeLegibility for low end devices 44 | text-rendering: auto; 45 | } 46 | 47 | .content { 48 | // used for content areas not using the content directive 49 | position: relative; 50 | } 51 | 52 | .scroll-content { 53 | position: absolute; 54 | top: 0; 55 | right: 0; 56 | bottom: 0; 57 | left: 0; 58 | overflow: hidden; 59 | 60 | // Hide the top border if any 61 | margin-top: -1px; 62 | 63 | width: auto; 64 | height: auto; 65 | } 66 | 67 | .scroll-view { 68 | position: relative; 69 | overflow: hidden; 70 | 71 | // Hide the top border if any 72 | margin-top: -1px; 73 | height: 100%; 74 | } 75 | 76 | /** 77 | * Scroll is the scroll view component available for complex and custom 78 | * scroll view functionality. 79 | */ 80 | .scroll { 81 | @include user-select(none); 82 | @include touch-callout(none); 83 | @include text-size-adjust(none); 84 | @include transform-origin(left, top); 85 | -webkit-backface-visibility: hidden; 86 | } 87 | 88 | // Scroll bar styles 89 | .scroll-bar { 90 | position: absolute; 91 | z-index: $z-index-scroll-bar; 92 | } 93 | // hide the scroll-bar during animations 94 | .ng-animate .scroll-bar { 95 | visibility: hidden; 96 | } 97 | .scroll-bar-h { 98 | right: 2px; 99 | bottom: 3px; 100 | left: 2px; 101 | height: 3px; 102 | 103 | .scroll-bar-indicator { 104 | height: 100%; 105 | } 106 | } 107 | 108 | .scroll-bar-v { 109 | top: 2px; 110 | right: 3px; 111 | bottom: 2px; 112 | width: 3px; 113 | 114 | .scroll-bar-indicator { 115 | width: 100%; 116 | } 117 | } 118 | .scroll-bar-indicator { 119 | position: absolute; 120 | border-radius: 4px; 121 | background: rgba(0,0,0,0.3); 122 | opacity: 1; 123 | 124 | 125 | &.scroll-bar-fade-out { 126 | @include transition(opacity 0.3s linear); 127 | opacity: 0; 128 | } 129 | } 130 | .grade-b .scroll-bar-indicator, 131 | .grade-c .scroll-bar-indicator { 132 | // disable rgba background and border radius for low end devices 133 | border-radius: 0; 134 | background: #aaa; 135 | 136 | &.scroll-bar-fade-out { 137 | @include transition(none); 138 | } 139 | } 140 | 141 | 142 | // Scroll refresher (for pull to refresh) 143 | .scroll-refresher { 144 | position: absolute; 145 | top: -60px; 146 | right: 0; 147 | left: 0; 148 | overflow: hidden; 149 | margin: auto; 150 | height: 60px; 151 | 152 | .icon-refreshing { 153 | @include animation-duration(1.5s); 154 | display: none; 155 | } 156 | } 157 | 158 | .scroll-refresher-content { 159 | position: absolute; 160 | bottom: 15px; 161 | left: 0; 162 | width: 100%; 163 | color: $scroll-refresh-icon-color; 164 | text-align: center; 165 | 166 | font-size: 30px; 167 | } 168 | 169 | .ionic-refresher-content { 170 | position: absolute; 171 | bottom: 15px; 172 | left: 0; 173 | width: 100%; 174 | color: $scroll-refresh-icon-color; 175 | text-align: center; 176 | 177 | font-size: 30px; 178 | 179 | .icon-pulling { 180 | @include animation-name(refresh-spin-back); 181 | @include animation-duration(200ms); 182 | @include animation-timing-function(linear); 183 | @include animation-fill-mode(both); 184 | } 185 | } 186 | 187 | @keyframes refresh-spin { 188 | 0% { transform: rotate(0); } 189 | 100% { transform: rotate(-180deg); } 190 | } 191 | 192 | @-webkit-keyframes refresh-spin { 193 | 0% {-webkit-transform: rotate(0); } 194 | 100% {-webkit-transform: rotate(-180deg); } 195 | } 196 | 197 | @keyframes refresh-spin-back { 198 | 0% { transform: rotate(-180deg); } 199 | 100% { transform: rotate(0); } 200 | } 201 | 202 | @-webkit-keyframes refresh-spin-back { 203 | 0% {-webkit-transform: rotate(-180deg); } 204 | 100% {-webkit-transform: rotate(0); } 205 | } 206 | 207 | .scroll-refresher.active { 208 | 209 | .icon-pulling { 210 | display: block; 211 | } 212 | .icon-refreshing { 213 | display: none; 214 | } 215 | 216 | &.refreshing { 217 | .icon-pulling { 218 | display: none; 219 | } 220 | .icon-refreshing { 221 | display: block; 222 | } 223 | } 224 | 225 | .ionic-refresher-content { 226 | i.icon.icon-pulling { 227 | @include animation-name(refresh-spin); 228 | } 229 | } 230 | } 231 | 232 | // Infinite scroll 233 | ion-infinite-scroll .scroll-infinite { 234 | position: relative; 235 | overflow: hidden; 236 | margin-top: -70px; 237 | height: 60px; 238 | } 239 | 240 | .scroll-infinite-content { 241 | position: absolute; 242 | bottom: 15px; 243 | left: 0; 244 | width: 100%; 245 | color: #666666; 246 | text-align: center; 247 | font-size: 30px; } 248 | 249 | ion-infinite-scroll.active .scroll-infinite { 250 | margin-top: -30px; 251 | } 252 | 253 | .overflow-scroll { 254 | overflow-x: hidden; 255 | overflow-y: scroll; 256 | -webkit-overflow-scrolling: touch; 257 | 258 | .scroll { 259 | position: static; 260 | height: 100%; 261 | } 262 | } 263 | 264 | 265 | .overflow-scroll { 266 | overflow-x: hidden; 267 | overflow-y: scroll; 268 | -webkit-overflow-scrolling: touch; 269 | 270 | .scroll { 271 | position: static; 272 | height: 100%; 273 | } 274 | } 275 | 276 | // Pad top/bottom of content so it doesn't hide behind .bar-title and .bar-tab. 277 | // Note: For these to work, content must come after both bars in the markup 278 | .has-header { 279 | top: $bar-height; 280 | } 281 | 282 | .has-subheader { 283 | top: $bar-height * 2; 284 | } 285 | .has-tabs-top { 286 | top: $bar-height + $tabs-height; 287 | } 288 | .has-header.has-subheader.has-tabs-top { 289 | top: 2 * $bar-height + $tabs-height; 290 | } 291 | 292 | .has-footer { 293 | bottom: $bar-height; 294 | } 295 | 296 | .has-tabs, 297 | .bar-footer.has-tabs { 298 | bottom: $tabs-height; 299 | } 300 | 301 | .has-footer.has-tabs { 302 | bottom: $tabs-height + $bar-height; 303 | } 304 | 305 | // A full screen section with a solid background 306 | .pane { 307 | @include translate3d(0,0,0); 308 | z-index: $z-index-pane; 309 | } 310 | .view { 311 | z-index: $z-index-view; 312 | } 313 | .pane, 314 | .view { 315 | position: absolute; 316 | top: 0; 317 | right: 0; 318 | bottom: 0; 319 | left: 0; 320 | width: 100%; 321 | height: 100%; 322 | background-color: $base-background-color; 323 | } 324 | -------------------------------------------------------------------------------- /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/_tabs.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Tabs 4 | * -------------------------------------------------- 5 | * A navigation bar with any number of tab items supported. 6 | */ 7 | 8 | .tabs { 9 | @include display-flex(); 10 | @include flex-direction(horizontal); 11 | @include justify-content(center); 12 | @include translate3d(0,0,0); 13 | 14 | @include tab-style($tabs-default-bg, $tabs-default-border, $tabs-default-text); 15 | @include tab-badge-style($tabs-default-text, $tabs-default-bg); 16 | 17 | position: absolute; 18 | bottom: 0; 19 | 20 | z-index: $z-index-tabs; 21 | 22 | width: 100%; 23 | height: $tabs-height; 24 | 25 | border-style: solid; 26 | border-top-width: 1px; 27 | 28 | background-size: 0; 29 | line-height: $tabs-height; 30 | 31 | @media (min--moz-device-pixel-ratio: 1.5), 32 | (-webkit-min-device-pixel-ratio: 1.5), 33 | (min-device-pixel-ratio: 1.5), 34 | (min-resolution: 144dpi), 35 | (min-resolution: 1.5dppx) { 36 | padding-top: 2px; 37 | border-top: none !important; 38 | border-bottom: none !important; 39 | background-position: top; 40 | background-size: 100% 1px; 41 | background-repeat: no-repeat; 42 | } 43 | 44 | } 45 | /* Allow parent element of tabs to define color, or just the tab itself */ 46 | .tabs-light > .tabs, 47 | .tabs.tabs-light { 48 | @include tab-style($tabs-light-bg, $tabs-light-border, $tabs-light-text); 49 | @include tab-badge-style($tabs-light-text, $tabs-light-bg); 50 | } 51 | .tabs-stable > .tabs, 52 | .tabs.tabs-stable { 53 | @include tab-style($tabs-stable-bg, $tabs-stable-border, $tabs-stable-text); 54 | @include tab-badge-style($tabs-stable-text, $tabs-stable-bg); 55 | } 56 | .tabs-positive > .tabs, 57 | .tabs.tabs-positive { 58 | @include tab-style($tabs-positive-bg, $tabs-positive-border, $tabs-positive-text); 59 | @include tab-badge-style($tabs-positive-text, $tabs-positive-bg); 60 | } 61 | .tabs-calm > .tabs, 62 | .tabs.tabs-calm { 63 | @include tab-style($tabs-calm-bg, $tabs-calm-border, $tabs-calm-text); 64 | @include tab-badge-style($tabs-calm-text, $tabs-calm-bg); 65 | } 66 | .tabs-assertive > .tabs, 67 | .tabs.tabs-assertive { 68 | @include tab-style($tabs-assertive-bg, $tabs-assertive-border, $tabs-assertive-text); 69 | @include tab-badge-style($tabs-assertive-text, $tabs-assertive-bg); 70 | } 71 | .tabs-balanced > .tabs, 72 | .tabs.tabs-balanced { 73 | @include tab-style($tabs-balanced-bg, $tabs-balanced-border, $tabs-balanced-text); 74 | @include tab-badge-style($tabs-balanced-text, $tabs-balanced-bg); 75 | } 76 | .tabs-energized > .tabs, 77 | .tabs.tabs-energized { 78 | @include tab-style($tabs-energized-bg, $tabs-energized-border, $tabs-energized-text); 79 | @include tab-badge-style($tabs-energized-text, $tabs-energized-bg); 80 | } 81 | .tabs-royal > .tabs, 82 | .tabs.tabs-royal { 83 | @include tab-style($tabs-royal-bg, $tabs-royal-border, $tabs-royal-text); 84 | @include tab-badge-style($tabs-royal-text, $tabs-royal-bg); 85 | } 86 | .tabs-dark > .tabs, 87 | .tabs.tabs-dark { 88 | @include tab-style($tabs-dark-bg, $tabs-dark-border, $tabs-dark-text); 89 | @include tab-badge-style($tabs-dark-text, $tabs-dark-bg); 90 | } 91 | 92 | /* Allow parent element to have tabs-top */ 93 | .tabs-top > .tabs, 94 | .tabs.tabs-top { 95 | top: $bar-height; 96 | padding-top: 0; 97 | padding-bottom: 2px; 98 | background-position: bottom; 99 | } 100 | 101 | .tab-item { 102 | @include flex(1); 103 | display: block; 104 | overflow: hidden; 105 | 106 | max-width: $tab-item-max-width; 107 | height: 100%; 108 | 109 | color: inherit; 110 | text-align: center; 111 | text-decoration: none; 112 | text-overflow: ellipsis; 113 | white-space: nowrap; 114 | 115 | font-weight: 400; 116 | font-size: $tabs-text-font-size; 117 | font-family: $font-family-light-sans-serif; 118 | 119 | opacity: 0.7; 120 | 121 | &:hover { 122 | cursor: pointer; 123 | } 124 | } 125 | 126 | .tabs-item-hide, 127 | .tabs-item-hide > .tabs { 128 | display: none; 129 | } 130 | 131 | .tabs-icon-top .tab-item, 132 | .tabs-icon-bottom .tab-item { 133 | font-size: $tabs-text-font-size-side-icon; 134 | line-height: $tabs-text-font-size; 135 | } 136 | 137 | .tab-item .icon { 138 | display: block; 139 | margin: 0 auto; 140 | height: $tabs-icon-size; 141 | font-size: $tabs-icon-size; 142 | } 143 | 144 | .tabs-icon-left .tab-item, 145 | .tabs-icon-right .tab-item { 146 | font-size: $tabs-text-font-size-side-icon; 147 | 148 | .icon { 149 | display: inline-block; 150 | vertical-align: top; 151 | 152 | &:before { 153 | font-size: $tabs-icon-size - 8; 154 | line-height: $tabs-height; 155 | } 156 | } 157 | } 158 | 159 | .tabs-icon-left .tab-item .icon { 160 | padding-right: 3px; 161 | } 162 | 163 | .tabs-icon-right .tab-item .icon { 164 | padding-left: 3px; 165 | } 166 | 167 | .tabs-icon-only .icon { 168 | line-height: inherit; 169 | } 170 | 171 | .tab-item.has-badge { 172 | position: relative; 173 | } 174 | 175 | .tab-item .badge { 176 | position: absolute; 177 | padding: $tabs-badge-padding; 178 | top: 4%; 179 | right: 33%; // fallback 180 | right: calc(50% - 26px); 181 | font-size: $tabs-badge-font-size; 182 | height: auto; 183 | line-height: $tabs-badge-font-size + 4; 184 | } 185 | 186 | /* Navigational tab */ 187 | 188 | /* Active state for tab */ 189 | .tab-item.tab-item-active { 190 | opacity: 1; 191 | 192 | &.tab-item-light { 193 | color: $light; 194 | } 195 | &.tab-item-stable { 196 | color: $stable; 197 | } 198 | &.tab-item-positive { 199 | color: $positive; 200 | } 201 | &.tab-item-calm { 202 | color: $calm; 203 | } 204 | &.tab-item-assertive { 205 | color: $assertive; 206 | } 207 | &.tab-item-balanced { 208 | color: $balanced; 209 | } 210 | &.tab-item-energized { 211 | color: $energized; 212 | } 213 | &.tab-item-royal { 214 | color: $royal; 215 | } 216 | &.tab-item-dark { 217 | color: $dark; 218 | } 219 | } 220 | 221 | .item.tabs { 222 | @include display-flex(); 223 | padding: 0; 224 | 225 | .icon:before { 226 | position: relative; 227 | } 228 | } 229 | -------------------------------------------------------------------------------- /www/lib/ionic/scss/_toggle.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Toggle 4 | * -------------------------------------------------- 5 | */ 6 | 7 | /* the overall container of the toggle */ 8 | .toggle { 9 | // set the color defaults 10 | @include toggle-style($toggle-on-default-border, $toggle-on-default-bg); 11 | 12 | position: relative; 13 | display: inline-block; 14 | margin: -$toggle-hit-area-expansion; 15 | padding: $toggle-hit-area-expansion; 16 | 17 | &.dragging { 18 | .handle { 19 | background-color: $toggle-handle-dragging-bg-color !important; 20 | } 21 | } 22 | 23 | &.toggle-light { 24 | @include toggle-style($toggle-on-light-border, $toggle-on-light-bg); 25 | } 26 | &.toggle-stable { 27 | @include toggle-style($toggle-on-stable-border, $toggle-on-stable-bg); 28 | } 29 | &.toggle-positive { 30 | @include toggle-style($toggle-on-positive-border, $toggle-on-positive-bg); 31 | } 32 | &.toggle-calm { 33 | @include toggle-style($toggle-on-calm-border, $toggle-on-calm-bg); 34 | } 35 | &.toggle-assertive { 36 | @include toggle-style($toggle-on-assertive-border, $toggle-on-assertive-bg); 37 | } 38 | &.toggle-balanced { 39 | @include toggle-style($toggle-on-balanced-border, $toggle-on-balanced-bg); 40 | } 41 | &.toggle-energized { 42 | @include toggle-style($toggle-on-energized-border, $toggle-on-energized-bg); 43 | } 44 | &.toggle-royal { 45 | @include toggle-style($toggle-on-royal-border, $toggle-on-royal-bg); 46 | } 47 | &.toggle-dark { 48 | @include toggle-style($toggle-on-dark-border, $toggle-on-dark-bg); 49 | } 50 | } 51 | 52 | /* hide the actual input checkbox */ 53 | .toggle input { 54 | display: none; 55 | } 56 | 57 | /* the track appearance when the toggle is "off" */ 58 | .toggle .track { 59 | @include transition-timing-function(ease-in-out); 60 | @include transition-duration($toggle-transition-duration); 61 | @include transition-property((background-color, border)); 62 | 63 | display: inline-block; 64 | box-sizing: border-box; 65 | width: $toggle-width; 66 | height: $toggle-height; 67 | border: solid $toggle-border-width $toggle-off-border-color; 68 | border-radius: $toggle-border-radius; 69 | background-color: $toggle-off-bg-color; 70 | content: ' '; 71 | cursor: pointer; 72 | } 73 | 74 | /* the handle (circle) thats inside the toggle's track area */ 75 | /* also the handle's appearance when it is "off" */ 76 | .toggle .handle { 77 | @include transition($toggle-transition-duration ease-in-out); 78 | position: absolute; 79 | top: $toggle-border-width + $toggle-hit-area-expansion; 80 | left: $toggle-border-width + $toggle-hit-area-expansion; 81 | display: block; 82 | width: $toggle-handle-width; 83 | height: $toggle-handle-height; 84 | border-radius: $toggle-handle-radius; 85 | background-color: $toggle-handle-off-bg-color; 86 | 87 | /* used to create a larger (but hidden) hit area to slide the handle */ 88 | &:before { 89 | position: absolute; 90 | top: -4px; 91 | left: ( ($toggle-handle-width / 2) * -1) - 8; 92 | padding: ($toggle-handle-height / 2) + 5 ($toggle-handle-width + 7); 93 | content: " "; 94 | } 95 | } 96 | 97 | /* the handle when the toggle is "on" */ 98 | .toggle input:checked + .track .handle { 99 | @include translate3d($toggle-width - $toggle-handle-width - ($toggle-border-width * 2), 0, 0); 100 | background-color: $toggle-handle-on-bg-color; 101 | } 102 | 103 | /* make sure list item content have enough padding on right to fit the toggle */ 104 | .item-toggle { 105 | padding-right: ($item-padding * 3) + $toggle-width; 106 | 107 | &.active { 108 | box-shadow: none; 109 | } 110 | } 111 | 112 | /* position the toggle to the right within a list item */ 113 | .item-toggle .toggle { 114 | position: absolute; 115 | top: $item-padding / 2; 116 | right: $item-padding; 117 | z-index: $z-index-item-toggle; 118 | } 119 | 120 | .toggle input:disabled + .track { 121 | opacity: .6; 122 | } 123 | -------------------------------------------------------------------------------- /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 | .footer-hide { 29 | .bar-footer, 30 | .tabs { 31 | display: none; 32 | } 33 | .has-footer, 34 | .has-tabs { 35 | bottom: 0; 36 | } 37 | } 38 | 39 | .inline { 40 | display: inline-block; 41 | } 42 | 43 | .disable-pointer-events { 44 | pointer-events: none; 45 | } 46 | 47 | .enable-pointer-events { 48 | pointer-events: auto; 49 | } 50 | 51 | .disable-user-behavior { 52 | // used to prevent the browser from doing its native behavior. this doesnt 53 | // prevent the scrolling, but cancels the contextmenu, tap highlighting, etc 54 | 55 | @include user-select(none); 56 | @include touch-callout(none); 57 | @include tap-highlight-transparent(); 58 | 59 | -webkit-user-drag: none; 60 | 61 | -ms-touch-action: none; 62 | -ms-content-zooming: none; 63 | } 64 | 65 | .block { 66 | display: block; 67 | clear: both; 68 | &:after { 69 | display: block; 70 | visibility: hidden; 71 | clear: both; 72 | height: 0; 73 | content: "."; 74 | } 75 | } 76 | 77 | .full-image { 78 | width: 100%; 79 | } 80 | 81 | .clearfix { 82 | *zoom: 1; 83 | &:before, 84 | &:after { 85 | display: table; 86 | content: ""; 87 | // Fixes Opera/contenteditable bug: 88 | // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 89 | line-height: 0; 90 | } 91 | &:after { 92 | clear: both; 93 | } 94 | } 95 | 96 | /** 97 | * Content Padding 98 | * -------------------------------------------------- 99 | */ 100 | 101 | .padding { 102 | padding: $content-padding; 103 | } 104 | 105 | .padding-top, 106 | .padding-vertical { 107 | padding-top: $content-padding; 108 | } 109 | 110 | .padding-right, 111 | .padding-horizontal { 112 | padding-right: $content-padding; 113 | } 114 | 115 | .padding-bottom, 116 | .padding-vertical { 117 | padding-bottom: $content-padding; 118 | } 119 | 120 | .padding-left, 121 | .padding-horizontal { 122 | padding-left: $content-padding; 123 | } 124 | 125 | 126 | /** 127 | * Rounded 128 | * -------------------------------------------------- 129 | */ 130 | 131 | .rounded { 132 | border-radius: $border-radius-base; 133 | } 134 | 135 | 136 | /** 137 | * Utility Colors 138 | * -------------------------------------------------- 139 | * Utility colors are added to help set a naming convention. You'll 140 | * notice we purposely do not use words like "red" or "blue", but 141 | * instead have colors which represent an emotion or generic theme. 142 | */ 143 | 144 | .light, a.light { 145 | color: $light; 146 | } 147 | .light-bg { 148 | background-color: $light; 149 | } 150 | .light-border { 151 | border-color: $button-light-border; 152 | } 153 | 154 | .stable, a.stable { 155 | color: $stable; 156 | } 157 | .stable-bg { 158 | background-color: $stable; 159 | } 160 | .stable-border { 161 | border-color: $button-stable-border; 162 | } 163 | 164 | .positive, a.positive { 165 | color: $positive; 166 | } 167 | .positive-bg { 168 | background-color: $positive; 169 | } 170 | .positive-border { 171 | border-color: $button-positive-border; 172 | } 173 | 174 | .calm, a.calm { 175 | color: $calm; 176 | } 177 | .calm-bg { 178 | background-color: $calm; 179 | } 180 | .calm-border { 181 | border-color: $button-calm-border; 182 | } 183 | 184 | .assertive, a.assertive { 185 | color: $assertive; 186 | } 187 | .assertive-bg { 188 | background-color: $assertive; 189 | } 190 | .assertive-border { 191 | border-color: $button-assertive-border; 192 | } 193 | 194 | .balanced, a.balanced { 195 | color: $balanced; 196 | } 197 | .balanced-bg { 198 | background-color: $balanced; 199 | } 200 | .balanced-border { 201 | border-color: $button-balanced-border; 202 | } 203 | 204 | .energized, a.energized { 205 | color: $energized; 206 | } 207 | .energized-bg { 208 | background-color: $energized; 209 | } 210 | .energized-border { 211 | border-color: $button-energized-border; 212 | } 213 | 214 | .royal, a.royal { 215 | color: $royal; 216 | } 217 | .royal-bg { 218 | background-color: $royal; 219 | } 220 | .royal-border { 221 | border-color: $button-royal-border; 222 | } 223 | 224 | .dark, a.dark { 225 | color: $dark; 226 | } 227 | .dark-bg { 228 | background-color: $dark; 229 | } 230 | .dark-border { 231 | border-color: $button-dark-border; 232 | } 233 | -------------------------------------------------------------------------------- /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 | "bar", 19 | "tabs", 20 | "menu", 21 | "modal", 22 | "popup", 23 | "items", 24 | "list", 25 | "badge", 26 | "slide-box", 27 | "split-pane", 28 | 29 | // Forms 30 | "form", 31 | "checkbox", 32 | "toggle", 33 | "radio", 34 | "range", 35 | "progress", 36 | 37 | // Buttons 38 | "button", 39 | "button-bar", 40 | 41 | // Util 42 | "animations", 43 | "grid", 44 | "util", 45 | "platform"; 46 | -------------------------------------------------------------------------------- /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, v#{$ionicons-version} 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"; -------------------------------------------------------------------------------- /www/lib/userapp/phonegap.userapp.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | // Phonegap device object 3 | var device = window.device || { uuid: 'account-token' }; 4 | 5 | function findPersistentToken(callback, idOnly) { 6 | if (callback) { 7 | UserApp.Token.search({ fields: ['token_id', 'name'], page_size: 100 }, function(error, tokens) { 8 | if (!error && tokens) { 9 | for (var i = 0; i < tokens.items.length; ++i) { 10 | if (tokens.items[i].name == (device.uuid || 'account-token')) { 11 | if (!idOnly) { 12 | UserApp.Token.get({ token_id: tokens.items[i].token_id }, function(error, token) { 13 | if (!error && token.length == 1) { 14 | callback(null, token[0]); 15 | } else { 16 | callback(error, null); 17 | } 18 | }); 19 | } else { 20 | callback(null, tokens.items[i]); 21 | } 22 | 23 | return; 24 | } 25 | } 26 | } 27 | 28 | callback(error, null); 29 | }); 30 | } 31 | } 32 | 33 | function createPersistentToken(callback) { 34 | UserApp.Token.save({ 35 | name: (device.uuid || 'account-token'), 36 | enabled: true 37 | }, function(error, token){ 38 | if (!error) { 39 | callback && callback(null, token); 40 | } else { 41 | callback && callback(error, null); 42 | } 43 | }); 44 | } 45 | 46 | UserApp.setupPersistentToken = function(callback) { 47 | findPersistentToken(function(error, token) { 48 | if (token) { 49 | callback && callback(null, token); 50 | } else if (!token) { 51 | createPersistentToken(function(error, newToken) { 52 | if (!error && newToken) { 53 | callback && callback(null, newToken); 54 | } else { 55 | callback && callback(error, null); 56 | } 57 | }); 58 | } else { 59 | callback && callback(error, null); 60 | } 61 | }); 62 | }; 63 | 64 | UserApp.removePersistentToken = function(callback) { 65 | findPersistentToken(function(error, token) { 66 | if (!error && token) { 67 | UserApp.Token.remove({ 68 | token_id: token.token_id 69 | }, function(error, token){ 70 | if (!error) { 71 | callback && callback(null, true); 72 | } else { 73 | callback && callback(error, false); 74 | } 75 | }); 76 | } else { 77 | callback && callback(error, false); 78 | } 79 | }, true); 80 | }; 81 | 82 | UserApp.tokenStorage = { 83 | get: function() { 84 | return window.localStorage.getItem('ua_session_token'); 85 | }, 86 | set: function(token) { 87 | window.localStorage.setItem('ua_session_token', token); 88 | }, 89 | remove: function() { 90 | window.localStorage.removeItem('ua_session_token'); 91 | } 92 | }; 93 | 94 | UserApp.oauthHandler = function(url, callback) { 95 | var ref = window.open(url, '_blank', 'location=yes'); 96 | ref.addEventListener('loadstart', function(event) { 97 | var matches = null; 98 | if (event && (matches = event.url.match(/ua\_token=([a-z0-9\-\_]+)$/i)) != null) { 99 | UserApp.setToken(matches[1]); 100 | UserApp.setupPersistentToken(function(error, token) { 101 | if (token) { 102 | callback(token.value); 103 | } else { 104 | callback(matches[1]); 105 | } 106 | }); 107 | ref.close(); 108 | } 109 | }); 110 | ref.addEventListener('exit', function() { 111 | callback(null); 112 | }); 113 | }; 114 | })(); -------------------------------------------------------------------------------- /www/templates/friend-detail.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /www/templates/login-facebook.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 |

Welcome to MyApp

6 | 10 | 11 |

12 | Log in/sign up with your email 13 |

14 |
15 |
16 |
17 | 20 |
-------------------------------------------------------------------------------- /www/templates/login.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 9 | 13 |
14 |
15 | 19 | 22 |

23 | Sign Up 24 |

25 |
26 |
27 |
28 | 31 |
-------------------------------------------------------------------------------- /www/templates/signup.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 9 | 13 | 17 |
18 |
19 | 23 |
24 |
25 |
26 | 29 |
-------------------------------------------------------------------------------- /www/templates/tab-account.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Account

4 | 5 |
6 |
7 | First Name: {{ user.first_name }} 8 |
9 |
10 | 11 |
12 |
13 | Login: {{ user.login }} 14 |
15 |
16 | 17 |
18 |
19 | Email: {{ user.email }} 20 |
21 |
22 | 23 | 24 | Log Out 25 | 26 | 27 |
28 |
29 | -------------------------------------------------------------------------------- /www/templates/tab-dash.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Welcome {{ user.first_name }}!

4 |

5 | This is an app demonstrating UserApp with Ionic. 6 |

7 |
8 |
-------------------------------------------------------------------------------- /www/templates/tab-friends.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{friend.name}} 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /www/templates/tabs.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | --------------------------------------------------------------------------------