├── .gitignore ├── README.md ├── keensoft-example ├── .bowerrc ├── .gitignore ├── bower.json ├── config.xml ├── gulpfile.js ├── ionic.project ├── package.json ├── scss │ └── ionic.app.scss └── www │ ├── css │ ├── main.css │ └── style.css │ ├── img │ ├── ionic.png │ ├── keensoft.gif │ ├── keensoft.jpg │ └── keensoft.png │ ├── index.html │ ├── js │ ├── app.js │ └── controllers.js │ └── lib │ ├── angular-animate │ ├── .bower.json │ ├── README.md │ ├── angular-animate.js │ ├── angular-animate.min.js │ ├── angular-animate.min.js.map │ ├── bower.json │ └── package.json │ ├── angular-sanitize │ ├── .bower.json │ ├── README.md │ ├── angular-sanitize.js │ ├── angular-sanitize.min.js │ ├── angular-sanitize.min.js.map │ ├── bower.json │ └── package.json │ ├── angular-ui-router │ ├── .bower.json │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── api │ │ └── angular-ui-router.d.ts │ ├── bower.json │ ├── release │ │ ├── angular-ui-router.js │ │ └── angular-ui-router.min.js │ └── src │ │ ├── common.js │ │ ├── resolve.js │ │ ├── state.js │ │ ├── stateDirectives.js │ │ ├── stateFilters.js │ │ ├── templateFactory.js │ │ ├── urlMatcherFactory.js │ │ ├── urlRouter.js │ │ ├── view.js │ │ ├── viewDirective.js │ │ └── viewScroll.js │ ├── angular │ ├── .bower.json │ ├── README.md │ ├── angular-csp.css │ ├── angular.js │ ├── angular.min.js │ ├── angular.min.js.gzip │ ├── angular.min.js.map │ ├── bower.json │ └── package.json │ ├── hammerjs │ ├── .bower.json │ ├── .bowerrc │ ├── .gitignore │ ├── .jscsrc │ ├── .jshintrc │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── Gruntfile.coffee │ ├── LICENSE.md │ ├── README.md │ ├── bower.json │ ├── component.json │ ├── hammer.js │ ├── hammer.min.js │ ├── hammer.min.map │ └── package.json │ ├── ionic │ ├── .bower.json │ ├── README.md │ ├── bower.json │ ├── css │ │ ├── ionic.css │ │ └── ionic.min.css │ ├── fonts │ │ ├── ionicons.eot │ │ ├── ionicons.svg │ │ ├── ionicons.ttf │ │ └── ionicons.woff │ ├── js │ │ ├── ionic-angular.js │ │ ├── ionic-angular.min.js │ │ ├── ionic.bundle.js │ │ ├── ionic.bundle.min.js │ │ ├── ionic.js │ │ └── ionic.min.js │ └── scss │ │ ├── _action-sheet.scss │ │ ├── _animations.scss │ │ ├── _backdrop.scss │ │ ├── _badge.scss │ │ ├── _bar.scss │ │ ├── _button-bar.scss │ │ ├── _button.scss │ │ ├── _checkbox.scss │ │ ├── _form.scss │ │ ├── _grid.scss │ │ ├── _items.scss │ │ ├── _list.scss │ │ ├── _loading.scss │ │ ├── _menu.scss │ │ ├── _mixins.scss │ │ ├── _modal.scss │ │ ├── _platform.scss │ │ ├── _popover.scss │ │ ├── _popup.scss │ │ ├── _progress.scss │ │ ├── _radio.scss │ │ ├── _range.scss │ │ ├── _reset.scss │ │ ├── _scaffolding.scss │ │ ├── _select.scss │ │ ├── _slide-box.scss │ │ ├── _split-pane.scss │ │ ├── _tabs.scss │ │ ├── _toggle.scss │ │ ├── _transitions.scss │ │ ├── _type.scss │ │ ├── _util.scss │ │ ├── _variables.scss │ │ ├── ionic.scss │ │ └── ionicons │ │ ├── _ionicons-animation.scss │ │ ├── _ionicons-font.scss │ │ ├── _ionicons-icons.scss │ │ ├── _ionicons-variables.scss │ │ └── ionicons.scss │ └── ryanmullins-angular-hammer │ ├── .bower.json │ ├── LICENSE.md │ ├── README.md │ ├── angular-hammer-logo.png │ ├── angular.hammer.js │ ├── angular.hammer.min.js │ ├── angular.hammer.min.js.map │ ├── bower.json │ ├── doc │ ├── angular.hammer.js.html │ ├── index.html │ ├── module-hmTouchEvents.html │ ├── scripts │ │ ├── linenumber.js │ │ └── prettify │ │ │ ├── Apache-License-2.0.txt │ │ │ ├── lang-css.js │ │ │ └── prettify.js │ └── styles │ │ ├── jsdoc-default.css │ │ ├── prettify-jsdoc.css │ │ └── prettify-tomorrow.css │ ├── gruntfile.js │ ├── jsdoc.json │ ├── package.json │ └── server.js ├── plugin.xml ├── src ├── android │ └── FullScreenImage.java └── ios │ ├── FullScreenImage.h │ ├── FullScreenImage.m │ ├── NSData+Base64.h │ └── NSData+Base64.m └── www ├── bower_components └── platform │ ├── .bower.json │ ├── LICENSE.txt │ ├── bower.json │ └── platform.js └── fullscreenimage.js /.gitignore: -------------------------------------------------------------------------------- 1 | hooks/ 2 | example/.idea 3 | .idea/ 4 | /nbproject/private/ 5 | build.xml 6 | manifest.mf 7 | build-impl.xml 8 | genfiles.properties 9 | project.properties 10 | project.xml 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Full Screen Image Plugin Cordova iOS/Android 2 | ================================= 3 | 4 | Plugin to show images from cordova project and use it with native components. 5 | 6 | Installation: 7 | -------------- 8 | 9 | `cordova plugin add https://github.com/keensoft/FullScreenImage-Cordova-Plugin.git` 10 | 11 | OR from http://plugins.cordova.io/ 12 | 13 | `cordova plugin add es.keensoft.fullscreenimage` 14 | 15 | Usage: 16 | -------------- 17 | 18 | Usage with your javascript code (Images should be inside www/**pathOfImage**): 19 | `FullScreenImage.showImageURL(imageSrc);` 20 | 21 | Usage with base64 image String code: 22 | `FullScreenImage.showImageBase64(base64String, name, type);` 23 | 24 | Platforms: 25 | -------------- 26 | * iOS ( >= iOS 6) 27 | Full Screen Image Plugin, open **UIDocumentInteractionController** to show image. 28 | 29 | * Android 30 | Full Screen Image Plugin, use Intent to open it with external Imageviewer. This plugins checks Application *can use getExternalStorageDirectory* 31 | 32 | Example App 33 | -------------- 34 | You can test the plugin fast and easy. Go to "example/" path and execute [ionic][4] project. Get started with ionic [here][5] 35 | 36 | First execute: "ionic platform add ios" and then you can open iOS project. 37 | 38 | Added Simple Photo Gallery using IonicFramework, loading array of Base64 images or local URL's. 39 | 40 | Uninstall 41 | -------------- 42 | 43 | `cordova plugin remove FullScreenImage` 44 | 45 | Tested devices 46 | -------------- 47 | iPad2 (iOS 7), iPhone 4S (iOS 7), iPhone 5 (iOS 7), Galaxy Note II (4.3) 48 | 49 | Info 50 | -------------- 51 | ![enter image description here][1] 52 | 53 | Contact: [info@keensoft.es][2] 54 | 55 | Web: [http://keensoft.es][3] 56 | 57 | 58 | [1]: http://www.keensoft.es/wp-content/uploads/2013/04/keensoft-logo1.png 59 | [2]: info@keensoft.es 60 | [3]: http://keensoft.es 61 | [4]: http://ionicframework.com/ 62 | [5]: http://ionicframework.com/getting-started/ -------------------------------------------------------------------------------- /keensoft-example/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "www/lib" 3 | } 4 | -------------------------------------------------------------------------------- /keensoft-example/.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | node_modules/ 5 | platforms/ 6 | plugins/ 7 | -------------------------------------------------------------------------------- /keensoft-example/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "keensoft-example", 3 | "private": "true", 4 | "devDependencies": { 5 | "ionic": "driftyco/ionic-bower#1.0.0-beta.14" 6 | }, 7 | "dependencies": { 8 | "ryanmullins-angular-hammer": "~2.1.10" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /keensoft-example/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | keensoft-example 4 | 5 | Full Screen Image Example 6 | 7 | 8 | keensoft 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /keensoft-example/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var gutil = require('gulp-util'); 3 | var bower = require('bower'); 4 | var concat = require('gulp-concat'); 5 | var sass = require('gulp-sass'); 6 | var minifyCss = require('gulp-minify-css'); 7 | var rename = require('gulp-rename'); 8 | var sh = require('shelljs'); 9 | 10 | var paths = { 11 | sass: ['./scss/**/*.scss'] 12 | }; 13 | 14 | gulp.task('default', ['sass']); 15 | 16 | gulp.task('sass', function(done) { 17 | gulp.src('./scss/ionic.app.scss') 18 | .pipe(sass()) 19 | .pipe(gulp.dest('./www/css/')) 20 | .pipe(minifyCss({ 21 | keepSpecialComments: 0 22 | })) 23 | .pipe(rename({ extname: '.min.css' })) 24 | .pipe(gulp.dest('./www/css/')) 25 | .on('end', done); 26 | }); 27 | 28 | gulp.task('watch', function() { 29 | gulp.watch(paths.sass, ['sass']); 30 | }); 31 | 32 | gulp.task('install', ['git-check'], function() { 33 | return bower.commands.install() 34 | .on('log', function(data) { 35 | gutil.log('bower', gutil.colors.cyan(data.id), data.message); 36 | }); 37 | }); 38 | 39 | gulp.task('git-check', function(done) { 40 | if (!sh.which('git')) { 41 | console.log( 42 | ' ' + gutil.colors.red('Git is not installed.'), 43 | '\n Git, the version control system, is required to download Ionic.', 44 | '\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.', 45 | '\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.' 46 | ); 47 | process.exit(1); 48 | } 49 | done(); 50 | }); 51 | -------------------------------------------------------------------------------- /keensoft-example/ionic.project: -------------------------------------------------------------------------------- 1 | { 2 | "name": "keensoft-example", 3 | "app_id": "" 4 | } -------------------------------------------------------------------------------- /keensoft-example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "keensoft-example", 3 | "version": "1.0.0", 4 | "description": "keensoft-example: 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 | "devDependencies": { 13 | "bower": "^1.3.3", 14 | "gulp-util": "^2.2.14", 15 | "shelljs": "^0.3.0" 16 | }, 17 | "cordovaPlugins": [ 18 | "https://github.com/keensoft/FullScreenImage-Cordova-Plugin.git" 19 | ] 20 | } -------------------------------------------------------------------------------- /keensoft-example/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: #387ef5 !default; 10 | $calm: #11c1f3 !default; 11 | $balanced: #33cd5f !default; 12 | $energized: #ffc900 !default; 13 | $assertive: #ef473a !default; 14 | $royal: #886aea !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 | -------------------------------------------------------------------------------- /keensoft-example/www/css/main.css: -------------------------------------------------------------------------------- 1 | .transparent { 2 | background: transparent !important; 3 | } 4 | .image-modal { 5 | width: 100% !important; 6 | height: 100%; 7 | top: 0 !important; 8 | left: 0 !important; 9 | } 10 | .fullscreen-image { 11 | max-width: 100%; 12 | max-height: 100%; 13 | bottom: 0; 14 | left: 0; 15 | margin: auto; 16 | overflow: auto; 17 | position: fixed; 18 | right: 0; 19 | top: 0; 20 | } 21 | .slider { 22 | width: 100%; 23 | height: 100%; 24 | } 25 | 26 | p.info { 27 | position: absolute; 28 | bottom: 55px; 29 | margin: 0 auto; 30 | width: 100%; 31 | display: block; 32 | text-align: center; 33 | font-size: 28px; 34 | color: #ffffff; 35 | } 36 | 37 | /* Fix modal backdrop for smaller devices */ 38 | @media (max-width: 679px) { 39 | .active .modal-backdrop-bg { 40 | opacity: .5; 41 | } 42 | .modal-backdrop-bg { 43 | -webkit-transition: opacity 300ms ease-in-out; 44 | transition: opacity 300ms ease-in-out; 45 | background-color: #000; 46 | opacity: 0; 47 | } 48 | } -------------------------------------------------------------------------------- /keensoft-example/www/css/style.css: -------------------------------------------------------------------------------- 1 | /* Empty. Add your own CSS if you like */ 2 | -------------------------------------------------------------------------------- /keensoft-example/www/img/ionic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/img/ionic.png -------------------------------------------------------------------------------- /keensoft-example/www/img/keensoft.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/img/keensoft.gif -------------------------------------------------------------------------------- /keensoft-example/www/img/keensoft.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/img/keensoft.jpg -------------------------------------------------------------------------------- /keensoft-example/www/img/keensoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/img/keensoft.png -------------------------------------------------------------------------------- /keensoft-example/www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |

Full Screen Plugin

31 |
32 | 33 | 34 |
35 |
36 | 37 |
38 | 39 |
40 | 41 |

Open Base64 Image (GIF)

42 |

Use "FullScreenImage.showImageBase64(base64,name,type)"

43 |
44 | 45 |
46 | 47 |
48 | 49 | 50 | 51 | Show base64 image 52 | 53 | 54 |
55 | 56 |
57 | 58 |
59 | 60 |

Open Base64 Image (PNG)

61 |

Use "FullScreenImage.showImageBase64(base64,name,type)"

62 |
63 | 64 |
65 | 66 |
67 | 68 | 69 | 70 | Show base64 image 71 | 72 | 73 |
74 | 75 |
76 | 77 |
78 | 79 |

Open Base64 Image (JPG)

80 |

Use "FullScreenImage.showImageBase64(base64,name,type)"

81 |
82 | 83 |
84 | 85 |
86 | 87 | 88 | 89 | Show base64 image 90 | 91 | 92 |
93 | 94 |
95 | 96 |
97 | 98 |

Open Url Path Image

99 |

Use "FullScreenImage.showImageUrl(url)"

100 |
101 | 102 |
103 | 104 |
105 | 106 | 107 | 108 | Show URL Path image 109 | 110 | 111 |
112 | 113 |
114 | 115 |
116 | 117 |

Open Url Path Image (JPG)

118 |

Use "FullScreenImage.showImageUrl(url)"

119 |
120 | 121 |
122 | 123 |
124 | 125 | 126 | 127 | Show URL Path image 128 | 129 | 130 |
131 | 132 | 144 | 156 |
157 |
158 | 159 | 160 | -------------------------------------------------------------------------------- /keensoft-example/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 | angular.module('starter', ['ionic', 'starter.controllers']) 7 | 8 | .run(function($ionicPlatform) { 9 | $ionicPlatform.ready(function() { 10 | // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard 11 | // for form inputs) 12 | if(window.cordova && window.cordova.plugins.Keyboard) { 13 | cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 14 | } 15 | if(window.StatusBar) { 16 | StatusBar.styleDefault(); 17 | } 18 | }); 19 | }) 20 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-animate/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.6", 4 | "main": "./angular-animate.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-animate", 10 | "_release": "1.3.6", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.6", 14 | "commit": "d38c9593911d231cce076c1b64f823e572813214" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-animate.git", 17 | "_target": "1.3.6", 18 | "_originalSource": "angular-animate" 19 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-animate/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-animate 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-animate 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngAnimate` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngAnimate']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-animate')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-animate 36 | ``` 37 | 38 | Then add a ` 42 | ``` 43 | 44 | Then add `ngAnimate` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngAnimate']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-animate/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.6", 4 | "main": "./angular-animate.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-animate/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.3.6", 4 | "description": "AngularJS module for animations", 5 | "main": "angular-animate.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "animation", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-sanitize/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.6", 4 | "main": "./angular-sanitize.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | }, 9 | "homepage": "https://github.com/angular/bower-angular-sanitize", 10 | "_release": "1.3.6", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "v1.3.6", 14 | "commit": "ccd773f961fa1fadc8d728c45a2635c73d34fb2d" 15 | }, 16 | "_source": "git://github.com/angular/bower-angular-sanitize.git", 17 | "_target": "1.3.6", 18 | "_originalSource": "angular-sanitize" 19 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-sanitize/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-sanitize 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-sanitize 15 | ``` 16 | 17 | Add a ` 21 | ``` 22 | 23 | Then add `ngSanitize` as a dependency for your app: 24 | 25 | ```javascript 26 | angular.module('myApp', ['ngSanitize']); 27 | ``` 28 | 29 | Note that this package is not in CommonJS format, so doing `require('angular-sanitize')` will 30 | return `undefined`. 31 | 32 | ### bower 33 | 34 | ```shell 35 | bower install angular-sanitize 36 | ``` 37 | 38 | Add a ` 42 | ``` 43 | 44 | Then add `ngSanitize` as a dependency for your app: 45 | 46 | ```javascript 47 | angular.module('myApp', ['ngSanitize']); 48 | ``` 49 | 50 | ## Documentation 51 | 52 | Documentation is available on the 53 | [AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). 54 | 55 | ## License 56 | 57 | The MIT License 58 | 59 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 60 | 61 | Permission is hereby granted, free of charge, to any person obtaining a copy 62 | of this software and associated documentation files (the "Software"), to deal 63 | in the Software without restriction, including without limitation the rights 64 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 65 | copies of the Software, and to permit persons to whom the Software is 66 | furnished to do so, subject to the following conditions: 67 | 68 | The above copyright notice and this permission notice shall be included in 69 | all copies or substantial portions of the Software. 70 | 71 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 72 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 73 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 74 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 75 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 76 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 77 | THE SOFTWARE. 78 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-sanitize/angular-sanitize.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.3.6 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(n,h,p){'use strict';function E(a){var d=[];s(d,h.noop).chars(a);return d.join("")}function g(a){var d={};a=a.split(",");var c;for(c=0;c=c;e--)d.end&&d.end(f[e]);f.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,f=[],m=a,l;for(f.last=function(){return f[f.length-1]};a;){l="";k=!0;if(f.last()&&x[f.last()])a=a.replace(new RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");d.chars&&d.chars(r(b));return""}),e("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(d.comment&&d.comment(a.substring(4, 8 | b)),a=a.substring(b+3),k=!1);else if(y.test(a)){if(b=a.match(y))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(z))a=a.substring(b[0].length),b[0].replace(z,e),k=!1}else K.test(a)&&((b=a.match(A))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(A,c)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),d.chars&&d.chars(r(l)))}if(a==m)throw L("badparse",a);m=a}e()}function r(a){if(!a)return"";var d=M.exec(a);a=d[1];var c=d[3];if(d=d[2])q.innerHTML= 9 | d.replace(//g,">")}function s(a,d){var c=!1,e=h.bind(a,a.push);return{start:function(a,k,f){a=h.lowercase(a);!c&&x[a]&&(c=a);c||!0!==C[a]||(e("<"),e(a),h.forEach(k,function(c,f){var k= 10 | h.lowercase(f),g="img"===a&&"src"===k||"background"===k;!0!==P[k]||!0===D[k]&&!d(c,g)||(e(" "),e(f),e('="'),e(B(c)),e('"'))}),e(f?"/>":">"))},end:function(a){a=h.lowercase(a);c||!0!==C[a]||(e(""));a==c&&(c=!1)},chars:function(a){c||e(B(a))}}}var L=h.$$minErr("$sanitize"),A=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,z=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^]*?)>/i,I=/"\u201d\u2019]/,c=/^mailto:/;return function(e,b){function k(a){a&&g.push(E(a))} 15 | function f(a,c){g.push("');k(c);g.push("")}if(!e)return e;for(var m,l=e,g=[],n,p;m=l.match(d);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),f(n,m[0].replace(c,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular); 16 | //# sourceMappingURL=angular-sanitize.min.js.map 17 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-sanitize/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.6", 4 | "main": "./angular-sanitize.js", 5 | "ignore": [], 6 | "dependencies": { 7 | "angular": "1.3.6" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-sanitize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.3.6", 4 | "description": "AngularJS module for sanitizing HTML", 5 | "main": "angular-sanitize.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "html", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-router", 3 | "version": "0.2.13", 4 | "main": "./release/angular-ui-router.js", 5 | "dependencies": { 6 | "angular": ">= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ], 23 | "homepage": "https://github.com/angular-ui/ui-router", 24 | "_release": "0.2.13", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "0.2.13", 28 | "commit": "c3d543aae43d4600512520a0d70723ac31f2cb62" 29 | }, 30 | "_source": "git://github.com/angular-ui/ui-router.git", 31 | "_target": "0.2.13", 32 | "_originalSource": "angular-ui-router" 33 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 2 | # Report an Issue 3 | 4 | Help us make UI-Router better! If you think you might have found a bug, or some other weirdness, start by making sure 5 | it hasn't already been reported. You can [search through existing issues](https://github.com/angular-ui/ui-router/search?q=wat%3F&type=Issues) 6 | to see if someone's reported one similar to yours. 7 | 8 | If not, then [create a plunkr](http://bit.ly/UIR-Plunk) that demonstrates the problem (try to use as little code 9 | as possible: the more minimalist, the faster we can debug it). 10 | 11 | Next, [create a new issue](https://github.com/angular-ui/ui-router/issues/new) that briefly explains the problem, 12 | and provides a bit of background as to the circumstances that triggered it. Don't forget to include the link to 13 | that plunkr you created! 14 | 15 | **Note**: If you're unsure how a feature is used, or are encountering some unexpected behavior that you aren't sure 16 | is a bug, it's best to talk it out on 17 | [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) before reporting it. This 18 | keeps development streamlined, and helps us focus on building great software. 19 | 20 | 21 | Issues only! | 22 | -------------| 23 | Please keep in mind that the issue tracker is for *issues*. Please do *not* post an issue if you need help or support. Instead, see one of the above-mentioned forums or [IRC](irc://irc.freenode.net/#angularjs). | 24 | 25 | ####Purple Labels 26 | A purple label means that **you** need to take some further action. 27 | - ![Not Actionable - Need Info](http://angular-ui.github.io/ui-router/images/notactionable.png): Your issue is not specific enough, or there is no clear action that we can take. Please clarify and refine your issue. 28 | - ![Plunkr Please](http://angular-ui.github.io/ui-router/images/plunkrplease.png): Please [create a plunkr](http://bit.ly/UIR-Plunk) 29 | - ![StackOverflow](http://angular-ui.github.io/ui-router/images/stackoverflow.png): We suspect your issue is really a help request, or could be answered by the community. Please ask your question on [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router). If you determine that is an actual issue, please explain why. 30 | 31 | If your issue gets labeled with purple label, no further action will be taken until you respond to the label appropriately. 32 | 33 | # Contribute 34 | 35 | **(1)** See the **[Developing](#developing)** section below, to get the development version of UI-Router up and running on your local machine. 36 | 37 | **(2)** Check out the [roadmap](https://github.com/angular-ui/ui-router/milestones) to see where the project is headed, and if your feature idea fits with where we're headed. 38 | 39 | **(3)** If you're not sure, [open an RFC](https://github.com/angular-ui/ui-router/issues/new?title=RFC:%20My%20idea) to get some feedback on your idea. 40 | 41 | **(4)** Finally, commit some code and open a pull request. Code & commits should abide by the following rules: 42 | 43 | - *Always* have test coverage for new features (or regression tests for bug fixes), and *never* break existing tests 44 | - Commits should represent one logical change each; if a feature goes through multiple iterations, squash your commits down to one 45 | - Make sure to follow the [Angular commit message format](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format) so your change will appear in the changelog of the next release. 46 | - Changes should always respect the coding style of the project 47 | 48 | 49 | 50 | # Developing 51 | 52 | UI-Router uses grunt >= 0.4.x. Make sure to upgrade your environment and read the 53 | [Migration Guide](http://gruntjs.com/upgrading-from-0.3-to-0.4). 54 | 55 | Dependencies for building from source and running tests: 56 | 57 | * [grunt-cli](https://github.com/gruntjs/grunt-cli) - run: `$ npm install -g grunt-cli` 58 | * Then, install the development dependencies by running `$ npm install` from the project directory 59 | 60 | There are a number of targets in the gruntfile that are used to generating different builds: 61 | 62 | * `grunt`: Perform a normal build, runs jshint and karma tests 63 | * `grunt build`: Perform a normal build 64 | * `grunt dist`: Perform a clean build and generate documentation 65 | * `grunt dev`: Run dev server (sample app) and watch for changes, builds and runs karma tests on changes. 66 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2014 The AngularUI Team, Karsten Sperling 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/api/angular-ui-router.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.1.5+ (ui.router module) 2 | // Project: https://github.com/angular-ui/ui-router 3 | // Definitions by: Michel Salib 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | declare module ng.ui { 7 | 8 | interface IState { 9 | name?: string; 10 | template?: string; 11 | templateUrl?: any; // string || () => string 12 | templateProvider?: any; // () => string || IPromise 13 | controller?: any; 14 | controllerAs?: string; 15 | controllerProvider?: any; 16 | resolve?: {}; 17 | url?: string; 18 | params?: any; 19 | views?: {}; 20 | abstract?: boolean; 21 | onEnter?: (...args: any[]) => void; 22 | onExit?: (...args: any[]) => void; 23 | data?: any; 24 | reloadOnSearch?: boolean; 25 | } 26 | 27 | interface ITypedState extends IState { 28 | data?: T; 29 | } 30 | 31 | interface IStateProvider extends IServiceProvider { 32 | state(name: string, config: IState): IStateProvider; 33 | state(config: IState): IStateProvider; 34 | decorator(name?: string, decorator?: (state: IState, parent: Function) => any): any; 35 | } 36 | 37 | interface IUrlMatcher { 38 | concat(pattern: string): IUrlMatcher; 39 | exec(path: string, searchParams: {}): {}; 40 | parameters(): string[]; 41 | format(values: {}): string; 42 | } 43 | 44 | interface IUrlMatcherFactory { 45 | compile(pattern: string): IUrlMatcher; 46 | isMatcher(o: any): boolean; 47 | } 48 | 49 | interface IUrlRouterProvider extends IServiceProvider { 50 | when(whenPath: RegExp, handler: Function): IUrlRouterProvider; 51 | when(whenPath: RegExp, handler: any[]): IUrlRouterProvider; 52 | when(whenPath: RegExp, toPath: string): IUrlRouterProvider; 53 | when(whenPath: IUrlMatcher, hanlder: Function): IUrlRouterProvider; 54 | when(whenPath: IUrlMatcher, handler: any[]): IUrlRouterProvider; 55 | when(whenPath: IUrlMatcher, toPath: string): IUrlRouterProvider; 56 | when(whenPath: string, handler: Function): IUrlRouterProvider; 57 | when(whenPath: string, handler: any[]): IUrlRouterProvider; 58 | when(whenPath: string, toPath: string): IUrlRouterProvider; 59 | otherwise(handler: Function): IUrlRouterProvider; 60 | otherwise(handler: any[]): IUrlRouterProvider; 61 | otherwise(path: string): IUrlRouterProvider; 62 | rule(handler: Function): IUrlRouterProvider; 63 | rule(handler: any[]): IUrlRouterProvider; 64 | } 65 | 66 | interface IStateOptions { 67 | location?: any; 68 | inherit?: boolean; 69 | relative?: IState; 70 | notify?: boolean; 71 | reload?: boolean; 72 | } 73 | 74 | interface IHrefOptions { 75 | lossy?: boolean; 76 | inherit?: boolean; 77 | relative?: IState; 78 | absolute?: boolean; 79 | } 80 | 81 | interface IStateService { 82 | go(to: string, params?: {}, options?: IStateOptions): IPromise; 83 | transitionTo(state: string, params?: {}, updateLocation?: boolean): void; 84 | transitionTo(state: string, params?: {}, options?: IStateOptions): void; 85 | includes(state: string, params?: {}): boolean; 86 | is(state:string, params?: {}): boolean; 87 | is(state: IState, params?: {}): boolean; 88 | href(state: IState, params?: {}, options?: IHrefOptions): string; 89 | href(state: string, params?: {}, options?: IHrefOptions): string; 90 | get(state: string): IState; 91 | get(): IState[]; 92 | current: IState; 93 | params: any; 94 | reload(): void; 95 | } 96 | 97 | interface IStateParamsService { 98 | [key: string]: any; 99 | } 100 | 101 | interface IStateParams { 102 | [key: string]: any; 103 | } 104 | 105 | interface IUrlRouterService { 106 | /* 107 | * Triggers an update; the same update that happens when the address bar 108 | * url changes, aka $locationChangeSuccess. 109 | * 110 | * This method is useful when you need to use preventDefault() on the 111 | * $locationChangeSuccess event, perform some custom logic (route protection, 112 | * auth, config, redirection, etc) and then finally proceed with the transition 113 | * by calling $urlRouter.sync(). 114 | * 115 | */ 116 | sync(): void; 117 | } 118 | 119 | interface IUiViewScrollProvider { 120 | /* 121 | * Reverts back to using the core $anchorScroll service for scrolling 122 | * based on the url anchor. 123 | */ 124 | useAnchorScroll(): void; 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-router", 3 | "version": "0.2.13", 4 | "main": "./release/angular-ui-router.js", 5 | "dependencies": { 6 | "angular": ">= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/src/stateFilters.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc filter 3 | * @name ui.router.state.filter:isState 4 | * 5 | * @requires ui.router.state.$state 6 | * 7 | * @description 8 | * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. 9 | */ 10 | $IsStateFilter.$inject = ['$state']; 11 | function $IsStateFilter($state) { 12 | var isFilter = function (state) { 13 | return $state.is(state); 14 | }; 15 | isFilter.$stateful = true; 16 | return isFilter; 17 | } 18 | 19 | /** 20 | * @ngdoc filter 21 | * @name ui.router.state.filter:includedByState 22 | * 23 | * @requires ui.router.state.$state 24 | * 25 | * @description 26 | * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. 27 | */ 28 | $IncludedByStateFilter.$inject = ['$state']; 29 | function $IncludedByStateFilter($state) { 30 | var includesFilter = function (state) { 31 | return $state.includes(state); 32 | }; 33 | includesFilter.$stateful = true; 34 | return includesFilter; 35 | } 36 | 37 | angular.module('ui.router.state') 38 | .filter('isState', $IsStateFilter) 39 | .filter('includedByState', $IncludedByStateFilter); 40 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/src/templateFactory.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc object 3 | * @name ui.router.util.$templateFactory 4 | * 5 | * @requires $http 6 | * @requires $templateCache 7 | * @requires $injector 8 | * 9 | * @description 10 | * Service. Manages loading of templates. 11 | */ 12 | $TemplateFactory.$inject = ['$http', '$templateCache', '$injector']; 13 | function $TemplateFactory( $http, $templateCache, $injector) { 14 | 15 | /** 16 | * @ngdoc function 17 | * @name ui.router.util.$templateFactory#fromConfig 18 | * @methodOf ui.router.util.$templateFactory 19 | * 20 | * @description 21 | * Creates a template from a configuration object. 22 | * 23 | * @param {object} config Configuration object for which to load a template. 24 | * The following properties are search in the specified order, and the first one 25 | * that is defined is used to create the template: 26 | * 27 | * @param {string|object} config.template html string template or function to 28 | * load via {@link ui.router.util.$templateFactory#fromString fromString}. 29 | * @param {string|object} config.templateUrl url to load or a function returning 30 | * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}. 31 | * @param {Function} config.templateProvider function to invoke via 32 | * {@link ui.router.util.$templateFactory#fromProvider fromProvider}. 33 | * @param {object} params Parameters to pass to the template function. 34 | * @param {object} locals Locals to pass to `invoke` if the template is loaded 35 | * via a `templateProvider`. Defaults to `{ params: params }`. 36 | * 37 | * @return {string|object} The template html as a string, or a promise for 38 | * that string,or `null` if no template is configured. 39 | */ 40 | this.fromConfig = function (config, params, locals) { 41 | return ( 42 | isDefined(config.template) ? this.fromString(config.template, params) : 43 | isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) : 44 | isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) : 45 | null 46 | ); 47 | }; 48 | 49 | /** 50 | * @ngdoc function 51 | * @name ui.router.util.$templateFactory#fromString 52 | * @methodOf ui.router.util.$templateFactory 53 | * 54 | * @description 55 | * Creates a template from a string or a function returning a string. 56 | * 57 | * @param {string|object} template html template as a string or function that 58 | * returns an html template as a string. 59 | * @param {object} params Parameters to pass to the template function. 60 | * 61 | * @return {string|object} The template html as a string, or a promise for that 62 | * string. 63 | */ 64 | this.fromString = function (template, params) { 65 | return isFunction(template) ? template(params) : template; 66 | }; 67 | 68 | /** 69 | * @ngdoc function 70 | * @name ui.router.util.$templateFactory#fromUrl 71 | * @methodOf ui.router.util.$templateFactory 72 | * 73 | * @description 74 | * Loads a template from the a URL via `$http` and `$templateCache`. 75 | * 76 | * @param {string|Function} url url of the template to load, or a function 77 | * that returns a url. 78 | * @param {Object} params Parameters to pass to the url function. 79 | * @return {string|Promise.} The template html as a string, or a promise 80 | * for that string. 81 | */ 82 | this.fromUrl = function (url, params) { 83 | if (isFunction(url)) url = url(params); 84 | if (url == null) return null; 85 | else return $http 86 | .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) 87 | .then(function(response) { return response.data; }); 88 | }; 89 | 90 | /** 91 | * @ngdoc function 92 | * @name ui.router.util.$templateFactory#fromProvider 93 | * @methodOf ui.router.util.$templateFactory 94 | * 95 | * @description 96 | * Creates a template by invoking an injectable provider function. 97 | * 98 | * @param {Function} provider Function to invoke via `$injector.invoke` 99 | * @param {Object} params Parameters for the template. 100 | * @param {Object} locals Locals to pass to `invoke`. Defaults to 101 | * `{ params: params }`. 102 | * @return {string|Promise.} The template html as a string, or a promise 103 | * for that string. 104 | */ 105 | this.fromProvider = function (provider, params, locals) { 106 | return $injector.invoke(provider, null, locals || { params: params }); 107 | }; 108 | } 109 | 110 | angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); 111 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/src/view.js: -------------------------------------------------------------------------------- 1 | 2 | $ViewProvider.$inject = []; 3 | function $ViewProvider() { 4 | 5 | this.$get = $get; 6 | /** 7 | * @ngdoc object 8 | * @name ui.router.state.$view 9 | * 10 | * @requires ui.router.util.$templateFactory 11 | * @requires $rootScope 12 | * 13 | * @description 14 | * 15 | */ 16 | $get.$inject = ['$rootScope', '$templateFactory']; 17 | function $get( $rootScope, $templateFactory) { 18 | return { 19 | // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) 20 | /** 21 | * @ngdoc function 22 | * @name ui.router.state.$view#load 23 | * @methodOf ui.router.state.$view 24 | * 25 | * @description 26 | * 27 | * @param {string} name name 28 | * @param {object} options option object. 29 | */ 30 | load: function load(name, options) { 31 | var result, defaults = { 32 | template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} 33 | }; 34 | options = extend(defaults, options); 35 | 36 | if (options.view) { 37 | result = $templateFactory.fromConfig(options.view, options.params, options.locals); 38 | } 39 | if (result && options.notify) { 40 | /** 41 | * @ngdoc event 42 | * @name ui.router.state.$state#$viewContentLoading 43 | * @eventOf ui.router.state.$view 44 | * @eventType broadcast on root scope 45 | * @description 46 | * 47 | * Fired once the view **begins loading**, *before* the DOM is rendered. 48 | * 49 | * @param {Object} event Event object. 50 | * @param {Object} viewConfig The view config properties (template, controller, etc). 51 | * 52 | * @example 53 | * 54 | *
55 |          * $scope.$on('$viewContentLoading',
56 |          * function(event, viewConfig){
57 |          *     // Access to all the view config properties.
58 |          *     // and one special property 'targetView'
59 |          *     // viewConfig.targetView
60 |          * });
61 |          * 
62 | */ 63 | $rootScope.$broadcast('$viewContentLoading', options); 64 | } 65 | return result; 66 | } 67 | }; 68 | } 69 | } 70 | 71 | angular.module('ui.router.state').provider('$view', $ViewProvider); 72 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular-ui-router/src/viewScroll.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc object 3 | * @name ui.router.state.$uiViewScrollProvider 4 | * 5 | * @description 6 | * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. 7 | */ 8 | function $ViewScrollProvider() { 9 | 10 | var useAnchorScroll = false; 11 | 12 | /** 13 | * @ngdoc function 14 | * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll 15 | * @methodOf ui.router.state.$uiViewScrollProvider 16 | * 17 | * @description 18 | * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for 19 | * scrolling based on the url anchor. 20 | */ 21 | this.useAnchorScroll = function () { 22 | useAnchorScroll = true; 23 | }; 24 | 25 | /** 26 | * @ngdoc object 27 | * @name ui.router.state.$uiViewScroll 28 | * 29 | * @requires $anchorScroll 30 | * @requires $timeout 31 | * 32 | * @description 33 | * When called with a jqLite element, it scrolls the element into view (after a 34 | * `$timeout` so the DOM has time to refresh). 35 | * 36 | * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, 37 | * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. 38 | */ 39 | this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { 40 | if (useAnchorScroll) { 41 | return $anchorScroll; 42 | } 43 | 44 | return function ($element) { 45 | $timeout(function () { 46 | $element[0].scrollIntoView(); 47 | }, 0, false); 48 | }; 49 | }]; 50 | } 51 | 52 | angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); 53 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.6", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": {}, 7 | "homepage": "https://github.com/angular/bower-angular", 8 | "_release": "1.3.6", 9 | "_resolution": { 10 | "type": "version", 11 | "tag": "v1.3.6", 12 | "commit": "a525f1199d44c2aa6d69b1900d4a2e950adc5752" 13 | }, 14 | "_source": "git://github.com/angular/bower-angular.git", 15 | "_target": "1.3.6", 16 | "_originalSource": "angular" 17 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular 15 | ``` 16 | 17 | Then add a ` 21 | ``` 22 | 23 | Note that this package is not in CommonJS format, so doing `require('angular')` will return `undefined`. 24 | If you're using [Browserify](https://github.com/substack/node-browserify), you can use 25 | [exposify](https://github.com/thlorenz/exposify) to have `require('angular')` return the `angular` 26 | global. 27 | 28 | ### bower 29 | 30 | ```shell 31 | bower install angular 32 | ``` 33 | 34 | Then add a ` 38 | ``` 39 | 40 | ## Documentation 41 | 42 | Documentation is available on the 43 | [AngularJS docs site](http://docs.angularjs.org/). 44 | 45 | ## License 46 | 47 | The MIT License 48 | 49 | Copyright (c) 2010-2012 Google, Inc. http://angularjs.org 50 | 51 | Permission is hereby granted, free of charge, to any person obtaining a copy 52 | of this software and associated documentation files (the "Software"), to deal 53 | in the Software without restriction, including without limitation the rights 54 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 55 | copies of the Software, and to permit persons to whom the Software is 56 | furnished to do so, subject to the following conditions: 57 | 58 | The above copyright notice and this permission notice shall be included in 59 | all copies or substantial portions of the Software. 60 | 61 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 62 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 63 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 64 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 65 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 66 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 67 | THE SOFTWARE. 68 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/lib/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.6", 4 | "main": "./angular.js", 5 | "ignore": [], 6 | "dependencies": { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.3.6", 4 | "description": "HTML enhanced for web apps", 5 | "main": "angular.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "client-side" 18 | ], 19 | "author": "Angular Core Team ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hammerjs", 3 | "version": "2.0.4", 4 | "main": "hammer.js", 5 | "ignore": [ 6 | "tests", 7 | "src" 8 | ], 9 | "homepage": "https://github.com/EightMedia/hammer.js", 10 | "_release": "2.0.4", 11 | "_resolution": { 12 | "type": "version", 13 | "tag": "2.0.4", 14 | "commit": "7fc11efb37d6f2334ce957e26e9cf53690e10fa5" 15 | }, 16 | "_source": "git://github.com/EightMedia/hammer.js.git", 17 | "_target": ">=2.0.0", 18 | "_originalSource": "hammerjs" 19 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "json": "bower.json" 3 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/.gitignore: -------------------------------------------------------------------------------- 1 | # ide 2 | .idea 3 | .iml 4 | 5 | # node 6 | lib-cov 7 | *.seed 8 | *.log 9 | *.csv 10 | *.dat 11 | *.out 12 | *.pid 13 | *.gz 14 | 15 | pids 16 | logs 17 | results 18 | tests/build.js 19 | 20 | npm-debug.log 21 | node_modules 22 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/.jscsrc: -------------------------------------------------------------------------------- 1 | { 2 | "preset": "google", 3 | "excludeFiles": [ 4 | "*.js", 5 | "tests/**/assets", 6 | "node_modules/**" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "browser": true, 3 | "curly": true, 4 | "eqnull": true, 5 | "expr": true, 6 | "maxerr": 100, 7 | "freeze": true, 8 | "newcap": true, 9 | "node": true, 10 | "quotmark": "single", 11 | "strict": true, 12 | "sub": true, 13 | "trailing": true, 14 | "undef": true, 15 | "unused": true, 16 | "camelcase": true, 17 | "indent": 4, 18 | "validthis": true, 19 | "globals": { 20 | "define": false 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | 5 | before_script: 6 | - npm install -g grunt-cli 7 | 8 | script: 9 | - grunt test-travis -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ### 2.0.4, 2014-09-28 4 | - Fix IE pointer issue. [#665](https://github.com/hammerjs/hammer.js/pull/665) 5 | - Fix multi-touch at different elements. [#668](https://github.com/hammerjs/hammer.js/pull/668) 6 | - Added experimental [single-user Touch input handler](src/input/singletouch.js). This to improve performance/ux when only a single user has to be supported. Plans are to release 2.1 with this as default, and a settings to enable the multi-user handler. 7 | 8 | ### 2.0.3, 2014-09-10 9 | - Manager.set improvements. 10 | - Fix requireFailure() call in Manager.options.recognizers. 11 | - Make DIRECTION_ALL for pan and swipe gestures less blocking. 12 | - Fix Swipe recognizer threshold option. 13 | - Expose the Input classes. 14 | - Added the option `inputClass` to set the used input handler. 15 | 16 | ### 2.0.2, 2014-07-26 17 | - Improved mouse and pointer-events input, now able to move outside the window. 18 | - Added the export name (`Hammer`) as an argument to the wrapper. 19 | - Add the option *experimental* `inputTarget` to change the element that receives the events. 20 | - Improved performance when only one touch being active. 21 | - Fixed the jumping deltaXY bug when going from single to multi-touch. 22 | - Improved velocity calculations. 23 | 24 | ### 2.0.1, 2014-07-15 25 | - Fix issue when no document.body is available 26 | - Added pressup event for the press recognizer 27 | - Removed alternative for Object.create 28 | 29 | ### 2.0.0, 2014-07-11 30 | - Full rewrite of the library. 31 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Hammer.js 2 | 3 | Looking to contribute something to Hammer.js? **Here's how you can help.** 4 | 5 | 6 | ## Reporting issues 7 | 8 | We only accept issues that are bug reports or feature requests. Bugs must be 9 | isolated and reproducible problems that can be fixed within the Hammer.js. 10 | Please read the following guidelines before opening any issue. 11 | 12 | 1. [**Read the documentation**](https://hammerjs.github.io) 13 | 14 | 2. **Search for existing issues.** We get a lot of duplicate issues, and you'd 15 | help us out a lot by first checking if someone else has reported the same issue. 16 | Moreover, the issue may have already been resolved with a fix available. Also 17 | take a look if your problem is explained at the Wiki. 18 | 19 | 3. **Create an isolated and reproducible test case.** Be sure the problem exists 20 | in Hammer's code with a reduced test case that should be included in each bug 21 | report. 22 | 23 | 4. **Include a live example.** Make use of jsFiddle or jsBin to share your 24 | isolated test cases. Also, a screen capture would work, with tools like LICEcap. 25 | 26 | 5. **Share as much information as possible.** Include operating system and 27 | version, browser and version, version of Hammer.js, customized or vanilla build, 28 | etc. where appropriate. Also include steps to reproduce the bug. 29 | 30 | ## Pull requests 31 | 32 | 1. Changes must be done in `/src` files, never just the compiled files. Also, don't 33 | commit the compiled files. 34 | 35 | 2. Try not to pollute your pull request with unintended changes. Keep them simple 36 | and small 37 | 38 | 3. Try to share which browsers your code has been tested in before submitting a 39 | pull request 40 | 41 | 4. Write tests for your code, these can be found in `/tests`. 42 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/Gruntfile.coffee: -------------------------------------------------------------------------------- 1 | module.exports = (grunt) -> 2 | grunt.initConfig 3 | pkg: grunt.file.readJSON 'package.json' 4 | 5 | usebanner: 6 | taskName: 7 | options: 8 | position: 'top' 9 | banner: ' 10 | /*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n 11 | * <%= pkg.homepage %>\n 12 | *\n 13 | * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;\n 14 | * Licensed under the <%= _.pluck(pkg.licenses, "type").join(", ") %> license */' 15 | linebreak: true 16 | files: 17 | src: ['./hammer.js','./hammer.min.js'] 18 | 19 | concat: 20 | build: 21 | src: [ 22 | 'src/hammer.prefix' 23 | 'src/utils.js' 24 | 'src/input.js' 25 | 'src/input/*.js' 26 | 'src/touchaction.js' 27 | 'src/recognizer.js' 28 | 'src/recognizers/*.js' 29 | 'src/hammer.js' 30 | 'src/manager.js' 31 | 'src/expose.js' 32 | 'src/hammer.suffix'] 33 | dest: 'hammer.js' 34 | 35 | uglify: 36 | min: 37 | options: 38 | report: 'gzip' 39 | sourceMap: 'hammer.min.map' 40 | files: 41 | 'hammer.min.js': ['hammer.js'] 42 | # special test build that exposes everything so it's testable 43 | test: 44 | options: 45 | wrap: "$H" 46 | comments: 'all' 47 | exportAll: true 48 | mangle: false 49 | beautify: true 50 | compress: 51 | global_defs: 52 | exportName: 'Hammer' 53 | files: 54 | 'tests/build.js': [ 55 | 'src/utils.js' 56 | 'src/input.js' 57 | 'src/input/*.js' 58 | 'src/touchaction.js' 59 | 'src/recognizer.js' 60 | 'src/recognizers/*.js' 61 | 'src/hammer.js' 62 | 'src/manager.js' 63 | 'src/expose.js'] 64 | 65 | 'string-replace': 66 | version: 67 | files: 68 | 'hammer.js': 'hammer.js' 69 | options: 70 | replacements: [ 71 | pattern: '{{PKG_VERSION}}' 72 | replacement: '<%= pkg.version %>' 73 | ] 74 | 75 | jshint: 76 | options: 77 | jshintrc: true 78 | build: 79 | src: ['hammer.js'] 80 | 81 | jscs: 82 | src: [ 83 | 'src/**/*.js' 84 | 'tests/unit/*.js' 85 | ] 86 | options: 87 | config: "./.jscsrc" 88 | force: true 89 | 90 | watch: 91 | scripts: 92 | files: ['src/**/*.js'] 93 | tasks: ['concat','string-replace','uglify','jshint','jscs'] 94 | options: 95 | interrupt: true 96 | 97 | connect: 98 | server: 99 | options: 100 | hostname: "0.0.0.0" 101 | port: 8000 102 | 103 | qunit: 104 | all: ['tests/unit/index.html'] 105 | 106 | 107 | # Load tasks 108 | grunt.loadNpmTasks 'grunt-contrib-concat' 109 | grunt.loadNpmTasks 'grunt-contrib-uglify' 110 | grunt.loadNpmTasks 'grunt-contrib-qunit' 111 | grunt.loadNpmTasks 'grunt-contrib-watch' 112 | grunt.loadNpmTasks 'grunt-contrib-jshint' 113 | grunt.loadNpmTasks 'grunt-contrib-connect' 114 | grunt.loadNpmTasks 'grunt-string-replace' 115 | grunt.loadNpmTasks 'grunt-banner' 116 | grunt.loadNpmTasks 'grunt-jscs-checker' 117 | 118 | # Default task(s) 119 | grunt.registerTask 'default', ['connect', 'watch'] 120 | grunt.registerTask 'default-test', ['connect', 'uglify:test', 'watch'] 121 | grunt.registerTask 'build', ['concat', 'string-replace', 'uglify:min', 'usebanner', 'test'] 122 | grunt.registerTask 'test', ['jshint', 'jscs', 'uglify:test', 'qunit'] 123 | grunt.registerTask 'test-travis', ['build'] 124 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/README.md: -------------------------------------------------------------------------------- 1 | # Hammer.js 2.0 [![Build Status](https://travis-ci.org/hammerjs/hammer.js.svg)](https://travis-ci.org/hammerjs/hammer.js/) 2 | 3 | Visit [hammerjs.github.io](http://hammerjs.github.io) for documentation. 4 | 5 | You can get the pre-build versions from the Hammer.js website, or do this by yourself running 6 | `npm install -g grunt-cli && npm install && grunt build` 7 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hammerjs", 3 | "version": "2.0.4", 4 | "main": "hammer.js", 5 | "ignore": [ 6 | "tests", 7 | "src" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/component.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hammerjs", 3 | "version": "2.0.3", 4 | "main": "hammer.js", 5 | "scripts": [ 6 | "hammer.js" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/hammerjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hammerjs", 3 | "title": "Hammer.JS", 4 | "description": "A javascript library for multi-touch gestures", 5 | "version": "2.0.4", 6 | "homepage": "http://hammerjs.github.io/", 7 | "licenses": [ 8 | { 9 | "type": "MIT", 10 | "url": "https://github.com/hammerjs/hammer.js/blob/master/LICENSE.md" 11 | } 12 | ], 13 | "keywords": [ 14 | "touch", 15 | "gestures" 16 | ], 17 | "author": { 18 | "name": "Jorik Tangelder", 19 | "email": "j.tangelder@gmail.com" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git://github.com/hammerjs/hammer.js.git" 24 | }, 25 | "bugs": { 26 | "url": "https://github.com/hammerjs/hammer.js/issues" 27 | }, 28 | "dependencies": {}, 29 | "devDependencies": { 30 | "grunt": "0.4.x", 31 | "grunt-banner": "^0.2.3", 32 | "grunt-contrib-concat": "0.4.x", 33 | "grunt-contrib-connect": "0.7.x", 34 | "grunt-contrib-jshint": "0.10.x", 35 | "grunt-contrib-qunit": "^0.5.1", 36 | "grunt-contrib-uglify": "0.4.x", 37 | "grunt-contrib-watch": "0.6.x", 38 | "grunt-jscs-checker": "^0.4.1", 39 | "grunt-string-replace": "^0.2.7", 40 | "hammer-jquery": "git://github.com/hammerjs/jquery.hammer.js#master", 41 | "hammer-simulator": "git://github.com/hammerjs/simulator#master" 42 | }, 43 | "main": "hammer.js", 44 | "engines": { 45 | "node": ">=0.8.0" 46 | }, 47 | "scripts": { 48 | "test": "grunt test" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic", 3 | "version": "1.0.0-beta.14", 4 | "codename": "magnesium-mongoose", 5 | "homepage": "https://github.com/driftyco/ionic", 6 | "authors": [ 7 | "Max Lynch ", 8 | "Adam Bradley ", 9 | "Ben Sperry " 10 | ], 11 | "description": "Advanced HTML5 hybrid mobile app development framework.", 12 | "main": [ 13 | "css/ionic.css", 14 | "fonts/*", 15 | "js/ionic.js", 16 | "js/ionic-angular.js" 17 | ], 18 | "keywords": [ 19 | "mobile", 20 | "html5", 21 | "ionic", 22 | "cordova", 23 | "phonegap", 24 | "trigger", 25 | "triggerio", 26 | "angularjs", 27 | "angular" 28 | ], 29 | "license": "MIT", 30 | "private": false, 31 | "dependencies": { 32 | "angular": "1.3.6", 33 | "angular-animate": "1.3.6", 34 | "angular-sanitize": "1.3.6", 35 | "angular-ui-router": "0.2.13" 36 | }, 37 | "_release": "1.0.0-beta.14", 38 | "_resolution": { 39 | "type": "version", 40 | "tag": "v1.0.0-beta.14", 41 | "commit": "a6aa20bf5361b24bdbaeb34295a5f1c0e6aa609c" 42 | }, 43 | "_source": "git://github.com/driftyco/ionic-bower.git", 44 | "_target": "1.0.0-beta.14", 45 | "_originalSource": "driftyco/ionic-bower" 46 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/README.md: -------------------------------------------------------------------------------- 1 | # ionic-bower 2 | 3 | Bower repository for [Ionic Framework](http://github.com/driftyco/ionic) 4 | 5 | ### Usage 6 | 7 | Include `js/ionic.bundle.js` to get ionic and all of its dependencies. 8 | 9 | Alternatively, include the individual ionic files with the dependencies separately. 10 | 11 | ### Versions 12 | 13 | To install the latest stable version, `bower install driftyco/ionic-bower#v1.0.0-beta.13` 14 | 15 | To install the latest nightly release, `bower install driftyco/ionic-bower#master` 16 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic", 3 | "version": "1.0.0-beta.14", 4 | "codename": "magnesium-mongoose", 5 | "homepage": "https://github.com/driftyco/ionic", 6 | "authors": [ 7 | "Max Lynch ", 8 | "Adam Bradley ", 9 | "Ben Sperry " 10 | ], 11 | "description": "Advanced HTML5 hybrid mobile app development framework.", 12 | "main": [ 13 | "css/ionic.css", 14 | "fonts/*", 15 | "js/ionic.js", 16 | "js/ionic-angular.js" 17 | ], 18 | "keywords": [ 19 | "mobile", 20 | "html5", 21 | "ionic", 22 | "cordova", 23 | "phonegap", 24 | "trigger", 25 | "triggerio", 26 | "angularjs", 27 | "angular" 28 | ], 29 | "license": "MIT", 30 | "private": false, 31 | "dependencies": { 32 | "angular": "1.3.6", 33 | "angular-animate": "1.3.6", 34 | "angular-sanitize": "1.3.6", 35 | "angular-ui-router": "0.2.13" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/lib/ionic/fonts/ionicons.eot -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/lib/ionic/fonts/ionicons.ttf -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/lib/ionic/fonts/ionicons.woff -------------------------------------------------------------------------------- /keensoft-example/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 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_animations.scss: -------------------------------------------------------------------------------- 1 | 2 | // Slide up from the bottom, used for modals 3 | // ------------------------------- 4 | 5 | .slide-in-up { 6 | @include translate3d(0, 100%, 0); 7 | } 8 | .slide-in-up.ng-enter, 9 | .slide-in-up > .ng-enter { 10 | @include transition(all cubic-bezier(.1, .7, .1, 1) 400ms); 11 | } 12 | .slide-in-up.ng-enter-active, 13 | .slide-in-up > .ng-enter-active { 14 | @include translate3d(0, 0, 0); 15 | } 16 | 17 | .slide-in-up.ng-leave, 18 | .slide-in-up > .ng-leave { 19 | @include transition(all ease-in-out 250ms); 20 | } 21 | 22 | 23 | // Scale Out 24 | // Scale from hero (1 in this case) to zero 25 | // ------------------------------- 26 | 27 | @-webkit-keyframes scaleOut { 28 | from { -webkit-transform: scale(1); opacity: 1; } 29 | to { -webkit-transform: scale(0.8); opacity: 0; } 30 | } 31 | @keyframes scaleOut { 32 | from { transform: scale(1); opacity: 1; } 33 | to { transform: scale(0.8); opacity: 0; } 34 | } 35 | 36 | 37 | // Super Scale In 38 | // Scale from super (1.x) to duper (1 in this case) 39 | // ------------------------------- 40 | 41 | @-webkit-keyframes superScaleIn { 42 | from { -webkit-transform: scale(1.2); opacity: 0; } 43 | to { -webkit-transform: scale(1); opacity: 1 } 44 | } 45 | @keyframes superScaleIn { 46 | from { transform: scale(1.2); opacity: 0; } 47 | to { transform: scale(1); opacity: 1; } 48 | } 49 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_backdrop.scss: -------------------------------------------------------------------------------- 1 | 2 | .backdrop { 3 | position: fixed; 4 | top: 0; 5 | left: 0; 6 | z-index: $z-index-backdrop; 7 | 8 | width: 100%; 9 | height: 100%; 10 | 11 | background-color: $loading-backdrop-bg-color; 12 | 13 | visibility: hidden; 14 | opacity: 0; 15 | 16 | &.visible { 17 | visibility: visible; 18 | } 19 | &.active { 20 | opacity: 1; 21 | } 22 | 23 | @include transition($loading-backdrop-fadein-duration opacity linear); 24 | } 25 | -------------------------------------------------------------------------------- /keensoft-example/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 | -------------------------------------------------------------------------------- /keensoft-example/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: $button-border-radius 0px 0px $button-border-radius; 49 | } 50 | &:last-child { 51 | border-right-width: 1px; 52 | border-radius: 0px $button-border-radius $button-border-radius 0px; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_button.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Buttons 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .button { 8 | // set the color defaults 9 | @include button-style($button-default-bg, $button-default-border, $button-default-active-bg, $button-default-active-border, $button-default-text); 10 | 11 | position: relative; 12 | display: inline-block; 13 | margin: 0; 14 | padding: 0 $button-padding; 15 | 16 | min-width: ($button-padding * 3) + $button-font-size; 17 | min-height: $button-height + 5px; 18 | 19 | border-width: $button-border-width; 20 | border-style: solid; 21 | border-radius: $button-border-radius; 22 | 23 | vertical-align: top; 24 | text-align: center; 25 | 26 | text-overflow: ellipsis; 27 | font-size: $button-font-size; 28 | line-height: $button-height - $button-border-width + 1px; 29 | 30 | cursor: pointer; 31 | 32 | &:after { 33 | // used to create a larger button "hit" area 34 | position: absolute; 35 | top: -6px; 36 | right: -6px; 37 | bottom: -6px; 38 | left: -6px; 39 | content: ' '; 40 | } 41 | 42 | .icon { 43 | vertical-align: top; 44 | pointer-events: none; 45 | } 46 | 47 | .icon:before, 48 | &.icon:before, 49 | &.icon-left:before, 50 | &.icon-right:before { 51 | display: inline-block; 52 | padding: 0 0 $button-border-width 0; 53 | vertical-align: inherit; 54 | font-size: $button-icon-size; 55 | line-height: $button-height - $button-border-width; 56 | pointer-events: none; 57 | } 58 | &.icon-left:before { 59 | float: left; 60 | padding-right: .2em; 61 | padding-left: 0; 62 | } 63 | &.icon-right:before { 64 | float: right; 65 | padding-right: 0; 66 | padding-left: .2em; 67 | } 68 | 69 | &.button-block, &.button-full { 70 | margin-top: $button-block-margin; 71 | margin-bottom: $button-block-margin; 72 | } 73 | 74 | &.button-light { 75 | @include button-style($button-light-bg, $button-light-border, $button-light-active-bg, $button-light-active-border, $button-light-text); 76 | @include button-clear($button-light-border); 77 | @include button-outline($button-light-border); 78 | } 79 | 80 | &.button-stable { 81 | @include button-style($button-stable-bg, $button-stable-border, $button-stable-active-bg, $button-stable-active-border, $button-stable-text); 82 | @include button-clear($button-stable-border); 83 | @include button-outline($button-stable-border); 84 | } 85 | 86 | &.button-positive { 87 | @include button-style($button-positive-bg, $button-positive-border, $button-positive-active-bg, $button-positive-active-border, $button-positive-text); 88 | @include button-clear($button-positive-bg); 89 | @include button-outline($button-positive-bg); 90 | } 91 | 92 | &.button-calm { 93 | @include button-style($button-calm-bg, $button-calm-border, $button-calm-active-bg, $button-calm-active-border, $button-calm-text); 94 | @include button-clear($button-calm-bg); 95 | @include button-outline($button-calm-bg); 96 | } 97 | 98 | &.button-assertive { 99 | @include button-style($button-assertive-bg, $button-assertive-border, $button-assertive-active-bg, $button-assertive-active-border, $button-assertive-text); 100 | @include button-clear($button-assertive-bg); 101 | @include button-outline($button-assertive-bg); 102 | } 103 | 104 | &.button-balanced { 105 | @include button-style($button-balanced-bg, $button-balanced-border, $button-balanced-active-bg, $button-balanced-active-border, $button-balanced-text); 106 | @include button-clear($button-balanced-bg); 107 | @include button-outline($button-balanced-bg); 108 | } 109 | 110 | &.button-energized { 111 | @include button-style($button-energized-bg, $button-energized-border, $button-energized-active-bg, $button-energized-active-border, $button-energized-text); 112 | @include button-clear($button-energized-bg); 113 | @include button-outline($button-energized-bg); 114 | } 115 | 116 | &.button-royal { 117 | @include button-style($button-royal-bg, $button-royal-border, $button-royal-active-bg, $button-royal-active-border, $button-royal-text); 118 | @include button-clear($button-royal-bg); 119 | @include button-outline($button-royal-bg); 120 | } 121 | 122 | &.button-dark { 123 | @include button-style($button-dark-bg, $button-dark-border, $button-dark-active-bg, $button-dark-active-border, $button-dark-text); 124 | @include button-clear($button-dark-bg); 125 | @include button-outline($button-dark-bg); 126 | } 127 | } 128 | 129 | .button-small { 130 | padding: 2px $button-small-padding 1px; 131 | min-width: $button-small-height; 132 | min-height: $button-small-height + 2; 133 | font-size: $button-small-font-size; 134 | line-height: $button-small-height - $button-border-width - 1; 135 | 136 | .icon:before, 137 | &.icon:before, 138 | &.icon-left:before, 139 | &.icon-right:before { 140 | font-size: $button-small-icon-size; 141 | line-height: $button-small-icon-size + 3; 142 | margin-top: 3px; 143 | } 144 | } 145 | 146 | .button-large { 147 | padding: 0 $button-large-padding; 148 | min-width: ($button-large-padding * 3) + $button-large-font-size; 149 | min-height: $button-large-height + 5; 150 | font-size: $button-large-font-size; 151 | line-height: $button-large-height - $button-border-width; 152 | 153 | .icon:before, 154 | &.icon:before, 155 | &.icon-left:before, 156 | &.icon-right:before { 157 | padding-bottom: ($button-border-width * 2); 158 | font-size: $button-large-icon-size; 159 | line-height: $button-large-height - ($button-border-width * 2) - 1; 160 | } 161 | } 162 | 163 | .button-icon { 164 | @include transition(opacity .1s); 165 | padding: 0 6px; 166 | min-width: initial; 167 | border-color: transparent; 168 | background: none; 169 | 170 | &.button.active, 171 | &.button.activated { 172 | border-color: transparent; 173 | background: none; 174 | box-shadow: none; 175 | opacity: 0.3; 176 | } 177 | 178 | .icon:before, 179 | &.icon:before { 180 | font-size: $button-large-icon-size; 181 | } 182 | } 183 | 184 | .button-clear { 185 | @include button-clear($button-default-border); 186 | @include transition(opacity .1s); 187 | padding: 0 $button-clear-padding; 188 | max-height: $button-height; 189 | border-color: transparent; 190 | background: none; 191 | box-shadow: none; 192 | 193 | &.active, 194 | &.activated { 195 | opacity: 0.3; 196 | } 197 | } 198 | 199 | .button-outline { 200 | @include button-outline($button-default-border); 201 | @include transition(opacity .1s); 202 | background: none; 203 | box-shadow: none; 204 | } 205 | 206 | .padding > .button.button-block:first-child { 207 | margin-top: 0; 208 | } 209 | 210 | .button-block { 211 | display: block; 212 | clear: both; 213 | 214 | &:after { 215 | clear: both; 216 | } 217 | } 218 | 219 | .button-full, 220 | .button-full > .button { 221 | display: block; 222 | margin-right: 0; 223 | margin-left: 0; 224 | border-right-width: 0; 225 | border-left-width: 0; 226 | border-radius: 0; 227 | } 228 | 229 | button.button-block, 230 | button.button-full, 231 | .button-full > button.button, 232 | input.button.button-block { 233 | width: 100%; 234 | } 235 | 236 | a.button { 237 | text-decoration: none; 238 | 239 | .icon:before, 240 | &.icon:before, 241 | &.icon-left:before, 242 | &.icon-right:before { 243 | margin-top: 2px; 244 | } 245 | } 246 | 247 | .button.disabled, 248 | .button[disabled] { 249 | opacity: .4; 250 | cursor: default !important; 251 | pointer-events: none; 252 | } 253 | -------------------------------------------------------------------------------- /keensoft-example/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, $checkbox-on-border-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, $checkbox-off-border-light); 18 | } 19 | .checkbox-stable { 20 | @include checkbox-style($checkbox-off-border-stable, $checkbox-on-bg-stable, $checkbox-off-border-stable); 21 | } 22 | .checkbox-positive { 23 | @include checkbox-style($checkbox-off-border-positive, $checkbox-on-bg-positive, $checkbox-off-border-positive); 24 | } 25 | .checkbox-calm { 26 | @include checkbox-style($checkbox-off-border-calm, $checkbox-on-bg-calm, $checkbox-off-border-calm); 27 | } 28 | .checkbox-assertive { 29 | @include checkbox-style($checkbox-off-border-assertive, $checkbox-on-bg-assertive, $checkbox-off-border-assertive); 30 | } 31 | .checkbox-balanced { 32 | @include checkbox-style($checkbox-off-border-balanced, $checkbox-on-bg-balanced, $checkbox-off-border-balanced); 33 | } 34 | .checkbox-energized{ 35 | @include checkbox-style($checkbox-off-border-energized, $checkbox-on-bg-energized, $checkbox-off-border-energized); 36 | } 37 | .checkbox-royal { 38 | @include checkbox-style($checkbox-off-border-royal, $checkbox-on-bg-royal, $checkbox-off-border-royal); 39 | } 40 | .checkbox-dark { 41 | @include checkbox-style($checkbox-off-border-dark, $checkbox-on-bg-dark, $checkbox-off-border-dark); 42 | } 43 | 44 | .checkbox input:disabled:before, 45 | .checkbox input:disabled + .checkbox-icon:before { 46 | border-color: $checkbox-off-border-light; 47 | } 48 | 49 | .checkbox input:disabled:checked:before, 50 | .checkbox input:disabled:checked + .checkbox-icon:before { 51 | background: $checkbox-on-bg-light; 52 | } 53 | 54 | 55 | .checkbox.checkbox-input-hidden input { 56 | display: none !important; 57 | } 58 | 59 | .checkbox input, 60 | .checkbox-icon { 61 | position: relative; 62 | width: $checkbox-width; 63 | height: $checkbox-height; 64 | display: block; 65 | border: 0; 66 | background: transparent; 67 | cursor: pointer; 68 | -webkit-appearance: none; 69 | 70 | &:before { 71 | // what the checkbox looks like when its not checked 72 | display: table; 73 | width: 100%; 74 | height: 100%; 75 | border-width: $checkbox-border-width; 76 | border-style: solid; 77 | border-radius: $checkbox-border-radius; 78 | background: $checkbox-off-bg-color; 79 | content: ' '; 80 | @include transition(background-color 20ms ease-in-out); 81 | } 82 | } 83 | 84 | .checkbox input:checked:before, 85 | input:checked + .checkbox-icon:before { 86 | border-width: $checkbox-border-width + 1; 87 | } 88 | 89 | // the checkmark within the box 90 | .checkbox input:after, 91 | .checkbox-icon:after { 92 | @include transition(opacity .05s ease-in-out); 93 | @include rotate(-45deg); 94 | position: absolute; 95 | top: 33%; 96 | left: 25%; 97 | display: table; 98 | width: ($checkbox-width / 2); 99 | height: ($checkbox-width / 4) - 1; 100 | border: $checkbox-check-width solid $checkbox-check-color; 101 | border-top: 0; 102 | border-right: 0; 103 | content: ' '; 104 | opacity: 0; 105 | } 106 | 107 | .platform-android .checkbox-platform input:before, 108 | .platform-android .checkbox-platform .checkbox-icon:before, 109 | .checkbox-square input:before, 110 | .checkbox-square .checkbox-icon:before { 111 | border-radius: 2px; 112 | width: 72%; 113 | height: 72%; 114 | margin-top: 14%; 115 | margin-left: 14%; 116 | border-width: 2px; 117 | } 118 | 119 | .platform-android .checkbox-platform input:after, 120 | .platform-android .checkbox-platform .checkbox-icon:after, 121 | .checkbox-square input:after, 122 | .checkbox-square .checkbox-icon:after { 123 | border-width: 2px; 124 | top: 19%; 125 | left: 25%; 126 | width: ($checkbox-width / 2) - 1; 127 | height: 7px; 128 | } 129 | 130 | .grade-c .checkbox input:after, 131 | .grade-c .checkbox-icon:after { 132 | @include rotate(0); 133 | top: 3px; 134 | left: 4px; 135 | border: none; 136 | color: $checkbox-check-color; 137 | content: '\2713'; 138 | font-weight: bold; 139 | font-size: 20px; 140 | } 141 | 142 | // what the checkmark looks like when its checked 143 | .checkbox input:checked:after, 144 | input:checked + .checkbox-icon:after { 145 | opacity: 1; 146 | } 147 | 148 | // make sure item content have enough padding on left to fit the checkbox 149 | .item-checkbox { 150 | padding-left: ($item-padding * 2) + $checkbox-width; 151 | 152 | &.active { 153 | box-shadow: none; 154 | } 155 | } 156 | 157 | // position the checkbox to the left within an item 158 | .item-checkbox .checkbox { 159 | position: absolute; 160 | top: 50%; 161 | right: $item-padding / 2; 162 | left: $item-padding / 2; 163 | z-index: $z-index-item-checkbox; 164 | margin-top: (($checkbox-height + ($checkbox-height / 2)) / 2) * -1; 165 | } 166 | 167 | 168 | .item-checkbox.item-checkbox-right { 169 | padding-right: ($item-padding * 2) + $checkbox-width; 170 | padding-left: $item-padding; 171 | } 172 | 173 | .item-checkbox-right .checkbox input, 174 | .item-checkbox-right .checkbox-icon { 175 | float: right; 176 | } 177 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_form.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Forms 3 | * -------------------------------------------------- 4 | */ 5 | 6 | // Make all forms have space below them 7 | form { 8 | margin: 0 0 $line-height-base; 9 | } 10 | 11 | // Groups of fields with labels on top (legends) 12 | legend { 13 | display: block; 14 | margin-bottom: $line-height-base; 15 | padding: 0; 16 | width: 100%; 17 | border: $input-border-width solid $input-border; 18 | color: $dark; 19 | font-size: $font-size-base * 1.5; 20 | line-height: $line-height-base * 2; 21 | 22 | small { 23 | color: $stable; 24 | font-size: $line-height-base * .75; 25 | } 26 | } 27 | 28 | // Set font for forms 29 | label, 30 | input, 31 | button, 32 | select, 33 | textarea { 34 | @include font-shorthand($font-size-base, normal, $line-height-base); // Set size, weight, line-height here 35 | } 36 | input, 37 | button, 38 | select, 39 | textarea { 40 | font-family: $font-family-base; // And only set font-family here for those that need it (note the missing label element) 41 | } 42 | 43 | 44 | // Input List 45 | // ------------------------------- 46 | 47 | .item-input { 48 | @include display-flex(); 49 | @include align-items(center); 50 | position: relative; 51 | overflow: hidden; 52 | padding: 6px 0 5px 16px; 53 | 54 | input { 55 | @include border-radius(0); 56 | @include flex(1, 0, 220px); 57 | @include appearance(none); 58 | margin: 0; 59 | padding-right: 24px; 60 | background-color: transparent; 61 | } 62 | 63 | .button .icon { 64 | @include flex(0, 0, 24px); 65 | position: static; 66 | display: inline-block; 67 | height: auto; 68 | text-align: center; 69 | font-size: 16px; 70 | } 71 | 72 | .button-bar { 73 | @include border-radius(0); 74 | @include flex(1, 0, 220px); 75 | @include appearance(none); 76 | } 77 | 78 | .icon { 79 | min-width: 14px; 80 | } 81 | } 82 | 83 | .item-input-inset { 84 | @include display-flex(); 85 | @include align-items(center); 86 | position: relative; 87 | overflow: hidden; 88 | padding: ($item-padding / 3) * 2; 89 | } 90 | 91 | .item-input-wrapper { 92 | @include display-flex(); 93 | @include flex(1, 0); 94 | @include align-items(center); 95 | @include border-radius(4px); 96 | padding-right: 8px; 97 | padding-left: 8px; 98 | background: #eee; 99 | } 100 | 101 | .item-input-inset .item-input-wrapper input { 102 | padding-left: 4px; 103 | height: 29px; 104 | background: transparent; 105 | line-height: 18px; 106 | } 107 | 108 | .item-input-wrapper ~ .button { 109 | margin-left: ($item-padding / 3) * 2; 110 | } 111 | 112 | .input-label { 113 | @include flex(1, 0, 100px); 114 | display: table; 115 | padding: 7px 10px 7px 0px; 116 | max-width: 200px; 117 | width: 35%; 118 | color: $input-label-color; 119 | font-size: 16px; 120 | } 121 | 122 | .placeholder-icon { 123 | color: #aaa; 124 | &:first-child { 125 | padding-right: 6px; 126 | } 127 | &:last-child { 128 | padding-left: 6px; 129 | } 130 | } 131 | 132 | .item-stacked-label { 133 | display: block; 134 | background-color: transparent; 135 | box-shadow: none; 136 | 137 | .input-label, .icon { 138 | display: inline-block; 139 | padding: 4px 0 0 0px; 140 | vertical-align: middle; 141 | } 142 | } 143 | 144 | .item-stacked-label input, 145 | .item-stacked-label textarea { 146 | @include border-radius(2px); 147 | padding: 4px 8px 3px 0; 148 | border: none; 149 | background-color: $input-bg; 150 | } 151 | .item-stacked-label input { 152 | overflow: hidden; 153 | height: $line-height-computed + $font-size-base + 12px; 154 | } 155 | 156 | .item-floating-label { 157 | display: block; 158 | background-color: transparent; 159 | box-shadow: none; 160 | 161 | .input-label { 162 | position: relative; 163 | padding: 5px 0 0 0; 164 | opacity: 0; 165 | top: 10px; 166 | @include transition(opacity .15s ease-in, top .2s linear); 167 | 168 | &.has-input { 169 | opacity: 1; 170 | top: 0; 171 | @include transition(opacity .15s ease-in, top .2s linear); 172 | } 173 | } 174 | } 175 | 176 | 177 | // Form Controls 178 | // ------------------------------- 179 | 180 | // Shared size and type resets 181 | textarea, 182 | input[type="text"], 183 | input[type="password"], 184 | input[type="datetime"], 185 | input[type="datetime-local"], 186 | input[type="date"], 187 | input[type="month"], 188 | input[type="time"], 189 | input[type="week"], 190 | input[type="number"], 191 | input[type="email"], 192 | input[type="url"], 193 | input[type="search"], 194 | input[type="tel"], 195 | input[type="color"] { 196 | display: block; 197 | padding-top: 2px; 198 | padding-left: 0; 199 | height: $line-height-computed + $font-size-base; 200 | color: $input-color; 201 | vertical-align: middle; 202 | font-size: $font-size-base; 203 | line-height: $font-size-base + 2; 204 | } 205 | 206 | .platform-ios, 207 | .platform-android { 208 | input[type="datetime-local"], 209 | input[type="date"], 210 | input[type="month"], 211 | input[type="time"], 212 | input[type="week"] { 213 | padding-top: 8px; 214 | } 215 | } 216 | 217 | input, 218 | textarea { 219 | width: 100%; 220 | } 221 | textarea { 222 | padding-left: 0; 223 | @include placeholder($input-color-placeholder, -3px); 224 | } 225 | 226 | // Reset height since textareas have rows 227 | textarea { 228 | height: auto; 229 | } 230 | 231 | // Everything else 232 | textarea, 233 | input[type="text"], 234 | input[type="password"], 235 | input[type="datetime"], 236 | input[type="datetime-local"], 237 | input[type="date"], 238 | input[type="month"], 239 | input[type="time"], 240 | input[type="week"], 241 | input[type="number"], 242 | input[type="email"], 243 | input[type="url"], 244 | input[type="search"], 245 | input[type="tel"], 246 | input[type="color"] { 247 | border: 0; 248 | } 249 | 250 | // Position radios and checkboxes better 251 | input[type="radio"], 252 | input[type="checkbox"] { 253 | margin: 0; 254 | line-height: normal; 255 | } 256 | 257 | // Reset width of input images, buttons, radios, checkboxes 258 | input[type="file"], 259 | input[type="image"], 260 | input[type="submit"], 261 | input[type="reset"], 262 | input[type="button"], 263 | input[type="radio"], 264 | input[type="checkbox"] { 265 | width: auto; // Override of generic input selector 266 | } 267 | 268 | // Set the height of file to match text inputs 269 | input[type="file"] { 270 | line-height: $input-height-base; 271 | } 272 | 273 | // Text input classes to hide text caret during scroll 274 | .previous-input-focus, 275 | .cloned-text-input + input, 276 | .cloned-text-input + textarea { 277 | position: absolute !important; 278 | left: -9999px; 279 | width: 200px; 280 | } 281 | 282 | 283 | // Placeholder 284 | // ------------------------------- 285 | input, 286 | textarea { 287 | @include placeholder(); 288 | } 289 | 290 | 291 | // DISABLED STATE 292 | // ------------------------------- 293 | 294 | // Disabled and read-only inputs 295 | input[disabled], 296 | select[disabled], 297 | textarea[disabled], 298 | input[readonly]:not(.cloned-text-input), 299 | textarea[readonly]:not(.cloned-text-input), 300 | select[readonly] { 301 | background-color: $input-bg-disabled; 302 | cursor: not-allowed; 303 | } 304 | // Explicitly reset the colors here 305 | input[type="radio"][disabled], 306 | input[type="checkbox"][disabled], 307 | input[type="radio"][readonly], 308 | input[type="checkbox"][readonly] { 309 | background-color: transparent; 310 | } 311 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Grid 3 | * -------------------------------------------------- 4 | * Using flexbox for the grid, inspired by Philip Walton: 5 | * http://philipwalton.github.io/solved-by-flexbox/demos/grids/ 6 | * By default each .col within a .row will evenly take up 7 | * available width, and the height of each .col with take 8 | * up the height of the tallest .col in the same .row. 9 | */ 10 | 11 | .row { 12 | @include display-flex(); 13 | padding: ($grid-padding-width / 2); 14 | width: 100%; 15 | } 16 | 17 | .row-wrap { 18 | @include flex-wrap(wrap); 19 | } 20 | 21 | .row + .row { 22 | margin-top: ($grid-padding-width / 2) * -1; 23 | padding-top: 0; 24 | } 25 | 26 | .col { 27 | @include flex(1); 28 | display: block; 29 | padding: ($grid-padding-width / 2); 30 | width: 100%; 31 | } 32 | 33 | 34 | /* Vertically Align Columns */ 35 | /* .row-* vertically aligns every .col in the .row */ 36 | .row-top { 37 | @include align-items(flex-start); 38 | } 39 | .row-bottom { 40 | @include align-items(flex-end); 41 | } 42 | .row-center { 43 | @include align-items(center); 44 | } 45 | .row-stretch { 46 | @include align-items(stretch); 47 | } 48 | .row-baseline { 49 | @include align-items(baseline); 50 | } 51 | 52 | /* .col-* vertically aligns an individual .col */ 53 | .col-top { 54 | @include align-self(flex-start); 55 | } 56 | .col-bottom { 57 | @include align-self(flex-end); 58 | } 59 | .col-center { 60 | @include align-self(center); 61 | } 62 | 63 | /* Column Offsets */ 64 | .col-offset-10 { 65 | margin-left: 10%; 66 | } 67 | .col-offset-20 { 68 | margin-left: 20%; 69 | } 70 | .col-offset-25 { 71 | margin-left: 25%; 72 | } 73 | .col-offset-33, .col-offset-34 { 74 | margin-left: 33.3333%; 75 | } 76 | .col-offset-50 { 77 | margin-left: 50%; 78 | } 79 | .col-offset-66, .col-offset-67 { 80 | margin-left: 66.6666%; 81 | } 82 | .col-offset-75 { 83 | margin-left: 75%; 84 | } 85 | .col-offset-80 { 86 | margin-left: 80%; 87 | } 88 | .col-offset-90 { 89 | margin-left: 90%; 90 | } 91 | 92 | 93 | /* Explicit Column Percent Sizes */ 94 | /* By default each grid column will evenly distribute */ 95 | /* across the grid. However, you can specify individual */ 96 | /* columns to take up a certain size of the available area */ 97 | .col-10 { 98 | @include flex(0, 0, 10%); 99 | max-width: 10%; 100 | } 101 | .col-20 { 102 | @include flex(0, 0, 20%); 103 | max-width: 20%; 104 | } 105 | .col-25 { 106 | @include flex(0, 0, 25%); 107 | max-width: 25%; 108 | } 109 | .col-33, .col-34 { 110 | @include flex(0, 0, 33.3333%); 111 | max-width: 33.3333%; 112 | } 113 | .col-50 { 114 | @include flex(0, 0, 50%); 115 | max-width: 50%; 116 | } 117 | .col-66, .col-67 { 118 | @include flex(0, 0, 66.6666%); 119 | max-width: 66.6666%; 120 | } 121 | .col-75 { 122 | @include flex(0, 0, 75%); 123 | max-width: 75%; 124 | } 125 | .col-80 { 126 | @include flex(0, 0, 80%); 127 | max-width: 80%; 128 | } 129 | .col-90 { 130 | @include flex(0, 0, 90%); 131 | max-width: 90%; 132 | } 133 | 134 | 135 | /* Responsive Grid Classes */ 136 | /* Adding a class of responsive-X to a row */ 137 | /* will trigger the flex-direction to */ 138 | /* change to column and add some margin */ 139 | /* to any columns in the row for clearity */ 140 | 141 | @include responsive-grid-break('.responsive-sm', $grid-responsive-sm-break); 142 | @include responsive-grid-break('.responsive-md', $grid-responsive-md-break); 143 | @include responsive-grid-break('.responsive-lg', $grid-responsive-lg-break); 144 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_list.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Lists 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .list { 8 | position: relative; 9 | padding-top: $item-border-width; 10 | padding-bottom: $item-border-width; 11 | padding-left: 0; // reset padding because ul and ol 12 | margin-bottom: 20px; 13 | } 14 | .list:last-child { 15 | margin-bottom: 0px; 16 | &.card{ 17 | margin-bottom:40px; 18 | } 19 | } 20 | 21 | 22 | /** 23 | * List Header 24 | * -------------------------------------------------- 25 | */ 26 | 27 | .list-header { 28 | margin-top: $list-header-margin-top; 29 | padding: $list-header-padding; 30 | background-color: $list-header-bg; 31 | color: $list-header-color; 32 | font-weight: bold; 33 | } 34 | 35 | // when its a card make sure it doesn't duplicate top and bottom borders 36 | .card.list .list-item { 37 | padding-right: 1px; 38 | padding-left: 1px; 39 | } 40 | 41 | 42 | /** 43 | * Cards and Inset Lists 44 | * -------------------------------------------------- 45 | * A card and list-inset are close to the same thing, except a card as a box shadow. 46 | */ 47 | 48 | .card, 49 | .list-inset { 50 | overflow: hidden; 51 | margin: ($content-padding * 2) $content-padding; 52 | border-radius: $card-border-radius; 53 | background-color: $card-body-bg; 54 | } 55 | 56 | .card { 57 | padding-top: $item-border-width; 58 | padding-bottom: $item-border-width; 59 | box-shadow: $card-box-shadow; 60 | 61 | .item { 62 | border-left: 0; 63 | border-right: 0; 64 | } 65 | .item:first-child { 66 | border-top: 0; 67 | } 68 | .item:last-child { 69 | border-bottom: 0; 70 | } 71 | } 72 | 73 | .padding { 74 | .card, .list-inset { 75 | margin-left: 0; 76 | margin-right: 0; 77 | } 78 | } 79 | 80 | .card .item, 81 | .list-inset .item, 82 | .padding > .list .item 83 | { 84 | &:first-child { 85 | border-top-left-radius: $card-border-radius; 86 | border-top-right-radius: $card-border-radius; 87 | 88 | .item-content { 89 | border-top-left-radius: $card-border-radius; 90 | border-top-right-radius: $card-border-radius; 91 | } 92 | } 93 | &:last-child { 94 | border-bottom-right-radius: $card-border-radius; 95 | border-bottom-left-radius: $card-border-radius; 96 | 97 | .item-content { 98 | border-bottom-right-radius: $card-border-radius; 99 | border-bottom-left-radius: $card-border-radius; 100 | } 101 | } 102 | } 103 | 104 | .card .item:last-child, 105 | .list-inset .item:last-child { 106 | margin-bottom: $item-border-width * -1; 107 | } 108 | 109 | .card .item, 110 | .list-inset .item, 111 | .padding > .list .item, 112 | .padding-horizontal > .list .item { 113 | margin-right: 0; 114 | margin-left: 0; 115 | 116 | &.item-input input { 117 | padding-right: 44px; 118 | } 119 | } 120 | .padding-left > .list .item { 121 | margin-left: 0; 122 | } 123 | .padding-right > .list .item { 124 | margin-right: 0; 125 | } 126 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_loading.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Loading 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .loading-container { 8 | position: absolute; 9 | left: 0; 10 | top: 0; 11 | right: 0; 12 | bottom: 0; 13 | 14 | z-index: $z-index-loading; 15 | 16 | @include display-flex(); 17 | @include justify-content(center); 18 | @include align-items(center); 19 | 20 | @include transition(0.2s opacity linear); 21 | visibility: hidden; 22 | opacity: 0; 23 | 24 | &:not(.visible) .icon { 25 | display: none; 26 | } 27 | &.visible { 28 | visibility: visible; 29 | } 30 | &.active { 31 | opacity: 1; 32 | } 33 | 34 | .loading { 35 | padding: $loading-padding; 36 | 37 | border-radius: $loading-border-radius; 38 | background-color: $loading-bg-color; 39 | 40 | color: $loading-text-color; 41 | 42 | text-align: center; 43 | text-overflow: ellipsis; 44 | font-size: $loading-font-size; 45 | 46 | h1, h2, h3, h4, h5, h6 { 47 | color: $loading-text-color; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_menu.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Menus 4 | * -------------------------------------------------- 5 | * Side panel structure 6 | */ 7 | 8 | .menu { 9 | position: absolute; 10 | top: 0; 11 | bottom: 0; 12 | z-index: $z-index-menu; 13 | overflow: hidden; 14 | 15 | min-height: 100%; 16 | max-height: 100%; 17 | width: $menu-width; 18 | 19 | background-color: $menu-bg; 20 | 21 | .scroll-content { 22 | z-index: $z-index-menu-scroll-content; 23 | } 24 | 25 | .bar-header { 26 | z-index: $z-index-menu-bar-header; 27 | } 28 | } 29 | 30 | .menu-content { 31 | @include transform(none); 32 | box-shadow: $menu-side-shadow; 33 | } 34 | 35 | .menu-open .menu-content .pane, 36 | .menu-open .menu-content .scroll-content { 37 | pointer-events: none; 38 | } 39 | 40 | .grade-b .menu-content, 41 | .grade-c .menu-content { 42 | @include box-sizing(content-box); 43 | right: -1px; 44 | left: -1px; 45 | border-right: 1px solid #ccc; 46 | border-left: 1px solid #ccc; 47 | box-shadow: none; 48 | } 49 | 50 | .menu-left { 51 | left: 0; 52 | } 53 | 54 | .menu-right { 55 | right: 0; 56 | } 57 | 58 | .aside-open.aside-resizing .menu-right { 59 | display: none; 60 | } 61 | 62 | .menu-animated { 63 | @include transition-transform($menu-animation-speed ease); 64 | } 65 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_modal.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Modals 4 | * -------------------------------------------------- 5 | * Modals are independent windows that slide in from off-screen. 6 | */ 7 | 8 | .modal-backdrop { 9 | @include transition(background-color 300ms ease-in-out); 10 | position: fixed; 11 | top: 0; 12 | left: 0; 13 | z-index: $z-index-modal; 14 | width: 100%; 15 | height: 100%; 16 | background-color: $modal-backdrop-bg-inactive; 17 | 18 | &.active { 19 | background-color: $modal-backdrop-bg-active; 20 | } 21 | } 22 | 23 | .modal { 24 | display: block; 25 | position: absolute; 26 | top: 0; 27 | z-index: $z-index-modal; 28 | overflow: hidden; 29 | min-height: 100%; 30 | width: 100%; 31 | background-color: $modal-bg-color; 32 | } 33 | 34 | @media (min-width: $modal-inset-mode-break-point) { 35 | // inset mode is when the modal doesn't fill the entire 36 | // display but instead is centered within a large display 37 | .modal { 38 | top: $modal-inset-mode-top; 39 | right: $modal-inset-mode-right; 40 | bottom: $modal-inset-mode-bottom; 41 | left: $modal-inset-mode-left; 42 | overflow: visible; 43 | min-height: $modal-inset-mode-min-height; 44 | width: (100% - $modal-inset-mode-left - $modal-inset-mode-right); 45 | } 46 | 47 | .modal.ng-leave-active { 48 | bottom: 0; 49 | } 50 | 51 | // remove ios header padding from inset header 52 | .platform-ios.platform-cordova .modal-wrapper .modal{ 53 | .bar-header:not(.bar-subheader) { 54 | height: $bar-height; 55 | > * { 56 | margin-top: 0; 57 | } 58 | } 59 | .tabs-top > .tabs, 60 | .tabs.tabs-top { 61 | top: $bar-height; 62 | } 63 | .has-header, 64 | .bar-subheader { 65 | top: $bar-height; 66 | } 67 | .has-subheader { 68 | top: $bar-height + $bar-subheader-height; 69 | } 70 | .has-tabs-top { 71 | top: $bar-height + $tabs-height; 72 | } 73 | .has-header.has-subheader.has-tabs-top { 74 | top: $bar-height + $bar-subheader-height + $tabs-height; 75 | } 76 | } 77 | } 78 | 79 | // disable clicks on all but the modal 80 | .modal-open { 81 | pointer-events: none; 82 | 83 | .modal, 84 | .modal-backdrop { 85 | pointer-events: auto; 86 | } 87 | // prevent clicks on modal when loading overlay is active though 88 | &.loading-active { 89 | .modal, 90 | .modal-backdrop { 91 | pointer-events: none; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_platform.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Platform 4 | * -------------------------------------------------- 5 | * Platform specific tweaks 6 | */ 7 | 8 | .platform-ios.platform-cordova { 9 | // iOS7/8 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 | &:not(.fullscreen) { 13 | .bar-header:not(.bar-subheader) { 14 | height: $bar-height + $ios-statusbar-height; 15 | 16 | &.item-input-inset .item-input-wrapper { 17 | margin-top: 19px !important; 18 | } 19 | 20 | > * { 21 | margin-top: $ios-statusbar-height; 22 | } 23 | } 24 | .tabs-top > .tabs, 25 | .tabs.tabs-top { 26 | top: $bar-height + $ios-statusbar-height; 27 | } 28 | 29 | .has-header, 30 | .bar-subheader { 31 | top: $bar-height + $ios-statusbar-height; 32 | } 33 | .has-subheader { 34 | top: $bar-height + $bar-subheader-height + $ios-statusbar-height; 35 | } 36 | .has-tabs-top { 37 | top: $bar-height + $tabs-height + $ios-statusbar-height; 38 | } 39 | .has-header.has-subheader.has-tabs-top { 40 | top: $bar-height + $bar-subheader-height + $tabs-height + $ios-statusbar-height; 41 | } 42 | } 43 | &.status-bar-hide { 44 | // Cordova doesn't adjust the body height correctly, this makes up for it 45 | margin-bottom: 20px; 46 | } 47 | } 48 | 49 | @media (orientation:landscape) { 50 | .platform-ios.platform-browser.platform-ipad { 51 | position: fixed; // required for iPad 7 Safari 52 | } 53 | } 54 | 55 | .platform-c:not(.enable-transitions) * { 56 | // disable transitions on grade-c devices (Android 2) 57 | -webkit-transition: none !important; 58 | transition: none !important; 59 | } 60 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_popover.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Popovers 4 | * -------------------------------------------------- 5 | * Popovers are independent views which float over content 6 | */ 7 | 8 | .popover-backdrop { 9 | position: fixed; 10 | top: 0; 11 | left: 0; 12 | z-index: $z-index-popover; 13 | width: 100%; 14 | height: 100%; 15 | background-color: $popover-backdrop-bg-inactive; 16 | 17 | &.active { 18 | background-color: $popover-backdrop-bg-active; 19 | } 20 | } 21 | 22 | .popover { 23 | position: absolute; 24 | top: 25%; 25 | left: 50%; 26 | z-index: $z-index-popover; 27 | display: block; 28 | margin-top: 12px; 29 | margin-left: -$popover-width / 2; 30 | height: $popover-height; 31 | width: $popover-width; 32 | background-color: $popover-bg-color; 33 | box-shadow: $popover-box-shadow; 34 | opacity: 0; 35 | 36 | .item:first-child { 37 | border-top: 0; 38 | } 39 | 40 | .item:last-child { 41 | border-bottom: 0; 42 | } 43 | 44 | &.popover-bottom { 45 | margin-top: -12px; 46 | } 47 | } 48 | 49 | 50 | // Set popover border-radius 51 | .popover, 52 | .popover .bar-header { 53 | border-radius: $popover-border-radius; 54 | } 55 | .popover .scroll-content { 56 | z-index: 1; 57 | margin: 2px 0; 58 | } 59 | .popover .bar-header { 60 | border-bottom-right-radius: 0; 61 | border-bottom-left-radius: 0; 62 | } 63 | .popover .has-header { 64 | border-top-right-radius: 0; 65 | border-top-left-radius: 0; 66 | } 67 | .popover-arrow { 68 | display: none; 69 | } 70 | 71 | 72 | // iOS Popover 73 | .platform-ios { 74 | 75 | .popover { 76 | box-shadow: $popover-box-shadow-ios; 77 | } 78 | 79 | .popover, 80 | .popover .bar-header { 81 | border-radius: $popover-border-radius-ios; 82 | } 83 | .popover .scroll-content { 84 | margin: 8px 0; 85 | border-radius: $popover-border-radius-ios; 86 | } 87 | .popover .scroll-content.has-header { 88 | margin-top: 0; 89 | } 90 | .popover-arrow { 91 | position: absolute; 92 | display: block; 93 | top: -17px; 94 | width: 30px; 95 | height: 19px; 96 | overflow: hidden; 97 | 98 | &:after { 99 | position: absolute; 100 | top: 12px; 101 | left: 5px; 102 | width: 20px; 103 | height: 20px; 104 | background-color: $popover-bg-color; 105 | border-radius: 3px; 106 | content: ''; 107 | @include rotate(-45deg); 108 | } 109 | } 110 | .popover-bottom .popover-arrow { 111 | top: auto; 112 | bottom: -10px; 113 | &:after { 114 | top: -6px; 115 | } 116 | } 117 | } 118 | 119 | 120 | // Android Popover 121 | .platform-android { 122 | 123 | .popover { 124 | margin-top: -32px; 125 | background-color: $popover-bg-color-android; 126 | box-shadow: $popover-box-shadow-android; 127 | 128 | .item { 129 | border-color: $popover-bg-color-android; 130 | background-color: $popover-bg-color-android; 131 | color: #4d4d4d; 132 | } 133 | &.popover-bottom { 134 | margin-top: 32px; 135 | } 136 | } 137 | 138 | .popover-backdrop, 139 | .popover-backdrop.active { 140 | background-color: transparent; 141 | } 142 | } 143 | 144 | 145 | // disable clicks on all but the popover 146 | .popover-open { 147 | pointer-events: none; 148 | 149 | .popover, 150 | .popover-backdrop { 151 | pointer-events: auto; 152 | } 153 | // prevent clicks on popover when loading overlay is active though 154 | &.loading-active { 155 | .popover, 156 | .popover-backdrop { 157 | pointer-events: none; 158 | } 159 | } 160 | } 161 | 162 | 163 | // wider popover on larger viewports 164 | @media (min-width: $popover-large-break-point) { 165 | .popover { 166 | width: $popover-large-width; 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_popup.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Popups 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .popup-container { 8 | position: absolute; 9 | top: 0; 10 | left: 0; 11 | bottom: 0; 12 | right: 0; 13 | background: rgba(0,0,0,0); 14 | 15 | @include display-flex(); 16 | @include justify-content(center); 17 | @include align-items(center); 18 | 19 | z-index: $z-index-popup; 20 | 21 | // Start hidden 22 | visibility: hidden; 23 | &.popup-showing { 24 | visibility: visible; 25 | } 26 | 27 | &.popup-hidden .popup { 28 | @include animation-name(scaleOut); 29 | @include animation-duration($popup-leave-animation-duration); 30 | @include animation-timing-function(ease-in-out); 31 | @include animation-fill-mode(both); 32 | } 33 | 34 | &.active .popup { 35 | @include animation-name(superScaleIn); 36 | @include animation-duration($popup-enter-animation-duration); 37 | @include animation-timing-function(ease-in-out); 38 | @include animation-fill-mode(both); 39 | } 40 | 41 | .popup { 42 | width: $popup-width; 43 | max-width: 100%; 44 | max-height: 90%; 45 | 46 | border-radius: $popup-border-radius; 47 | background-color: $popup-background-color; 48 | 49 | @include display-flex(); 50 | @include flex-direction(column); 51 | } 52 | } 53 | 54 | .popup-head { 55 | padding: 15px 10px; 56 | border-bottom: 1px solid #eee; 57 | text-align: center; 58 | } 59 | .popup-title { 60 | margin: 0; 61 | padding: 0; 62 | font-size: 15px; 63 | } 64 | .popup-sub-title { 65 | margin: 5px 0 0 0; 66 | padding: 0; 67 | font-weight: normal; 68 | font-size: 11px; 69 | } 70 | .popup-body { 71 | padding: 10px; 72 | overflow: scroll; 73 | } 74 | 75 | .popup-buttons { 76 | @include display-flex(); 77 | @include flex-direction(row); 78 | padding: 10px; 79 | min-height: $popup-button-min-height + 20; 80 | 81 | .button { 82 | @include flex(1); 83 | display: block; 84 | min-height: $popup-button-min-height; 85 | border-radius: $popup-button-border-radius; 86 | line-height: $popup-button-line-height; 87 | 88 | margin-right: 5px; 89 | &:last-child { 90 | margin-right: 0px; 91 | } 92 | } 93 | } 94 | 95 | .popup-open { 96 | pointer-events: none; 97 | 98 | &.modal-open .modal { 99 | pointer-events: none; 100 | } 101 | 102 | .popup-backdrop, .popup { 103 | pointer-events: auto; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /keensoft-example/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 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_radio.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Radio Button Inputs 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .item-radio { 8 | padding: 0; 9 | 10 | &:hover { 11 | cursor: pointer; 12 | } 13 | } 14 | 15 | .item-radio .item-content { 16 | /* give some room to the right for the checkmark icon */ 17 | padding-right: $item-padding * 4; 18 | } 19 | 20 | .item-radio .radio-icon { 21 | /* checkmark icon will be hidden by default */ 22 | position: absolute; 23 | top: 0; 24 | right: 0; 25 | z-index: $z-index-item-radio; 26 | visibility: hidden; 27 | padding: $item-padding - 2; 28 | height: 100%; 29 | font-size: 24px; 30 | } 31 | 32 | .item-radio input { 33 | /* hide any radio button inputs elements (the ugly circles) */ 34 | position: absolute; 35 | left: -9999px; 36 | 37 | &:checked ~ .item-content { 38 | /* style the item content when its checked */ 39 | background: #f7f7f7; 40 | } 41 | 42 | &:checked ~ .radio-icon { 43 | /* show the checkmark icon when its checked */ 44 | visibility: visible; 45 | } 46 | } 47 | 48 | // Hack for Android to correctly display the checked item 49 | // http://timpietrusky.com/advanced-checkbox-hack 50 | .platform-android.grade-b .item-radio, 51 | .platform-android.grade-c .item-radio { 52 | -webkit-animation: androidCheckedbugfix infinite 1s; 53 | } 54 | @-webkit-keyframes androidCheckedbugfix { 55 | from { padding: 0; } 56 | to { padding: 0; } 57 | } 58 | -------------------------------------------------------------------------------- /keensoft-example/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: $range-slider-box-shadow; 31 | cursor: pointer; 32 | -webkit-appearance: none; 33 | border: 0; 34 | } 35 | 36 | &::-webkit-slider-thumb:before { 37 | /* what creates the colorful line on the left side of the slider */ 38 | position: absolute; 39 | top: ($range-slider-height / 2) - ($range-track-height / 2); 40 | left: -2001px; 41 | width: 2000px; 42 | height: $range-track-height; 43 | background: $dark; 44 | content: ' '; 45 | } 46 | 47 | &::-webkit-slider-thumb:after { 48 | /* create a larger (but hidden) hit area */ 49 | position: absolute; 50 | top: -15px; 51 | left: -15px; 52 | padding: 30px; 53 | content: ' '; 54 | //background: red; 55 | //opacity: .5; 56 | } 57 | 58 | } 59 | 60 | .range { 61 | @include display-flex(); 62 | @include align-items(center); 63 | padding: 2px 11px; 64 | 65 | &.range-light { 66 | input { @include range-style($range-light-track-bg); } 67 | } 68 | &.range-stable { 69 | input { @include range-style($range-stable-track-bg); } 70 | } 71 | &.range-positive { 72 | input { @include range-style($range-positive-track-bg); } 73 | } 74 | &.range-calm { 75 | input { @include range-style($range-calm-track-bg); } 76 | } 77 | &.range-balanced { 78 | input { @include range-style($range-balanced-track-bg); } 79 | } 80 | &.range-assertive { 81 | input { @include range-style($range-assertive-track-bg); } 82 | } 83 | &.range-energized { 84 | input { @include range-style($range-energized-track-bg); } 85 | } 86 | &.range-royal { 87 | input { @include range-style($range-royal-track-bg); } 88 | } 89 | &.range-dark { 90 | input { @include range-style($range-dark-track-bg); } 91 | } 92 | } 93 | 94 | .range .icon { 95 | @include flex(0); 96 | display: block; 97 | min-width: $range-icon-size; 98 | text-align: center; 99 | font-size: $range-icon-size; 100 | } 101 | 102 | .range input { 103 | @include flex(1); 104 | display: block; 105 | margin-right: 10px; 106 | margin-left: 10px; 107 | } 108 | 109 | .range-label { 110 | @include flex(0, 0, auto); 111 | display: block; 112 | white-space: nowrap; 113 | } 114 | 115 | .range-label:first-child { 116 | padding-left: 5px; 117 | } 118 | .range input + .range-label { 119 | padding-right: 5px; 120 | padding-left: 0; 121 | } 122 | 123 | -------------------------------------------------------------------------------- /keensoft-example/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 | * 6. Remove default gradient in Android Firefox / FirefoxOS 243 | */ 244 | 245 | button, 246 | input, 247 | select, 248 | textarea { 249 | margin: 0; /* 3 */ 250 | font-size: 100%; /* 2 */ 251 | font-family: inherit; /* 1 */ 252 | outline-offset: 0; /* 4 */ 253 | outline-style: none; /* 4 */ 254 | outline-width: 0; /* 4 */ 255 | -webkit-font-smoothing: inherit; /* 5 */ 256 | background-image: none; /* 6 */ 257 | } 258 | 259 | /** 260 | * Address Firefox 4+ setting `line-height` on `input` using `importnt` in 261 | * the UA stylesheet. 262 | */ 263 | 264 | button, 265 | input { 266 | line-height: normal; 267 | } 268 | 269 | /** 270 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 271 | * All other form control elements do not inherit `text-transform` values. 272 | * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. 273 | * Correct `select` style inheritance in Firefox 4+ and Opera. 274 | */ 275 | 276 | button, 277 | select { 278 | text-transform: none; 279 | } 280 | 281 | /** 282 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 283 | * and `video` controls. 284 | * 2. Correct inability to style clickable `input` types in iOS. 285 | * 3. Improve usability and consistency of cursor style between image-type 286 | * `input` and others. 287 | */ 288 | 289 | button, 290 | html input[type="button"], /* 1 */ 291 | input[type="reset"], 292 | input[type="submit"] { 293 | cursor: pointer; /* 3 */ 294 | -webkit-appearance: button; /* 2 */ 295 | } 296 | 297 | /** 298 | * Re-set default cursor for disabled elements. 299 | */ 300 | 301 | button[disabled], 302 | html input[disabled] { 303 | cursor: default; 304 | } 305 | 306 | /** 307 | * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 308 | * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome 309 | * (include `-moz` to future-proof). 310 | */ 311 | 312 | input[type="search"] { 313 | -webkit-box-sizing: content-box; /* 2 */ 314 | -moz-box-sizing: content-box; 315 | box-sizing: content-box; 316 | -webkit-appearance: textfield; /* 1 */ 317 | } 318 | 319 | /** 320 | * Remove inner padding and search cancel button in Safari 5 and Chrome 321 | * on OS X. 322 | */ 323 | 324 | input[type="search"]::-webkit-search-cancel-button, 325 | input[type="search"]::-webkit-search-decoration { 326 | -webkit-appearance: none; 327 | } 328 | 329 | /** 330 | * Remove inner padding and border in Firefox 4+. 331 | */ 332 | 333 | button::-moz-focus-inner, 334 | input::-moz-focus-inner { 335 | padding: 0; 336 | border: 0; 337 | } 338 | 339 | /** 340 | * 1. Remove default vertical scrollbar in IE 8/9. 341 | * 2. Improve readability and alignment in all browsers. 342 | */ 343 | 344 | textarea { 345 | overflow: auto; /* 1 */ 346 | vertical-align: top; /* 2 */ 347 | } 348 | 349 | 350 | img { 351 | -webkit-user-drag: none; 352 | } 353 | 354 | /* ========================================================================== 355 | Tables 356 | ========================================================================== */ 357 | 358 | /** 359 | * Remove most spacing between table cells. 360 | */ 361 | 362 | table { 363 | border-spacing: 0; 364 | border-collapse: collapse; 365 | } 366 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_select.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Select 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .item-select { 8 | position: relative; 9 | 10 | select { 11 | @include appearance(none); 12 | position: absolute; 13 | top: 0; 14 | right: 0; 15 | padding: ($item-padding - 2) ($item-padding * 3) ($item-padding) $item-padding; 16 | max-width: 65%; 17 | 18 | border: none; 19 | background: $item-default-bg; 20 | color: #333; 21 | 22 | // hack to hide default dropdown arrow in FF 23 | text-indent: .01px; 24 | text-overflow: ''; 25 | 26 | white-space: nowrap; 27 | font-size: $font-size-base; 28 | 29 | cursor: pointer; 30 | direction: rtl; // right align the select text 31 | } 32 | 33 | select::-ms-expand { 34 | // hide default dropdown arrow in IE 35 | display: none; 36 | } 37 | 38 | option { 39 | direction: ltr; 40 | } 41 | 42 | &:after { 43 | position: absolute; 44 | top: 50%; 45 | right: $item-padding; 46 | margin-top: -3px; 47 | width: 0; 48 | height: 0; 49 | border-top: 5px solid; 50 | border-right: 5px solid rgba(0, 0, 0, 0); 51 | border-left: 5px solid rgba(0, 0, 0, 0); 52 | color: #999; 53 | content: ""; 54 | pointer-events: none; 55 | } 56 | &.item-light { 57 | select{ 58 | background:$item-light-bg; 59 | color:$item-light-text; 60 | } 61 | } 62 | &.item-stable { 63 | select{ 64 | background:$item-stable-bg; 65 | color:$item-stable-text; 66 | } 67 | &:after, .input-label{ 68 | color:darken($item-stable-border,30%); 69 | } 70 | } 71 | &.item-positive { 72 | select{ 73 | background:$item-positive-bg; 74 | color:$item-positive-text; 75 | } 76 | &:after, .input-label{ 77 | color:$item-positive-text; 78 | } 79 | } 80 | &.item-calm { 81 | select{ 82 | background:$item-calm-bg; 83 | color:$item-calm-text; 84 | } 85 | &:after, .input-label{ 86 | color:$item-calm-text; 87 | } 88 | } 89 | &.item-assertive { 90 | select{ 91 | background:$item-assertive-bg; 92 | color:$item-assertive-text; 93 | } 94 | &:after, .input-label{ 95 | color:$item-assertive-text; 96 | } 97 | } 98 | &.item-balanced { 99 | select{ 100 | background:$item-balanced-bg; 101 | color:$item-balanced-text; 102 | } 103 | &:after, .input-label{ 104 | color:$item-balanced-text; 105 | } 106 | } 107 | &.item-energized { 108 | select{ 109 | background:$item-energized-bg; 110 | color:$item-energized-text; 111 | } 112 | &:after, .input-label{ 113 | color:$item-energized-text; 114 | } 115 | } 116 | &.item-royal { 117 | select{ 118 | background:$item-royal-bg; 119 | color:$item-royal-text; 120 | } 121 | &:after, .input-label{ 122 | color:$item-royal-text; 123 | } 124 | } 125 | &.item-dark { 126 | select{ 127 | background:$item-dark-bg; 128 | color:$item-dark-text; 129 | } 130 | &:after, .input-label{ 131 | color:$item-dark-text; 132 | } 133 | } 134 | } 135 | 136 | select { 137 | &[multiple], 138 | &[size] { 139 | height: auto; 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /keensoft-example/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 | -------------------------------------------------------------------------------- /keensoft-example/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 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_toggle.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Toggle 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .item-toggle { 8 | pointer-events: none; 9 | } 10 | 11 | .toggle { 12 | // set the color defaults 13 | @include toggle-style($toggle-on-default-border, $toggle-on-default-bg); 14 | 15 | position: relative; 16 | display: inline-block; 17 | pointer-events: auto; 18 | margin: -$toggle-hit-area-expansion; 19 | padding: $toggle-hit-area-expansion; 20 | 21 | &.dragging { 22 | .handle { 23 | background-color: $toggle-handle-dragging-bg-color !important; 24 | } 25 | } 26 | 27 | &.toggle-light { 28 | @include toggle-style($toggle-on-light-border, $toggle-on-light-bg); 29 | } 30 | &.toggle-stable { 31 | @include toggle-style($toggle-on-stable-border, $toggle-on-stable-bg); 32 | } 33 | &.toggle-positive { 34 | @include toggle-style($toggle-on-positive-border, $toggle-on-positive-bg); 35 | } 36 | &.toggle-calm { 37 | @include toggle-style($toggle-on-calm-border, $toggle-on-calm-bg); 38 | } 39 | &.toggle-assertive { 40 | @include toggle-style($toggle-on-assertive-border, $toggle-on-assertive-bg); 41 | } 42 | &.toggle-balanced { 43 | @include toggle-style($toggle-on-balanced-border, $toggle-on-balanced-bg); 44 | } 45 | &.toggle-energized { 46 | @include toggle-style($toggle-on-energized-border, $toggle-on-energized-bg); 47 | } 48 | &.toggle-royal { 49 | @include toggle-style($toggle-on-royal-border, $toggle-on-royal-bg); 50 | } 51 | &.toggle-dark { 52 | @include toggle-style($toggle-on-dark-border, $toggle-on-dark-bg); 53 | } 54 | } 55 | 56 | .toggle input { 57 | // hide the actual input checkbox 58 | display: none; 59 | } 60 | 61 | /* the track appearance when the toggle is "off" */ 62 | .toggle .track { 63 | @include transition-timing-function(ease-in-out); 64 | @include transition-duration($toggle-transition-duration); 65 | @include transition-property((background-color, border)); 66 | 67 | display: inline-block; 68 | box-sizing: border-box; 69 | width: $toggle-width; 70 | height: $toggle-height; 71 | border: solid $toggle-border-width $toggle-off-border-color; 72 | border-radius: $toggle-border-radius; 73 | background-color: $toggle-off-bg-color; 74 | content: ' '; 75 | cursor: pointer; 76 | pointer-events: none; 77 | } 78 | 79 | /* Fix to avoid background color bleeding */ 80 | /* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */ 81 | .platform-android4_2 .toggle .track { 82 | -webkit-background-clip: padding-box; 83 | } 84 | 85 | /* the handle (circle) thats inside the toggle's track area */ 86 | /* also the handle's appearance when it is "off" */ 87 | .toggle .handle { 88 | @include transition($toggle-transition-duration ease-in-out); 89 | position: absolute; 90 | display: block; 91 | width: $toggle-handle-width; 92 | height: $toggle-handle-height; 93 | border-radius: $toggle-handle-radius; 94 | background-color: $toggle-handle-off-bg-color; 95 | top: $toggle-border-width + $toggle-hit-area-expansion; 96 | left: $toggle-border-width + $toggle-hit-area-expansion; 97 | 98 | &:before { 99 | // used to create a larger (but hidden) hit area to slide the handle 100 | position: absolute; 101 | top: -4px; 102 | left: ( ($toggle-handle-width / 2) * -1) - 8; 103 | padding: ($toggle-handle-height / 2) + 5 ($toggle-handle-width + 7); 104 | content: " "; 105 | } 106 | } 107 | 108 | .toggle input:checked + .track .handle { 109 | // the handle when the toggle is "on" 110 | @include translate3d($toggle-width - $toggle-handle-width - ($toggle-border-width * 2), 0, 0); 111 | background-color: $toggle-handle-on-bg-color; 112 | } 113 | 114 | .item-toggle.active { 115 | box-shadow: none; 116 | } 117 | 118 | .item-toggle, 119 | .item-toggle.item-complex .item-content { 120 | // make sure list item content have enough padding on right to fit the toggle 121 | padding-right: ($item-padding * 3) + $toggle-width; 122 | } 123 | 124 | .item-toggle.item-complex { 125 | padding-right: 0; 126 | } 127 | 128 | .item-toggle .toggle { 129 | // position the toggle to the right within a list item 130 | position: absolute; 131 | top: $item-padding / 2; 132 | right: $item-padding; 133 | z-index: $z-index-item-toggle; 134 | } 135 | 136 | .toggle input:disabled + .track { 137 | opacity: .6; 138 | } 139 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_transitions.scss: -------------------------------------------------------------------------------- 1 | 2 | // iOS View Transitions 3 | // ------------------------------- 4 | 5 | $ios-transition-duration: 450ms !default; 6 | $ios-transition-timing-function: cubic-bezier(.3, .9, .4, 1) !default; 7 | $ios-transition-container-bg-color: #000 !default; 8 | 9 | 10 | [nav-view-transition="ios"] { 11 | 12 | [nav-view="entering"], 13 | [nav-view="leaving"] { 14 | @include transition-duration( $ios-transition-duration ); 15 | @include transition-timing-function( $ios-transition-timing-function ); 16 | -webkit-transition-property: opacity, -webkit-transform; 17 | transition-property: opacity, transform; 18 | } 19 | 20 | &[nav-view-direction="forward"], 21 | &[nav-view-direction="back"] { 22 | background-color: $ios-transition-container-bg-color; 23 | } 24 | 25 | [nav-view="active"], 26 | &[nav-view-direction="forward"] [nav-view="entering"], 27 | &[nav-view-direction="back"] [nav-view="leaving"] { 28 | z-index: $z-index-view-above; 29 | } 30 | 31 | &[nav-view-direction="back"] [nav-view="entering"], 32 | &[nav-view-direction="forward"] [nav-view="leaving"] { 33 | z-index: $z-index-view-below; 34 | } 35 | 36 | } 37 | 38 | 39 | 40 | // iOS Nav Bar Transitions 41 | // ------------------------------- 42 | 43 | [nav-bar-transition="ios"] { 44 | 45 | .title, 46 | .buttons, 47 | .back-text { 48 | @include transition-duration( $ios-transition-duration ); 49 | @include transition-timing-function( $ios-transition-timing-function ); 50 | -webkit-transition-property: opacity, -webkit-transform; 51 | transition-property: opacity, transform; 52 | } 53 | 54 | [nav-bar="active"], 55 | [nav-bar="entering"] { 56 | z-index: $z-index-bar-above; 57 | 58 | .bar { 59 | background: transparent; 60 | } 61 | } 62 | 63 | [nav-bar="cached"] { 64 | display: block; 65 | 66 | .header-item { 67 | display: none; 68 | } 69 | } 70 | 71 | } 72 | 73 | 74 | 75 | // Android View Transitions 76 | // ------------------------------- 77 | 78 | $android-transition-duration: 200ms !default; 79 | $android-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1) !default; 80 | 81 | 82 | [nav-view-transition="android"] { 83 | 84 | [nav-view="entering"], 85 | [nav-view="leaving"] { 86 | @include transition-duration( $android-transition-duration ); 87 | @include transition-timing-function( $android-transition-timing-function ); 88 | -webkit-transition-property: -webkit-transform; 89 | transition-property: transform; 90 | } 91 | 92 | [nav-view="active"], 93 | &[nav-view-direction="forward"] [nav-view="entering"], 94 | &[nav-view-direction="back"] [nav-view="leaving"] { 95 | z-index: $z-index-view-above; 96 | } 97 | 98 | &[nav-view-direction="back"] [nav-view="entering"], 99 | &[nav-view-direction="forward"] [nav-view="leaving"] { 100 | z-index: $z-index-view-below; 101 | } 102 | 103 | } 104 | 105 | 106 | 107 | // Android Nav Bar Transitions 108 | // ------------------------------- 109 | 110 | [nav-bar-transition="android"] { 111 | 112 | .title, 113 | .buttons { 114 | @include transition-duration( $android-transition-duration ); 115 | @include transition-timing-function( $android-transition-timing-function ); 116 | -webkit-transition-property: opacity; 117 | transition-property: opacity; 118 | } 119 | 120 | [nav-bar="active"], 121 | [nav-bar="entering"] { 122 | z-index: $z-index-bar-above; 123 | 124 | .bar { 125 | background: transparent; 126 | } 127 | } 128 | 129 | [nav-bar="cached"] { 130 | display: block; 131 | 132 | .header-item { 133 | display: none; 134 | } 135 | } 136 | 137 | } 138 | 139 | 140 | 141 | // Transition Settings 142 | // ------------------------------- 143 | 144 | [nav-view="cached"], 145 | [nav-bar="cached"] { 146 | display: none; 147 | } 148 | 149 | [nav-view="stage"] { 150 | opacity: 0; 151 | @include transition-duration( 0 ); 152 | } 153 | 154 | [nav-bar="stage"] { 155 | .title, 156 | .buttons, 157 | .back-text { 158 | position: absolute; 159 | opacity: 0; 160 | @include transition-duration(0s); 161 | } 162 | } 163 | 164 | -------------------------------------------------------------------------------- /keensoft-example/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 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/_util.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Utility Classes 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .hide { 8 | display: none; 9 | } 10 | .opacity-hide { 11 | opacity: 0; 12 | } 13 | .grade-b .opacity-hide, 14 | .grade-c .opacity-hide { 15 | opacity: 1; 16 | display: none; 17 | } 18 | .show { 19 | display: block; 20 | } 21 | .opacity-show { 22 | opacity: 1; 23 | } 24 | .invisible { 25 | visibility: hidden; 26 | } 27 | 28 | .keyboard-open .hide-on-keyboard-open { 29 | display: none; 30 | } 31 | 32 | .keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs, 33 | .keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer { 34 | bottom: 0; 35 | } 36 | 37 | .inline { 38 | display: inline-block; 39 | } 40 | 41 | .disable-pointer-events { 42 | pointer-events: none; 43 | } 44 | 45 | .enable-pointer-events { 46 | pointer-events: auto; 47 | } 48 | 49 | .disable-user-behavior { 50 | // used to prevent the browser from doing its native behavior. this doesnt 51 | // prevent the scrolling, but cancels the contextmenu, tap highlighting, etc 52 | 53 | @include user-select(none); 54 | @include touch-callout(none); 55 | @include tap-highlight-transparent(); 56 | 57 | -webkit-user-drag: none; 58 | 59 | -ms-touch-action: none; 60 | -ms-content-zooming: none; 61 | } 62 | 63 | // Fill the screen to block clicks (a better pointer-events: none) for the body 64 | // to avoid full-page reflows and paints which can cause flickers 65 | .click-block { 66 | position: absolute; 67 | top: 0; 68 | left: 0; 69 | z-index: $z-index-click-block; 70 | width: 100%; 71 | height: 100%; 72 | opacity: 0; 73 | @include translate3d(0, 0, 0); 74 | } 75 | .click-block-hide { 76 | @include translate3d(-9999px, 0, 0); 77 | } 78 | 79 | .no-resize { 80 | resize: none; 81 | } 82 | 83 | .block { 84 | display: block; 85 | clear: both; 86 | &:after { 87 | display: block; 88 | visibility: hidden; 89 | clear: both; 90 | height: 0; 91 | content: "."; 92 | } 93 | } 94 | 95 | .full-image { 96 | width: 100%; 97 | } 98 | 99 | .clearfix { 100 | *zoom: 1; 101 | &:before, 102 | &:after { 103 | display: table; 104 | content: ""; 105 | // Fixes Opera/contenteditable bug: 106 | // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 107 | line-height: 0; 108 | } 109 | &:after { 110 | clear: both; 111 | } 112 | } 113 | 114 | /** 115 | * Content Padding 116 | * -------------------------------------------------- 117 | */ 118 | 119 | .padding { 120 | padding: $content-padding; 121 | } 122 | 123 | .padding-top, 124 | .padding-vertical { 125 | padding-top: $content-padding; 126 | } 127 | 128 | .padding-right, 129 | .padding-horizontal { 130 | padding-right: $content-padding; 131 | } 132 | 133 | .padding-bottom, 134 | .padding-vertical { 135 | padding-bottom: $content-padding; 136 | } 137 | 138 | .padding-left, 139 | .padding-horizontal { 140 | padding-left: $content-padding; 141 | } 142 | 143 | 144 | /** 145 | * Rounded 146 | * -------------------------------------------------- 147 | */ 148 | 149 | .rounded { 150 | border-radius: $border-radius-base; 151 | } 152 | 153 | 154 | /** 155 | * Utility Colors 156 | * -------------------------------------------------- 157 | * Utility colors are added to help set a naming convention. You'll 158 | * notice we purposely do not use words like "red" or "blue", but 159 | * instead have colors which represent an emotion or generic theme. 160 | */ 161 | 162 | .light, a.light { 163 | color: $light; 164 | } 165 | .light-bg { 166 | background-color: $light; 167 | } 168 | .light-border { 169 | border-color: $button-light-border; 170 | } 171 | 172 | .stable, a.stable { 173 | color: $stable; 174 | } 175 | .stable-bg { 176 | background-color: $stable; 177 | } 178 | .stable-border { 179 | border-color: $button-stable-border; 180 | } 181 | 182 | .positive, a.positive { 183 | color: $positive; 184 | } 185 | .positive-bg { 186 | background-color: $positive; 187 | } 188 | .positive-border { 189 | border-color: $button-positive-border; 190 | } 191 | 192 | .calm, a.calm { 193 | color: $calm; 194 | } 195 | .calm-bg { 196 | background-color: $calm; 197 | } 198 | .calm-border { 199 | border-color: $button-calm-border; 200 | } 201 | 202 | .assertive, a.assertive { 203 | color: $assertive; 204 | } 205 | .assertive-bg { 206 | background-color: $assertive; 207 | } 208 | .assertive-border { 209 | border-color: $button-assertive-border; 210 | } 211 | 212 | .balanced, a.balanced { 213 | color: $balanced; 214 | } 215 | .balanced-bg { 216 | background-color: $balanced; 217 | } 218 | .balanced-border { 219 | border-color: $button-balanced-border; 220 | } 221 | 222 | .energized, a.energized { 223 | color: $energized; 224 | } 225 | .energized-bg { 226 | background-color: $energized; 227 | } 228 | .energized-border { 229 | border-color: $button-energized-border; 230 | } 231 | 232 | .royal, a.royal { 233 | color: $royal; 234 | } 235 | .royal-bg { 236 | background-color: $royal; 237 | } 238 | .royal-border { 239 | border-color: $button-royal-border; 240 | } 241 | 242 | .dark, a.dark { 243 | color: $dark; 244 | } 245 | .dark-bg { 246 | background-color: $dark; 247 | } 248 | .dark-border { 249 | border-color: $button-dark-border; 250 | } 251 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/ionic.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @import 4 | // Ionicons 5 | "ionicons/ionicons.scss", 6 | 7 | // Variables 8 | "mixins", 9 | "variables", 10 | 11 | // Base 12 | "reset", 13 | "scaffolding", 14 | "type", 15 | 16 | // Components 17 | "action-sheet", 18 | "backdrop", 19 | "bar", 20 | "tabs", 21 | "menu", 22 | "modal", 23 | "popover", 24 | "popup", 25 | "loading", 26 | "items", 27 | "list", 28 | "badge", 29 | "slide-box", 30 | 31 | // Forms 32 | "form", 33 | "checkbox", 34 | "toggle", 35 | "radio", 36 | "range", 37 | "select", 38 | "progress", 39 | 40 | // Buttons 41 | "button", 42 | "button-bar", 43 | 44 | // Util 45 | "grid", 46 | "util", 47 | "platform", 48 | 49 | // Animations 50 | "animations", 51 | "transitions"; 52 | -------------------------------------------------------------------------------- /keensoft-example/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 | // must spin entire element for android 4.3 and below 42 | @extend .#{$ionicons-prefix}spin; 43 | } 44 | 45 | .#{$ionicons-prefix}loading-a { 46 | -webkit-animation-timing-function: steps(8, start); 47 | -moz-animation-timing-function: steps(8, start); 48 | animation-timing-function: steps(8, start); 49 | } 50 | 51 | .#{$ionicons-prefix}loading-a:before { 52 | @extend .#{$ionicons-prefix}load-a:before; 53 | } 54 | 55 | .#{$ionicons-prefix}loading-b:before { 56 | @extend .#{$ionicons-prefix}load-b:before; 57 | } 58 | 59 | .#{$ionicons-prefix}loading-c:before { 60 | @extend .#{$ionicons-prefix}load-c:before; 61 | } 62 | 63 | .#{$ionicons-prefix}loading-d:before { 64 | @extend .#{$ionicons-prefix}load-d:before; 65 | } 66 | 67 | .#{$ionicons-prefix}looping:before { 68 | @extend .#{$ionicons-prefix}loop:before; 69 | } 70 | 71 | .#{$ionicons-prefix}refreshing:before { 72 | @extend .#{$ionicons-prefix}refresh:before; 73 | } 74 | 75 | .#{$ionicons-prefix}ios7-reloading:before { 76 | @extend .#{$ionicons-prefix}ios7-reload:before; 77 | } 78 | -------------------------------------------------------------------------------- /keensoft-example/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 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/ionic/scss/ionicons/ionicons.scss: -------------------------------------------------------------------------------- 1 | @import "ionicons-variables"; 2 | /*! 3 | Ionicons, v1.5.2 4 | Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ 5 | https://twitter.com/benjsperry https://twitter.com/ionicframework 6 | MIT License: https://github.com/driftyco/ionicons 7 | */ 8 | 9 | @import "ionicons-font"; 10 | @import "ionicons-animation"; 11 | @import "ionicons-icons"; 12 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AngularHammer", 3 | "version": "2.1.10", 4 | "authors": [ 5 | "Ryan S Mullins " 6 | ], 7 | "homepage": "https://github.com/RyanMullins/angular-hammer", 8 | "main": "angular.hammer.js", 9 | "license": "MIT", 10 | "keywords": [ 11 | "Angular", 12 | "Hammer", 13 | "touch", 14 | "javascript", 15 | "gesture" 16 | ], 17 | "ignore": [ 18 | "**/.*", 19 | "node_modules", 20 | "bower_components", 21 | "components", 22 | "examples" 23 | ], 24 | "dependencies": { 25 | "angular": ">=1.2.0", 26 | "hammerjs": ">=2.0.0" 27 | }, 28 | "_release": "2.1.10", 29 | "_resolution": { 30 | "type": "version", 31 | "tag": "v2.1.10", 32 | "commit": "d2d40497bc86322e7b9d68b8aa471bf81a5fedf5" 33 | }, 34 | "_source": "git://github.com/ryanmullins/angular-hammer.git", 35 | "_target": "~2.1.10", 36 | "_originalSource": "ryanmullins-angular-hammer", 37 | "_direct": true 38 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Ryan S Mullins 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/angular-hammer-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keensoft/FullScreenImage-Cordova-Plugin/5db2f7cd330d3d68b3d1c0609d6055887a9d9e1c/keensoft-example/www/lib/ryanmullins-angular-hammer/angular-hammer-logo.png -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/angular.hammer.min.js: -------------------------------------------------------------------------------- 1 | // ---- Angular Hammer ---- 2 | // Copyright (c) 2014 Ryan S Mullins 3 | // Licensed under the MIT Software License 4 | !function(a,b,c){"use strict";function d(a,b){if(!a||!b||!b.type)return null;var d;return d=b.type.indexOf("pan")>-1?new c.Pan(b):b.type.indexOf("pinch")>-1?new c.Pinch(b):b.type.indexOf("press")>-1?new c.Press(b):b.type.indexOf("rotate")>-1?new c.Rotate(b):b.type.indexOf("swipe")>-1?new c.Swipe(b):new c.Tap(b),a.add(d),d}function e(a,b){return a&&(b.preventGhosts=a.preventGhosts),b}function f(a){return a.indexOf("pan")>-1?"pan":a.indexOf("pinch")>-1?"pinch":a.indexOf("press")>-1?"press":a.indexOf("rotate")>-1?"rotate":a.indexOf("swipe")>-1?"swipe":"tap"}function g(a,b,c){if(a&&b){var e=a.get(b.type);e||(e=d(a,b)),b.directions||(b.directions="pan"===b.type||"swipe"===b.type?"DIRECTION_ALL":b.type.indexOf("left")>-1?"DIRECTION_LEFT":b.type.indexOf("right")>-1?"DIRECTION_RIGHT":b.type.indexOf("up")>-1?"DIRECTION_UP":b.type.indexOf("down")>-1?"DIRECTION_DOWN":""),b.direction=h(b.directions),e.set(b),b.recognizeWith&&(a.get(b.recognizeWith)||d(a,{type:b.recognizeWith}),e.recognizeWith(a.get(b.recognizeWith))),b.dropRecognizeWith&&a.get(b.dropRecognizeWith)&&e.dropRecognizeWith(a.get(b.dropRecognizeWith)),b.requireFailure&&(a.get(b.requireFailure)||d(a,{type:b.requireFailure}),e.requireFailure(a.get(b.requireFailure))),b.dropRequireFailure&&a.get(b.dropRequireFailure)&&e.dropRequireFailure(a.get(b.dropRequireFailure)),b.preventGhosts&&c&&i(c)}}function h(a){var d=0;return b.forEach(a.split("|"),function(a){c.hasOwnProperty(a)&&(d|=c[a])}),d}function i(b){function c(a){for(var b=0;b-1)&&g(m,e(n,a),k)}):b.isObject(o)?("hmCustom"===h?i=o.event:(o.type||(o.type=f(i)),o.event&&delete o.event),("hmCustom"===h||i.indexOf(o.type)>-1)&&g(m,e(n,o),k)):"hmCustom"!==h?(o={type:f(i)},"hmDoubletap"===h&&(o.event=i,o.taps=2,m.get("tap")&&(o.recognizeWith="tap")),o.type.indexOf("pan")>-1&&m.get("swipe")&&(o.recognizeWith="swipe"),o.type.indexOf("pinch")>-1&&m.get("rotate")&&(o.recognizeWith="rotate"),g(m,e(n,o),k)):i=null,i&&m.on(i,r)}}}])})}(window,window.angular,window.Hammer); 5 | //# sourceMappingURL=angular.hammer.min.js.map -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/angular.hammer.min.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"angular.hammer.min.js","sources":["angular.hammer.js"],"names":["window","angular","Hammer","addRecognizer","manager","options","type","recognizer","indexOf","Pan","Pinch","Press","Rotate","Swipe","Tap","add","applyManagerOptions","managerOpts","recognizerOpts","preventGhosts","getRecognizerTypeFromeventName","eventName","setupRecognizerWithOptions","element","get","directions","direction","parseDirections","set","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","dirs","forEach","split","hasOwnProperty","preventGhostClick","ev","i","coordinates","length","x","y","Math","abs","clientX","threshold","clientY","stopPropagation","preventDefault","resetCoordinates","popCoordinates","splice","registerCoordinates","touches","changedTouches","touch","push","setTimeout","timeout","addEventListener","require","e","console","log","gestureTypes","module","directive","directiveName","$parse","$window","restrict","link","scope","attrs","bind","handler","hammer","data","fromJson","hmManagerOptions","hmRecognizerOptions","Manager","$on","destroy","handlerName","handlerExpr","event","callHandler","fn","$event","call","phase","$root","$$phase","srcEvent","$apply","isArray","isObject","taps","on"],"mappings":";;;CAKA,SAAWA,EAAQC,EAASC,GAC1B,YAyRA,SAASC,GAAeC,EAASC,GAC/B,IAAKD,IAAYC,IAAYA,EAAQC,KAAQ,MAAO,KAEpD,IAAIC,EAiBJ,OAdEA,GADEF,EAAQC,KAAKE,QAAQ,OAAS,GACnB,GAAIN,GAAOO,IAAIJ,GACnBA,EAAQC,KAAKE,QAAQ,SAAW,GAC5B,GAAIN,GAAOQ,MAAML,GACrBA,EAAQC,KAAKE,QAAQ,SAAW,GAC5B,GAAIN,GAAOS,MAAMN,GACrBA,EAAQC,KAAKE,QAAQ,UAAY,GAC7B,GAAIN,GAAOU,OAAOP,GACtBA,EAAQC,KAAKE,QAAQ,SAAW,GAC5B,GAAIN,GAAOW,MAAMR,GAEjB,GAAIH,GAAOY,IAAIT,GAG9BD,EAAQW,IAAIR,GACLA,EAUT,QAASS,GAAqBC,EAAaC,GAKzC,MAJID,KACFC,EAAeC,cAAgBF,EAAYE,eAGtCD,EAUT,QAASE,GAAgCC,GACvC,MAAIA,GAAUb,QAAQ,OAAS,GACtB,MACEa,EAAUb,QAAQ,SAAW,GAC/B,QACEa,EAAUb,QAAQ,SAAW,GAC/B,QACEa,EAAUb,QAAQ,UAAY,GAChC,SACEa,EAAUb,QAAQ,SAAW,GAC/B,QAEA,MAaX,QAASc,GAA4BlB,EAASC,EAASkB,GACrD,GAAKnB,GAAYC,EAAjB,CAEA,GAAIE,GAAaH,EAAQoB,IAAInB,EAAQC,KAEhCC,KACHA,EAAaJ,EAAcC,EAASC,IAGjCA,EAAQoB,aAETpB,EAAQoB,WADW,QAAjBpB,EAAQC,MAAmC,UAAjBD,EAAQC,KACf,gBACZD,EAAQC,KAAKE,QAAQ,QAAU,GACnB,iBACZH,EAAQC,KAAKE,QAAQ,SAAW,GACpB,kBACZH,EAAQC,KAAKE,QAAQ,MAAQ,GACjB,eACZH,EAAQC,KAAKE,QAAQ,QAAU,GACnB,iBAEA,IAIzBH,EAAQqB,UAAYC,EAAgBtB,EAAQoB,YAC5ClB,EAAWqB,IAAIvB,GAEXA,EAAQwB,gBACLzB,EAAQoB,IAAInB,EAAQwB,gBACvB1B,EAAcC,GAAUE,KAAKD,EAAQwB,gBAGvCtB,EAAWsB,cAAczB,EAAQoB,IAAInB,EAAQwB,iBAG3CxB,EAAQyB,mBAAqB1B,EAAQoB,IAAInB,EAAQyB,oBACnDvB,EAAWuB,kBAAkB1B,EAAQoB,IAAInB,EAAQyB,oBAG/CzB,EAAQ0B,iBACL3B,EAAQoB,IAAInB,EAAQ0B,iBACvB5B,EAAcC,GAAUE,KAAKD,EAAQ0B,iBAGvCxB,EAAWwB,eAAe3B,EAAQoB,IAAInB,EAAQ0B,kBAG5C1B,EAAQ2B,oBAAsB5B,EAAQoB,IAAInB,EAAQ2B,qBACpDzB,EAAWyB,mBAAmB5B,EAAQoB,IAAInB,EAAQ2B,qBAGhD3B,EAAQc,eAAiBI,GAC3BJ,EAAcI,IAWlB,QAASI,GAAiBM,GACxB,GAAIR,GAAa,CAQjB,OANAxB,GAAQiC,QAAQD,EAAKE,MAAM,KAAM,SAAUT,GACrCxB,EAAOkC,eAAeV,KACxBD,GAA0BvB,EAAOwB,MAI9BD,EAcT,QAASN,GAAeI,GAkBtB,QAASc,GAAmBC,GAC1B,IAAK,GAAIC,GAAI,EAAGA,EAAIC,EAAYC,OAAQF,IAAK,CAC3C,GAAIG,GAAIF,EAAYD,GAAG,GACnBI,EAAIH,EAAYD,GAAG,EAGvB,IAAIK,KAAKC,IAAIP,EAAGQ,QAAUJ,GAAKK,GAC3BH,KAAKC,IAAIP,EAAGU,QAAUL,GAAKI,EAAW,CACxCT,EAAGW,kBACHX,EAAGY,gBACH,SAQN,QAASC,KACPX,KAMF,QAASY,KACPZ,EAAYa,OAAO,EAAG,GAOxB,QAASC,GAAqBhB,GAK5B,GAAGA,EAAGiB,QAAQd,OAASH,EAAGkB,eAAef,QAAU,EAAG,CACpD,GAAIgB,GAAQnB,EAAGkB,eAAe,EAC9BhB,GAAYkB,MAAMD,EAAMX,QAASW,EAAMT,UAEvCW,WAAWP,EAAgBQ,IA3D/B,GAAKrC,EAAL,CAEA,GAAIiB,MACAO,EAAY,GACZa,EAAU,IAEV,iBAAkB5D,KACpBuB,EAAQ,GAAGsC,iBAAiB,aAAcV,GAAkB,GAC5D5B,EAAQ,GAAGsC,iBAAiB,WAAYP,GAAqB,GAC7D/B,EAAQ,GAAGsC,iBAAiB,QAASxB,GAAmB,GACxDd,EAAQ,GAAGsC,iBAAiB,UAAWxB,GAAmB,KA7b9D,GAAuB,mBAAZpC,GACT,GAAuB,mBAAZ6D,UAA2BA,QACpC,IACE7D,EAAU6D,QAAQ,WAClB,MAAOC,GACP,MAAOC,SAAQC,IAAI,wEAEhB,CAAA,GAA8B,mBAAnBjE,GAAOC,QAGvB,MAAO+D,SAAQC,IAAI,2EAFnBhE,GAAUD,EAAOC,QAMrB,GAAsB,mBAAXC,GACT,GAAuB,mBAAZ4D,UAA2BA,QACpC,IACE5D,EAAS4D,QAAQ,YACjB,MAAOC,GACP,MAAOC,SAAQC,IAAI,uEAEhB,CAAA,GAA6B,mBAAlBjE,GAAOE,OAGvB,MAAO8D,SAAQC,IAAI,0EAFnB/D,GAASF,EAAOE,OAYpB,GAAIgE,IACF,kBACA,gBACA,wBACA,0BACA,oBACA,wBACA,YACA,sBACA,oBACA,kBACA,wBACA,oBACA,sBACA,gBACA,oBACA,gBACA,oBACA,kBACA,4BACA,0BACA,wBACA,8BACA,gBACA,0BACA,wBACA,sBACA,4BACA,oBACA,sBACA,YACA,wBAYFjE,GAAQkE,OAAO,oBASflE,EAAQiC,QAAQgC,EAAc,SAAU5D,GACtC,GAAI8D,GAAY9D,EAAK6B,MAAM,KACvBkC,EAAgBD,EAAU,GAC1B/C,EAAY+C,EAAU,EAE1BnE,GAAQkE,OAAO,iBACZC,UAAUC,GAAgB,SAAU,UAAW,SAAUC,EAAQC,GAChE,OACEC,SAAa,IACbC,KAAS,SAAUC,EAAOnD,EAASoD,GAKjC,IAAKzE,IAAWqE,EAAQV,iBAStB,MARsB,UAAlBQ,GACF9C,EAAQqD,KAAK,QAASC,QAGF,gBAAlBR,GACF9C,EAAQqD,KAAK,WAAYC,GAM7B,IAAIC,GAASvD,EAAQwD,KAAK,UACtB9D,EAAchB,EAAQ+E,SAASL,EAAMM,kBACrC/D,EAAiBjB,EAAQ+E,SAASL,EAAMO,oBAMvCJ,KACHA,EAAS,GAAI5E,GAAOiF,QAAQ5D,EAAQ,GAAIN,GACxCM,EAAQwD,KAAK,SAAUD,GACvBJ,EAAMU,IAAI,WAAY,WACpBN,EAAOO,YAMX,IAAIC,GAAcX,EAAMN,GACpBkB,EAAcjB,EAAOgB,GACrBT,EAAU,SAAUW,GAsBlB,QAASC,KACP,GAAIC,GAAKH,EAAYb,GAAQiB,OAASH,GAElCE,IACFA,EAAGE,KAAKlB,EAAOc,GAzBnB,GAAIK,GAAQnB,EAAMoB,MAAMC,QACpBxF,EAAauE,EAAOtD,IAAIgE,EAAMlF,KAElCkF,GAAMjE,QAAUA,EAEZhB,IACEA,EAAWF,QAAQ6C,gBACrBsC,EAAMtC,iBAGJ3C,EAAWF,QAAQ4C,iBACrBuC,EAAMQ,SAAS/C,mBAIL,WAAV4C,GAAgC,YAAVA,EACxBJ,IAEAf,EAAMuB,OAAOR,GAcjBxF,GAAQiG,QAAQhF,GAQlBjB,EAAQiC,QAAQhB,EAAgB,SAAUb,GAClB,aAAlBgE,EACFhD,EAAYhB,EAAQmF,OAEfnF,EAAQC,OACXD,EAAQC,KAAOc,EAA+BC,IAG5ChB,EAAQmF,aACHnF,GAAQmF,QAIG,aAAlBnB,GACAhD,EAAUb,QAAQH,EAAQC,MAAQ,KACpCgB,EACEwD,EACA9D,EAAoBC,EAAaZ,GACjCkB,KAGGtB,EAAQkG,SAASjF,IAQJ,aAAlBmD,EACFhD,EAAYH,EAAesE,OAEpBtE,EAAeZ,OAClBY,EAAeZ,KAAOc,EAA+BC,IAGnDH,EAAesE,aACVtE,GAAesE,QAIN,aAAlBnB,GACAhD,EAAUb,QAAQU,EAAeZ,MAAQ,KAC3CgB,EACEwD,EACA9D,EAAoBC,EAAaC,GACjCK,IAEuB,aAAlB8C,GAMTnD,GACEZ,KAAQc,EAA+BC,IAGnB,gBAAlBgD,IACFnD,EAAesE,MAAQnE,EACvBH,EAAekF,KAAO,EAElBtB,EAAOtD,IAAI,SACbN,EAAeW,cAAgB,QAI/BX,EAAeZ,KAAKE,QAAQ,OAAS,IACrCsE,EAAOtD,IAAI,WACbN,EAAeW,cAAgB,SAG7BX,EAAeZ,KAAKE,QAAQ,SAAW,IACvCsE,EAAOtD,IAAI,YACbN,EAAeW,cAAgB,UAGjCP,EACEwD,EACA9D,EAAoBC,EAAaC,GACjCK,IAEFF,EAAY,KAGVA,GACFyD,EAAOuB,GAAGhF,EAAWwD,WA+OhC7E,OAAQA,OAAOC,QAASD,OAAOE"} -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AngularHammer", 3 | "version": "2.1.10", 4 | "authors": [ 5 | "Ryan S Mullins " 6 | ], 7 | "homepage": "https://github.com/RyanMullins/angular-hammer", 8 | "main": "angular.hammer.js", 9 | "license": "MIT", 10 | "keywords": [ 11 | "Angular", 12 | "Hammer", 13 | "touch", 14 | "javascript", 15 | "gesture" 16 | ], 17 | "ignore": [ 18 | "**/.*", 19 | "node_modules", 20 | "bower_components", 21 | "components", 22 | "examples" 23 | ], 24 | "dependencies": { 25 | "angular": ">=1.2.0", 26 | "hammerjs": ">=2.0.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | JSDoc: Index 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |

Index

21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |

29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | 53 | 54 |
55 | 56 |
57 | Documentation generated by JSDoc 3.2.2 on Wed Jan 14 2015 15:21:01 GMT-0500 (EST) 58 |
59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/module-hmTouchEvents.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | JSDoc: Module: hmTouchEvents 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 |

Module: hmTouchEvents

21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 |
29 |

30 | hmTouchEvents 31 |

32 | 33 |
34 | 35 |
36 |
37 | 38 | 39 | 40 | 41 |

Angular.js module for adding Hammer.js event listeners to HTML 42 | elements using attribute directives

43 | 44 | 45 | 46 |
47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
Source:
67 |
70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
78 | 79 | 80 | 81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 | 89 |

Requires

90 | 91 |
    92 |
  • module:angular
  • 93 | 94 |
  • module:hammer
  • 95 |
96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 |
110 | 111 |
112 | 113 | 114 | 115 | 116 |
117 | 118 | 121 | 122 |
123 | 124 |
125 | Documentation generated by JSDoc 3.2.2 on Wed Jan 14 2015 15:21:01 GMT-0500 (EST) 126 |
127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/scripts/linenumber.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var counter = 0; 3 | var numbered; 4 | var source = document.getElementsByClassName('prettyprint source'); 5 | 6 | if (source && source[0]) { 7 | source = source[0].getElementsByTagName('code')[0]; 8 | 9 | numbered = source.innerHTML.split('\n'); 10 | numbered = numbered.map(function(item) { 11 | counter++; 12 | return '' + item; 13 | }); 14 | 15 | source.innerHTML = numbered.join('\n'); 16 | } 17 | })(); 18 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/scripts/prettify/lang-css.js: -------------------------------------------------------------------------------- 1 | PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", 2 | /^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); 3 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/styles/jsdoc-default.css: -------------------------------------------------------------------------------- 1 | html 2 | { 3 | overflow: auto; 4 | background-color: #fff; 5 | } 6 | 7 | body 8 | { 9 | font: 14px "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans serif; 10 | line-height: 130%; 11 | color: #000; 12 | background-color: #fff; 13 | } 14 | 15 | a { 16 | color: #444; 17 | } 18 | 19 | a:visited { 20 | color: #444; 21 | } 22 | 23 | a:active { 24 | color: #444; 25 | } 26 | 27 | header 28 | { 29 | display: block; 30 | padding: 6px 4px; 31 | } 32 | 33 | .class-description { 34 | font-style: italic; 35 | font-family: Palatino, 'Palatino Linotype', serif; 36 | font-size: 130%; 37 | line-height: 140%; 38 | margin-bottom: 1em; 39 | margin-top: 1em; 40 | } 41 | 42 | #main { 43 | float: left; 44 | width: 100%; 45 | } 46 | 47 | section 48 | { 49 | display: block; 50 | 51 | background-color: #fff; 52 | padding: 12px 24px; 53 | border-bottom: 1px solid #ccc; 54 | margin-right: 240px; 55 | } 56 | 57 | .variation { 58 | display: none; 59 | } 60 | 61 | .optional:after { 62 | content: "opt"; 63 | font-size: 60%; 64 | color: #aaa; 65 | font-style: italic; 66 | font-weight: lighter; 67 | } 68 | 69 | nav 70 | { 71 | display: block; 72 | float: left; 73 | margin-left: -230px; 74 | margin-top: 28px; 75 | width: 220px; 76 | border-left: 1px solid #ccc; 77 | padding-left: 9px; 78 | } 79 | 80 | nav ul { 81 | font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; 82 | font-size: 100%; 83 | line-height: 17px; 84 | padding:0; 85 | margin:0; 86 | list-style-type:none; 87 | } 88 | 89 | nav h2 a, nav h2 a:visited { 90 | color: #A35A00; 91 | text-decoration: none; 92 | } 93 | 94 | nav h3 { 95 | margin-top: 12px; 96 | } 97 | 98 | nav li { 99 | margin-top: 6px; 100 | } 101 | 102 | nav a { 103 | color: #5C5954; 104 | } 105 | 106 | nav a:visited { 107 | color: #5C5954; 108 | } 109 | 110 | nav a:active { 111 | color: #5C5954; 112 | } 113 | 114 | footer { 115 | display: block; 116 | padding: 6px; 117 | margin-top: 12px; 118 | font-style: italic; 119 | font-size: 90%; 120 | } 121 | 122 | h1 123 | { 124 | font-size: 200%; 125 | font-weight: bold; 126 | letter-spacing: -0.01em; 127 | margin: 6px 0 9px 0; 128 | } 129 | 130 | h2 131 | { 132 | font-size: 170%; 133 | font-weight: bold; 134 | letter-spacing: -0.01em; 135 | margin: 6px 0 3px 0; 136 | } 137 | 138 | h3 139 | { 140 | font-size: 150%; 141 | font-weight: bold; 142 | letter-spacing: -0.01em; 143 | margin-top: 16px; 144 | margin: 6px 0 3px 0; 145 | } 146 | 147 | h4 148 | { 149 | font-size: 130%; 150 | font-weight: bold; 151 | letter-spacing: -0.01em; 152 | margin-top: 16px; 153 | margin: 18px 0 3px 0; 154 | color: #A35A00; 155 | } 156 | 157 | h5, .container-overview .subsection-title 158 | { 159 | font-size: 120%; 160 | font-weight: bold; 161 | letter-spacing: -0.01em; 162 | margin: 8px 0 3px -16px; 163 | } 164 | 165 | h6 166 | { 167 | font-size: 100%; 168 | letter-spacing: -0.01em; 169 | margin: 6px 0 3px 0; 170 | font-style: italic; 171 | } 172 | 173 | .ancestors { color: #999; } 174 | .ancestors a 175 | { 176 | color: #999 !important; 177 | text-decoration: none; 178 | } 179 | 180 | .important 181 | { 182 | font-weight: bold; 183 | color: #950B02; 184 | } 185 | 186 | .yes-def { 187 | text-indent: -1000px; 188 | } 189 | 190 | .type-signature { 191 | color: #aaa; 192 | } 193 | 194 | .name, .signature { 195 | font-family: Consolas, "Lucida Console", Monaco, monospace; 196 | } 197 | 198 | .details { margin-top: 14px; border-left: 2px solid #DDD; } 199 | .details dt { width:100px; float:left; padding-left: 10px; padding-top: 6px; } 200 | .details dd { margin-left: 50px; } 201 | .details ul { margin: 0; } 202 | .details ul { list-style-type: none; } 203 | .details li { margin-left: 30px; padding-top: 6px; } 204 | .details pre.prettyprint { margin: 0 } 205 | .details .object-value { padding-top: 0; } 206 | 207 | .description { 208 | margin-bottom: 1em; 209 | margin-left: -16px; 210 | margin-top: 1em; 211 | } 212 | 213 | .code-caption 214 | { 215 | font-style: italic; 216 | font-family: Palatino, 'Palatino Linotype', serif; 217 | font-size: 107%; 218 | margin: 0; 219 | } 220 | 221 | .prettyprint 222 | { 223 | border: 1px solid #ddd; 224 | width: 80%; 225 | overflow: auto; 226 | } 227 | 228 | .prettyprint.source { 229 | width: inherit; 230 | } 231 | 232 | .prettyprint code 233 | { 234 | font-family: Consolas, 'Lucida Console', Monaco, monospace; 235 | font-size: 100%; 236 | line-height: 18px; 237 | display: block; 238 | padding: 4px 12px; 239 | margin: 0; 240 | background-color: #fff; 241 | color: #000; 242 | border-left: 3px #ddd solid; 243 | } 244 | 245 | .prettyprint code span.line 246 | { 247 | display: inline-block; 248 | } 249 | 250 | .params, .props 251 | { 252 | border-spacing: 0; 253 | border: 0; 254 | border-collapse: collapse; 255 | } 256 | 257 | .params .name, .props .name, .name code { 258 | color: #A35A00; 259 | font-family: Consolas, 'Lucida Console', Monaco, monospace; 260 | font-size: 100%; 261 | } 262 | 263 | .params td, .params th, .props td, .props th 264 | { 265 | border: 1px solid #ddd; 266 | margin: 0px; 267 | text-align: left; 268 | vertical-align: top; 269 | padding: 4px 6px; 270 | display: table-cell; 271 | } 272 | 273 | .params thead tr, .props thead tr 274 | { 275 | background-color: #ddd; 276 | font-weight: bold; 277 | } 278 | 279 | .params .params thead tr, .props .props thead tr 280 | { 281 | background-color: #fff; 282 | font-weight: bold; 283 | } 284 | 285 | .params th, .props th { border-right: 1px solid #aaa; } 286 | .params thead .last, .props thead .last { border-right: 1px solid #ddd; } 287 | 288 | .disabled { 289 | color: #454545; 290 | } 291 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/styles/prettify-jsdoc.css: -------------------------------------------------------------------------------- 1 | /* JSDoc prettify.js theme */ 2 | 3 | /* plain text */ 4 | .pln { 5 | color: #000000; 6 | font-weight: normal; 7 | font-style: normal; 8 | } 9 | 10 | /* string content */ 11 | .str { 12 | color: #006400; 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | 17 | /* a keyword */ 18 | .kwd { 19 | color: #000000; 20 | font-weight: bold; 21 | font-style: normal; 22 | } 23 | 24 | /* a comment */ 25 | .com { 26 | font-weight: normal; 27 | font-style: italic; 28 | } 29 | 30 | /* a type name */ 31 | .typ { 32 | color: #000000; 33 | font-weight: normal; 34 | font-style: normal; 35 | } 36 | 37 | /* a literal value */ 38 | .lit { 39 | color: #006400; 40 | font-weight: normal; 41 | font-style: normal; 42 | } 43 | 44 | /* punctuation */ 45 | .pun { 46 | color: #000000; 47 | font-weight: bold; 48 | font-style: normal; 49 | } 50 | 51 | /* lisp open bracket */ 52 | .opn { 53 | color: #000000; 54 | font-weight: bold; 55 | font-style: normal; 56 | } 57 | 58 | /* lisp close bracket */ 59 | .clo { 60 | color: #000000; 61 | font-weight: bold; 62 | font-style: normal; 63 | } 64 | 65 | /* a markup tag name */ 66 | .tag { 67 | color: #006400; 68 | font-weight: normal; 69 | font-style: normal; 70 | } 71 | 72 | /* a markup attribute name */ 73 | .atn { 74 | color: #006400; 75 | font-weight: normal; 76 | font-style: normal; 77 | } 78 | 79 | /* a markup attribute value */ 80 | .atv { 81 | color: #006400; 82 | font-weight: normal; 83 | font-style: normal; 84 | } 85 | 86 | /* a declaration */ 87 | .dec { 88 | color: #000000; 89 | font-weight: bold; 90 | font-style: normal; 91 | } 92 | 93 | /* a variable name */ 94 | .var { 95 | color: #000000; 96 | font-weight: normal; 97 | font-style: normal; 98 | } 99 | 100 | /* a function name */ 101 | .fun { 102 | color: #000000; 103 | font-weight: bold; 104 | font-style: normal; 105 | } 106 | 107 | /* Specify class=linenums on a pre to get line numbering */ 108 | ol.linenums { 109 | margin-top: 0; 110 | margin-bottom: 0; 111 | } 112 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/doc/styles/prettify-tomorrow.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* Pretty printing styles. Used with prettify.js. */ 4 | /* SPAN elements with the classes below are added by prettyprint. */ 5 | /* plain text */ 6 | .pln { 7 | color: #4d4d4c; } 8 | 9 | @media screen { 10 | /* string content */ 11 | .str { 12 | color: #718c00; } 13 | 14 | /* a keyword */ 15 | .kwd { 16 | color: #8959a8; } 17 | 18 | /* a comment */ 19 | .com { 20 | color: #8e908c; } 21 | 22 | /* a type name */ 23 | .typ { 24 | color: #4271ae; } 25 | 26 | /* a literal value */ 27 | .lit { 28 | color: #f5871f; } 29 | 30 | /* punctuation */ 31 | .pun { 32 | color: #4d4d4c; } 33 | 34 | /* lisp open bracket */ 35 | .opn { 36 | color: #4d4d4c; } 37 | 38 | /* lisp close bracket */ 39 | .clo { 40 | color: #4d4d4c; } 41 | 42 | /* a markup tag name */ 43 | .tag { 44 | color: #c82829; } 45 | 46 | /* a markup attribute name */ 47 | .atn { 48 | color: #f5871f; } 49 | 50 | /* a markup attribute value */ 51 | .atv { 52 | color: #3e999f; } 53 | 54 | /* a declaration */ 55 | .dec { 56 | color: #f5871f; } 57 | 58 | /* a variable name */ 59 | .var { 60 | color: #c82829; } 61 | 62 | /* a function name */ 63 | .fun { 64 | color: #4271ae; } } 65 | /* Use higher contrast and text-weight for printable form. */ 66 | @media print, projection { 67 | .str { 68 | color: #060; } 69 | 70 | .kwd { 71 | color: #006; 72 | font-weight: bold; } 73 | 74 | .com { 75 | color: #600; 76 | font-style: italic; } 77 | 78 | .typ { 79 | color: #404; 80 | font-weight: bold; } 81 | 82 | .lit { 83 | color: #044; } 84 | 85 | .pun, .opn, .clo { 86 | color: #440; } 87 | 88 | .tag { 89 | color: #006; 90 | font-weight: bold; } 91 | 92 | .atn { 93 | color: #404; } 94 | 95 | .atv { 96 | color: #060; } } 97 | /* Style */ 98 | /* 99 | pre.prettyprint { 100 | background: white; 101 | font-family: Menlo, Monaco, Consolas, monospace; 102 | font-size: 12px; 103 | line-height: 1.5; 104 | border: 1px solid #ccc; 105 | padding: 10px; } 106 | */ 107 | 108 | /* Specify class=linenums on a pre to get line numbering */ 109 | ol.linenums { 110 | margin-top: 0; 111 | margin-bottom: 0; } 112 | 113 | /* IE indents via margin-left */ 114 | li.L0, 115 | li.L1, 116 | li.L2, 117 | li.L3, 118 | li.L4, 119 | li.L5, 120 | li.L6, 121 | li.L7, 122 | li.L8, 123 | li.L9 { 124 | /* */ } 125 | 126 | /* Alternate shading for lines */ 127 | li.L1, 128 | li.L3, 129 | li.L5, 130 | li.L7, 131 | li.L9 { 132 | /* */ } 133 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | grunt.initConfig({ 3 | pkg: grunt.file.readJSON('package.json'), 4 | browserify: { 5 | demo: { 6 | files: { 7 | './examples/browserify/example.js': ['./examples/browserify/index.js'] 8 | }, 9 | options: { 10 | browserifyOptions: { 11 | debug: true 12 | } 13 | } 14 | } 15 | }, 16 | concurrent: { 17 | tasks: ['watch:raw','nodemon'], 18 | options: { 19 | logConcurrentOutput: true 20 | } 21 | }, 22 | copy: { 23 | raw: { 24 | expand: true, 25 | flatten: true, 26 | src: [ 27 | './angular.hammer.js', 28 | './node_modules/hammerjs/hammer.js', 29 | './node_modules/angular/angular.js' 30 | ], 31 | dest: './examples/raw/' 32 | }, 33 | rawmin: { 34 | expand: true, 35 | flatten: true, 36 | src: [ 37 | './angular.hammer.min.js', 38 | './angular.hammer.min.js.map', 39 | './node_modules/angular/angular.min.js', 40 | './node_modules/angular/angular.min.js.map', 41 | './node_modules/hammerjs/hammer.min.js', 42 | './node_modules/hammerjs/hammer.min.js.map' 43 | ], 44 | dest: './examples/raw/' 45 | } 46 | }, 47 | jsdoc : { 48 | dist : { 49 | src: ['./angular.hammer.js'], 50 | dest: './doc', 51 | options: { 52 | configure: 'jsdoc.json' 53 | } 54 | } 55 | }, 56 | nodemon: { 57 | demo: { 58 | script:'server.js', 59 | options: { 60 | watch: ['./examples'] 61 | } 62 | } 63 | }, 64 | requirejs: { 65 | }, 66 | uglify: { 67 | dist: { 68 | options: { 69 | sourceMap: true, 70 | sourceMapName: './angular.hammer.min.js.map', 71 | mangle: true, 72 | preserveComments: require('uglify-save-license') 73 | }, 74 | files: { 75 | './angular.hammer.min.js': './angular.hammer.js' 76 | } 77 | }, 78 | browserify: { 79 | options: { 80 | sourceMap: true, 81 | sourceMapName: './examples/browserify/example.min.js.map', 82 | mangle: true 83 | }, 84 | files: { 85 | './examples/browserify/example.js': ['./examples/browserify/example.js'] 86 | } 87 | } 88 | }, 89 | watch: { 90 | js: { 91 | files: ['./angular.hammer.js'], 92 | tasks: ['copy'] 93 | }, 94 | raw: { 95 | files: [ 96 | './angular.hammer.js', 97 | './angular.hammer.min.js' 98 | ], 99 | tasks: ['copy'] 100 | } 101 | }, 102 | webpack: { 103 | } 104 | }); 105 | 106 | grunt.loadNpmTasks('grunt-browserify'); 107 | grunt.loadNpmTasks('grunt-concurrent'); 108 | grunt.loadNpmTasks('grunt-contrib-copy'); 109 | grunt.loadNpmTasks('grunt-contrib-requirejs'); 110 | grunt.loadNpmTasks('grunt-contrib-uglify'); 111 | grunt.loadNpmTasks('grunt-contrib-watch'); 112 | grunt.loadNpmTasks('grunt-jsdoc'); 113 | grunt.loadNpmTasks('grunt-nodemon'); 114 | grunt.loadNpmTasks('grunt-webpack'); 115 | 116 | grunt.registerTask('build', ['uglify:dist', 'jsdoc:dist']); 117 | grunt.registerTask('default', ['copy', 'concurrent']); 118 | grunt.registerTask('demo-browserify', ['browserify', 'nodemon']); 119 | grunt.registerTask('demo-browserify-min', ['browserify', 'uglify:browserify', 'nodemon']); 120 | grunt.registerTask('demo-raw', ['copy:raw', 'nodemon']); 121 | grunt.registerTask('demo-raw-min', ['copy:rawmin', 'nodemon']); 122 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/jsdoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["plugins/markdown"], 3 | "markdown": { 4 | "parser": "gfm" 5 | } 6 | } -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-hammer", 3 | "version": "2.1.10", 4 | "description": "Hammer.js support for Angular.js applications", 5 | "main": "angular.hammer.js", 6 | "directories": { 7 | "example": "examples" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/RyanMullins/angular-hammer.git" 15 | }, 16 | "keywords": [ 17 | "hammer", 18 | "angular", 19 | "javascript", 20 | "touch", 21 | "gesture" 22 | ], 23 | "author": "Ryan S Mullins", 24 | "license": "MIT", 25 | "bugs": { 26 | "url": "https://github.com/RyanMullins/angular-hammer/issues" 27 | }, 28 | "homepage": "http://ryanmullins.github.io/angular-hammer/", 29 | "devDependencies": { 30 | "angular": ">=1.2.0", 31 | "browserify": "^8.0.3", 32 | "browserify-shim": "^3.8.2", 33 | "finalhandler": "^0.3.2", 34 | "grunt": "^0.4.5", 35 | "grunt-browserify": "^3.2.1", 36 | "grunt-concurrent": "^1.0.0", 37 | "grunt-contrib-copy": "^0.7.0", 38 | "grunt-contrib-requirejs": "^0.4.4", 39 | "grunt-contrib-uglify": "^0.6.0", 40 | "grunt-contrib-watch": "^0.6.1", 41 | "grunt-jsdoc": "^0.5.7", 42 | "grunt-nodemon": "^0.3.0", 43 | "grunt-webpack": "^1.0.8", 44 | "hammerjs": ">=2.0.0", 45 | "serve-static": "^1.7.1", 46 | "uglify-save-license": "^0.4.1", 47 | "webpack": "^1.4.15", 48 | "webpack-dev-server": "^1.7.0" 49 | }, 50 | "browserify": { 51 | "transform": [ 52 | "browserify-shim" 53 | ] 54 | }, 55 | "browser": { 56 | "angular": "./node_modules/angular/angular.js", 57 | "hammerjs": "./node_modules/hammerjs/hammer.js", 58 | "angular-hammer": "./angular.hammer.js" 59 | }, 60 | "browserify-shim": { 61 | "angular": { 62 | "exports": "angular" 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /keensoft-example/www/lib/ryanmullins-angular-hammer/server.js: -------------------------------------------------------------------------------- 1 | // ---- Modules ---- 2 | 3 | var finalhandler = require('finalhandler'), 4 | http = require('http'), 5 | serveStatic = require('serve-static'); 6 | 7 | // ---- Local Variables ---- 8 | 9 | var serve = serveStatic('examples'); 10 | 11 | // ---- HTTP Server ---- 12 | 13 | http.createServer(function (req, res) { 14 | var done = finalhandler(req, res); 15 | serve(req, res, done); 16 | }).listen(3000); -------------------------------------------------------------------------------- /plugin.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | Full Screen Image 7 | 8 | 9 | 10 | 11 | 12 | keensoft (http://keensoft.es/) 13 | Show image in full screen mode with native components. 14 | cordova, image, spanish, fullscreen, photos, keensoft, gallery 15 | 16 | MIT 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/android/FullScreenImage.java: -------------------------------------------------------------------------------- 1 | // 2 | // FullScreenImage.java 3 | // Copyright (c) 2014 keensoft - http://keensoft.es 4 | // 5 | 6 | package es.keensoft.fullscreenimage; 7 | 8 | import java.io.File; 9 | import java.io.FileOutputStream; 10 | import java.io.IOException; 11 | import java.io.InputStream; 12 | import java.io.OutputStream; 13 | import java.io.ByteArrayInputStream; 14 | import java.io.ByteArrayOutputStream; 15 | import java.util.Locale; 16 | 17 | import android.annotation.SuppressLint; 18 | 19 | import org.json.JSONArray; 20 | import org.json.JSONObject; 21 | import org.json.JSONException; 22 | 23 | 24 | import android.content.Intent; 25 | import android.net.Uri; 26 | import android.os.Environment; 27 | import android.util.Log; 28 | import android.util.Base64; 29 | import android.*; 30 | import android.graphics.Bitmap; 31 | import android.graphics.BitmapFactory; 32 | import android.webkit.MimeTypeMap; 33 | 34 | import org.apache.cordova.CallbackContext; 35 | import org.apache.cordova.CordovaPlugin; 36 | 37 | 38 | 39 | @SuppressLint("DefaultLocale") 40 | public class FullScreenImage extends CordovaPlugin { 41 | private CallbackContext command; 42 | private static final String LOG_TAG = "FullScreenImagePlugin"; 43 | 44 | /** 45 | * Executes the request. 46 | * 47 | * This method is called from the WebView thread. 48 | * To do a non-trivial amount of work, use: 49 | * cordova.getThreadPool().execute(runnable); 50 | * 51 | * To run on the UI thread, use: 52 | * cordova.getActivity().runOnUiThread(runnable); 53 | * 54 | * @param action The action to execute. 55 | * @param args The exec() arguments in JSON form. 56 | * @param callback The callback context used when calling 57 | * back into JavaScript. 58 | * @return Whether the action was valid. 59 | */ 60 | @Override 61 | public boolean execute (String action, JSONArray args, 62 | CallbackContext callback) throws JSONException { 63 | 64 | this.command = callback; 65 | 66 | if ("showImageURL".equals(action)) { 67 | showImageURL(args); 68 | 69 | return true; 70 | } 71 | 72 | if ("showImageBase64".equals(action)) { 73 | showImageBase64(args); 74 | 75 | return true; 76 | } 77 | 78 | // Returning false results in a "MethodNotFound" error. 79 | return false; 80 | } 81 | 82 | private String getJSONProperty(JSONObject json, String property) throws JSONException { 83 | if (json.has(property)) { 84 | return json.getString(property); 85 | } 86 | return null; 87 | } 88 | 89 | /** 90 | * Show image in full screen from local resources. 91 | * 92 | * @param url File path in local system 93 | */ 94 | public void showImageURL (JSONArray args) throws JSONException { 95 | JSONObject json = args.getJSONObject(0); 96 | String url = getJSONProperty(json, "url"); 97 | try { 98 | 99 | Uri path = Uri.parse(url); 100 | File source = new File(path.getPath()); 101 | String filenameArray[] = url.split("\\."); 102 | String extension = filenameArray[filenameArray.length-1]; 103 | if (!source.isFile()) { 104 | Log.d(LOG_TAG, "Not a file. Trying www/"); 105 | InputStream inputStream = null; 106 | OutputStream outputStream = null; 107 | 108 | File pPath = getTempDirectoryPath(); 109 | 110 | File f= new File(pPath, "output."+extension); 111 | f.createNewFile(); 112 | inputStream = this.cordova.getActivity().getAssets().open("www/"+url); 113 | outputStream =new FileOutputStream(f); 114 | byte buf[]=new byte[1024]; 115 | int len; 116 | 117 | while((len=inputStream.read(buf))>0) 118 | outputStream.write(buf,0,len); 119 | outputStream.close(); 120 | inputStream.close(); 121 | 122 | path = Uri.fromFile(f); 123 | } 124 | Intent intent = new Intent(Intent.ACTION_VIEW); 125 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 126 | // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185). 127 | intent.setDataAndType(path, MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase(Locale.getDefault()))); 128 | this.cordova.getActivity().startActivity(intent); 129 | 130 | } catch (IOException e) { 131 | Log.d(LOG_TAG, "Could not create file: " + e.toString()); 132 | 133 | } 134 | } 135 | 136 | 137 | /** 138 | * Show image in full screen from base64 String. 139 | * @param base64 Image base64 String 140 | * @param name image Name to show on intent view 141 | */ 142 | public void showImageBase64 (JSONArray args) throws JSONException{ 143 | JSONObject json = args.getJSONObject(0); 144 | 145 | String base64Image = getJSONProperty(json, "base64"); 146 | String name = getJSONProperty(json, "name"); 147 | String extension = getJSONProperty(json, "type"); 148 | File pPath = getTempDirectoryPath(); 149 | 150 | try { 151 | 152 | byte[] imageAsBytes = Base64.decode(base64Image, Base64.DEFAULT); 153 | 154 | File filePath= new File(pPath, "output."+extension); 155 | filePath.createNewFile(); 156 | 157 | FileOutputStream os = new FileOutputStream(filePath, false); 158 | os.write(imageAsBytes); 159 | os.flush(); 160 | os.close(); 161 | 162 | Uri path = Uri.fromFile(filePath); 163 | Intent intent = new Intent(Intent.ACTION_VIEW); 164 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 165 | intent.setDataAndType(path, "image/*"); 166 | this.cordova.getActivity().startActivity(intent); 167 | 168 | } catch (IOException e) { 169 | Log.d(LOG_TAG, "Could not create file: " + e.toString()); 170 | } 171 | 172 | 173 | } 174 | 175 | 176 | /** 177 | * Get temporary directory for copied image 178 | * Refer to cordova-plugin-camera/src/android/CameraLauncher.java 179 | */ 180 | private File getTempDirectoryPath() { 181 | File cache = null; 182 | 183 | // SD Card Mounted 184 | if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 185 | cache = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + 186 | "/Android/data/" + cordova.getActivity().getPackageName() + "/cache/"); 187 | } 188 | // Use internal storage 189 | else { 190 | cache = cordova.getActivity().getCacheDir(); 191 | } 192 | 193 | // Create the cache directory if it doesn't exist 194 | cache.mkdirs(); 195 | return cache; 196 | } 197 | } 198 | -------------------------------------------------------------------------------- /src/ios/FullScreenImage.h: -------------------------------------------------------------------------------- 1 | // 2 | // FullScreenImage.h 3 | // Copyright (c) 2014 keensoft - http://keensoft.es 4 | // 5 | 6 | #import 7 | #import 8 | #import 9 | 10 | @interface FullScreenImage : CDVPlugin 11 | 12 | @property (nonatomic, strong) UIDocumentInteractionController *docInteractionController; 13 | @property (nonatomic, strong) NSMutableArray *documentURLs; 14 | 15 | - (void) showImageURL:(CDVInvokedUrlCommand*)command; 16 | - (void) showImageBase64:(CDVInvokedUrlCommand*)command; 17 | @end 18 | -------------------------------------------------------------------------------- /src/ios/FullScreenImage.m: -------------------------------------------------------------------------------- 1 | // 2 | // FullScreenImage.m 3 | // Copyright (c) 2014 keensoft - http://keensoft.es 4 | // 5 | 6 | #import "FullScreenImage.h" 7 | #import 8 | #import "NSData+Base64.h" 9 | 10 | 11 | @implementation FullScreenImage 12 | 13 | 14 | - (void)setupDocumentControllerWithURL:(NSURL *)url 15 | { 16 | //checks if docInteractionController has been initialized with the URL 17 | if (self.docInteractionController == nil) 18 | { 19 | self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url]; 20 | self.docInteractionController.delegate = self; 21 | } 22 | else 23 | { 24 | self.docInteractionController.URL = url; 25 | } 26 | } 27 | 28 | 29 | - (void) showImageURL:(CDVInvokedUrlCommand*)command{ 30 | // Check command.arguments here. 31 | [self.commandDelegate runInBackground:^{ 32 | self.documentURLs = [NSMutableArray array]; 33 | 34 | NSString *fullPath = [[command.arguments objectAtIndex:0] valueForKey:@"url"]; 35 | NSURL *URL = [NSURL URLWithString:fullPath]; 36 | 37 | BOOL fileExists = URL.isFileURL && [[NSFileManager defaultManager] fileExistsAtPath:URL.path]; 38 | 39 | if (!fileExists) { 40 | NSString *soundFilePath = [NSString stringWithFormat:@"%@/www/%@",[[NSBundle mainBundle] resourcePath],fullPath]; 41 | URL = [NSURL fileURLWithPath:soundFilePath]; 42 | } 43 | 44 | if (URL) { 45 | [self.documentURLs addObject:URL]; 46 | [self setupDocumentControllerWithURL:URL]; 47 | double delayInSeconds = 0.1; 48 | dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 49 | dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 50 | [self.docInteractionController presentPreviewAnimated:YES]; 51 | }); 52 | } 53 | }]; 54 | } 55 | 56 | - (void) showImageBase64:(CDVInvokedUrlCommand*)command{ 57 | 58 | [self.commandDelegate runInBackground:^{ 59 | NSString *fullPath = [[command.arguments objectAtIndex:0] valueForKey:@"base64"]; 60 | 61 | NSString *imageName = [[command.arguments objectAtIndex:0] valueForKey:@"name"]; 62 | 63 | NSString *imageType = [[command.arguments objectAtIndex:0] valueForKey:@"type"]; 64 | 65 | if([imageName isKindOfClass:[NSNull class]] || [imageName isEqualToString:@""]){ 66 | imageName = @"default"; 67 | } 68 | 69 | if([imageType isKindOfClass:[NSNull class]] || [imageType isEqualToString:@""]){ 70 | 71 | NSData *imageDatatest = [NSData dataFromBase64String:fullPath]; 72 | imageType = [self contentTypeForImageData:imageDatatest]; 73 | } 74 | 75 | // Problem with large base64 strings 76 | // https://github.com/keensoft/FullScreenImage-Cordova-Plugin/issues/22 77 | NSData *imageData = [NSData dataFromBase64String:fullPath]; 78 | UIImage *ret = [UIImage imageWithData:imageData]; 79 | 80 | 81 | NSData *imageDataSaved=UIImagePNGRepresentation(ret); 82 | 83 | 84 | NSString *docsDir; 85 | NSArray *dirPaths; 86 | 87 | 88 | dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 89 | docsDir = [dirPaths objectAtIndex:0]; 90 | NSString *completeImageName = [NSString stringWithFormat:@"%@.%@",imageName,imageType]; 91 | NSString *databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:completeImageName]]; 92 | [imageDataSaved writeToFile:databasePath atomically:YES]; 93 | 94 | NSURL *imageURL=[NSURL fileURLWithPath:databasePath]; 95 | 96 | if (imageURL) { 97 | [self.documentURLs addObject:imageURL]; 98 | [self setupDocumentControllerWithURL:imageURL]; 99 | double delayInSeconds = 0.1; 100 | dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 101 | dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 102 | [self.docInteractionController presentPreviewAnimated:YES]; 103 | }); 104 | } 105 | }]; 106 | } 107 | 108 | - (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL 109 | usingDelegate: (id ) interactionDelegate { 110 | 111 | UIDocumentInteractionController *interactionController = 112 | [UIDocumentInteractionController interactionControllerWithURL: fileURL]; 113 | interactionController.delegate = interactionDelegate; 114 | 115 | return interactionController; 116 | } 117 | 118 | - (UIViewController *) documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *) controller { 119 | return self.viewController; 120 | } 121 | 122 | - (NSString *)contentTypeForImageData:(NSData *)data { 123 | uint8_t c; 124 | [data getBytes:&c length:1]; 125 | 126 | switch (c) { 127 | case 0xFF: 128 | return @"jpeg"; 129 | case 0x89: 130 | return @"png"; 131 | case 0x47: 132 | return @"gif"; 133 | case 0x49: 134 | case 0x4D: 135 | return @"tiff"; 136 | } 137 | return nil; 138 | } 139 | 140 | 141 | 142 | @end 143 | 144 | -------------------------------------------------------------------------------- /src/ios/NSData+Base64.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+Base64.h 3 | // base64 4 | // 5 | // Created by Matt Gallagher on 2009/06/03. 6 | // Copyright 2009 Matt Gallagher. All rights reserved. 7 | // 8 | // This software is provided 'as-is', without any express or implied 9 | // warranty. In no event will the authors be held liable for any damages 10 | // arising from the use of this software. Permission is granted to anyone to 11 | // use this software for any purpose, including commercial applications, and to 12 | // alter it and redistribute it freely, subject to the following restrictions: 13 | // 14 | // 1. The origin of this software must not be misrepresented; you must not 15 | // claim that you wrote the original software. If you use this software 16 | // in a product, an acknowledgment in the product documentation would be 17 | // appreciated but is not required. 18 | // 2. Altered source versions must be plainly marked as such, and must not be 19 | // misrepresented as being the original software. 20 | // 3. This notice may not be removed or altered from any source 21 | // distribution. 22 | // 23 | 24 | #import 25 | 26 | void *NewBase64Decode( 27 | const char *inputBuffer, 28 | size_t length, 29 | size_t *outputLength); 30 | 31 | char *NewBase64Encode( 32 | const void *inputBuffer, 33 | size_t length, 34 | bool separateLines, 35 | size_t *outputLength); 36 | 37 | @interface NSData (Base64) 38 | 39 | + (NSData *)dataFromBase64String:(NSString *)aString; 40 | - (NSString *)base64EncodedString; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /www/bower_components/platform/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "platform.js", 3 | "version": "1.3.0", 4 | "main": "platform.js", 5 | "ignore": [ 6 | ".*", 7 | "*.log", 8 | "*.md", 9 | "component.json", 10 | "package.json", 11 | "doc", 12 | "test", 13 | "vendor" 14 | ], 15 | "homepage": "https://github.com/bestiejs/platform.js", 16 | "_release": "1.3.0", 17 | "_resolution": { 18 | "type": "version", 19 | "tag": "1.3.0", 20 | "commit": "d7c905ed9ce308c5bd54584a4a5dccd20c4bbd30" 21 | }, 22 | "_source": "git://github.com/bestiejs/platform.js.git", 23 | "_target": "~1.3.0", 24 | "_originalSource": "platform", 25 | "_direct": true 26 | } -------------------------------------------------------------------------------- /www/bower_components/platform/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 Benjamin Tan 2 | Copyright 2011-2014 John-David Dalton 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /www/bower_components/platform/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "platform.js", 3 | "version": "1.3.0", 4 | "main": "platform.js", 5 | "ignore": [ 6 | ".*", 7 | "*.log", 8 | "*.md", 9 | "component.json", 10 | "package.json", 11 | "doc", 12 | "test", 13 | "vendor" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /www/fullscreenimage.js: -------------------------------------------------------------------------------- 1 | 2 | // 3 | // fullscreenimage.js 4 | // 5 | // Copyright (c) 2014 keensoft - http://keensoft.es 6 | // 7 | 8 | var exec = require("cordova/exec"); 9 | 10 | var FullScreenImage = function () { 11 | this.name = "FullScreenImage"; 12 | }; 13 | 14 | /* 15 | * Show image from url 16 | * 17 | * Parameters: 18 | * url: url to show 19 | * 20 | */ 21 | 22 | FullScreenImage.prototype.showImageURL = function (url) { 23 | 24 | exec(null, null, "FullScreenImage", "showImageURL", [{"url":url}]); 25 | 26 | 27 | }; 28 | 29 | /* 30 | * Show image from base64 31 | * 32 | * Parameters: 33 | * base64String: base64String 34 | * name: filename to show 35 | * type: image type 36 | * 37 | */ 38 | 39 | FullScreenImage.prototype.showImageBase64 = function (base64String, name, type) { 40 | 41 | exec(null, null, "FullScreenImage", "showImageBase64", [{"base64":base64String, "name":name, "type":type}]); 42 | 43 | 44 | }; 45 | 46 | module.exports = new FullScreenImage(); 47 | --------------------------------------------------------------------------------