0.1.13alfa-develop_perview
This commit is contained in:
commit
3bcf4e41a6
89 changed files with 125042 additions and 0 deletions
3
.bowerrc
Normal file
3
.bowerrc
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"directory": "www/lib"
|
||||
}
|
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Specifies intentionally untracked files to ignore when using Git
|
||||
# http://git-scm.com/docs/gitignore
|
||||
|
||||
node_modules/
|
||||
platforms/
|
||||
plugins/
|
7
bower.json
Normal file
7
bower.json
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"name": "jceMobile",
|
||||
"private": "true",
|
||||
"devDependencies": {
|
||||
"ionic": "driftyco/ionic-bower#1.0.0-beta.14"
|
||||
}
|
||||
}
|
19
config.xml
Normal file
19
config.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<widget id="com.students.jce.mobile.app" version="0.1.13" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||
<name>jceMobile</name>
|
||||
<description>
|
||||
Free Your Academic Data
|
||||
</description>
|
||||
<author email="sagidayan@gmail.com" href="mailto:sagidayan@gmail.com">
|
||||
Sagi Dayan
|
||||
</author>
|
||||
<content src="index.html"/>
|
||||
<access origin="*"/>
|
||||
<preference name="webviewbounce" value="false"/>
|
||||
<preference name="UIWebViewBounce" value="false"/>
|
||||
<preference name="DisallowOverscroll" value="true"/>
|
||||
<preference name="BackupWebStorage" value="none"/>
|
||||
<feature name="StatusBar">
|
||||
<param name="ios-package" value="CDVStatusBar" onload="true"/>
|
||||
</feature>
|
||||
</widget>
|
50
gulpfile.js
Normal file
50
gulpfile.js
Normal file
|
@ -0,0 +1,50 @@
|
|||
var gulp = require('gulp');
|
||||
var gutil = require('gulp-util');
|
||||
var bower = require('bower');
|
||||
var concat = require('gulp-concat');
|
||||
var sass = require('gulp-sass');
|
||||
var minifyCss = require('gulp-minify-css');
|
||||
var rename = require('gulp-rename');
|
||||
var sh = require('shelljs');
|
||||
|
||||
var paths = {
|
||||
sass: ['./scss/**/*.scss']
|
||||
};
|
||||
|
||||
gulp.task('default', ['sass']);
|
||||
|
||||
gulp.task('sass', function(done) {
|
||||
gulp.src('./scss/ionic.app.scss')
|
||||
.pipe(sass())
|
||||
.pipe(gulp.dest('./www/css/'))
|
||||
.pipe(minifyCss({
|
||||
keepSpecialComments: 0
|
||||
}))
|
||||
.pipe(rename({ extname: '.min.css' }))
|
||||
.pipe(gulp.dest('./www/css/'))
|
||||
.on('end', done);
|
||||
});
|
||||
|
||||
gulp.task('watch', function() {
|
||||
gulp.watch(paths.sass, ['sass']);
|
||||
});
|
||||
|
||||
gulp.task('install', ['git-check'], function() {
|
||||
return bower.commands.install()
|
||||
.on('log', function(data) {
|
||||
gutil.log('bower', gutil.colors.cyan(data.id), data.message);
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('git-check', function(done) {
|
||||
if (!sh.which('git')) {
|
||||
console.log(
|
||||
' ' + gutil.colors.red('Git is not installed.'),
|
||||
'\n Git, the version control system, is required to download Ionic.',
|
||||
'\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.',
|
||||
'\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.'
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
done();
|
||||
});
|
83
hooks/README.md
Normal file
83
hooks/README.md
Normal file
|
@ -0,0 +1,83 @@
|
|||
<!--
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
-->
|
||||
# Cordova Hooks
|
||||
|
||||
This directory may contain scripts used to customize cordova commands. This
|
||||
directory used to exist at `.cordova/hooks`, but has now been moved to the
|
||||
project root. Any scripts you add to these directories will be executed before
|
||||
and after the commands corresponding to the directory name. Useful for
|
||||
integrating your own build systems or integrating with version control systems.
|
||||
|
||||
__Remember__: Make your scripts executable.
|
||||
|
||||
## Hook Directories
|
||||
The following subdirectories will be used for hooks:
|
||||
|
||||
after_build/
|
||||
after_compile/
|
||||
after_docs/
|
||||
after_emulate/
|
||||
after_platform_add/
|
||||
after_platform_rm/
|
||||
after_platform_ls/
|
||||
after_plugin_add/
|
||||
after_plugin_ls/
|
||||
after_plugin_rm/
|
||||
after_plugin_search/
|
||||
after_prepare/
|
||||
after_run/
|
||||
after_serve/
|
||||
before_build/
|
||||
before_compile/
|
||||
before_docs/
|
||||
before_emulate/
|
||||
before_platform_add/
|
||||
before_platform_rm/
|
||||
before_platform_ls/
|
||||
before_plugin_add/
|
||||
before_plugin_ls/
|
||||
before_plugin_rm/
|
||||
before_plugin_search/
|
||||
before_prepare/
|
||||
before_run/
|
||||
before_serve/
|
||||
pre_package/ <-- Windows 8 and Windows Phone only.
|
||||
|
||||
## Script Interface
|
||||
|
||||
All scripts are run from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables:
|
||||
|
||||
* CORDOVA_VERSION - The version of the Cordova-CLI.
|
||||
* CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios).
|
||||
* CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer)
|
||||
* CORDOVA_HOOK - Path to the hook that is being executed.
|
||||
* CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate)
|
||||
|
||||
If a script returns a non-zero exit code, then the parent cordova command will be aborted.
|
||||
|
||||
|
||||
## Writing hooks
|
||||
|
||||
We highly recommend writting your hooks using Node.js so that they are
|
||||
cross-platform. Some good examples are shown here:
|
||||
|
||||
[http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/)
|
||||
|
94
hooks/after_prepare/010_add_platform_class.js
Executable file
94
hooks/after_prepare/010_add_platform_class.js
Executable file
|
@ -0,0 +1,94 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
// Add Platform Class
|
||||
// v1.0
|
||||
// Automatically adds the platform class to the body tag
|
||||
// after the `prepare` command. By placing the platform CSS classes
|
||||
// directly in the HTML built for the platform, it speeds up
|
||||
// rendering the correct layout/style for the specific platform
|
||||
// instead of waiting for the JS to figure out the correct classes.
|
||||
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var rootdir = process.argv[2];
|
||||
|
||||
function addPlatformBodyTag(indexPath, platform) {
|
||||
// add the platform class to the body tag
|
||||
try {
|
||||
var platformClass = 'platform-' + platform;
|
||||
var cordovaClass = 'platform-cordova platform-webview';
|
||||
|
||||
var html = fs.readFileSync(indexPath, 'utf8');
|
||||
|
||||
var bodyTag = findBodyTag(html);
|
||||
if(!bodyTag) return; // no opening body tag, something's wrong
|
||||
|
||||
if(bodyTag.indexOf(platformClass) > -1) return; // already added
|
||||
|
||||
var newBodyTag = bodyTag;
|
||||
|
||||
var classAttr = findClassAttr(bodyTag);
|
||||
if(classAttr) {
|
||||
// body tag has existing class attribute, add the classname
|
||||
var endingQuote = classAttr.substring(classAttr.length-1);
|
||||
var newClassAttr = classAttr.substring(0, classAttr.length-1);
|
||||
newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote;
|
||||
newBodyTag = bodyTag.replace(classAttr, newClassAttr);
|
||||
|
||||
} else {
|
||||
// add class attribute to the body tag
|
||||
newBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">');
|
||||
}
|
||||
|
||||
html = html.replace(bodyTag, newBodyTag);
|
||||
|
||||
fs.writeFileSync(indexPath, html, 'utf8');
|
||||
|
||||
process.stdout.write('add to body class: ' + platformClass + '\n');
|
||||
} catch(e) {
|
||||
process.stdout.write(e);
|
||||
}
|
||||
}
|
||||
|
||||
function findBodyTag(html) {
|
||||
// get the body tag
|
||||
try{
|
||||
return html.match(/<body(?=[\s>])(.*?)>/gi)[0];
|
||||
}catch(e){}
|
||||
}
|
||||
|
||||
function findClassAttr(bodyTag) {
|
||||
// get the body tag's class attribute
|
||||
try{
|
||||
return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0];
|
||||
}catch(e){}
|
||||
}
|
||||
|
||||
if (rootdir) {
|
||||
|
||||
// go through each of the platform directories that have been prepared
|
||||
var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []);
|
||||
|
||||
for(var x=0; x<platforms.length; x++) {
|
||||
// open up the index.html file at the www root
|
||||
try {
|
||||
var platform = platforms[x].trim().toLowerCase();
|
||||
var indexPath;
|
||||
|
||||
if(platform == 'android') {
|
||||
indexPath = path.join('platforms', platform, 'assets', 'www', 'index.html');
|
||||
} else {
|
||||
indexPath = path.join('platforms', platform, 'www', 'index.html');
|
||||
}
|
||||
|
||||
if(fs.existsSync(indexPath)) {
|
||||
addPlatformBodyTag(indexPath, platform);
|
||||
}
|
||||
|
||||
} catch(e) {
|
||||
process.stdout.write(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
4
ionic.project
Normal file
4
ionic.project
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"name": "jceMM",
|
||||
"app_id": ""
|
||||
}
|
17
package.json
Normal file
17
package.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"name": "jceMobile",
|
||||
"version": "1.0.0",
|
||||
"description": "jceMobile - Free Your Academic Data",
|
||||
"dependencies": {
|
||||
"gulp": "^3.5.6",
|
||||
"gulp-sass": "^0.7.1",
|
||||
"gulp-concat": "^2.2.0",
|
||||
"gulp-minify-css": "^0.3.0",
|
||||
"gulp-rename": "^1.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bower": "^1.3.3",
|
||||
"gulp-util": "^2.2.14",
|
||||
"shelljs": "^0.3.0"
|
||||
}
|
||||
}
|
23
scss/ionic.app.scss
Normal file
23
scss/ionic.app.scss
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
To customize the look and feel of Ionic, you can override the variables
|
||||
in ionic's _variables.scss file.
|
||||
|
||||
For example, you might change some of the default colors:
|
||||
|
||||
$light: #fff !default;
|
||||
$stable: #f8f8f8 !default;
|
||||
$positive: #387ef5 !default;
|
||||
$calm: #11c1f3 !default;
|
||||
$balanced: #33cd5f !default;
|
||||
$energized: #ffc900 !default;
|
||||
$assertive: #ef473a !default;
|
||||
$royal: #886aea !default;
|
||||
$dark: #444 !default;
|
||||
*/
|
||||
|
||||
// The path for our ionicons font files, relative to the built CSS in www/css
|
||||
$ionicons-font-path: "../lib/ionic/fonts" !default;
|
||||
|
||||
// Include all of Ionic
|
||||
@import "www/lib/ionic/scss/ionic";
|
||||
|
43
www/css/style.css
Normal file
43
www/css/style.css
Normal file
|
@ -0,0 +1,43 @@
|
|||
/* Empty. Add your own CSS if you like */
|
||||
|
||||
@import url(http://fonts.googleapis.com/earlyaccess/alefhebrew.css);
|
||||
|
||||
body{
|
||||
font-family: "Alef Hebrew",
|
||||
“Helvetica Neue”,
|
||||
Helvetica,
|
||||
Arial,
|
||||
sans-serif;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.bar.bar-stable .title{
|
||||
font-family: "Alef Hebrew",
|
||||
“Helvetica Neue”,
|
||||
Helvetica,
|
||||
Arial,
|
||||
sans-serif;
|
||||
}
|
||||
|
||||
.view-container{
|
||||
font-family: "Alef Hebrew",
|
||||
“Helvetica Neue”,
|
||||
Helvetica,
|
||||
Arial,
|
||||
sans-serif;
|
||||
|
||||
}
|
||||
|
||||
h1{
|
||||
font-family: "Alef Hebrew",
|
||||
“Helvetica Neue”,
|
||||
Helvetica,
|
||||
Arial,
|
||||
sans-serif;
|
||||
}
|
||||
|
||||
.page-content{
|
||||
direction: rtl;
|
||||
padding: 15px;
|
||||
}
|
18
www/data/news.json
Normal file
18
www/data/news.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
[
|
||||
{
|
||||
"author" : "JCE Manager Team",
|
||||
"date": "05 Oct 2014",
|
||||
"avatar": "http://liranbg.github.io/JceManager/assets/images/author.jpg",
|
||||
"img": "http://liranbg.github.io/JceManager/assets/article_images/first-release/desktop.JPG",
|
||||
"content": "After a hard working development, we are finaly happy with the result as the project is now avalible.
|
||||
You can read more about JCE Manager and our team at About Page.
|
||||
Version 1.0 Release notes:
|
||||
Login into the student's portal JCE Student web site
|
||||
Extract your GPA into table
|
||||
Edit your grades to see how it affects your GPA
|
||||
Save your username and password for easy access (Password is encrypted)
|
||||
Extract your semester's schedule and export it into a .CSV file (and import to GoogleCalendar/iCal/Outlook)
|
||||
Translation in Hebrew and English
|
||||
JCE Manager is avalible for Windows. (We are working on OS X and Linux)"
|
||||
}
|
||||
]
|
BIN
www/img/ionic.png
Normal file
BIN
www/img/ionic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
BIN
www/img/jceLogo.png
Normal file
BIN
www/img/jceLogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.7 KiB |
BIN
www/img/logo.png
Normal file
BIN
www/img/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
34
www/index.html
Normal file
34
www/index.html
Normal file
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
||||
<title></title>
|
||||
|
||||
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
|
||||
<link href="css/style.css" rel="stylesheet">
|
||||
|
||||
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
|
||||
<link href="css/ionic.app.css" rel="stylesheet">
|
||||
-->
|
||||
|
||||
<!-- ionic/angularjs js -->
|
||||
<script src="lib/ionic/js/ionic.bundle.js"></script>
|
||||
|
||||
<!-- cordova script (this will be a 404 during development) -->
|
||||
<script src="cordova.js"></script>
|
||||
|
||||
<!-- your app's js -->
|
||||
<script src="js/app.js"></script>
|
||||
<script src="js/ApiService.js"></script>
|
||||
<script src="js/controllers.js"></script>
|
||||
</head>
|
||||
|
||||
<body ng-app="starter">
|
||||
<ion-nav-view></ion-nav-view>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
106
www/js/ApiService.js
Normal file
106
www/js/ApiService.js
Normal file
|
@ -0,0 +1,106 @@
|
|||
var starter = angular.module('starter.services', []);
|
||||
|
||||
starter.factory('ApiService', ['$http', '$ionicPopup', '$ionicModal', function ($http, $ionicPopup, $ionicModal) {
|
||||
return {
|
||||
//login
|
||||
login: function(username, password){
|
||||
console.log('[JCE] [INFO]: atempting to login.');
|
||||
//JCE Login shit:
|
||||
var request = "https://mipo.jce.ac.il/index.php/site/login?_dc=1419773997764&formValues=%7B%22form_fields%22%3A%7B%22name%22%3A%22"+username+"%22%2C%22pwd%22%3A%22"+password+"%22%7D%7D&callback=JSON_CALLBACK";
|
||||
|
||||
return $http.get(request).then(function(resp) {
|
||||
|
||||
if(resp.data.guest == false){
|
||||
window.localStorage['loggedIn'] = true;
|
||||
window.localStorage['fullName'] = resp.data.user_fullName;
|
||||
window.localStorage['email'] = resp.data.user_email;
|
||||
window.localStorage['phone'] = resp.data.user_phone;
|
||||
window.localStorage['username'] = username;
|
||||
window.localStorage['password'] = password;
|
||||
|
||||
console.log("[JCE] [INFO]: Success.");
|
||||
return true;
|
||||
}else{
|
||||
var alertPopup = $ionicPopup.alert({
|
||||
title: 'שם משתמש או סיסמא שגויים',
|
||||
template: 'וודא שוב כי שם המשתמש והסיסמא הינם נכונים.'
|
||||
});
|
||||
console.log("[JCE] [INFO]: Wrong crads.");
|
||||
return false;
|
||||
}
|
||||
|
||||
}, function(err) {
|
||||
var alertPopup = $ionicPopup.alert({
|
||||
title: 'שגיאת רשת',
|
||||
template: 'בדוק את החיבור לנתונים'
|
||||
});
|
||||
console.error('[JCE] [FATAL]: Network Error!', err);
|
||||
return false;
|
||||
})
|
||||
return false;
|
||||
},
|
||||
update: function(){
|
||||
var username = window.localStorage['username'];
|
||||
var password = window.localStorage['password'];
|
||||
var notes = window.localStorage['notes'] || null;
|
||||
var grades = window.localStorage['grades'] || null;
|
||||
var request = "https://mipo.jce.ac.il/index.php/site/login?_dc=1419773997764&formValues=%7B%22form_fields%22%3A%7B%22name%22%3A%22"+username+"%22%2C%22pwd%22%3A%22"+password+"%22%7D%7D";
|
||||
|
||||
return $http.get(request).then(function(resp) {
|
||||
|
||||
if(resp.data.guest == false){
|
||||
//Logged in
|
||||
//
|
||||
//Get Notes:
|
||||
$http.get("https://mipo.jce.ac.il/index.php/site/studentMessages").then(function(resp) {
|
||||
console.log('Success', resp);
|
||||
console.log("[JCE] [INFO] : in update - Got JCE News!");
|
||||
if(notes === null){
|
||||
window.localStorage['newNotes'] = "true";
|
||||
window.localStorage['notes'] = JSON.stringify(resp.data);
|
||||
}else if(notes === JSON.stringify(resp.data)){
|
||||
console.log("[JCE] [INFO] : in update - no new Notes");
|
||||
}else{
|
||||
window.localStorage['newNotes'] = "true";
|
||||
window.localStorage['notes'] = JSON.stringify(resp.data);
|
||||
}
|
||||
|
||||
}, function(err) {
|
||||
console.error('[JCE] [INFO] : in update - can\'t get Notes', err);
|
||||
});
|
||||
|
||||
//Get Grades
|
||||
$http.get("https://mipo.jce.ac.il/index.php/site/studentGrades").then(function(resp) {
|
||||
console.log('Success', resp);
|
||||
console.log("[JCE] [INFO] : in update - Got Grades!");
|
||||
if(grades === null){
|
||||
window.localStorage['newGrades'] = "true";
|
||||
window.localStorage['grades'] = JSON.stringify(resp.data);
|
||||
}else if(grades === JSON.stringify(resp.data)){
|
||||
console.log("[JCE] [INFO] : in update - no new Grades");
|
||||
}else{
|
||||
window.localStorage['newGrades'] = "true";
|
||||
window.localStorage['grades'] = JSON.stringify(resp.data);
|
||||
}
|
||||
|
||||
}, function(err) {
|
||||
console.error('[JCE] [INFO] : in update - can\'t get Notes', err);
|
||||
});
|
||||
|
||||
|
||||
}else{
|
||||
window.localStorage['loggedIn'] = false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}, function(err) {
|
||||
window.localStorage['loggedIn'] = false;
|
||||
return false;
|
||||
})
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
}]);
|
97
www/js/app.js
Normal file
97
www/js/app.js
Normal file
|
@ -0,0 +1,97 @@
|
|||
// Ionic Starter App
|
||||
|
||||
// angular.module is a global place for creating, registering and retrieving Angular modules
|
||||
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
|
||||
// the 2nd parameter is an array of 'requires'
|
||||
// 'starter.controllers' is found in controllers.js
|
||||
var app = angular.module('starter', ['ionic', 'starter.controllers', 'starter.services']);
|
||||
|
||||
app.run(function($ionicPlatform) {
|
||||
$ionicPlatform.ready(function() {
|
||||
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
|
||||
// for form inputs)
|
||||
if (window.cordova && window.cordova.plugins.Keyboard) {
|
||||
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
|
||||
}
|
||||
if (window.StatusBar) {
|
||||
// org.apache.cordova.statusbar required
|
||||
StatusBar.styleDefault();
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
.config(function($stateProvider, $urlRouterProvider) {
|
||||
$stateProvider
|
||||
|
||||
.state('app', {
|
||||
url: "/app",
|
||||
abstract: true,
|
||||
templateUrl: "templates/menu.html",
|
||||
controller: 'AppCtrl'
|
||||
})
|
||||
|
||||
.state('app.jcenews', {
|
||||
url: "/jcenews",
|
||||
views: {
|
||||
'menuContent': {
|
||||
templateUrl: "templates/jceNews.html",
|
||||
controller: 'JCENewsCtrl'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
.state('app.playlists', {
|
||||
url: "/playlists",
|
||||
views: {
|
||||
'menuContent': {
|
||||
templateUrl: "templates/playlists.html",
|
||||
controller: 'PlaylistsCtrl'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
.state('app.home', {
|
||||
url: "/home",
|
||||
views: {
|
||||
'menuContent': {
|
||||
templateUrl: "templates/home.html",
|
||||
controller: 'homeCtrl'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
.state('app.login', {
|
||||
url: "/login",
|
||||
views: {
|
||||
'menuContent': {
|
||||
templateUrl: "templates/loginPage.html",
|
||||
controller: 'LoginCtrl'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
.state('app.grades', {
|
||||
url: "/grades",
|
||||
views: {
|
||||
'menuContent': {
|
||||
templateUrl: "templates/grades.html",
|
||||
controller: 'GradesCtrl'
|
||||
}
|
||||
}
|
||||
});
|
||||
// if none of the above states are matched, use this as the fallback
|
||||
$urlRouterProvider.otherwise('/app/login');
|
||||
});
|
||||
|
||||
app.config(function($provide) {
|
||||
$provide.decorator('$state', function($delegate, $stateParams) {
|
||||
$delegate.forceReload = function() {
|
||||
return $delegate.go($delegate.current, $stateParams, {
|
||||
reload: true,
|
||||
inherit: false,
|
||||
notify: true
|
||||
});
|
||||
};
|
||||
return $delegate;
|
||||
});
|
||||
});
|
411
www/js/controllers.js
Normal file
411
www/js/controllers.js
Normal file
File diff suppressed because one or more lines are too long
7016
www/lib/ionic/css/ionic.css
Normal file
7016
www/lib/ionic/css/ionic.css
Normal file
File diff suppressed because one or more lines are too long
18
www/lib/ionic/css/ionic.min.css
vendored
Normal file
18
www/lib/ionic/css/ionic.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
www/lib/ionic/fonts/ionicons.eot
Normal file
BIN
www/lib/ionic/fonts/ionicons.eot
Normal file
Binary file not shown.
1899
www/lib/ionic/fonts/ionicons.svg
Normal file
1899
www/lib/ionic/fonts/ionicons.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 280 KiB |
BIN
www/lib/ionic/fonts/ionicons.ttf
Normal file
BIN
www/lib/ionic/fonts/ionicons.ttf
Normal file
Binary file not shown.
BIN
www/lib/ionic/fonts/ionicons.woff
Normal file
BIN
www/lib/ionic/fonts/ionicons.woff
Normal file
Binary file not shown.
4232
www/lib/ionic/js/angular-ui/angular-ui-router.js
vendored
Normal file
4232
www/lib/ionic/js/angular-ui/angular-ui-router.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
7
www/lib/ionic/js/angular-ui/angular-ui-router.min.js
vendored
Normal file
7
www/lib/ionic/js/angular-ui/angular-ui-router.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2137
www/lib/ionic/js/angular/angular-animate.js
vendored
Normal file
2137
www/lib/ionic/js/angular/angular-animate.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
33
www/lib/ionic/js/angular/angular-animate.min.js
vendored
Normal file
33
www/lib/ionic/js/angular/angular-animate.min.js
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
AngularJS v1.3.6
|
||||
(c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(N,f,W){'use strict';f.module("ngAnimate",["ng"]).directive("ngAnimateChildren",function(){return function(X,C,g){g=g.ngAnimateChildren;f.isString(g)&&0===g.length?C.data("$$ngAnimateChildren",!0):X.$watch(g,function(f){C.data("$$ngAnimateChildren",!!f)})}}).factory("$$animateReflow",["$$rAF","$document",function(f,C){return function(g){return f(function(){g()})}}]).config(["$provide","$animateProvider",function(X,C){function g(f){for(var n=0;n<f.length;n++){var g=f[n];if(1==g.nodeType)return g}}
|
||||
function ba(f,n){return g(f)==g(n)}var t=f.noop,n=f.forEach,da=C.$$selectors,aa=f.isArray,ea=f.isString,ga=f.isObject,r={running:!0},u;X.decorator("$animate",["$delegate","$$q","$injector","$sniffer","$rootElement","$$asyncCallback","$rootScope","$document","$templateRequest","$$jqLite",function(O,N,M,Y,y,H,P,W,Z,Q){function R(a,c){var b=a.data("$$ngAnimateState")||{};c&&(b.running=!0,b.structural=!0,a.data("$$ngAnimateState",b));return b.disabled||b.running&&b.structural}function D(a){var c,b=N.defer();
|
||||
b.promise.$$cancelFn=function(){c&&c()};P.$$postDigest(function(){c=a(function(){b.resolve()})});return b.promise}function I(a){if(ga(a))return a.tempClasses&&ea(a.tempClasses)&&(a.tempClasses=a.tempClasses.split(/\s+/)),a}function S(a,c,b){b=b||{};var d={};n(b,function(e,a){n(a.split(" "),function(a){d[a]=e})});var h=Object.create(null);n((a.attr("class")||"").split(/\s+/),function(e){h[e]=!0});var f=[],l=[];n(c&&c.classes||[],function(e,a){var b=h[a],c=d[a]||{};!1===e?(b||"addClass"==c.event)&&
|
||||
l.push(a):!0===e&&(b&&"removeClass"!=c.event||f.push(a))});return 0<f.length+l.length&&[f.join(" "),l.join(" ")]}function T(a){if(a){var c=[],b={};a=a.substr(1).split(".");(Y.transitions||Y.animations)&&c.push(M.get(da[""]));for(var d=0;d<a.length;d++){var f=a[d],k=da[f];k&&!b[f]&&(c.push(M.get(k)),b[f]=!0)}return c}}function U(a,c,b,d){function h(e,a){var b=e[a],c=e["before"+a.charAt(0).toUpperCase()+a.substr(1)];if(b||c)return"leave"==a&&(c=b,b=null),u.push({event:a,fn:b}),J.push({event:a,fn:c}),
|
||||
!0}function k(c,l,w){var E=[];n(c,function(a){a.fn&&E.push(a)});var m=0;n(E,function(c,f){var p=function(){a:{if(l){(l[f]||t)();if(++m<E.length)break a;l=null}w()}};switch(c.event){case "setClass":l.push(c.fn(a,e,A,p,d));break;case "animate":l.push(c.fn(a,b,d.from,d.to,p));break;case "addClass":l.push(c.fn(a,e||b,p,d));break;case "removeClass":l.push(c.fn(a,A||b,p,d));break;default:l.push(c.fn(a,p,d))}});l&&0===l.length&&w()}var l=a[0];if(l){d&&(d.to=d.to||{},d.from=d.from||{});var e,A;aa(b)&&(e=
|
||||
b[0],A=b[1],e?A?b=e+" "+A:(b=e,c="addClass"):(b=A,c="removeClass"));var w="setClass"==c,E=w||"addClass"==c||"removeClass"==c||"animate"==c,p=a.attr("class")+" "+b;if(x(p)){var ca=t,m=[],J=[],g=t,s=[],u=[],p=(" "+p).replace(/\s+/g,".");n(T(p),function(a){!h(a,c)&&w&&(h(a,"addClass"),h(a,"removeClass"))});return{node:l,event:c,className:b,isClassBased:E,isSetClassOperation:w,applyStyles:function(){d&&a.css(f.extend(d.from||{},d.to||{}))},before:function(a){ca=a;k(J,m,function(){ca=t;a()})},after:function(a){g=
|
||||
a;k(u,s,function(){g=t;a()})},cancel:function(){m&&(n(m,function(a){(a||t)(!0)}),ca(!0));s&&(n(s,function(a){(a||t)(!0)}),g(!0))}}}}}function G(a,c,b,d,h,k,l,e){function A(e){var l="$animate:"+e;J&&J[l]&&0<J[l].length&&H(function(){b.triggerHandler(l,{event:a,className:c})})}function w(){A("before")}function E(){A("after")}function p(){p.hasBeenRun||(p.hasBeenRun=!0,k())}function g(){if(!g.hasBeenRun){m&&m.applyStyles();g.hasBeenRun=!0;l&&l.tempClasses&&n(l.tempClasses,function(a){u.removeClass(b,
|
||||
a)});var w=b.data("$$ngAnimateState");w&&(m&&m.isClassBased?B(b,c):(H(function(){var e=b.data("$$ngAnimateState")||{};fa==e.index&&B(b,c,a)}),b.data("$$ngAnimateState",w)));A("close");e()}}var m=U(b,a,c,l);if(!m)return p(),w(),E(),g(),t;a=m.event;c=m.className;var J=f.element._data(m.node),J=J&&J.events;d||(d=h?h.parent():b.parent());if(z(b,d))return p(),w(),E(),g(),t;d=b.data("$$ngAnimateState")||{};var L=d.active||{},s=d.totalActive||0,q=d.last;h=!1;if(0<s){s=[];if(m.isClassBased)"setClass"==q.event?
|
||||
(s.push(q),B(b,c)):L[c]&&(v=L[c],v.event==a?h=!0:(s.push(v),B(b,c)));else if("leave"==a&&L["ng-leave"])h=!0;else{for(var v in L)s.push(L[v]);d={};B(b,!0)}0<s.length&&n(s,function(a){a.cancel()})}!m.isClassBased||m.isSetClassOperation||"animate"==a||h||(h="addClass"==a==b.hasClass(c));if(h)return p(),w(),E(),A("close"),e(),t;L=d.active||{};s=d.totalActive||0;if("leave"==a)b.one("$destroy",function(a){a=f.element(this);var e=a.data("$$ngAnimateState");e&&(e=e.active["ng-leave"])&&(e.cancel(),B(a,"ng-leave"))});
|
||||
u.addClass(b,"ng-animate");l&&l.tempClasses&&n(l.tempClasses,function(a){u.addClass(b,a)});var fa=K++;s++;L[c]=m;b.data("$$ngAnimateState",{last:m,active:L,index:fa,totalActive:s});w();m.before(function(e){var l=b.data("$$ngAnimateState");e=e||!l||!l.active[c]||m.isClassBased&&l.active[c].event!=a;p();!0===e?g():(E(),m.after(g))});return m.cancel}function q(a){if(a=g(a))a=f.isFunction(a.getElementsByClassName)?a.getElementsByClassName("ng-animate"):a.querySelectorAll(".ng-animate"),n(a,function(a){a=
|
||||
f.element(a);(a=a.data("$$ngAnimateState"))&&a.active&&n(a.active,function(a){a.cancel()})})}function B(a,c){if(ba(a,y))r.disabled||(r.running=!1,r.structural=!1);else if(c){var b=a.data("$$ngAnimateState")||{},d=!0===c;!d&&b.active&&b.active[c]&&(b.totalActive--,delete b.active[c]);if(d||!b.totalActive)u.removeClass(a,"ng-animate"),a.removeData("$$ngAnimateState")}}function z(a,c){if(r.disabled)return!0;if(ba(a,y))return r.running;var b,d,g;do{if(0===c.length)break;var k=ba(c,y),l=k?r:c.data("$$ngAnimateState")||
|
||||
{};if(l.disabled)return!0;k&&(g=!0);!1!==b&&(k=c.data("$$ngAnimateChildren"),f.isDefined(k)&&(b=k));d=d||l.running||l.last&&!l.last.isClassBased}while(c=c.parent());return!g||!b&&d}u=Q;y.data("$$ngAnimateState",r);var $=P.$watch(function(){return Z.totalPendingRequests},function(a,c){0===a&&($(),P.$$postDigest(function(){P.$$postDigest(function(){r.running=!1})}))}),K=0,V=C.classNameFilter(),x=V?function(a){return V.test(a)}:function(){return!0};return{animate:function(a,c,b,d,h){d=d||"ng-inline-animate";
|
||||
h=I(h)||{};h.from=b?c:null;h.to=b?b:c;return D(function(b){return G("animate",d,f.element(g(a)),null,null,t,h,b)})},enter:function(a,c,b,d){d=I(d);a=f.element(a);c=c&&f.element(c);b=b&&f.element(b);R(a,!0);O.enter(a,c,b);return D(function(h){return G("enter","ng-enter",f.element(g(a)),c,b,t,d,h)})},leave:function(a,c){c=I(c);a=f.element(a);q(a);R(a,!0);return D(function(b){return G("leave","ng-leave",f.element(g(a)),null,null,function(){O.leave(a)},c,b)})},move:function(a,c,b,d){d=I(d);a=f.element(a);
|
||||
c=c&&f.element(c);b=b&&f.element(b);q(a);R(a,!0);O.move(a,c,b);return D(function(h){return G("move","ng-move",f.element(g(a)),c,b,t,d,h)})},addClass:function(a,c,b){return this.setClass(a,c,[],b)},removeClass:function(a,c,b){return this.setClass(a,[],c,b)},setClass:function(a,c,b,d){d=I(d);a=f.element(a);a=f.element(g(a));if(R(a))return O.$$setClassImmediately(a,c,b,d);var h,k=a.data("$$animateClasses"),l=!!k;k||(k={classes:{}});h=k.classes;c=aa(c)?c:c.split(" ");n(c,function(a){a&&a.length&&(h[a]=
|
||||
!0)});b=aa(b)?b:b.split(" ");n(b,function(a){a&&a.length&&(h[a]=!1)});if(l)return d&&k.options&&(k.options=f.extend(k.options||{},d)),k.promise;a.data("$$animateClasses",k={classes:h,options:d});return k.promise=D(function(e){var l=a.parent(),b=g(a),c=b.parentNode;if(!c||c.$$NG_REMOVED||b.$$NG_REMOVED)e();else{b=a.data("$$animateClasses");a.removeData("$$animateClasses");var c=a.data("$$ngAnimateState")||{},d=S(a,b,c.active);return d?G("setClass",d,a,l,null,function(){d[0]&&O.$$addClassImmediately(a,
|
||||
d[0]);d[1]&&O.$$removeClassImmediately(a,d[1])},b.options,e):e()}})},cancel:function(a){a.$$cancelFn()},enabled:function(a,c){switch(arguments.length){case 2:if(a)B(c);else{var b=c.data("$$ngAnimateState")||{};b.disabled=!0;c.data("$$ngAnimateState",b)}break;case 1:r.disabled=!a;break;default:a=!r.disabled}return!!a}}}]);C.register("",["$window","$sniffer","$timeout","$$animateReflow",function(r,C,M,Y){function y(){b||(b=Y(function(){c=[];b=null;x={}}))}function H(a,e){b&&b();c.push(e);b=Y(function(){n(c,
|
||||
function(a){a()});c=[];b=null;x={}})}function P(a,e){var b=g(a);a=f.element(b);k.push(a);b=Date.now()+e;b<=h||(M.cancel(d),h=b,d=M(function(){X(k);k=[]},e,!1))}function X(a){n(a,function(a){(a=a.data("$$ngAnimateCSS3Data"))&&n(a.closeAnimationFns,function(a){a()})})}function Z(a,e){var b=e?x[e]:null;if(!b){var c=0,d=0,f=0,g=0;n(a,function(a){if(1==a.nodeType){a=r.getComputedStyle(a)||{};c=Math.max(Q(a[z+"Duration"]),c);d=Math.max(Q(a[z+"Delay"]),d);g=Math.max(Q(a[K+"Delay"]),g);var e=Q(a[K+"Duration"]);
|
||||
0<e&&(e*=parseInt(a[K+"IterationCount"],10)||1);f=Math.max(e,f)}});b={total:0,transitionDelay:d,transitionDuration:c,animationDelay:g,animationDuration:f};e&&(x[e]=b)}return b}function Q(a){var e=0;a=ea(a)?a.split(/\s*,\s*/):[];n(a,function(a){e=Math.max(parseFloat(a)||0,e)});return e}function R(b,e,c,d){b=0<=["ng-enter","ng-leave","ng-move"].indexOf(c);var f,p=e.parent(),h=p.data("$$ngAnimateKey");h||(p.data("$$ngAnimateKey",++a),h=a);f=h+"-"+g(e).getAttribute("class");var p=f+" "+c,h=x[p]?++x[p].total:
|
||||
0,m={};if(0<h){var n=c+"-stagger",m=f+" "+n;(f=!x[m])&&u.addClass(e,n);m=Z(e,m);f&&u.removeClass(e,n)}u.addClass(e,c);var n=e.data("$$ngAnimateCSS3Data")||{},k=Z(e,p);f=k.transitionDuration;k=k.animationDuration;if(b&&0===f&&0===k)return u.removeClass(e,c),!1;c=d||b&&0<f;b=0<k&&0<m.animationDelay&&0===m.animationDuration;e.data("$$ngAnimateCSS3Data",{stagger:m,cacheKey:p,running:n.running||0,itemIndex:h,blockTransition:c,closeAnimationFns:n.closeAnimationFns||[]});p=g(e);c&&(I(p,!0),d&&e.css(d));
|
||||
b&&(p.style[K+"PlayState"]="paused");return!0}function D(a,e,b,c,d){function f(){e.off(D,h);u.removeClass(e,k);u.removeClass(e,t);z&&M.cancel(z);G(e,b);var a=g(e),c;for(c in s)a.style.removeProperty(s[c])}function h(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-H,0)>=C&&b>=x&&c()}var m=g(e);a=e.data("$$ngAnimateCSS3Data");if(-1!=m.getAttribute("class").indexOf(b)&&a){var k="",t="";n(b.split(" "),function(a,
|
||||
b){var e=(0<b?" ":"")+a;k+=e+"-active";t+=e+"-pending"});var s=[],q=a.itemIndex,v=a.stagger,r=0;if(0<q){r=0;0<v.transitionDelay&&0===v.transitionDuration&&(r=v.transitionDelay*q);var y=0;0<v.animationDelay&&0===v.animationDuration&&(y=v.animationDelay*q,s.push(B+"animation-play-state"));r=Math.round(100*Math.max(r,y))/100}r||(u.addClass(e,k),a.blockTransition&&I(m,!1));var F=Z(e,a.cacheKey+" "+k),x=Math.max(F.transitionDuration,F.animationDuration);if(0===x)u.removeClass(e,k),G(e,b),c();else{!r&&
|
||||
d&&(F.transitionDuration||(e.css("transition",F.animationDuration+"s linear all"),s.push("transition")),e.css(d));var q=Math.max(F.transitionDelay,F.animationDelay),C=1E3*q;0<s.length&&(v=m.getAttribute("style")||"",";"!==v.charAt(v.length-1)&&(v+=";"),m.setAttribute("style",v+" "));var H=Date.now(),D=V+" "+$,q=1E3*(r+1.5*(q+x)),z;0<r&&(u.addClass(e,t),z=M(function(){z=null;0<F.transitionDuration&&I(m,!1);0<F.animationDuration&&(m.style[K+"PlayState"]="");u.addClass(e,k);u.removeClass(e,t);d&&(0===
|
||||
F.transitionDuration&&e.css("transition",F.animationDuration+"s linear all"),e.css(d),s.push("transition"))},1E3*r,!1));e.on(D,h);a.closeAnimationFns.push(function(){f();c()});a.running++;P(e,q);return f}}else c()}function I(a,b){a.style[z+"Property"]=b?"none":""}function S(a,b,c,d){if(R(a,b,c,d))return function(a){a&&G(b,c)}}function T(a,b,c,d,f){if(b.data("$$ngAnimateCSS3Data"))return D(a,b,c,d,f);G(b,c);d()}function U(a,b,c,d,f){var g=S(a,b,c,f.from);if(g){var h=g;H(b,function(){h=T(a,b,c,d,f.to)});
|
||||
return function(a){(h||t)(a)}}y();d()}function G(a,b){u.removeClass(a,b);var c=a.data("$$ngAnimateCSS3Data");c&&(c.running&&c.running--,c.running&&0!==c.running||a.removeData("$$ngAnimateCSS3Data"))}function q(a,b){var c="";a=aa(a)?a:a.split(/\s+/);n(a,function(a,d){a&&0<a.length&&(c+=(0<d?" ":"")+a+b)});return c}var B="",z,$,K,V;N.ontransitionend===W&&N.onwebkittransitionend!==W?(B="-webkit-",z="WebkitTransition",$="webkitTransitionEnd transitionend"):(z="transition",$="transitionend");N.onanimationend===
|
||||
W&&N.onwebkitanimationend!==W?(B="-webkit-",K="WebkitAnimation",V="webkitAnimationEnd animationend"):(K="animation",V="animationend");var x={},a=0,c=[],b,d=null,h=0,k=[];return{animate:function(a,b,c,d,f,g){g=g||{};g.from=c;g.to=d;return U("animate",a,b,f,g)},enter:function(a,b,c){c=c||{};return U("enter",a,"ng-enter",b,c)},leave:function(a,b,c){c=c||{};return U("leave",a,"ng-leave",b,c)},move:function(a,b,c){c=c||{};return U("move",a,"ng-move",b,c)},beforeSetClass:function(a,b,c,d,f){f=f||{};b=q(c,
|
||||
"-remove")+" "+q(b,"-add");if(f=S("setClass",a,b,f.from))return H(a,d),f;y();d()},beforeAddClass:function(a,b,c,d){d=d||{};if(b=S("addClass",a,q(b,"-add"),d.from))return H(a,c),b;y();c()},beforeRemoveClass:function(a,b,c,d){d=d||{};if(b=S("removeClass",a,q(b,"-remove"),d.from))return H(a,c),b;y();c()},setClass:function(a,b,c,d,f){f=f||{};c=q(c,"-remove");b=q(b,"-add");return T("setClass",a,c+" "+b,d,f.to)},addClass:function(a,b,c,d){d=d||{};return T("addClass",a,q(b,"-add"),c,d.to)},removeClass:function(a,
|
||||
b,c,d){d=d||{};return T("removeClass",a,q(b,"-remove"),c,d.to)}}}])}])})(window,window.angular);
|
||||
//# sourceMappingURL=angular-animate.min.js.map
|
667
www/lib/ionic/js/angular/angular-resource.js
vendored
Normal file
667
www/lib/ionic/js/angular/angular-resource.js
vendored
Normal file
|
@ -0,0 +1,667 @@
|
|||
/**
|
||||
* @license AngularJS v1.3.6
|
||||
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
* License: MIT
|
||||
*/
|
||||
(function(window, angular, undefined) {'use strict';
|
||||
|
||||
var $resourceMinErr = angular.$$minErr('$resource');
|
||||
|
||||
// Helper functions and regex to lookup a dotted path on an object
|
||||
// stopping at undefined/null. The path must be composed of ASCII
|
||||
// identifiers (just like $parse)
|
||||
var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;
|
||||
|
||||
function isValidDottedPath(path) {
|
||||
return (path != null && path !== '' && path !== 'hasOwnProperty' &&
|
||||
MEMBER_NAME_REGEX.test('.' + path));
|
||||
}
|
||||
|
||||
function lookupDottedPath(obj, path) {
|
||||
if (!isValidDottedPath(path)) {
|
||||
throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
|
||||
}
|
||||
var keys = path.split('.');
|
||||
for (var i = 0, ii = keys.length; i < ii && obj !== undefined; i++) {
|
||||
var key = keys[i];
|
||||
obj = (obj !== null) ? obj[key] : undefined;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a shallow copy of an object and clear other fields from the destination
|
||||
*/
|
||||
function shallowClearAndCopy(src, dst) {
|
||||
dst = dst || {};
|
||||
|
||||
angular.forEach(dst, function(value, key) {
|
||||
delete dst[key];
|
||||
});
|
||||
|
||||
for (var key in src) {
|
||||
if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
|
||||
dst[key] = src[key];
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name ngResource
|
||||
* @description
|
||||
*
|
||||
* # ngResource
|
||||
*
|
||||
* The `ngResource` module provides interaction support with RESTful services
|
||||
* via the $resource service.
|
||||
*
|
||||
*
|
||||
* <div doc-module-components="ngResource"></div>
|
||||
*
|
||||
* See {@link ngResource.$resource `$resource`} for usage.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $resource
|
||||
* @requires $http
|
||||
*
|
||||
* @description
|
||||
* A factory which creates a resource object that lets you interact with
|
||||
* [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
|
||||
*
|
||||
* The returned resource object has action methods which provide high-level behaviors without
|
||||
* the need to interact with the low level {@link ng.$http $http} service.
|
||||
*
|
||||
* Requires the {@link ngResource `ngResource`} module to be installed.
|
||||
*
|
||||
* By default, trailing slashes will be stripped from the calculated URLs,
|
||||
* which can pose problems with server backends that do not expect that
|
||||
* behavior. This can be disabled by configuring the `$resourceProvider` like
|
||||
* this:
|
||||
*
|
||||
* ```js
|
||||
app.config(['$resourceProvider', function($resourceProvider) {
|
||||
// Don't strip trailing slashes from calculated URLs
|
||||
$resourceProvider.defaults.stripTrailingSlashes = false;
|
||||
}]);
|
||||
* ```
|
||||
*
|
||||
* @param {string} url A parametrized URL template with parameters prefixed by `:` as in
|
||||
* `/user/:username`. If you are using a URL with a port number (e.g.
|
||||
* `http://example.com:8080/api`), it will be respected.
|
||||
*
|
||||
* If you are using a url with a suffix, just add the suffix, like this:
|
||||
* `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
|
||||
* or even `$resource('http://example.com/resource/:resource_id.:format')`
|
||||
* If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
|
||||
* collapsed down to a single `.`. If you need this sequence to appear and not collapse then you
|
||||
* can escape it with `/\.`.
|
||||
*
|
||||
* @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
|
||||
* `actions` methods. If any of the parameter value is a function, it will be executed every time
|
||||
* when a param value needs to be obtained for a request (unless the param was overridden).
|
||||
*
|
||||
* Each key value in the parameter object is first bound to url template if present and then any
|
||||
* excess keys are appended to the url search query after the `?`.
|
||||
*
|
||||
* Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
|
||||
* URL `/path/greet?salutation=Hello`.
|
||||
*
|
||||
* If the parameter value is prefixed with `@` then the value for that parameter will be extracted
|
||||
* from the corresponding property on the `data` object (provided when calling an action method). For
|
||||
* example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam`
|
||||
* will be `data.someProp`.
|
||||
*
|
||||
* @param {Object.<Object>=} actions Hash with declaration of custom action that should extend
|
||||
* the default set of resource actions. The declaration should be created in the format of {@link
|
||||
* ng.$http#usage $http.config}:
|
||||
*
|
||||
* {action1: {method:?, params:?, isArray:?, headers:?, ...},
|
||||
* action2: {method:?, params:?, isArray:?, headers:?, ...},
|
||||
* ...}
|
||||
*
|
||||
* Where:
|
||||
*
|
||||
* - **`action`** – {string} – The name of action. This name becomes the name of the method on
|
||||
* your resource object.
|
||||
* - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
|
||||
* `DELETE`, `JSONP`, etc).
|
||||
* - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of
|
||||
* the parameter value is a function, it will be executed every time when a param value needs to
|
||||
* be obtained for a request (unless the param was overridden).
|
||||
* - **`url`** – {string} – action specific `url` override. The url templating is supported just
|
||||
* like for the resource-level urls.
|
||||
* - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,
|
||||
* see `returns` section.
|
||||
* - **`transformRequest`** –
|
||||
* `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
|
||||
* transform function or an array of such functions. The transform function takes the http
|
||||
* request body and headers and returns its transformed (typically serialized) version.
|
||||
* By default, transformRequest will contain one function that checks if the request data is
|
||||
* an object and serializes to using `angular.toJson`. To prevent this behavior, set
|
||||
* `transformRequest` to an empty array: `transformRequest: []`
|
||||
* - **`transformResponse`** –
|
||||
* `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
|
||||
* transform function or an array of such functions. The transform function takes the http
|
||||
* response body and headers and returns its transformed (typically deserialized) version.
|
||||
* By default, transformResponse will contain one function that checks if the response looks like
|
||||
* a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set
|
||||
* `transformResponse` to an empty array: `transformResponse: []`
|
||||
* - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
|
||||
* GET request, otherwise if a cache instance built with
|
||||
* {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
|
||||
* caching.
|
||||
* - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that
|
||||
* should abort the request when resolved.
|
||||
* - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
|
||||
* XHR object. See
|
||||
* [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
|
||||
* for more information.
|
||||
* - **`responseType`** - `{string}` - see
|
||||
* [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
|
||||
* - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -
|
||||
* `response` and `responseError`. Both `response` and `responseError` interceptors get called
|
||||
* with `http response` object. See {@link ng.$http $http interceptors}.
|
||||
*
|
||||
* @param {Object} options Hash with custom settings that should extend the
|
||||
* default `$resourceProvider` behavior. The only supported option is
|
||||
*
|
||||
* Where:
|
||||
*
|
||||
* - **`stripTrailingSlashes`** – {boolean} – If true then the trailing
|
||||
* slashes from any calculated URL will be stripped. (Defaults to true.)
|
||||
*
|
||||
* @returns {Object} A resource "class" object with methods for the default set of resource actions
|
||||
* optionally extended with custom `actions`. The default set contains these actions:
|
||||
* ```js
|
||||
* { 'get': {method:'GET'},
|
||||
* 'save': {method:'POST'},
|
||||
* 'query': {method:'GET', isArray:true},
|
||||
* 'remove': {method:'DELETE'},
|
||||
* 'delete': {method:'DELETE'} };
|
||||
* ```
|
||||
*
|
||||
* Calling these methods invoke an {@link ng.$http} with the specified http method,
|
||||
* destination and parameters. When the data is returned from the server then the object is an
|
||||
* instance of the resource class. The actions `save`, `remove` and `delete` are available on it
|
||||
* as methods with the `$` prefix. This allows you to easily perform CRUD operations (create,
|
||||
* read, update, delete) on server-side data like this:
|
||||
* ```js
|
||||
* var User = $resource('/user/:userId', {userId:'@id'});
|
||||
* var user = User.get({userId:123}, function() {
|
||||
* user.abc = true;
|
||||
* user.$save();
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* It is important to realize that invoking a $resource object method immediately returns an
|
||||
* empty reference (object or array depending on `isArray`). Once the data is returned from the
|
||||
* server the existing reference is populated with the actual data. This is a useful trick since
|
||||
* usually the resource is assigned to a model which is then rendered by the view. Having an empty
|
||||
* object results in no rendering, once the data arrives from the server then the object is
|
||||
* populated with the data and the view automatically re-renders itself showing the new data. This
|
||||
* means that in most cases one never has to write a callback function for the action methods.
|
||||
*
|
||||
* The action methods on the class object or instance object can be invoked with the following
|
||||
* parameters:
|
||||
*
|
||||
* - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])`
|
||||
* - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
|
||||
* - non-GET instance actions: `instance.$action([parameters], [success], [error])`
|
||||
*
|
||||
* Success callback is called with (value, responseHeaders) arguments. Error callback is called
|
||||
* with (httpResponse) argument.
|
||||
*
|
||||
* Class actions return empty instance (with additional properties below).
|
||||
* Instance actions return promise of the action.
|
||||
*
|
||||
* The Resource instances and collection have these additional properties:
|
||||
*
|
||||
* - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
|
||||
* instance or collection.
|
||||
*
|
||||
* On success, the promise is resolved with the same resource instance or collection object,
|
||||
* updated with data from server. This makes it easy to use in
|
||||
* {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
|
||||
* rendering until the resource(s) are loaded.
|
||||
*
|
||||
* On failure, the promise is resolved with the {@link ng.$http http response} object, without
|
||||
* the `resource` property.
|
||||
*
|
||||
* If an interceptor object was provided, the promise will instead be resolved with the value
|
||||
* returned by the interceptor.
|
||||
*
|
||||
* - `$resolved`: `true` after first server interaction is completed (either with success or
|
||||
* rejection), `false` before that. Knowing if the Resource has been resolved is useful in
|
||||
* data-binding.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* # Credit card resource
|
||||
*
|
||||
* ```js
|
||||
// Define CreditCard class
|
||||
var CreditCard = $resource('/user/:userId/card/:cardId',
|
||||
{userId:123, cardId:'@id'}, {
|
||||
charge: {method:'POST', params:{charge:true}}
|
||||
});
|
||||
|
||||
// We can retrieve a collection from the server
|
||||
var cards = CreditCard.query(function() {
|
||||
// GET: /user/123/card
|
||||
// server returns: [ {id:456, number:'1234', name:'Smith'} ];
|
||||
|
||||
var card = cards[0];
|
||||
// each item is an instance of CreditCard
|
||||
expect(card instanceof CreditCard).toEqual(true);
|
||||
card.name = "J. Smith";
|
||||
// non GET methods are mapped onto the instances
|
||||
card.$save();
|
||||
// POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
|
||||
// server returns: {id:456, number:'1234', name: 'J. Smith'};
|
||||
|
||||
// our custom method is mapped as well.
|
||||
card.$charge({amount:9.99});
|
||||
// POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
|
||||
});
|
||||
|
||||
// we can create an instance as well
|
||||
var newCard = new CreditCard({number:'0123'});
|
||||
newCard.name = "Mike Smith";
|
||||
newCard.$save();
|
||||
// POST: /user/123/card {number:'0123', name:'Mike Smith'}
|
||||
// server returns: {id:789, number:'0123', name: 'Mike Smith'};
|
||||
expect(newCard.id).toEqual(789);
|
||||
* ```
|
||||
*
|
||||
* The object returned from this function execution is a resource "class" which has "static" method
|
||||
* for each action in the definition.
|
||||
*
|
||||
* Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
|
||||
* `headers`.
|
||||
* When the data is returned from the server then the object is an instance of the resource type and
|
||||
* all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
|
||||
* operations (create, read, update, delete) on server-side data.
|
||||
|
||||
```js
|
||||
var User = $resource('/user/:userId', {userId:'@id'});
|
||||
User.get({userId:123}, function(user) {
|
||||
user.abc = true;
|
||||
user.$save();
|
||||
});
|
||||
```
|
||||
*
|
||||
* It's worth noting that the success callback for `get`, `query` and other methods gets passed
|
||||
* in the response that came from the server as well as $http header getter function, so one
|
||||
* could rewrite the above example and get access to http headers as:
|
||||
*
|
||||
```js
|
||||
var User = $resource('/user/:userId', {userId:'@id'});
|
||||
User.get({userId:123}, function(u, getResponseHeaders){
|
||||
u.abc = true;
|
||||
u.$save(function(u, putResponseHeaders) {
|
||||
//u => saved user object
|
||||
//putResponseHeaders => $http header getter
|
||||
});
|
||||
});
|
||||
```
|
||||
*
|
||||
* You can also access the raw `$http` promise via the `$promise` property on the object returned
|
||||
*
|
||||
```
|
||||
var User = $resource('/user/:userId', {userId:'@id'});
|
||||
User.get({userId:123})
|
||||
.$promise.then(function(user) {
|
||||
$scope.user = user;
|
||||
});
|
||||
```
|
||||
|
||||
* # Creating a custom 'PUT' request
|
||||
* In this example we create a custom method on our resource to make a PUT request
|
||||
* ```js
|
||||
* var app = angular.module('app', ['ngResource', 'ngRoute']);
|
||||
*
|
||||
* // Some APIs expect a PUT request in the format URL/object/ID
|
||||
* // Here we are creating an 'update' method
|
||||
* app.factory('Notes', ['$resource', function($resource) {
|
||||
* return $resource('/notes/:id', null,
|
||||
* {
|
||||
* 'update': { method:'PUT' }
|
||||
* });
|
||||
* }]);
|
||||
*
|
||||
* // In our controller we get the ID from the URL using ngRoute and $routeParams
|
||||
* // We pass in $routeParams and our Notes factory along with $scope
|
||||
* app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',
|
||||
function($scope, $routeParams, Notes) {
|
||||
* // First get a note object from the factory
|
||||
* var note = Notes.get({ id:$routeParams.id });
|
||||
* $id = note.id;
|
||||
*
|
||||
* // Now call update passing in the ID first then the object you are updating
|
||||
* Notes.update({ id:$id }, note);
|
||||
*
|
||||
* // This will PUT /notes/ID with the note object in the request payload
|
||||
* }]);
|
||||
* ```
|
||||
*/
|
||||
angular.module('ngResource', ['ng']).
|
||||
provider('$resource', function() {
|
||||
var provider = this;
|
||||
|
||||
this.defaults = {
|
||||
// Strip slashes by default
|
||||
stripTrailingSlashes: true,
|
||||
|
||||
// Default actions configuration
|
||||
actions: {
|
||||
'get': {method: 'GET'},
|
||||
'save': {method: 'POST'},
|
||||
'query': {method: 'GET', isArray: true},
|
||||
'remove': {method: 'DELETE'},
|
||||
'delete': {method: 'DELETE'}
|
||||
}
|
||||
};
|
||||
|
||||
this.$get = ['$http', '$q', function($http, $q) {
|
||||
|
||||
var noop = angular.noop,
|
||||
forEach = angular.forEach,
|
||||
extend = angular.extend,
|
||||
copy = angular.copy,
|
||||
isFunction = angular.isFunction;
|
||||
|
||||
/**
|
||||
* We need our custom method because encodeURIComponent is too aggressive and doesn't follow
|
||||
* http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
|
||||
* (pchar) allowed in path segments:
|
||||
* segment = *pchar
|
||||
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
* pct-encoded = "%" HEXDIG HEXDIG
|
||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
* / "*" / "+" / "," / ";" / "="
|
||||
*/
|
||||
function encodeUriSegment(val) {
|
||||
return encodeUriQuery(val, true).
|
||||
replace(/%26/gi, '&').
|
||||
replace(/%3D/gi, '=').
|
||||
replace(/%2B/gi, '+');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method is intended for encoding *key* or *value* parts of query component. We need a
|
||||
* custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
|
||||
* have to be encoded per http://tools.ietf.org/html/rfc3986:
|
||||
* query = *( pchar / "/" / "?" )
|
||||
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
* pct-encoded = "%" HEXDIG HEXDIG
|
||||
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
* / "*" / "+" / "," / ";" / "="
|
||||
*/
|
||||
function encodeUriQuery(val, pctEncodeSpaces) {
|
||||
return encodeURIComponent(val).
|
||||
replace(/%40/gi, '@').
|
||||
replace(/%3A/gi, ':').
|
||||
replace(/%24/g, '$').
|
||||
replace(/%2C/gi, ',').
|
||||
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
|
||||
}
|
||||
|
||||
function Route(template, defaults) {
|
||||
this.template = template;
|
||||
this.defaults = extend({}, provider.defaults, defaults);
|
||||
this.urlParams = {};
|
||||
}
|
||||
|
||||
Route.prototype = {
|
||||
setUrlParams: function(config, params, actionUrl) {
|
||||
var self = this,
|
||||
url = actionUrl || self.template,
|
||||
val,
|
||||
encodedVal;
|
||||
|
||||
var urlParams = self.urlParams = {};
|
||||
forEach(url.split(/\W/), function(param) {
|
||||
if (param === 'hasOwnProperty') {
|
||||
throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name.");
|
||||
}
|
||||
if (!(new RegExp("^\\d+$").test(param)) && param &&
|
||||
(new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
|
||||
urlParams[param] = true;
|
||||
}
|
||||
});
|
||||
url = url.replace(/\\:/g, ':');
|
||||
|
||||
params = params || {};
|
||||
forEach(self.urlParams, function(_, urlParam) {
|
||||
val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
|
||||
if (angular.isDefined(val) && val !== null) {
|
||||
encodedVal = encodeUriSegment(val);
|
||||
url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) {
|
||||
return encodedVal + p1;
|
||||
});
|
||||
} else {
|
||||
url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
|
||||
leadingSlashes, tail) {
|
||||
if (tail.charAt(0) == '/') {
|
||||
return tail;
|
||||
} else {
|
||||
return leadingSlashes + tail;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// strip trailing slashes and set the url (unless this behavior is specifically disabled)
|
||||
if (self.defaults.stripTrailingSlashes) {
|
||||
url = url.replace(/\/+$/, '') || '/';
|
||||
}
|
||||
|
||||
// then replace collapse `/.` if found in the last URL path segment before the query
|
||||
// E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
|
||||
url = url.replace(/\/\.(?=\w+($|\?))/, '.');
|
||||
// replace escaped `/\.` with `/.`
|
||||
config.url = url.replace(/\/\\\./, '/.');
|
||||
|
||||
|
||||
// set params - delegate param encoding to $http
|
||||
forEach(params, function(value, key) {
|
||||
if (!self.urlParams[key]) {
|
||||
config.params = config.params || {};
|
||||
config.params[key] = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function resourceFactory(url, paramDefaults, actions, options) {
|
||||
var route = new Route(url, options);
|
||||
|
||||
actions = extend({}, provider.defaults.actions, actions);
|
||||
|
||||
function extractParams(data, actionParams) {
|
||||
var ids = {};
|
||||
actionParams = extend({}, paramDefaults, actionParams);
|
||||
forEach(actionParams, function(value, key) {
|
||||
if (isFunction(value)) { value = value(); }
|
||||
ids[key] = value && value.charAt && value.charAt(0) == '@' ?
|
||||
lookupDottedPath(data, value.substr(1)) : value;
|
||||
});
|
||||
return ids;
|
||||
}
|
||||
|
||||
function defaultResponseInterceptor(response) {
|
||||
return response.resource;
|
||||
}
|
||||
|
||||
function Resource(value) {
|
||||
shallowClearAndCopy(value || {}, this);
|
||||
}
|
||||
|
||||
Resource.prototype.toJSON = function() {
|
||||
var data = extend({}, this);
|
||||
delete data.$promise;
|
||||
delete data.$resolved;
|
||||
return data;
|
||||
};
|
||||
|
||||
forEach(actions, function(action, name) {
|
||||
var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
|
||||
|
||||
Resource[name] = function(a1, a2, a3, a4) {
|
||||
var params = {}, data, success, error;
|
||||
|
||||
/* jshint -W086 */ /* (purposefully fall through case statements) */
|
||||
switch (arguments.length) {
|
||||
case 4:
|
||||
error = a4;
|
||||
success = a3;
|
||||
//fallthrough
|
||||
case 3:
|
||||
case 2:
|
||||
if (isFunction(a2)) {
|
||||
if (isFunction(a1)) {
|
||||
success = a1;
|
||||
error = a2;
|
||||
break;
|
||||
}
|
||||
|
||||
success = a2;
|
||||
error = a3;
|
||||
//fallthrough
|
||||
} else {
|
||||
params = a1;
|
||||
data = a2;
|
||||
success = a3;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
if (isFunction(a1)) success = a1;
|
||||
else if (hasBody) data = a1;
|
||||
else params = a1;
|
||||
break;
|
||||
case 0: break;
|
||||
default:
|
||||
throw $resourceMinErr('badargs',
|
||||
"Expected up to 4 arguments [params, data, success, error], got {0} arguments",
|
||||
arguments.length);
|
||||
}
|
||||
/* jshint +W086 */ /* (purposefully fall through case statements) */
|
||||
|
||||
var isInstanceCall = this instanceof Resource;
|
||||
var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
|
||||
var httpConfig = {};
|
||||
var responseInterceptor = action.interceptor && action.interceptor.response ||
|
||||
defaultResponseInterceptor;
|
||||
var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
|
||||
undefined;
|
||||
|
||||
forEach(action, function(value, key) {
|
||||
if (key != 'params' && key != 'isArray' && key != 'interceptor') {
|
||||
httpConfig[key] = copy(value);
|
||||
}
|
||||
});
|
||||
|
||||
if (hasBody) httpConfig.data = data;
|
||||
route.setUrlParams(httpConfig,
|
||||
extend({}, extractParams(data, action.params || {}), params),
|
||||
action.url);
|
||||
|
||||
var promise = $http(httpConfig).then(function(response) {
|
||||
var data = response.data,
|
||||
promise = value.$promise;
|
||||
|
||||
if (data) {
|
||||
// Need to convert action.isArray to boolean in case it is undefined
|
||||
// jshint -W018
|
||||
if (angular.isArray(data) !== (!!action.isArray)) {
|
||||
throw $resourceMinErr('badcfg',
|
||||
'Error in resource configuration for action `{0}`. Expected response to ' +
|
||||
'contain an {1} but got an {2}', name, action.isArray ? 'array' : 'object',
|
||||
angular.isArray(data) ? 'array' : 'object');
|
||||
}
|
||||
// jshint +W018
|
||||
if (action.isArray) {
|
||||
value.length = 0;
|
||||
forEach(data, function(item) {
|
||||
if (typeof item === "object") {
|
||||
value.push(new Resource(item));
|
||||
} else {
|
||||
// Valid JSON values may be string literals, and these should not be converted
|
||||
// into objects. These items will not have access to the Resource prototype
|
||||
// methods, but unfortunately there
|
||||
value.push(item);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
shallowClearAndCopy(data, value);
|
||||
value.$promise = promise;
|
||||
}
|
||||
}
|
||||
|
||||
value.$resolved = true;
|
||||
|
||||
response.resource = value;
|
||||
|
||||
return response;
|
||||
}, function(response) {
|
||||
value.$resolved = true;
|
||||
|
||||
(error || noop)(response);
|
||||
|
||||
return $q.reject(response);
|
||||
});
|
||||
|
||||
promise = promise.then(
|
||||
function(response) {
|
||||
var value = responseInterceptor(response);
|
||||
(success || noop)(value, response.headers);
|
||||
return value;
|
||||
},
|
||||
responseErrorInterceptor);
|
||||
|
||||
if (!isInstanceCall) {
|
||||
// we are creating instance / collection
|
||||
// - set the initial promise
|
||||
// - return the instance / collection
|
||||
value.$promise = promise;
|
||||
value.$resolved = false;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
// instance call
|
||||
return promise;
|
||||
};
|
||||
|
||||
|
||||
Resource.prototype['$' + name] = function(params, success, error) {
|
||||
if (isFunction(params)) {
|
||||
error = success; success = params; params = {};
|
||||
}
|
||||
var result = Resource[name].call(this, params, this, success, error);
|
||||
return result.$promise || result;
|
||||
};
|
||||
});
|
||||
|
||||
Resource.bind = function(additionalParamDefaults) {
|
||||
return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
|
||||
};
|
||||
|
||||
return Resource;
|
||||
}
|
||||
|
||||
return resourceFactory;
|
||||
}];
|
||||
});
|
||||
|
||||
|
||||
})(window, window.angular);
|
13
www/lib/ionic/js/angular/angular-resource.min.js
vendored
Normal file
13
www/lib/ionic/js/angular/angular-resource.min.js
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
AngularJS v1.3.6
|
||||
(c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(I,d,B){'use strict';function D(f,q){q=q||{};d.forEach(q,function(d,h){delete q[h]});for(var h in f)!f.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(q[h]=f[h]);return q}var w=d.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var f=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};
|
||||
this.$get=["$http","$q",function(q,h){function t(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function v(x,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){u(a)&&(a=a());var d;if(a&&a.charAt&&"@"==a.charAt(0)){d=b;var e=a.substr(1);if(null==e||""===e||"hasOwnProperty"===e||!C.test("."+e))throw w("badmember",e);for(var e=e.split("."),n=0,g=e.length;n<g&&d!==B;n++){var h=e[n];d=null!==d?d[h]:B}}else d=a;c[k]=d});return c}function F(b){return b.resource}function e(b){D(b||
|
||||
{},this)}var G=new t(x,m);l=s({},f.defaults.actions,l);e.prototype.toJSON=function(){var b=s({},this);delete b.$promise;delete b.$resolved;return b};r(l,function(b,k){var g=/^(POST|PUT|PATCH)$/i.test(b.method);e[k]=function(a,y,m,x){var n={},f,l,z;switch(arguments.length){case 4:z=x,l=m;case 3:case 2:if(u(y)){if(u(a)){l=a;z=y;break}l=y;z=m}else{n=a;f=y;l=m;break}case 1:u(a)?l=a:g?f=a:n=a;break;case 0:break;default:throw w("badargs",arguments.length);}var t=this instanceof e,p=t?f:b.isArray?[]:new e(f),
|
||||
A={},v=b.interceptor&&b.interceptor.response||F,C=b.interceptor&&b.interceptor.responseError||B;r(b,function(b,a){"params"!=a&&"isArray"!=a&&"interceptor"!=a&&(A[a]=H(b))});g&&(A.data=f);G.setUrlParams(A,s({},c(f,b.params||{}),n),b.url);n=q(A).then(function(a){var c=a.data,g=p.$promise;if(c){if(d.isArray(c)!==!!b.isArray)throw w("badcfg",k,b.isArray?"array":"object",d.isArray(c)?"array":"object");b.isArray?(p.length=0,r(c,function(a){"object"===typeof a?p.push(new e(a)):p.push(a)})):(D(c,p),p.$promise=
|
||||
g)}p.$resolved=!0;a.resource=p;return a},function(a){p.$resolved=!0;(z||E)(a);return h.reject(a)});n=n.then(function(a){var b=v(a);(l||E)(b,a.headers);return b},C);return t?n:(p.$promise=n,p.$resolved=!1,p)};e.prototype["$"+k]=function(a,b,c){u(a)&&(c=b,b=a,a={});a=e[k].call(this,a,this,b,c);return a.$promise||a}});e.bind=function(b){return v(x,s({},g,b),l)};return e}var E=d.noop,r=d.forEach,s=d.extend,H=d.copy,u=d.isFunction;t.prototype={setUrlParams:function(f,g,l){var m=this,c=l||m.template,h,
|
||||
e,q=m.urlParams={};r(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw w("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+b+"(\\W|$)")).test(c)&&(q[b]=!0)});c=c.replace(/\\:/g,":");g=g||{};r(m.urlParams,function(b,k){h=g.hasOwnProperty(k)?g[k]:m.defaults[k];d.isDefined(h)&&null!==h?(e=encodeURIComponent(h).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+
|
||||
k+"(\\W|$)","g"),function(b,a){return e+a})):c=c.replace(new RegExp("(/?):"+k+"(\\W|$)","g"),function(b,a,c){return"/"==c.charAt(0)?c:a+c})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");f.url=c.replace(/\/\\\./,"/.");r(g,function(b,c){m.urlParams[c]||(f.params=f.params||{},f.params[c]=b)})}};return v}]})})(window,window.angular);
|
||||
//# sourceMappingURL=angular-resource.min.js.map
|
680
www/lib/ionic/js/angular/angular-sanitize.js
vendored
Normal file
680
www/lib/ionic/js/angular/angular-sanitize.js
vendored
Normal file
|
@ -0,0 +1,680 @@
|
|||
/**
|
||||
* @license AngularJS v1.3.6
|
||||
* (c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
* License: MIT
|
||||
*/
|
||||
(function(window, angular, undefined) {'use strict';
|
||||
|
||||
var $sanitizeMinErr = angular.$$minErr('$sanitize');
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name ngSanitize
|
||||
* @description
|
||||
*
|
||||
* # ngSanitize
|
||||
*
|
||||
* The `ngSanitize` module provides functionality to sanitize HTML.
|
||||
*
|
||||
*
|
||||
* <div doc-module-components="ngSanitize"></div>
|
||||
*
|
||||
* See {@link ngSanitize.$sanitize `$sanitize`} for usage.
|
||||
*/
|
||||
|
||||
/*
|
||||
* HTML Parser By Misko Hevery (misko@hevery.com)
|
||||
* based on: HTML Parser By John Resig (ejohn.org)
|
||||
* Original code by Erik Arvidsson, Mozilla Public License
|
||||
* http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
|
||||
*
|
||||
* // Use like so:
|
||||
* htmlParser(htmlString, {
|
||||
* start: function(tag, attrs, unary) {},
|
||||
* end: function(tag) {},
|
||||
* chars: function(text) {},
|
||||
* comment: function(text) {}
|
||||
* });
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $sanitize
|
||||
* @kind function
|
||||
*
|
||||
* @description
|
||||
* The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
|
||||
* then serialized back to properly escaped html string. This means that no unsafe input can make
|
||||
* it into the returned string, however, since our parser is more strict than a typical browser
|
||||
* parser, it's possible that some obscure input, which would be recognized as valid HTML by a
|
||||
* browser, won't make it through the sanitizer. The input may also contain SVG markup.
|
||||
* The whitelist is configured using the functions `aHrefSanitizationWhitelist` and
|
||||
* `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.
|
||||
*
|
||||
* @param {string} html HTML input.
|
||||
* @returns {string} Sanitized HTML.
|
||||
*
|
||||
* @example
|
||||
<example module="sanitizeExample" deps="angular-sanitize.js">
|
||||
<file name="index.html">
|
||||
<script>
|
||||
angular.module('sanitizeExample', ['ngSanitize'])
|
||||
.controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
|
||||
$scope.snippet =
|
||||
'<p style="color:blue">an html\n' +
|
||||
'<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
|
||||
'snippet</p>';
|
||||
$scope.deliberatelyTrustDangerousSnippet = function() {
|
||||
return $sce.trustAsHtml($scope.snippet);
|
||||
};
|
||||
}]);
|
||||
</script>
|
||||
<div ng-controller="ExampleController">
|
||||
Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Directive</td>
|
||||
<td>How</td>
|
||||
<td>Source</td>
|
||||
<td>Rendered</td>
|
||||
</tr>
|
||||
<tr id="bind-html-with-sanitize">
|
||||
<td>ng-bind-html</td>
|
||||
<td>Automatically uses $sanitize</td>
|
||||
<td><pre><div ng-bind-html="snippet"><br/></div></pre></td>
|
||||
<td><div ng-bind-html="snippet"></div></td>
|
||||
</tr>
|
||||
<tr id="bind-html-with-trust">
|
||||
<td>ng-bind-html</td>
|
||||
<td>Bypass $sanitize by explicitly trusting the dangerous value</td>
|
||||
<td>
|
||||
<pre><div ng-bind-html="deliberatelyTrustDangerousSnippet()">
|
||||
</div></pre>
|
||||
</td>
|
||||
<td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
|
||||
</tr>
|
||||
<tr id="bind-default">
|
||||
<td>ng-bind</td>
|
||||
<td>Automatically escapes</td>
|
||||
<td><pre><div ng-bind="snippet"><br/></div></pre></td>
|
||||
<td><div ng-bind="snippet"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
it('should sanitize the html snippet by default', function() {
|
||||
expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
|
||||
toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
|
||||
});
|
||||
|
||||
it('should inline raw snippet if bound to a trusted value', function() {
|
||||
expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
|
||||
toBe("<p style=\"color:blue\">an html\n" +
|
||||
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
|
||||
"snippet</p>");
|
||||
});
|
||||
|
||||
it('should escape snippet without any filter', function() {
|
||||
expect(element(by.css('#bind-default div')).getInnerHtml()).
|
||||
toBe("<p style=\"color:blue\">an html\n" +
|
||||
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
|
||||
"snippet</p>");
|
||||
});
|
||||
|
||||
it('should update', function() {
|
||||
element(by.model('snippet')).clear();
|
||||
element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
|
||||
expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
|
||||
toBe('new <b>text</b>');
|
||||
expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
|
||||
'new <b onclick="alert(1)">text</b>');
|
||||
expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
|
||||
"new <b onclick=\"alert(1)\">text</b>");
|
||||
});
|
||||
</file>
|
||||
</example>
|
||||
*/
|
||||
function $SanitizeProvider() {
|
||||
this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
|
||||
return function(html) {
|
||||
var buf = [];
|
||||
htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
|
||||
return !/^unsafe/.test($$sanitizeUri(uri, isImage));
|
||||
}));
|
||||
return buf.join('');
|
||||
};
|
||||
}];
|
||||
}
|
||||
|
||||
function sanitizeText(chars) {
|
||||
var buf = [];
|
||||
var writer = htmlSanitizeWriter(buf, angular.noop);
|
||||
writer.chars(chars);
|
||||
return buf.join('');
|
||||
}
|
||||
|
||||
|
||||
// Regular Expressions for parsing tags and attributes
|
||||
var START_TAG_REGEXP =
|
||||
/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
|
||||
END_TAG_REGEXP = /^<\/\s*([\w:-]+)[^>]*>/,
|
||||
ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
|
||||
BEGIN_TAG_REGEXP = /^</,
|
||||
BEGING_END_TAGE_REGEXP = /^<\//,
|
||||
COMMENT_REGEXP = /<!--(.*?)-->/g,
|
||||
DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,
|
||||
CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
|
||||
SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
|
||||
// Match everything outside of normal chars and " (quote character)
|
||||
NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g;
|
||||
|
||||
|
||||
// Good source of info about elements and attributes
|
||||
// http://dev.w3.org/html5/spec/Overview.html#semantics
|
||||
// http://simon.html5.org/html-elements
|
||||
|
||||
// Safe Void Elements - HTML5
|
||||
// http://dev.w3.org/html5/spec/Overview.html#void-elements
|
||||
var voidElements = makeMap("area,br,col,hr,img,wbr");
|
||||
|
||||
// Elements that you can, intentionally, leave open (and which close themselves)
|
||||
// http://dev.w3.org/html5/spec/Overview.html#optional-tags
|
||||
var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
|
||||
optionalEndTagInlineElements = makeMap("rp,rt"),
|
||||
optionalEndTagElements = angular.extend({},
|
||||
optionalEndTagInlineElements,
|
||||
optionalEndTagBlockElements);
|
||||
|
||||
// Safe Block Elements - HTML5
|
||||
var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," +
|
||||
"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
|
||||
"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"));
|
||||
|
||||
// Inline Elements - HTML5
|
||||
var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," +
|
||||
"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
|
||||
"samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
|
||||
|
||||
// SVG Elements
|
||||
// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
|
||||
var svgElements = makeMap("animate,animateColor,animateMotion,animateTransform,circle,defs," +
|
||||
"desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient," +
|
||||
"line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set," +
|
||||
"stop,svg,switch,text,title,tspan,use");
|
||||
|
||||
// Special Elements (can contain anything)
|
||||
var specialElements = makeMap("script,style");
|
||||
|
||||
var validElements = angular.extend({},
|
||||
voidElements,
|
||||
blockElements,
|
||||
inlineElements,
|
||||
optionalEndTagElements,
|
||||
svgElements);
|
||||
|
||||
//Attributes that have href and hence need to be sanitized
|
||||
var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
|
||||
|
||||
var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
|
||||
'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
|
||||
'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
|
||||
'scope,scrolling,shape,size,span,start,summary,target,title,type,' +
|
||||
'valign,value,vspace,width');
|
||||
|
||||
// SVG attributes (without "id" and "name" attributes)
|
||||
// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
|
||||
var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
|
||||
'attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,' +
|
||||
'color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,' +
|
||||
'font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,' +
|
||||
'gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,' +
|
||||
'keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,' +
|
||||
'markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,' +
|
||||
'overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,' +
|
||||
'repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,' +
|
||||
'stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,' +
|
||||
'stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,' +
|
||||
'stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,' +
|
||||
'underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,' +
|
||||
'viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,' +
|
||||
'xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,' +
|
||||
'zoomAndPan');
|
||||
|
||||
var validAttrs = angular.extend({},
|
||||
uriAttrs,
|
||||
svgAttrs,
|
||||
htmlAttrs);
|
||||
|
||||
function makeMap(str) {
|
||||
var obj = {}, items = str.split(','), i;
|
||||
for (i = 0; i < items.length; i++) obj[items[i]] = true;
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @example
|
||||
* htmlParser(htmlString, {
|
||||
* start: function(tag, attrs, unary) {},
|
||||
* end: function(tag) {},
|
||||
* chars: function(text) {},
|
||||
* comment: function(text) {}
|
||||
* });
|
||||
*
|
||||
* @param {string} html string
|
||||
* @param {object} handler
|
||||
*/
|
||||
function htmlParser(html, handler) {
|
||||
if (typeof html !== 'string') {
|
||||
if (html === null || typeof html === 'undefined') {
|
||||
html = '';
|
||||
} else {
|
||||
html = '' + html;
|
||||
}
|
||||
}
|
||||
var index, chars, match, stack = [], last = html, text;
|
||||
stack.last = function() { return stack[ stack.length - 1 ]; };
|
||||
|
||||
while (html) {
|
||||
text = '';
|
||||
chars = true;
|
||||
|
||||
// Make sure we're not in a script or style element
|
||||
if (!stack.last() || !specialElements[ stack.last() ]) {
|
||||
|
||||
// Comment
|
||||
if (html.indexOf("<!--") === 0) {
|
||||
// comments containing -- are not allowed unless they terminate the comment
|
||||
index = html.indexOf("--", 4);
|
||||
|
||||
if (index >= 0 && html.lastIndexOf("-->", index) === index) {
|
||||
if (handler.comment) handler.comment(html.substring(4, index));
|
||||
html = html.substring(index + 3);
|
||||
chars = false;
|
||||
}
|
||||
// DOCTYPE
|
||||
} else if (DOCTYPE_REGEXP.test(html)) {
|
||||
match = html.match(DOCTYPE_REGEXP);
|
||||
|
||||
if (match) {
|
||||
html = html.replace(match[0], '');
|
||||
chars = false;
|
||||
}
|
||||
// end tag
|
||||
} else if (BEGING_END_TAGE_REGEXP.test(html)) {
|
||||
match = html.match(END_TAG_REGEXP);
|
||||
|
||||
if (match) {
|
||||
html = html.substring(match[0].length);
|
||||
match[0].replace(END_TAG_REGEXP, parseEndTag);
|
||||
chars = false;
|
||||
}
|
||||
|
||||
// start tag
|
||||
} else if (BEGIN_TAG_REGEXP.test(html)) {
|
||||
match = html.match(START_TAG_REGEXP);
|
||||
|
||||
if (match) {
|
||||
// We only have a valid start-tag if there is a '>'.
|
||||
if (match[4]) {
|
||||
html = html.substring(match[0].length);
|
||||
match[0].replace(START_TAG_REGEXP, parseStartTag);
|
||||
}
|
||||
chars = false;
|
||||
} else {
|
||||
// no ending tag found --- this piece should be encoded as an entity.
|
||||
text += '<';
|
||||
html = html.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (chars) {
|
||||
index = html.indexOf("<");
|
||||
|
||||
text += index < 0 ? html : html.substring(0, index);
|
||||
html = index < 0 ? "" : html.substring(index);
|
||||
|
||||
if (handler.chars) handler.chars(decodeEntities(text));
|
||||
}
|
||||
|
||||
} else {
|
||||
html = html.replace(new RegExp("(.*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
|
||||
function(all, text) {
|
||||
text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
|
||||
|
||||
if (handler.chars) handler.chars(decodeEntities(text));
|
||||
|
||||
return "";
|
||||
});
|
||||
|
||||
parseEndTag("", stack.last());
|
||||
}
|
||||
|
||||
if (html == last) {
|
||||
throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " +
|
||||
"of html: {0}", html);
|
||||
}
|
||||
last = html;
|
||||
}
|
||||
|
||||
// Clean up any remaining tags
|
||||
parseEndTag();
|
||||
|
||||
function parseStartTag(tag, tagName, rest, unary) {
|
||||
tagName = angular.lowercase(tagName);
|
||||
if (blockElements[ tagName ]) {
|
||||
while (stack.last() && inlineElements[ stack.last() ]) {
|
||||
parseEndTag("", stack.last());
|
||||
}
|
||||
}
|
||||
|
||||
if (optionalEndTagElements[ tagName ] && stack.last() == tagName) {
|
||||
parseEndTag("", tagName);
|
||||
}
|
||||
|
||||
unary = voidElements[ tagName ] || !!unary;
|
||||
|
||||
if (!unary)
|
||||
stack.push(tagName);
|
||||
|
||||
var attrs = {};
|
||||
|
||||
rest.replace(ATTR_REGEXP,
|
||||
function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {
|
||||
var value = doubleQuotedValue
|
||||
|| singleQuotedValue
|
||||
|| unquotedValue
|
||||
|| '';
|
||||
|
||||
attrs[name] = decodeEntities(value);
|
||||
});
|
||||
if (handler.start) handler.start(tagName, attrs, unary);
|
||||
}
|
||||
|
||||
function parseEndTag(tag, tagName) {
|
||||
var pos = 0, i;
|
||||
tagName = angular.lowercase(tagName);
|
||||
if (tagName)
|
||||
// Find the closest opened tag of the same type
|
||||
for (pos = stack.length - 1; pos >= 0; pos--)
|
||||
if (stack[ pos ] == tagName)
|
||||
break;
|
||||
|
||||
if (pos >= 0) {
|
||||
// Close all the open elements, up the stack
|
||||
for (i = stack.length - 1; i >= pos; i--)
|
||||
if (handler.end) handler.end(stack[ i ]);
|
||||
|
||||
// Remove the open elements from the stack
|
||||
stack.length = pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var hiddenPre=document.createElement("pre");
|
||||
var spaceRe = /^(\s*)([\s\S]*?)(\s*)$/;
|
||||
/**
|
||||
* decodes all entities into regular string
|
||||
* @param value
|
||||
* @returns {string} A string with decoded entities.
|
||||
*/
|
||||
function decodeEntities(value) {
|
||||
if (!value) { return ''; }
|
||||
|
||||
// Note: IE8 does not preserve spaces at the start/end of innerHTML
|
||||
// so we must capture them and reattach them afterward
|
||||
var parts = spaceRe.exec(value);
|
||||
var spaceBefore = parts[1];
|
||||
var spaceAfter = parts[3];
|
||||
var content = parts[2];
|
||||
if (content) {
|
||||
hiddenPre.innerHTML=content.replace(/</g,"<");
|
||||
// innerText depends on styling as it doesn't display hidden elements.
|
||||
// Therefore, it's better to use textContent not to cause unnecessary
|
||||
// reflows. However, IE<9 don't support textContent so the innerText
|
||||
// fallback is necessary.
|
||||
content = 'textContent' in hiddenPre ?
|
||||
hiddenPre.textContent : hiddenPre.innerText;
|
||||
}
|
||||
return spaceBefore + content + spaceAfter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes all potentially dangerous characters, so that the
|
||||
* resulting string can be safely inserted into attribute or
|
||||
* element text.
|
||||
* @param value
|
||||
* @returns {string} escaped text
|
||||
*/
|
||||
function encodeEntities(value) {
|
||||
return value.
|
||||
replace(/&/g, '&').
|
||||
replace(SURROGATE_PAIR_REGEXP, function(value) {
|
||||
var hi = value.charCodeAt(0);
|
||||
var low = value.charCodeAt(1);
|
||||
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
|
||||
}).
|
||||
replace(NON_ALPHANUMERIC_REGEXP, function(value) {
|
||||
return '&#' + value.charCodeAt(0) + ';';
|
||||
}).
|
||||
replace(/</g, '<').
|
||||
replace(/>/g, '>');
|
||||
}
|
||||
|
||||
/**
|
||||
* create an HTML/XML writer which writes to buffer
|
||||
* @param {Array} buf use buf.jain('') to get out sanitized html string
|
||||
* @returns {object} in the form of {
|
||||
* start: function(tag, attrs, unary) {},
|
||||
* end: function(tag) {},
|
||||
* chars: function(text) {},
|
||||
* comment: function(text) {}
|
||||
* }
|
||||
*/
|
||||
function htmlSanitizeWriter(buf, uriValidator) {
|
||||
var ignore = false;
|
||||
var out = angular.bind(buf, buf.push);
|
||||
return {
|
||||
start: function(tag, attrs, unary) {
|
||||
tag = angular.lowercase(tag);
|
||||
if (!ignore && specialElements[tag]) {
|
||||
ignore = tag;
|
||||
}
|
||||
if (!ignore && validElements[tag] === true) {
|
||||
out('<');
|
||||
out(tag);
|
||||
angular.forEach(attrs, function(value, key) {
|
||||
var lkey=angular.lowercase(key);
|
||||
var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
|
||||
if (validAttrs[lkey] === true &&
|
||||
(uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
|
||||
out(' ');
|
||||
out(key);
|
||||
out('="');
|
||||
out(encodeEntities(value));
|
||||
out('"');
|
||||
}
|
||||
});
|
||||
out(unary ? '/>' : '>');
|
||||
}
|
||||
},
|
||||
end: function(tag) {
|
||||
tag = angular.lowercase(tag);
|
||||
if (!ignore && validElements[tag] === true) {
|
||||
out('</');
|
||||
out(tag);
|
||||
out('>');
|
||||
}
|
||||
if (tag == ignore) {
|
||||
ignore = false;
|
||||
}
|
||||
},
|
||||
chars: function(chars) {
|
||||
if (!ignore) {
|
||||
out(encodeEntities(chars));
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// define ngSanitize module and register $sanitize service
|
||||
angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
|
||||
|
||||
/* global sanitizeText: false */
|
||||
|
||||
/**
|
||||
* @ngdoc filter
|
||||
* @name linky
|
||||
* @kind function
|
||||
*
|
||||
* @description
|
||||
* Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
|
||||
* plain email address links.
|
||||
*
|
||||
* Requires the {@link ngSanitize `ngSanitize`} module to be installed.
|
||||
*
|
||||
* @param {string} text Input text.
|
||||
* @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
|
||||
* @returns {string} Html-linkified text.
|
||||
*
|
||||
* @usage
|
||||
<span ng-bind-html="linky_expression | linky"></span>
|
||||
*
|
||||
* @example
|
||||
<example module="linkyExample" deps="angular-sanitize.js">
|
||||
<file name="index.html">
|
||||
<script>
|
||||
angular.module('linkyExample', ['ngSanitize'])
|
||||
.controller('ExampleController', ['$scope', function($scope) {
|
||||
$scope.snippet =
|
||||
'Pretty text with some links:\n'+
|
||||
'http://angularjs.org/,\n'+
|
||||
'mailto:us@somewhere.org,\n'+
|
||||
'another@somewhere.org,\n'+
|
||||
'and one more: ftp://127.0.0.1/.';
|
||||
$scope.snippetWithTarget = 'http://angularjs.org/';
|
||||
}]);
|
||||
</script>
|
||||
<div ng-controller="ExampleController">
|
||||
Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Filter</td>
|
||||
<td>Source</td>
|
||||
<td>Rendered</td>
|
||||
</tr>
|
||||
<tr id="linky-filter">
|
||||
<td>linky filter</td>
|
||||
<td>
|
||||
<pre><div ng-bind-html="snippet | linky"><br></div></pre>
|
||||
</td>
|
||||
<td>
|
||||
<div ng-bind-html="snippet | linky"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="linky-target">
|
||||
<td>linky target</td>
|
||||
<td>
|
||||
<pre><div ng-bind-html="snippetWithTarget | linky:'_blank'"><br></div></pre>
|
||||
</td>
|
||||
<td>
|
||||
<div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="escaped-html">
|
||||
<td>no filter</td>
|
||||
<td><pre><div ng-bind="snippet"><br></div></pre></td>
|
||||
<td><div ng-bind="snippet"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
it('should linkify the snippet with urls', function() {
|
||||
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
|
||||
toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
|
||||
'another@somewhere.org, and one more: ftp://127.0.0.1/.');
|
||||
expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
|
||||
});
|
||||
|
||||
it('should not linkify snippet without the linky filter', function() {
|
||||
expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
|
||||
toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
|
||||
'another@somewhere.org, and one more: ftp://127.0.0.1/.');
|
||||
expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
|
||||
});
|
||||
|
||||
it('should update', function() {
|
||||
element(by.model('snippet')).clear();
|
||||
element(by.model('snippet')).sendKeys('new http://link.');
|
||||
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
|
||||
toBe('new http://link.');
|
||||
expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
|
||||
expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
|
||||
.toBe('new http://link.');
|
||||
});
|
||||
|
||||
it('should work with the target property', function() {
|
||||
expect(element(by.id('linky-target')).
|
||||
element(by.binding("snippetWithTarget | linky:'_blank'")).getText()).
|
||||
toBe('http://angularjs.org/');
|
||||
expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
|
||||
});
|
||||
</file>
|
||||
</example>
|
||||
*/
|
||||
angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
|
||||
var LINKY_URL_REGEXP =
|
||||
/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"”’]/,
|
||||
MAILTO_REGEXP = /^mailto:/;
|
||||
|
||||
return function(text, target) {
|
||||
if (!text) return text;
|
||||
var match;
|
||||
var raw = text;
|
||||
var html = [];
|
||||
var url;
|
||||
var i;
|
||||
while ((match = raw.match(LINKY_URL_REGEXP))) {
|
||||
// We can not end in these as they are sometimes found at the end of the sentence
|
||||
url = match[0];
|
||||
// if we did not match ftp/http/www/mailto then assume mailto
|
||||
if (!match[2] && !match[4]) {
|
||||
url = (match[3] ? 'http://' : 'mailto:') + url;
|
||||
}
|
||||
i = match.index;
|
||||
addText(raw.substr(0, i));
|
||||
addLink(url, match[0].replace(MAILTO_REGEXP, ''));
|
||||
raw = raw.substring(i + match[0].length);
|
||||
}
|
||||
addText(raw);
|
||||
return $sanitize(html.join(''));
|
||||
|
||||
function addText(text) {
|
||||
if (!text) {
|
||||
return;
|
||||
}
|
||||
html.push(sanitizeText(text));
|
||||
}
|
||||
|
||||
function addLink(url, text) {
|
||||
html.push('<a ');
|
||||
if (angular.isDefined(target)) {
|
||||
html.push('target="',
|
||||
target,
|
||||
'" ');
|
||||
}
|
||||
html.push('href="',
|
||||
url.replace(/"/g, '"'),
|
||||
'">');
|
||||
addText(text);
|
||||
html.push('</a>');
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
|
||||
})(window, window.angular);
|
16
www/lib/ionic/js/angular/angular-sanitize.min.js
vendored
Normal file
16
www/lib/ionic/js/angular/angular-sanitize.min.js
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
AngularJS v1.3.6
|
||||
(c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(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<a.length;c++)d[a[c]]=!0;return d}function F(a,d){function c(a,b,c,l){b=h.lowercase(b);if(t[b])for(;f.last()&&u[f.last()];)e("",f.last());v[b]&&f.last()==b&&e("",b);(l=w[b]||!!l)||f.push(b);var m={};c.replace(G,function(a,b,d,c,e){m[b]=r(d||c||e||"")});d.start&&d.start(b,m,l)}function e(a,b){var c=0,e;if(b=h.lowercase(b))for(c=f.length-1;0<=c&&f[c]!=b;c--);
|
||||
if(0<=c){for(e=f.length-1;e>=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,
|
||||
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=
|
||||
d.replace(/</g,"<"),d="textContent"in q?q.textContent:q.innerText;return a+d+c}function B(a){return a.replace(/&/g,"&").replace(N,function(a){var c=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(c-55296)+(a-56320)+65536)+";"}).replace(O,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"<").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=
|
||||
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("</"),e(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=/^</,
|
||||
J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,y=/<!DOCTYPE([^>]*?)>/i,I=/<!\[CDATA\[(.*?)]]\x3e/g,N=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,O=/([^\#-~| |!])/g,w=g("area,br,col,hr,img,wbr");n=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");p=g("rp,rt");var v=h.extend({},p,n),t=h.extend({},n,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),u=h.extend({},p,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
|
||||
n=g("animate,animateColor,animateMotion,animateTransform,circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set,stop,svg,switch,text,title,tspan,use");var x=g("script,style"),C=h.extend({},w,t,u,v,n),D=g("background,cite,href,longdesc,src,usemap,xlink:href");n=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width");
|
||||
p=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan");
|
||||
var P=h.extend({},D,p,n),q=document.createElement("pre"),M=/^(\s*)([\s\S]*?)(\s*)$/;h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(d){var c=[];F(d,s(c,function(c,b){return!/^unsafe/.test(a(c,b))}));return c.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var d=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/,c=/^mailto:/;return function(e,b){function k(a){a&&g.push(E(a))}
|
||||
function f(a,c){g.push("<a ");h.isDefined(b)&&g.push('target="',b,'" ');g.push('href="',a.replace(/"/g,"""),'">');k(c);g.push("</a>")}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);
|
||||
//# sourceMappingURL=angular-sanitize.min.js.map
|
26000
www/lib/ionic/js/angular/angular.js
vendored
Normal file
26000
www/lib/ionic/js/angular/angular.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
250
www/lib/ionic/js/angular/angular.min.js
vendored
Normal file
250
www/lib/ionic/js/angular/angular.min.js
vendored
Normal file
|
@ -0,0 +1,250 @@
|
|||
/*
|
||||
AngularJS v1.3.6
|
||||
(c) 2010-2014 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(U,X,u){'use strict';function A(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.6/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;return b.nodeType===
|
||||
na&&a?!0:z(b)||x(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function r(b,a,c){var d,e;if(b)if(B(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(x(b)||Ra(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==r)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Cd(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,
|
||||
b[d[e]],d[e]);return d}function kc(b){return function(a,c){b(c,a)}}function Dd(){return++kb}function lc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function G(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var k=f[g];b[k]=e[k]}}lc(b,a);return b}function $(b){return parseInt(b,10)}function H(){}function oa(b){return b}function ca(b){return function(){return b}}function C(b){return"undefined"===typeof b}function y(b){return"undefined"!==
|
||||
typeof b}function O(b){return null!==b&&"object"===typeof b}function z(b){return"string"===typeof b}function Y(b){return"number"===typeof b}function pa(b){return"[object Date]"===Ja.call(b)}function B(b){return"function"===typeof b}function lb(b){return"[object RegExp]"===Ja.call(b)}function Sa(b){return b&&b.window===b}function Ta(b){return b&&b.$evalAsync&&b.$watch}function Ua(b){return"boolean"===typeof b}function mc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Ed(b){var a={};
|
||||
b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ua(b){return Q(b.nodeName||b[0]&&b[0].nodeName)}function Va(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Da(b,a,c,d){if(Sa(b)||Ta(b))throw Wa("cpws");if(a){if(b===a)throw Wa("cpi");c=c||[];d=d||[];if(O(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(x(b))for(var f=a.length=0;f<b.length;f++)e=Da(b[f],null,c,d),O(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var g=a.$$hashKey;x(a)?a.length=
|
||||
0:r(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Da(b[f],null,c,d),O(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);lc(a,g)}}else if(a=b)x(b)?a=Da(b,[],c,d):pa(b)?a=new Date(b.getTime()):lb(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):O(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Da(b,e,c,d));return a}function qa(b,a){if(x(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(O(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=
|
||||
b[c];return a||b}function ga(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(x(b)){if(!x(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ga(b[d],a[d]))return!1;return!0}}else{if(pa(b))return pa(a)?ga(b.getTime(),a.getTime()):!1;if(lb(b)&&lb(a))return b.toString()==a.toString();if(Ta(b)||Ta(a)||Sa(b)||Sa(a)||x(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!B(b[d])){if(!ga(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&
|
||||
"$"!==d.charAt(0)&&a[d]!==u&&!B(a[d]))return!1;return!0}return!1}function Xa(b,a,c){return b.concat(Ya.call(a,c))}function nc(b,a){var c=2<arguments.length?Ya.call(arguments,2):[];return!B(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Xa(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Fd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=u:Sa(a)?c="$WINDOW":a&&X===a?c="$DOCUMENT":Ta(a)&&
|
||||
(c="$SCOPE");return c}function Za(b,a){if("undefined"===typeof b)return u;Y(a)||(a=a?2:null);return JSON.stringify(b,Fd,a)}function oc(b){return z(b)?JSON.parse(b):b}function va(b){b=D(b).clone();try{b.empty()}catch(a){}var c=D("<div>").append(b).html();try{return b[0].nodeType===mb?Q(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(d){return Q(c)}}function pc(b){try{return decodeURIComponent(b)}catch(a){}}function qc(b){var a={},c,d;r((b||"").split("&"),function(b){b&&
|
||||
(c=b.replace(/\+/g,"%20").split("="),d=pc(c[0]),y(d)&&(b=y(c[1])?pc(c[1]):!0,rc.call(a,d)?x(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Nb(b){var a=[];r(b,function(b,d){x(b)?r(b,function(b){a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))}):a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))});return a.length?a.join("&"):""}function nb(b){return Ea(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ea(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,
|
||||
":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Gd(b,a){var c,d,e=ob.length;b=D(b);for(d=0;d<e;++d)if(c=ob[d]+a,z(c=b.attr(c)))return c;return null}function Hd(b,a){var c,d,e={};r(ob,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});r(ob,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Gd(c,"strict-di"),a(c,d?[d]:[],e))}function sc(b,
|
||||
a,c){O(c)||(c={});c=G({strictDi:!1},c);var d=function(){b=D(b);if(b.injector()){var d=b[0]===X?"document":va(b);throw Wa("btstrpd",d.replace(/</,"<").replace(/>/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=Ob(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},
|
||||
e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;U&&e.test(U.name)&&(c.debugInfoEnabled=!0,U.name=U.name.replace(e,""));if(U&&!f.test(U.name))return d();U.name=U.name.replace(f,"");ha.resumeBootstrap=function(b){r(b,function(b){a.push(b)});d()}}function Id(){U.name="NG_ENABLE_DEBUG_INFO!"+U.name;U.location.reload()}function Jd(b){return ha.element(b).injector().get("$$testability")}function Pb(b,a){a=a||"_";return b.replace(Kd,function(b,d){return(d?a:"")+b.toLowerCase()})}function Ld(){var b;
|
||||
tc||((ra=U.jQuery)&&ra.fn.on?(D=ra,G(ra.fn,{scope:Ka.scope,isolateScope:Ka.isolateScope,controller:Ka.controller,injector:Ka.injector,inheritedData:Ka.inheritedData}),b=ra.cleanData,ra.cleanData=function(a){var c;if(Qb)Qb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ra._data(e,"events"))&&c.$destroy&&ra(e).triggerHandler("$destroy");b(a)}):D=R,ha.element=D,tc=!0)}function Rb(b,a,c){if(!b)throw Wa("areq",a||"?",c||"required");return b}function pb(b,a,c){c&&x(b)&&(b=b[b.length-1]);Rb(B(b),a,"not a function, got "+
|
||||
(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function La(b,a){if("hasOwnProperty"===b)throw Wa("badname",a);}function uc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&B(b)?nc(e,b):b}function qb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return D(c)}function ia(){return Object.create(null)}function Md(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=A("$injector"),
|
||||
d=A("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||A;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return t}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),t={_invokeQueue:b,_configBlocks:d,_runBlocks:e,requires:g,name:f,provider:a("$provide","provider"),factory:a("$provide",
|
||||
"factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return t})}})}function Nd(b){G(b,{bootstrap:sc,copy:Da,extend:G,equals:ga,element:D,forEach:r,injector:Ob,noop:H,bind:nc,toJson:Za,fromJson:oc,identity:oa,isUndefined:C,
|
||||
isDefined:y,isString:z,isFunction:B,isObject:O,isNumber:Y,isElement:mc,isArray:x,version:Od,isDate:pa,lowercase:Q,uppercase:rb,callbacks:{counter:0},getTestability:Jd,$$minErr:A,$$csp:$a,reloadWithDebugInfo:Id});ab=Md(U);try{ab("ngLocale")}catch(a){ab("ngLocale",[]).provider("$locale",Pd)}ab("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Qd});a.provider("$compile",vc).directive({a:Rd,input:wc,textarea:wc,form:Sd,script:Td,select:Ud,style:Vd,option:Wd,ngBind:Xd,ngBindHtml:Yd,ngBindTemplate:Zd,
|
||||
ngClass:$d,ngClassEven:ae,ngClassOdd:be,ngCloak:ce,ngController:de,ngForm:ee,ngHide:fe,ngIf:ge,ngInclude:he,ngInit:ie,ngNonBindable:je,ngPluralize:ke,ngRepeat:le,ngShow:me,ngStyle:ne,ngSwitch:oe,ngSwitchWhen:pe,ngSwitchDefault:qe,ngOptions:re,ngTransclude:se,ngModel:te,ngList:ue,ngChange:ve,pattern:xc,ngPattern:xc,required:yc,ngRequired:yc,minlength:zc,ngMinlength:zc,maxlength:Ac,ngMaxlength:Ac,ngValue:we,ngModelOptions:xe}).directive({ngInclude:ye}).directive(sb).directive(Bc);a.provider({$anchorScroll:ze,
|
||||
$animate:Ae,$browser:Be,$cacheFactory:Ce,$controller:De,$document:Ee,$exceptionHandler:Fe,$filter:Cc,$interpolate:Ge,$interval:He,$http:Ie,$httpBackend:Je,$location:Ke,$log:Le,$parse:Me,$rootScope:Ne,$q:Oe,$$q:Pe,$sce:Qe,$sceDelegate:Re,$sniffer:Se,$templateCache:Te,$templateRequest:Ue,$$testability:Ve,$timeout:We,$window:Xe,$$rAF:Ye,$$asyncCallback:Ze,$$jqLite:$e})}])}function bb(b){return b.replace(af,function(a,b,d,e){return e?d.toUpperCase():d}).replace(bf,"Moz$1")}function Dc(b){b=b.nodeType;
|
||||
return b===na||!b||9===b}function Ec(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Sb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(cf.exec(b)||["",""])[1].toLowerCase();d=ja[d]||ja._default;c.innerHTML=d[1]+b.replace(df,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Xa(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function R(b){if(b instanceof R)return b;var a;z(b)&&(b=P(b),
|
||||
a=!0);if(!(this instanceof R)){if(a&&"<"!=b.charAt(0))throw Tb("nosel");return new R(b)}if(a){a=X;var c;b=(c=ef.exec(b))?[a.createElement(c[1])]:(c=Ec(b,a))?c.childNodes:[]}Fc(this,b)}function Ub(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)ub(c[d])}function Gc(b,a,c,d){if(y(d))throw Tb("offargs");var e=(d=vb(b))&&d.events,f=d&&d.handle;if(f)if(a)r(a.split(" "),function(a){if(y(c)){var d=e[a];Va(d||[],c);if(d&&0<
|
||||
d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function ub(b,a){var c=b.ng339,d=c&&wb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Gc(b)),delete wb[c],b.ng339=u))}function vb(b,a){var c=b.ng339,c=c&&wb[c];a&&!c&&(b.ng339=c=++ff,c=wb[c]={events:{},data:{},handle:u});return c}function Vb(b,a,c){if(Dc(b)){var d=y(c),e=!d&&a&&!O(a),f=!a;b=(b=vb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;
|
||||
if(e)return b&&b[a];G(b,a)}}}function xb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function yb(b,a){a&&b.setAttribute&&r(a.split(" "),function(a){b.setAttribute("class",P((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+P(a)+" "," ")))})}function zb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");r(a.split(" "),function(a){a=P(a);-1===c.indexOf(" "+a+" ")&&
|
||||
(c+=a+" ")});b.setAttribute("class",P(c))}}function Fc(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Hc(b,a){return Ab(b,"$"+(a||"ngController")+"Controller")}function Ab(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=x(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=D.data(b,a[d]))!==u)return c;b=b.parentNode||11===b.nodeType&&b.host}}function Ic(b){for(tb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}
|
||||
function Jc(b,a){a||tb(b);var c=b.parentNode;c&&c.removeChild(b)}function gf(b,a){a=a||U;if("complete"===a.document.readyState)a.setTimeout(b);else D(a).on("load",b)}function Kc(b,a){var c=Bb[a.toLowerCase()];return c&&Lc[ua(b)]&&c}function hf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Mc[a]}function jf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=a[e||c.type],g=f?f.length:0;if(g){if(C(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;
|
||||
c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=qa(f));for(var k=0;k<g;k++)c.isImmediatePropagationStopped()||f[k].call(b,c)}};c.elem=b;return c}function $e(){this.$get=function(){return G(R,{hasClass:function(b,a){b.attr&&(b=b[0]);return xb(b,a)},addClass:function(b,a){b.attr&&(b=b[0]);return zb(b,a)},removeClass:function(b,a){b.attr&&
|
||||
(b=b[0]);return yb(b,a)}})}}function Ma(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Dd)():c+":"+b}function cb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function kf(b){return(b=b.toString().replace(Nc,"").match(Oc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Wb(b,a,c){var d;if("function"===typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw z(c)&&
|
||||
c||(c=b.name||kf(b)),Fa("strictdi",c);a=b.toString().replace(Nc,"");a=a.match(Oc);r(a[1].split(lf),function(a){a.replace(mf,function(a,b,c){d.push(c)})})}b.$inject=d}}else x(b)?(a=b.length-1,pb(b[a],"fn"),d=b.slice(0,a)):pb(b,"fn",!0);return d}function Ob(b,a){function c(a){return function(b,c){if(O(b))r(b,kc(a));else return a(b,c)}}function d(a,b){La(a,"service");if(B(b)||x(b))b=q.instantiate(b);if(!b.$get)throw Fa("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=s.invoke(b,
|
||||
this);if(C(c))throw Fa("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{z(a)?(c=ab(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):B(a)?b.push(q.invoke(a)):x(a)?b.push(q.invoke(a)):pb(a,"module")}catch(e){throw x(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&
|
||||
(e=e.message+"\n"+e.stack),Fa("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===k)throw Fa("cdep",a+" <- "+l.join(" <- "));return b[a]}try{return l.unshift(a),b[a]=k,b[a]=c(a,e)}catch(f){throw b[a]===k&&delete b[a],f;}finally{l.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=Wb(b,a,g),l,q,s;q=0;for(l=k.length;q<l;q++){s=k[q];if("string"!==typeof s)throw Fa("itkn",s);h.push(f&&f.hasOwnProperty(s)?f[s]:d(s,g))}x(b)&&
|
||||
(b=b[l]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((x(a)?a[a.length-1]:a).prototype);a=e(a,d,b,c);return O(a)||B(a)?a:d},get:d,annotate:Wb,has:function(a){return p.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var k={},l=[],m=new cb([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,ca(b),!1)}),constant:c(function(a,b){La(a,
|
||||
"constant");p[a]=b;t[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=s.invoke(d,c);return s.invoke(b,null,{$delegate:a})}}}},q=p.$injector=h(p,function(a,b){ha.isString(b)&&l.push(b);throw Fa("unpr",l.join(" <- "));}),t={},s=t.$injector=h(t,function(a,b){var c=q.get(a+"Provider",b);return s.invoke(c.$get,c,u,a)});r(g(b),function(a){s.invoke(a||H)});return s}function ze(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location",
|
||||
"$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ua(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;B(c)?c=c():mc(c)?(c=c[0],c="fixed"!==a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Y(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}
|
||||
var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||gf(function(){d.$evalAsync(g)})});return g}]}function Ze(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function nf(b,a,c,d){function e(a){try{a.apply(null,Ya.call(arguments,1))}finally{if(v--,0===v)for(;w.length;)try{w.pop()()}catch(b){c.error(b)}}}function f(a,b){(function Aa(){r(K,function(a){a()});E=b(Aa,a)})()}function g(){h();k()}function h(){J=
|
||||
b.history.state;J=C(J)?null:J;ga(J,S)&&(J=S);S=J}function k(){if(F!==m.url()||L!==J)F=m.url(),L=J,r(W,function(a){a(m.url(),J)})}function l(a){try{return decodeURIComponent(a)}catch(b){return a}}var m=this,p=a[0],q=b.location,t=b.history,s=b.setTimeout,N=b.clearTimeout,n={};m.isMock=!1;var v=0,w=[];m.$$completeOutstandingRequest=e;m.$$incOutstandingRequestCount=function(){v++};m.notifyWhenNoOutstandingRequests=function(a){r(K,function(a){a()});0===v?a():w.push(a)};var K=[],E;m.addPollFn=function(a){C(E)&&
|
||||
f(100,s);K.push(a);return a};var J,L,F=q.href,da=a.find("base"),I=null;h();L=J;m.url=function(a,c,e){C(e)&&(e=null);q!==b.location&&(q=b.location);t!==b.history&&(t=b.history);if(a){var f=L===e;if(F===a&&(!d.history||f))return m;var g=F&&Ga(F)===Ga(a);F=a;L=e;!d.history||g&&f?(g||(I=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(t[c?"replaceState":"pushState"](e,"",a),h(),L=J);return m}return I||q.href.replace(/%27/g,"'")};m.state=function(){return J};var W=
|
||||
[],ba=!1,S=null;m.onUrlChange=function(a){if(!ba){if(d.history)D(b).on("popstate",g);D(b).on("hashchange",g);ba=!0}W.push(a);return a};m.$$checkUrlChange=k;m.baseHref=function(){var a=da.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var aa={},y="",ea=m.baseHref();m.cookies=function(a,b){var d,e,f,g;if(a)b===u?p.cookie=encodeURIComponent(a)+"=;path="+ea+";expires=Thu, 01 Jan 1970 00:00:00 GMT":z(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+ea).length+
|
||||
1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==y)for(y=p.cookie,d=y.split("; "),aa={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=l(e.substring(0,g)),aa[a]===u&&(aa[a]=l(e.substring(g+1))));return aa}};m.defer=function(a,b){var c;v++;c=s(function(){delete n[c];e(a)},b||0);n[c]=!0;return c};m.defer.cancel=function(a){return n[a]?(delete n[a],N(a),e(H),!0):!1}}function Be(){this.$get=["$window","$log","$sniffer",
|
||||
"$document",function(b,a,c,d){return new nf(b,d,a,c)}]}function Ce(){this.$get=function(){function b(b,d){function e(a){a!=p&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw A("$cacheFactory")("iid",b);var g=0,h=G({},d,{id:b}),k={},l=d&&d.capacity||Number.MAX_VALUE,m={},p=null,q=null;return a[b]={put:function(a,b){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}if(!C(b))return a in k||g++,k[a]=b,g>l&&this.remove(q.key),b},get:function(a){if(l<
|
||||
Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==p&&(p=b.p);b==q&&(q=b.n);f(b.n,b.p);delete m[a]}delete k[a];g--},removeAll:function(){k={};g=0;m={};p=q=null},destroy:function(){m=h=k=null;delete a[b]},info:function(){return G({},h,{size:g})}}}var a={};b.info=function(){var b={};r(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Te(){this.$get=["$cacheFactory",function(b){return b("templates")}]}
|
||||
function vc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};r(a,function(a,e){var f=a.match(c);if(!f)throw ka("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d={},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Ed("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,k=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){La(a,"directive");z(a)?(Rb(e,"directiveFactory"),d.hasOwnProperty(a)||
|
||||
(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];r(d[a],function(d,g){try{var h=b.invoke(d);B(h)?h={compile:ca(h)}:!h.compile&&h.link&&(h.compile=ca(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";O(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(k){e(k)}});return f}])),d[a].push(e)):r(a,kc(p));return this};this.aHrefSanitizationWhitelist=function(b){return y(b)?
|
||||
(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var l=!0;this.debugInfoEnabled=function(a){return y(a)?(l=a,this):l};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,s,N,n,v,w,K,E,J){function L(a,b){try{a.addClass(b)}catch(c){}}
|
||||
function F(a,b,c,d,e){a instanceof D||(a=D(a));r(a,function(b,c){b.nodeType==mb&&b.nodeValue.match(/\S+/)&&(a[c]=D(b).wrap("<span></span>").parent()[0])});var f=da(a,b,a,c,d,e);F.$$addScopeClass(a);var g=null;return function(b,c,d){Rb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?D(U(g,D("<div>").append(a).html())):
|
||||
c?Ka.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);F.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function da(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,q,s,n,w;if(p)for(w=Array(c.length),q=0;q<h.length;q+=3)f=h[q],w[f]=c[f];else w=c;q=0;for(s=h.length;q<s;)k=w[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(l=a.$new(),F.$$addScopeInfo(D(k),l)):l=a,n=c.transcludeOnThisElement?I(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?I(a,
|
||||
b):null,c(f,l,k,d,n)):f&&f(a,k.childNodes,u,e)}for(var h=[],k,l,q,s,p,n=0;n<a.length;n++){k=new V;l=W(a[n],[],k,0===n?d:u,e);(f=l.length?aa(l,a[n],k,b,c,null,[],[],f):null)&&f.scope&&F.$$addScopeClass(k.$$element);k=f&&f.terminal||!(q=a[n].childNodes)||!q.length?null:da(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(n,f,k),s=!0,p=p||f;f=null}return s?g:null}function I(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,
|
||||
{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function W(b,c,g,h,k){var l=g.$attr,q;switch(b.nodeType){case na:ea(c,wa(ua(b)),"E",h,k);for(var s,n,w,N=b.attributes,K=0,t=N&&N.length;K<t;K++){var J=!1,v=!1;s=N[K];q=s.name;s=P(s.value);n=wa(q);if(w=Ha.test(n))q=Pb(n.substr(6),"-");var L=n.replace(/(Start|End)$/,""),E;a:{var F=L;if(d.hasOwnProperty(F)){E=void 0;for(var F=a.get(F+"Directive"),W=0,r=F.length;W<r;W++)if(E=F[W],E.multiElement){E=!0;break a}}E=!1}E&&n===L+"Start"&&
|
||||
(J=q,v=q.substr(0,q.length-5)+"end",q=q.substr(0,q.length-6));n=wa(q.toLowerCase());l[n]=q;if(w||!g.hasOwnProperty(n))g[n]=s,Kc(b,n)&&(g[n]=!0);R(b,c,s,n,w);ea(c,n,"A",h,k,J,v)}b=b.className;if(z(b)&&""!==b)for(;q=f.exec(b);)n=wa(q[2]),ea(c,n,"C",h,k)&&(g[n]=P(q[3])),b=b.substr(q.index+q[0].length);break;case mb:T(c,b.nodeValue);break;case 8:try{if(q=e.exec(b.nodeValue))n=wa(q[1]),ea(c,n,"M",h,k)&&(g[n]=P(q[2]))}catch(da){}}c.sort(A);return c}function ba(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&
|
||||
a.hasAttribute(b)){do{if(!a)throw ka("uterdir",b,c);a.nodeType==na&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return D(d)}function S(a,b,c){return function(d,e,f,g,h){e=ba(e[0],b,c);return a(d,e,f,g,h)}}function aa(a,d,e,f,g,k,l,s,p){function w(a,b,c,d){if(a){c&&(a=S(a,c,d));a.require=M.require;a.directiveName=fa;if(I===M||M.$$isolateScope)a=Y(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=S(b,c,d));b.require=M.require;b.directiveName=fa;if(I===
|
||||
M||M.$$isolateScope)b=Y(b,{isolateScope:!0});s.push(b)}}function K(a,b,c,d){var e,f="data",g=!1,k=c,l;if(z(b)){l=b.match(h);b=b.substring(l[0].length);l[3]&&(l[1]?l[3]=null:l[1]=l[3]);"^"===l[1]?f="inheritedData":"^^"===l[1]&&(f="inheritedData",k=c.parent());"?"===l[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||k[f]("$"+b+"Controller");if(!e&&!g)throw ka("ctreq",b,a);return e||null}x(b)&&(e=[],r(b,function(b){e.push(K(a,b,c,d))}));return e}function J(a,c,f,g,h){function k(a,b,c){var d;
|
||||
Ta(a)||(c=b,b=a,a=u);ya&&(d=L);c||(c=ya?W.parent():W);return h(a,b,d,c,Xb)}var p,w,t,v,L,db,W,S;d===f?(S=e,W=e.$$element):(W=D(f),S=new V(W,e));I&&(v=c.$new(!0));h&&(db=k,db.$$boundTransclude=h);E&&(da={},L={},r(E,function(a){var b={$scope:a===I||a.$$isolateScope?v:c,$element:W,$attrs:S,$transclude:db};t=a.controller;"@"==t&&(t=S[a.name]);b=n(t,b,!0,a.controllerAs);L[a.name]=b;ya||W.data("$"+a.name+"Controller",b.instance);da[a.name]=b}));if(I){F.$$addScopeInfo(W,v,!0,!(aa&&(aa===I||aa===I.$$originalDirective)));
|
||||
F.$$addScopeClass(W,!0);g=da&&da[I.name];var ba=v;g&&g.identifier&&!0===I.bindToController&&(ba=g.instance);r(v.$$isolateBindings=I.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,k,l;switch(a.mode){case "@":S.$observe(e,function(a){ba[d]=a});S.$$observers[e].$$scope=c;S[e]&&(ba[d]=b(S[e])(c));break;case "=":if(f&&!S[e])break;h=N(S[e]);l=h.literal?ga:function(a,b){return a===b||a!==a&&b!==b};k=h.assign||function(){g=ba[d]=h(c);throw ka("nonassign",S[e],I.name);};g=ba[d]=h(c);f=function(a){l(a,
|
||||
ba[d])||(l(a,g)?k(c,a=ba[d]):ba[d]=a);return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(S[e],f):c.$watch(N(S[e],f),null,h.literal);v.$on("$destroy",f);break;case "&":h=N(S[e]),ba[d]=function(a){return h(c,a)}}})}da&&(r(da,function(a){a()}),da=null);g=0;for(p=l.length;g<p;g++)w=l[g],Z(w,w.isolateScope?v:c,W,S,w.require&&K(w.directiveName,w.require,W,L),db);var Xb=c;I&&(I.template||null===I.templateUrl)&&(Xb=v);a&&a(Xb,f.childNodes,u,h);for(g=s.length-1;0<=g;g--)w=s[g],Z(w,w.isolateScope?
|
||||
v:c,W,S,w.require&&K(w.directiveName,w.require,W,L),db)}p=p||{};for(var v=-Number.MAX_VALUE,L,E=p.controllerDirectives,da,I=p.newIsolateScopeDirective,aa=p.templateDirective,ea=p.nonTlbTranscludeDirective,H=!1,G=!1,ya=p.hasElementTranscludeDirective,T=e.$$element=D(d),M,fa,A,Ha=f,Q,xa=0,R=a.length;xa<R;xa++){M=a[xa];var Cb=M.$$start,$=M.$$end;Cb&&(T=ba(d,Cb,$));A=u;if(v>M.priority)break;if(A=M.scope)M.templateUrl||(O(A)?(Aa("new/isolated scope",I||L,M,T),I=M):Aa("new/isolated scope",I,M,T)),L=L||
|
||||
M;fa=M.name;!M.templateUrl&&M.controller&&(A=M.controller,E=E||{},Aa("'"+fa+"' controller",E[fa],M,T),E[fa]=M);if(A=M.transclude)H=!0,M.$$tlb||(Aa("transclusion",ea,M,T),ea=M),"element"==A?(ya=!0,v=M.priority,A=T,T=e.$$element=D(X.createComment(" "+fa+": "+e[fa]+" ")),d=T[0],Db(g,Ya.call(A,0),d),Ha=F(A,f,v,k&&k.name,{nonTlbTranscludeDirective:ea})):(A=D(Ub(d)).contents(),T.empty(),Ha=F(A,f));if(M.template)if(G=!0,Aa("template",aa,M,T),aa=M,A=B(M.template)?M.template(T,e):M.template,A=Pc(A),M.replace){k=
|
||||
M;A=Sb.test(A)?Qc(U(M.templateNamespace,P(A))):[];d=A[0];if(1!=A.length||d.nodeType!==na)throw ka("tplrt",fa,"");Db(g,T,d);R={$attr:{}};A=W(d,[],R);var pf=a.splice(xa+1,a.length-(xa+1));I&&y(A);a=a.concat(A).concat(pf);C(e,R);R=a.length}else T.html(A);if(M.templateUrl)G=!0,Aa("template",aa,M,T),aa=M,M.replace&&(k=M),J=of(a.splice(xa,a.length-xa),T,e,g,H&&Ha,l,s,{controllerDirectives:E,newIsolateScopeDirective:I,templateDirective:aa,nonTlbTranscludeDirective:ea}),R=a.length;else if(M.compile)try{Q=
|
||||
M.compile(T,e,Ha),B(Q)?w(null,Q,Cb,$):Q&&w(Q.pre,Q.post,Cb,$)}catch(ca){c(ca,va(T))}M.terminal&&(J.terminal=!0,v=Math.max(v,M.priority))}J.scope=L&&!0===L.scope;J.transcludeOnThisElement=H;J.elementTranscludeOnThisElement=ya;J.templateOnThisElement=G;J.transclude=Ha;p.hasElementTranscludeDirective=ya;return J}function y(a){for(var b=0,c=a.length;b<c;b++){var d=b,e;e=G(Object.create(a[b]),{$$isolateScope:!0});a[d]=e}}function ea(b,e,f,g,h,k,l){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;
|
||||
e=a.get(e+"Directive");for(var s=0,n=e.length;s<n;s++)try{if(q=e[s],(g===u||g>q.priority)&&-1!=q.restrict.indexOf(f)){if(k){var w={$$start:k,$$end:l};q=G(Object.create(q),w)}b.push(q);h=q}}catch(N){c(N)}}return h}function C(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(L(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+
|
||||
b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function of(a,b,c,d,e,f,g,h){var k=[],l,q,p=b[0],n=a.shift(),w=G({},n,{templateUrl:null,transclude:null,replace:null,$$originalDirective:n}),N=B(n.templateUrl)?n.templateUrl(b,c):n.templateUrl,t=n.templateNamespace;b.empty();s(K.getTrustedResourceUrl(N)).then(function(s){var K,v;s=Pc(s);if(n.replace){s=Sb.test(s)?Qc(U(t,P(s))):[];K=s[0];if(1!=s.length||K.nodeType!==na)throw ka("tplrt",n.name,N);s={$attr:{}};
|
||||
Db(d,b,K);var J=W(K,[],s);O(n.scope)&&y(J);a=J.concat(a);C(c,s)}else K=p,b.html(s);a.unshift(w);l=aa(a,K,c,e,b,n,f,g,h);r(d,function(a,c){a==K&&(d[c]=b[0])});for(q=da(b[0].childNodes,e);k.length;){s=k.shift();v=k.shift();var E=k.shift(),F=k.shift(),J=b[0];if(!s.$$destroyed){if(v!==p){var S=v.className;h.hasElementTranscludeDirective&&n.replace||(J=Ub(K));Db(E,D(v),J);L(D(J),S)}v=l.transcludeOnThisElement?I(s,l.transclude,F):F;l(q,s,J,d,v)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?
|
||||
k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=I(b,l.transclude,e)),l(q,b,c,d,a)))}}function A(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Aa(a,b,c,d){if(b)throw ka("multidir",b.name,c.name,a,va(d));}function T(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&F.$$addBindingClass(a);return function(a,c){var e=c.parent();b||F.$$addBindingClass(e);F.$$addBindingInfo(e,d.expressions);a.$watch(d,
|
||||
function(a){c[0].nodeValue=a})}}})}function U(a,b){a=Q(a||"html");switch(a){case "svg":case "math":var c=X.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function xa(a,b){if("srcdoc"==b)return K.HTML;var c=ua(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return K.RESOURCE_URL}function R(a,c,d,e,f){var h=b(d,!0);if(h){if("multiple"===e&&"select"===ua(a))throw ka("selmulti",va(a));c.push({priority:100,compile:function(){return{pre:function(c,
|
||||
d,l){d=l.$$observers||(l.$$observers={});if(k.test(e))throw ka("nodomevents");l[e]&&(h=b(l[e],!0,xa(a,e),g[e]||f))&&(l[e]=h(c),(d[e]||(d[e]=[])).$$inter=!0,(l.$$observers&&l.$$observers[e].$$scope||c).$watch(h,function(a,b){"class"===e&&a!=b?l.$updateClass(a,b):l.$set(e,a)}))}}}})}}function Db(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=
|
||||
c);break}f&&f.replaceChild(c,d);a=X.createDocumentFragment();a.appendChild(d);D(c).data(D(d).data());ra?(Qb=!0,ra.cleanData([d])):delete D.cache[d[D.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],D(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Y(a,b){return G(function(){return a.apply(null,arguments)},a,b)}function Z(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,va(d))}}var V=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr=
|
||||
{};this.$$element=a};V.prototype={$normalize:wa,$addClass:function(a){a&&0<a.length&&E.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&E.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Rc(a,b);c&&c.length&&E.addClass(this.$$element,c);(c=Rc(b,a))&&c.length&&E.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Kc(f,a),h=hf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=
|
||||
e=Pb(a,"-"));g=ua(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=J(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=P(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(h)?k:/(,)/,h=h.split(k),k=Math.floor(h.length/2),l=0;l<k;l++)var q=2*l,g=g+J(P(h[q]),!0),g=g+(" "+P(h[q+1]));h=P(h[2*l]).split(/\s/);g+=J(P(h[0]),!0);2===h.length&&(g+=" "+P(h[1]));this[a]=b=g}!1!==d&&(null===b||b===u?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&
|
||||
r(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ia()),e=d[a]||(d[a]=[]);e.push(b);v.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Va(e,b)}}};var ya=b.startSymbol(),fa=b.endSymbol(),Pc="{{"==ya||"}}"==fa?oa:function(a){return a.replace(/\{\{/g,ya).replace(/}}/g,fa)},Ha=/^ngAttr[A-Z]/;F.$$addBindingInfo=l?function(a,b){var c=a.data("$binding")||[];x(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:H;
|
||||
F.$$addBindingClass=l?function(a){L(a,"ng-binding")}:H;F.$$addScopeInfo=l?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:H;F.$$addScopeClass=l?function(a,b){L(a,b?"ng-isolate-scope":"ng-scope")}:H;return F}]}function wa(b){return bb(b.replace(qf,""))}function Rc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Qc(b){b=D(b);var a=b.length;
|
||||
if(1>=a)return b;for(;a--;)8===b[a].nodeType&&rf.call(b,a,1);return b}function De(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){La(a,"controller");O(a)?G(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!O(a.$scope))throw A("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,k,l){var m,p,q;k=!0===k;l&&z(l)&&(q=l);z(g)&&(l=g.match(c),p=l[1],q=q||l[3],g=b.hasOwnProperty(p)?b[p]:uc(h.$scope,p,
|
||||
!0)||(a?uc(e,p,!0):u),pb(g,p,!0));if(k)return k=(x(g)?g[g.length-1]:g).prototype,m=Object.create(k),q&&f(h,q,m,p||g.name),G(function(){d.invoke(g,m,h,p);return m},{instance:m,identifier:q});m=d.instantiate(g,h,p);q&&f(h,q,m,p||g.name);return m}}]}function Ee(){this.$get=["$window",function(b){return D(b.document)}]}function Fe(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Yb(b,a){if(z(b)){b=b.replace(sf,"");var c=a("Content-Type");if(c&&0===c.indexOf(Sc)&&
|
||||
b.trim()||tf.test(b)&&uf.test(b))b=oc(b)}return b}function Tc(b){var a=ia(),c,d,e;if(!b)return a;r(b.split("\n"),function(b){e=b.indexOf(":");c=Q(P(b.substr(0,e)));d=P(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Uc(b){var a=O(b)?b:u;return function(c){a||(a=Tc(b));return c?(c=a[Q(c)],void 0===c&&(c=null),c):a}}function Vc(b,a,c){if(B(c))return c(b,a);r(c,function(c){b=c(b,a)});return b}function Ie(){var b=this.defaults={transformResponse:[Yb],transformRequest:[function(a){return O(a)&&
|
||||
"[object File]"!==Ja.call(a)&&"[object Blob]"!==Ja.call(a)?Za(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:qa(Zb),put:qa(Zb),patch:qa(Zb)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,k){function l(a){function c(a){var b=G({},a);b.data=a.data?Vc(a.data,a.headers,d.transformResponse):
|
||||
a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}var d={method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},e=function(a){var c=b.headers,d=G({},a.headers),e,f,c=G({},c.common,c[Q(a.method)]);a:for(e in c){a=Q(e);for(f in d)if(Q(f)===a)continue a;d[e]=c[e]}(function(a){var b;r(a,function(c,d){B(c)&&(b=c(),null!=b?a[d]=b:delete a[d])})})(d);return d}(a);if(!ha.isObject(a))throw A("$http")("badreq",a);G(d,a);d.headers=e;d.method=rb(d.method);var f=[function(a){e=
|
||||
a.headers;var d=Vc(a.data,Uc(e),a.transformRequest);C(d)&&r(e,function(a,b){"content-type"===Q(b)&&delete e[b]});C(a.withCredentials)&&!C(b.withCredentials)&&(a.withCredentials=b.withCredentials);return m(a,d,e).then(c,c)},u],g=h.when(d);for(r(t,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){g.then(function(b){a(b.data,b.status,
|
||||
b.headers,d)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,d)});return g};return g}function m(c,f,k){function m(b,c,d,e){function f(){w(c,b,d,e)}F&&(200<=b&&300>b?F.put(I,[b,c,Tc(d),e]):F.remove(I));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function w(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?J.resolve:J.reject)({data:a,status:b,headers:Uc(d),config:c,statusText:e})}function t(a){w(a.data,a.status,qa(a.headers()),a.statusText)}function E(){var a=l.pendingRequests.indexOf(c);
|
||||
-1!==a&&l.pendingRequests.splice(a,1)}var J=h.defer(),L=J.promise,F,r,I=p(c.url,c.params);l.pendingRequests.push(c);L.then(E,E);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(F=O(c.cache)?c.cache:O(b.cache)?b.cache:q);F&&(r=F.get(I),y(r)?r&&B(r.then)?r.then(t,t):x(r)?w(r[1],r[0],qa(r[2]),r[3]):w(r,200,{},"OK"):F.put(I,L));C(r)&&((r=Wc(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:u)&&(k[c.xsrfHeaderName||b.xsrfHeaderName]=r),d(c.method,I,f,m,k,c.timeout,c.withCredentials,
|
||||
c.responseType));return L}function p(a,b){if(!b)return a;var c=[];Cd(b,function(a,b){null===a||C(a)||(x(a)||(a=[a]),r(a,function(a){O(a)&&(a=pa(a)?a.toISOString():Za(a));c.push(Ea(b)+"="+Ea(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var q=f("$http"),t=[];r(c,function(a){t.unshift(z(a)?k.get(a):k.invoke(a))});l.pendingRequests=[];(function(a){r(arguments,function(a){l[a]=function(b,c){return l(G(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,
|
||||
function(a){l[a]=function(b,c,d){return l(G(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");l.defaults=b;return l}]}function vf(){return new U.XMLHttpRequest}function Je(){this.$get=["$browser","$window","$document",function(b,a,c){return wf(b,vf,b.defer,a.angular.callbacks,c[0])}]}function wf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);
|
||||
e.body.removeChild(f);f=null;var g=-1,t="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),t=a.type,g="error"===a.type?404:200);c&&c(g,t)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,k,l,m,p,q,t){function s(){v&&v();w&&w.abort()}function N(a,d,e,f,g){E!==u&&c.cancel(E);v=w=null;a(d,e,f,g);b.$$completeOutstandingRequest(H)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==Q(e)){var n="_"+(d.counter++).toString(36);
|
||||
d[n]=function(a){d[n].data=a;d[n].called=!0};var v=f(h.replace("JSON_CALLBACK","angular.callbacks."+n),n,function(a,b){N(l,a,d[n].data,"",b);d[n]=H})}else{var w=a();w.open(e,h,!0);r(m,function(a,b){y(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText||"",b="response"in w?w.response:w.responseText,c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==Ba(h).protocol?404:0);N(l,c,b,w.getAllResponseHeaders(),a)};e=function(){N(l,-1,null,null,"")};w.onerror=e;w.onabort=e;q&&(w.withCredentials=
|
||||
!0);if(t)try{w.responseType=t}catch(K){if("json"!==t)throw K;}w.send(k||null)}if(0<p)var E=c(s,p);else p&&B(p.then)&&p.then(s)}}function Ge(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,t,s){function N(c){return c.replace(l,b).replace(m,a)}function n(a){try{var b=a;a=t?e.getTrusted(t,b):e.valueOf(b);var c;if(s&&!y(a))c=
|
||||
a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=Za(a)}c=a}return c}catch(g){c=$b("interr",f,g.toString()),d(c)}}s=!!s;for(var v,w,K=0,E=[],J=[],L=f.length,F=[],r=[];K<L;)if(-1!=(v=f.indexOf(b,K))&&-1!=(w=f.indexOf(a,v+h)))K!==v&&F.push(N(f.substring(K,v))),K=f.substring(v+h,w),E.push(K),J.push(c(K,n)),K=w+k,r.push(F.length),F.push("");else{K!==L&&F.push(N(f.substring(K)));break}if(t&&1<F.length)throw $b("noconcat",f);if(!g||E.length){var I=function(a){for(var b=
|
||||
0,c=E.length;b<c;b++){if(s&&C(a[b]))return;F[r[b]]=a[b]}return F.join("")};return G(function(a){var b=0,c=E.length,e=Array(c);try{for(;b<c;b++)e[b]=J[b](a);return I(e)}catch(g){a=$b("interr",f,g.toString()),d(a)}},{exp:f,expressions:E,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(J,function(c,e){var f=I(c);B(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,k=a.length,l=new RegExp(b.replace(/./g,f),"g"),m=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=
|
||||
function(){return a};return g}]}function He(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,k,l){var m=a.setInterval,p=a.clearInterval,q=0,t=y(l)&&!l,s=(t?d:c).defer(),N=s.promise;k=y(k)?k:0;N.then(null,null,e);N.$$intervalId=m(function(){s.notify(q++);0<k&&q>=k&&(s.resolve(q),p(N.$$intervalId),delete f[N.$$intervalId]);t||b.$apply()},h);f[N.$$intervalId]=s;return N}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),
|
||||
delete f[b.$$intervalId],!0):!1};return e}]}function Pd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
|
||||
DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=nb(b[a]);return b.join("/")}function Xc(b,a){var c=Ba(b);a.$$protocol=
|
||||
c.protocol;a.$$host=c.hostname;a.$$port=$(c.port)||xf[c.protocol]||null}function Yc(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=qc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function za(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ga(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Zc(b){return b.replace(/(#.+)|#$/,
|
||||
"$1")}function bc(b){return b.substr(0,Ga(b).lastIndexOf("/")+1)}function cc(b,a){this.$$html5=!0;a=a||"";var c=bc(b);Xc(b,this);this.$$parse=function(a){var b=za(c,a);if(!z(b))throw Eb("ipthprfx",a,c);Yc(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Nb(this.$$search),b=this.$$hash?"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),
|
||||
!0;var f,g;(f=za(b,d))!==u?(g=f,g=(f=za(a,f))!==u?c+(za("/",f)||f):b+g):(f=za(c,d))!==u?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function dc(b,a){var c=bc(b);Xc(b,this);this.$$parse=function(d){d=za(b,d)||za(c,d);var e;"#"===d.charAt(0)?(e=za(a,d),C(e)&&(e=d)):e=this.$$html5?d:"";Yc(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?
|
||||
"#"+nb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ga(b)==Ga(a)?(this.$$parse(a),!0):!1}}function $c(b,a){this.$$html5=!0;dc.apply(this,arguments);var c=bc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ga(d)?f=d:(g=za(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?"#"+nb(this.$$hash):
|
||||
"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Fb(b){return function(){return this[b]}}function ad(b,a){return function(c){if(C(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Ke(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Ua(b)?(a.enabled=b,this):O(b)?(Ua(b.enabled)&&(a.enabled=b.enabled),Ua(b.requireBase)&&(a.requireBase=b.requireBase),Ua(b.rewriteLinks)&&
|
||||
(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function h(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,l;l=d.baseHref();var m=d.url(),p;if(a.enabled){if(!l&&a.requireBase)throw Eb("nobase");p=m.substring(0,m.indexOf("/",m.indexOf("//")+2))+(l||"/");l=e.history?cc:$c}else p=Ga(m),
|
||||
l=dc;k=new l(p,"#"+b);k.$$parseLinkUrl(m,m);k.$$state=d.state();var q=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&2!=b.which){for(var e=D(b.target);"a"!==ua(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var g=e.prop("href"),h=e.attr("href")||e.attr("xlink:href");O(g)&&"[object SVGAnimatedString]"===g.toString()&&(g=Ba(g.animVal).href);q.test(g)||!g||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(g,h)||(b.preventDefault(),k.absUrl()!=
|
||||
d.url()&&(c.$apply(),U.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=m&&d.url(k.absUrl(),!0);var t=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,g(d,!1,e)):(t=!1,h(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=Zc(d.url()),b=Zc(k.absUrl()),f=d.state(),l=k.$$replace,q=a!==b||k.$$html5&&e.history&&f!==k.$$state;
|
||||
if(t||q)t=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(q&&g(b,l,f===k.$$state?null:k.$$state),h(a,f)))});k.$$replace=!1});return k}]}function Le(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&
|
||||
(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||H;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];r(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function sa(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===
|
||||
b||"__proto__"===b)throw la("isecfld",a);return b}function ta(b,a){if(b){if(b.constructor===b)throw la("isecfn",a);if(b.window===b)throw la("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw la("isecdom",a);if(b===Object)throw la("isecobj",a);}return b}function ec(b){return b.constant}function Na(b,a,c,d){ta(b,d);a=a.split(".");for(var e,f=0;1<a.length;f++){e=sa(a.shift(),d);var g=ta(b[e],d);g||(g={},b[e]=g);b=g}e=sa(a.shift(),d);ta(b[e],d);return b[e]=c}function Oa(b){return"constructor"==
|
||||
b}function bd(b,a,c,d,e,f,g){sa(b,f);sa(a,f);sa(c,f);sa(d,f);sa(e,f);var h=function(a){return ta(a,f)},k=g||Oa(b)?h:oa,l=g||Oa(a)?h:oa,m=g||Oa(c)?h:oa,p=g||Oa(d)?h:oa,q=g||Oa(e)?h:oa;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=k(h[b]);if(!a)return h;if(null==h)return u;h=l(h[a]);if(!c)return h;if(null==h)return u;h=m(h[c]);if(!d)return h;if(null==h)return u;h=p(h[d]);return e?null==h?u:h=q(h[e]):h}}function yf(b,a){return function(c,d){return b(c,d,ta,a)}}function cd(b,
|
||||
a,c){var d=a.expensiveChecks,e=d?zf:Af,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?bd(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;do f=bd(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=u,a=f;while(e<h);return f};else{var k="";d&&(k+="s = eso(s, fe);\nl = eso(l, fe);\n");var l=d;r(g,function(a,b){sa(a,c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Oa(a))e="eso("+e+", fe)",l=!0;k+="if(s == null) return undefined;\ns="+e+";\n"});k+="return s;";a=new Function("s",
|
||||
"l","eso","fe",k);a.toString=ca(k);l&&(a=yf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c){return Na(a,b,c,b)};return e[b]=f}function fc(b){return B(b.valueOf)?b.valueOf():Bf.call(b)}function Me(){var b=ia(),a=ia();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===
|
||||
b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var k=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,k)||(h=d(a),k=b&&fc(b));return h},b,c)}for(var l=[],q=0,p=e.length;q<p;q++)l[q]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var k=e[c](a);if(b||(b=!g(k,l[c])))l[c]=k&&fc(k)}b&&(h=d(a));
|
||||
return h},b,c)}function k(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;B(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function l(a,b,c,d){function e(a){var b=!0;r(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;B(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){B(b)&&
|
||||
b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==l&&c!==k?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}var q={csp:d.csp,expensiveChecks:!1},t={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var v,w,K;switch(typeof d){case "string":K=d=d.trim();var E=g?a:b;v=E[K];
|
||||
v||(":"===d.charAt(0)&&":"===d.charAt(1)&&(w=!0,d=d.substring(2)),g=g?t:q,v=new gc(g),v=(new eb(v,c,g)).parse(d),v.constant?v.$$watchDelegate=m:w?(v=e(v),v.$$watchDelegate=v.literal?l:k):v.inputs&&(v.$$watchDelegate=h),E[K]=v);return p(v,f);case "function":return p(d,f);default:return p(H,f)}}}]}function Oe(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return dd(function(a){b.$evalAsync(a)},a)}]}function Pe(){this.$get=["$browser","$exceptionHandler",function(b,a){return dd(function(a){b.defer(a)},
|
||||
a)}]}function dd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=u;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{B(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),
|
||||
a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=A("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return l(b,!0,a)},function(b){return l(b,!1,a)},b)}};
|
||||
g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(O(b)||B(b))d=b&&b.then;B(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=
|
||||
a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(B(b)?b(c):c)}catch(h){a(h)}}})}};var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},l=function(a,b,c){var d=null;try{B(c)&&(d=c())}catch(e){return k(e,!1)}return d&&B(d.then)?d.then(function(){return k(a,b)},function(a){return k(a,!1)}):
|
||||
k(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function t(a){if(!B(a))throw h("norslvr",a);if(!(this instanceof t))return new t(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){var b=new g;b.reject(a);return b.promise};p.when=m;p.all=function(a){var b=new g,c=0,d=x(a)?[]:{};r(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||
|
||||
b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function Ye(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.mozCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Ne(){var b=10,
|
||||
a=A("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(e,f,g,h){function k(){this.$id=++kb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function l(b){if(s.$$phase)throw a("inprog",s.$$phase);s.$$phase=b}function m(a,
|
||||
b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function p(){}function q(){for(;v.length;)try{v.shift()()}catch(a){f(a)}d=null}function t(){null===d&&(d=h.defer(function(){s.$apply(q)}))}k.prototype={constructor:k,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new k,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners=
|
||||
{};this.$$listenerCount={};this.$id=++kb;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope);d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?(b.$$childTail.$$nextSibling=d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:p,get:e,exp:a,eq:!!d};c=null;B(b)||(h.fn=H);f||(f=this.$$watchers=[]);f.unshift(h);
|
||||
return function(){Va(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,
|
||||
b){function c(a){e=a;var b,d,g,h;if(!C(e)){if(O(e))if(Ra(e))for(f!==p&&(f=p,t=f.length=0,l++),a=e.length,t!==a&&(l++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==m&&(f=m={},t=0,l++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(t++,f[b]=g,l++));if(t>a)for(b in l++,f)e.hasOwnProperty(b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,q=g(a,c),p=[],m=
|
||||
{},n=!0,t=0;return this.$watch(q,function(){n?(n=!1,b(e,e,d)):b(e,h,d);if(k)if(O(e))if(Ra(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)rc.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var e,g,k,m,t,v,r=b,I,u=[],y,S;l("$digest");h.$$checkUrlChange();this===s&&null!==d&&(h.defer.cancel(d),q());c=null;do{v=!1;for(I=this;N.length;){try{S=N.shift(),S.scope.$eval(S.expression)}catch(A){f(A)}c=null}a:do{if(m=I.$$watchers)for(t=m.length;t--;)try{if(e=m[t])if((g=
|
||||
e.get(I))!==(k=e.last)&&!(e.eq?ga(g,k):"number"===typeof g&&"number"===typeof k&&isNaN(g)&&isNaN(k)))v=!0,c=e,e.last=e.eq?Da(g,null):g,e.fn(g,k===p?g:k,I),5>r&&(y=4-r,u[y]||(u[y]=[]),u[y].push({msg:B(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:g,oldVal:k}));else if(e===c){v=!1;break a}}catch(D){f(D)}if(!(m=I.$$childHead||I!==this&&I.$$nextSibling))for(;I!==this&&!(m=I.$$nextSibling);)I=I.$parent}while(I=m);if((v||N.length)&&!r--)throw s.$$phase=null,a("infdig",b,u);}while(v||N.length);
|
||||
for(s.$$phase=null;n.length;)try{n.shift()()}catch(ea){f(ea)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==s){for(var b in this.$$listenerCount)m(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);
|
||||
this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=H;this.$on=this.$watch=this.$watchGroup=function(){return H};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){s.$$phase||N.length||h.defer(function(){N.length&&s.$digest()});N.push({scope:this,expression:a})},$$postDigest:function(a){n.push(a)},$apply:function(a){try{return l("$apply"),
|
||||
this.$eval(a)}catch(b){f(b)}finally{s.$$phase=null;try{s.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&v.push(b);t()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,m(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,
|
||||
stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=Xa([h],arguments,1),l,q;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(q=d.length;l<q;l++)if(d[l])try{d[l].apply(null,k)}catch(m){f(m)}else d.splice(l,1),l--,q--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;
|
||||
for(var g=Xa([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){f(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var s=new k,N=s.$$asyncQueue=[],n=s.$$postDigestQueue=[],v=s.$$applyAsyncQueue=[];return s}]}function Qd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;
|
||||
this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Ba(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function Cf(b){if("self"===b)return b;if(z(b)){if(-1<b.indexOf("***"))throw Ca("iwcard",b);b=ed(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(lb(b))return new RegExp("^"+b.source+"$");throw Ca("imatcher");}function fd(b){var a=
|
||||
[];y(b)&&r(b,function(b){a.push(Cf(b))});return a}function Re(){this.SCE_CONTEXTS=ma;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=fd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=fd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?Wc(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};
|
||||
b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ca("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[ma.HTML]=e(g);h[ma.CSS]=e(g);h[ma.URL]=e(g);h[ma.JS]=e(g);h[ma.RESOURCE_URL]=e(h[ma.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ca("icontext",a,b);if(null===b||b===u||""===b)return b;if("string"!==typeof b)throw Ca("itype",a);return new c(b)},getTrusted:function(c,e){if(null===
|
||||
e||e===u||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===ma.RESOURCE_URL){var g=Ba(e.toString()),p,q,t=!1;p=0;for(q=b.length;p<q;p++)if(d(b[p],g)){t=!0;break}if(t)for(p=0,q=a.length;p<q;p++)if(d(a[p],g)){t=!1;break}if(t)return e;throw Ca("insecurl",e.toString());}if(c===ma.HTML)return f(e);throw Ca("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Qe(){var b=!0;this.enabled=function(a){arguments.length&&
|
||||
(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Pa)throw Ca("iequirks");var d=qa(ma);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=oa);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;r(ma,function(a,b){var c=Q(b);d[bb("parse_as_"+c)]=function(b){return e(a,
|
||||
b)};d[bb("get_trusted_"+c)]=function(b){return f(a,b)};d[bb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Se(){this.$get=["$window","$document",function(b,a){var c={},d=$((/android (\d+)/.exec(Q((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,m=!1;if(k){for(var p in k)if(l=h.exec(p)){g=l[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");
|
||||
l=!!("transition"in k||g+"Transition"in k);m=!!("animation"in k||g+"Animation"in k);!d||l&&m||(l=z(f.body.style.webkitTransition),m=z(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Pa)return!1;if(C(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:$a(),vendorPrefix:g,transitions:l,animations:m,android:d}}]}function Ue(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;
|
||||
var g=a.defaults&&a.defaults.transformResponse;x(g)?g=g.filter(function(a){return a!==Yb}):g===Yb&&(g=null);return a.get(e,{cache:b,transformResponse:g}).then(function(a){d.totalPendingRequests--;return a.data},function(a){d.totalPendingRequests--;if(!f)throw ka("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Ve(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var d=
|
||||
ha.element(a).data("$binding");d&&r(d,function(d){c?(new RegExp("(^|\\s)"+ed(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function We(){this.$get=
|
||||
["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,k,l){var m=y(l)&&!l,p=(m?d:c).defer(),q=p.promise;k=a.defer(function(){try{p.resolve(f())}catch(a){p.reject(a),e(a)}finally{delete g[q.$$timeoutId]}m||b.$apply()},k);q.$$timeoutId=k;g[k]=p;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Ba(b){Pa&&(Z.setAttribute("href",b),b=Z.href);
|
||||
Z.setAttribute("href",b);return{href:Z.href,protocol:Z.protocol?Z.protocol.replace(/:$/,""):"",host:Z.host,search:Z.search?Z.search.replace(/^\?/,""):"",hash:Z.hash?Z.hash.replace(/^#/,""):"",hostname:Z.hostname,port:Z.port,pathname:"/"===Z.pathname.charAt(0)?Z.pathname:"/"+Z.pathname}}function Wc(b){b=z(b)?Ba(b):b;return b.protocol===gd.protocol&&b.host===gd.host}function Xe(){this.$get=ca(U)}function Cc(b){function a(c,d){if(O(c)){var e={};r(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+
|
||||
"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",hd);a("date",id);a("filter",Df);a("json",Ef);a("limitTo",Ff);a("lowercase",Gf);a("number",jd);a("orderBy",kd);a("uppercase",Hf)}function Df(){return function(b,a,c){if(!x(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=If(a,c,d);break;default:return b}return b.filter(a)}}function If(b,a,c){!0===a?a=ga:B(a)||
|
||||
(a=function(a,b){if(O(a)||O(b))return!1;a=Q(""+a);b=Q(""+b);return-1!==a.indexOf(b)});return function(d){return fb(d,b,a,c)}}function fb(b,a,c,d){var e=typeof b,f=typeof a;if("string"===f&&"!"===a.charAt(0))return!fb(b,a.substring(1),c,d);if("array"===e)return b.some(function(b){return fb(b,a,c,d)});switch(e){case "object":var g;if(d){for(g in b)if("$"!==g.charAt(0)&&fb(b[g],a,c))return!0;return!1}if("object"===f){for(g in a)if(e=a[g],!B(e)&&(f="$"===g,!fb(f?b:b[g],e,c,f)))return!1;return!0}return c(b,
|
||||
a);case "function":return!1;default:return c(b,a)}}function hd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){C(d)&&(d=a.CURRENCY_SYM);C(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:ld(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:ld(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function ld(b,a,c,d,e){if(!isFinite(b)||O(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",k=[],l=!1;if(-1!==g.indexOf("e")){var m=
|
||||
g.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?b=0:(h=g,l=!0)}if(l)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));else{g=(g.split(md)[1]||"").length;C(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(md),l=g[0],g=g[1]||"",p=0,q=a.lgSize,t=a.gSize;if(l.length>=q+t)for(p=l.length-q,m=0;m<p;m++)0===(p-m)%t&&0!==m&&(h+=c),h+=l.charAt(m);for(m=p;m<l.length;m++)0===(l.length-m)%q&&0!==m&&(h+=c),h+=l.charAt(m);for(;g.length<
|
||||
e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0,e))}0===b&&(f=!1);k.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return k.join("")}function Gb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function V(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function nd(b){var a=(new Date(b,0,1)).getDay();
|
||||
return new Date(b,0,(4>=a?5:12)-a)}function od(b){return function(a){var c=nd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function id(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=$(b[9]+b[10]),g=$(b[9]+b[11]));h.call(a,$(b[1]),$(b[2])-1,$(b[3]));f=$(b[4]||0)-f;g=$(b[5]||0)-g;h=$(b[6]||0);b=Math.round(1E3*parseFloat("0."+
|
||||
(b[7]||0)));k.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],k,l;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;z(c)&&(c=Jf.test(c)?$(c):a(c));Y(c)&&(c=new Date(c));if(!pa(c))return c;for(;e;)(l=Kf.exec(e))?(h=Xa(h,l,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));r(h,function(a){k=Lf[a];g+=k?k(c,b.DATETIME_FORMATS):
|
||||
a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ef(){return function(b,a){C(a)&&(a=2);return Za(b,a)}}function Ff(){return function(b,a){Y(b)&&(b=b.toString());if(!x(b)&&!z(b))return b;a=Infinity===Math.abs(Number(a))?Number(a):$(a);if(z(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0<a?(d=0,e=a):(d=b.length+a,e=b.length);for(;d<e;d++)c.push(b[d]);return c}}function kd(b){return function(a,c,d){function e(a,b){return b?
|
||||
function(b,c){return a(c,b)}:a}function f(a,b){var c=typeof a,d=typeof b;return c===d&&"object"===c&&(c=typeof(a.valueOf?a=a.valueOf():a),d=typeof(b.valueOf?b=b.valueOf():b),c===d&&"object"===c&&(c=typeof(a.toString?a=a.toString():a),d=typeof(b.toString?b=b.toString():b),c===d&&a===b||"object"===c))?0:c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Ra(a))return a;c=x(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||oa;if(z(a)){if("+"==a.charAt(0)||
|
||||
"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(function(a,b){return f(a,b)},c);d=b(a);if(d.constant){var l=d();return e(function(a,b){return f(a[l],b[l])},c)}}return e(function(a,b){return f(d(a),d(b))},c)});return Ya.call(a).sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ia(b){B(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ca(b)}function pd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||
|
||||
Ib;f.$error={};f.$$success={};f.$pending=u;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){r(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){r(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){La(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&
|
||||
f[a.$name]===a&&delete f[a.$name];r(f.$pending,function(b,c){f.$setValidity(c,null,a)});r(f.$error,function(b,c){f.$setValidity(c,null,a)});Va(g,a)};qd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Va(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Qa);d.addClass(b,Jb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Qa,Jb+" ng-submitted");
|
||||
f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;r(g,function(a){a.$setPristine()})};f.$setUntouched=function(){r(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function hc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function gb(b,a,c,d,e,f){var g=Q(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;k()})}var k=function(b){l&&(f.defer.cancel(l),
|
||||
l=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=P(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};if(e.hasEvent("input"))a.on("input",k);else{var l,m=function(a,b,c){l||(l=f.defer(function(){l=null;b&&b.value===c||k(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",k);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?
|
||||
"":d.$viewValue)}}function Kb(b,a){return function(c,d){var e,f;if(pa(c))return c;if(z(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(Mf.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,
|
||||
f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function hb(b,a,c,d){return function(e,f,g,h,k,l,m){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return y(a)?pa(a)?a:c(a):u}rd(e,f,g,h);gb(e,f,g,h,k,l);var t=h&&h.$options&&h.$options.timezone,s;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,s),"UTC"===t&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):u});h.$formatters.push(function(a){if(a&&!pa(a))throw Lb("datefmt",a);if(p(a)){if((s=
|
||||
a)&&"UTC"===t){var b=6E4*s.getTimezoneOffset();s=new Date(s.getTime()+b)}return m("date")(a,d,t)}s=null;return""});if(y(g.min)||g.ngMin){var r;h.$validators.min=function(a){return!p(a)||C(r)||c(a)>=r};g.$observe("min",function(a){r=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var n;h.$validators.max=function(a){return!p(a)||C(n)||c(a)<=n};g.$observe("max",function(a){n=q(a);h.$validate()})}}}function rd(b,a,c,d){(d.$$hasNativeValidators=O(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||
|
||||
{};return c.badInput&&!c.typeMismatch?u:b})}function sd(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw A("ngModel")("constexpr",c,d);return b(a)}return e}function qd(b){function a(a,b){b&&!f[a]?(l.addClass(e,a),f[a]=!0):!b&&f[a]&&(l.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+Pb(b,"-"):"";a(ib+b,!0===c);a(td+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,k=b.parentForm,l=b.$animate;f[td]=!(f[ib]=e.hasClass(ib));d.$setValidity=function(b,e,f){e===u?(d.$pending||(d.$pending={}),g(d.$pending,
|
||||
b,f)):(d.$pending&&h(d.$pending,b,f),ud(d.$pending)&&(d.$pending=u));Ua(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(vd,!0),d.$valid=d.$invalid=u,c("",null)):(a(vd,!1),d.$valid=ud(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?u:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);k.$setValidity(b,e,d)}}function ud(b){if(b)for(var a in b)return!1;return!0}function ic(b,a){b="ngClass"+b;return["$animate",
|
||||
function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!x(a)){if(z(a))return a.split(" ");if(O(a)){var b=[];r(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||{},d=[];r(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function l(b){if(!0===
|
||||
a||f.$index%2===a){var l=e(b||[]);if(!m){var t=k(l,1);h.$addClass(t)}else if(!ga(b,m)){var s=e(m),t=d(l,s),l=d(s,l),t=k(t,1),l=k(l,-1);t&&t.length&&c.addClass(g,t);l&&l.length&&c.removeClass(g,l)}}m=qa(b)}var m;f.$watch(h[b],l,!0);h.$observe("class",function(a){l(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[b]));g===a?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}var Nf=/^\/(.+)\/([a-z]*)$/,Q=function(b){return z(b)?b.toLowerCase():
|
||||
b},rc=Object.prototype.hasOwnProperty,rb=function(b){return z(b)?b.toUpperCase():b},Pa,D,ra,Ya=[].slice,rf=[].splice,Of=[].push,Ja=Object.prototype.toString,Wa=A("ng"),ha=U.angular||(U.angular={}),ab,kb=0;Pa=X.documentMode;H.$inject=[];oa.$inject=[];var x=Array.isArray,P=function(b){return z(b)?b.trim():b},ed=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},$a=function(){if(y($a.isActive_))return $a.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]"));
|
||||
if(!b)try{new Function("")}catch(a){b=!0}return $a.isActive_=b},ob=["ng-","data-ng-","ng:","x-ng-"],Kd=/[A-Z]/g,tc=!1,Qb,na=1,mb=3,Od={full:"1.3.6",major:1,minor:3,dot:6,codeName:"robofunky-danceblaster"};R.expando="ng339";var wb=R.cache={},ff=1;R._data=function(b){return this.cache[b[this.expando]]||{}};var af=/([\:\-\_]+(.))/g,bf=/^moz([A-Z])/,Pf={mouseleave:"mouseout",mouseenter:"mouseover"},Tb=A("jqLite"),ef=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Sb=/<|&#?\w+;/,cf=/<([\w:]+)/,df=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
|
||||
ja={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ja.optgroup=ja.option;ja.tbody=ja.tfoot=ja.colgroup=ja.caption=ja.thead;ja.th=ja.td;var Ka=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(U).on("load",a))},
|
||||
toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?D(this[b]):D(this[this.length+b])},length:0,push:Of,sort:[].sort,splice:[].splice},Bb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){Bb[Q(b)]=b});var Lc={};r("input select option textarea button form details".split(" "),function(b){Lc[b]=!0});var Mc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};
|
||||
r({data:Vb,removeData:ub},function(b,a){R[a]=b});r({data:Vb,inheritedData:Ab,scope:function(b){return D.data(b,"$scope")||Ab(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return D.data(b,"$isolateScope")||D.data(b,"$isolateScopeNoTemplate")},controller:Hc,injector:function(b){return Ab(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:xb,css:function(b,a,c){a=bb(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=Q(a);if(Bb[d])if(y(c))c?
|
||||
(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||H).specified?d:u;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?u:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(C(b)){var d=a.nodeType;return d===na||d===mb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(C(a)){if(b.multiple&&"select"===ua(b)){var c=[];r(b.options,function(a){a.selected&&
|
||||
c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(C(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Ic},function(b,a){R.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Ic&&(2==b.length&&b!==xb&&b!==Hc?a:d)===u){if(O(a)){for(e=0;e<g;e++)if(b===Vb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===u?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});
|
||||
r({removeData:ub,on:function a(c,d,e,f){if(y(f))throw Tb("onargs");if(Dc(c)){var g=vb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=jf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],k=g.length;k--;){d=g[k];var l=f[d];l||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Pf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),l=f[d]);l.push(e)}}},off:Gc,one:function(a,c,d){a=D(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,
|
||||
d)},replaceWith:function(a,c){var d,e=a.parentNode;tb(a);r(new R(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];r(a.childNodes,function(a){a.nodeType===na&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===na||11===d){c=new R(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===na){var d=a.firstChild;r(new R(c),function(c){a.insertBefore(c,
|
||||
d)})}},wrap:function(a,c){c=D(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Jc,detach:function(a){Jc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new R(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:zb,removeClass:yb,toggleClass:function(a,c,d){c&&r(c.split(" "),function(c){var f=d;C(f)&&(f=!xb(a,c));(f?zb:yb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},
|
||||
find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Ub,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=vb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:H,type:g,target:a},c.type&&(e=G(e,
|
||||
c)),c=qa(h),f=d?[e].concat(d):[e],r(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,f)})}},function(a,c){R.prototype[c]=function(c,e,f){for(var g,h=0,k=this.length;h<k;h++)C(g)?(g=a(this[h],c,e,f),y(g)&&(g=D(g))):Fc(g,a(this[h],c,e,f));return y(g)?g:this};R.prototype.bind=R.prototype.on;R.prototype.unbind=R.prototype.off});cb.prototype={put:function(a,c){this[Ma(a,this.nextUid)]=c},get:function(a){return this[Ma(a,this.nextUid)]},remove:function(a){var c=this[a=Ma(a,this.nextUid)];delete this[a];
|
||||
return c}};var Oc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,lf=/,/,mf=/^\s*(_?)(\S+?)\1\s*$/,Nc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Fa=A("$injector");Ob.$$annotate=Wb;var Qf=A("$animate"),Ae=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Qf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};
|
||||
this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=ia();r((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});r(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function k(){m||
|
||||
(m=a.defer(),d(function(){m.resolve();m=null}));return m.promise}function l(a,c){if(ha.isObject(c)){var d=G(c.from||{},c.to||{});a.css(d)}}var m;return{animate:function(a,c,d){l(a,{from:c,to:d});return k()},enter:function(a,c,d,e){l(a,e);d?d.after(a):c.prepend(a);return k()},leave:function(a,c){a.remove();return k()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=D(a);c=z(c)?c:x(c)?c.join(" "):"";
|
||||
r(a,function(a){zb(a,c)});l(a,d);return k()},removeClass:function(a,c,d){return this.setClass(a,[],c,d)},$$removeClassImmediately:function(a,c,d){a=D(a);c=z(c)?c:x(c)?c.join(" "):"";r(a,function(a){yb(a,c)});l(a,d);return k()},setClass:function(a,c,d,e){var k=this,l=!1;a=D(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ha.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=x(c)?c:c.split(" ");d=x(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=
|
||||
a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,c);d&&this.$$removeClassImmediately(a,d);l(a,e);return k()},enabled:H,cancel:H}}]}],ka=A("$compile");vc.$inject=["$provide","$$sanitizeUriProvider"];var qf=/^((?:x|data)[\:\-_])/i,Sc="application/json",Zb={"Content-Type":Sc+";charset=utf-8"},
|
||||
tf=/^\s*(\[|\{[^\{])/,uf=/[\}\]]\s*$/,sf=/^\)\]\}',?\n/,$b=A("$interpolate"),Rf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,xf={http:80,https:443,ftp:21},Eb=A("$location"),Sf={$$html5:!1,$$replace:!1,absUrl:Fb("$$absUrl"),url:function(a){if(C(a))return this.$$url;var c=Rf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Fb("$$protocol"),host:Fb("$$host"),port:Fb("$$port"),path:ad("$$path",function(a){a=null!==a?
|
||||
a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(z(a)||Y(a))a=a.toString(),this.$$search=qc(a);else if(O(a))a=Da(a,{}),r(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw Eb("isrcharg");break;default:C(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:ad("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};
|
||||
r([$c,dc,cc],function(a){a.prototype=Object.create(Sf);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==cc||!this.$$html5)throw Eb("nostate");this.$$state=C(c)?null:c;return this}});var la=A("$parse"),Tf=Function.prototype.call,Uf=Function.prototype.apply,Vf=Function.prototype.bind,Mb=ia();r({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;Mb[c]=a});Mb["this"]=
|
||||
function(a){return a};Mb["this"].sharedGetter=!0;var jb=G(ia(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?d+e:d:y(e)?e:u},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,
|
||||
c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Wf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=
|
||||
[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=jb[c],f=jb[d];jb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=
|
||||
a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===
|
||||
a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=Q(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||
|
||||
e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=
|
||||
this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=Wf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var eb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};eb.ZERO=G(function(){return 0},
|
||||
{sharedGetter:!0,constant:!0});eb.prototype={constructor:eb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier?a=this.identifier():this.peek().constant?a=
|
||||
this.constant():this.throwError("not a primary expression",this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw la("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw la("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,
|
||||
e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw la("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=jb[a];return G(function(a,f){return d(a,
|
||||
f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){var f=jb[c];return G(function(c,e){return f(c,e,a,d)},{constant:a.constant&&d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return Mb[a]||cd(a,this.options,this.text)},constant:function(){var a=this.consume().value;return G(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=
|
||||
[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return G(function(f,h){var k=a(f,h);if(e){e[0]=
|
||||
k;for(k=d.length;k--;)e[k+1]=d[k](f,h);return c.apply(u,e)}return c(k)},{constant:!c.$stateful&&f.every(ec),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),G(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&
|
||||
(c=this.assignment(),this.consume(":"))){var d=this.assignment();return G(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=",
|
||||
"===","!==");)a=this.binaryFn(a,c.text,this.relational());return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.binaryFn(a,c.text,this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?
|
||||
this.primary():(a=this.expect("-"))?this.binaryFn(eb.ZERO,a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=this.text,d=this.consume().text,e=cd(d,this.options,c);return G(function(c,d,h){return e(h||a(c,d))},{assign:function(e,g,h){(h=a(e,h))||a.assign(e,h={});return Na(h,d,g,c)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return G(function(e,f){var g=a(e,f),h=d(e,f);sa(h,c);return g?ta(g[h],
|
||||
c):u},{assign:function(e,f,g){var h=sa(d(e,g),c);(g=ta(a(e,g),c))||a.assign(e,g={});return g[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var k=c?c(g,h):y(c)?u:g,l=a(g,h,k)||H;if(f)for(var m=d.length;m--;)f[m]=ta(d[m](g,h),e);ta(k,e);if(l){if(l.constructor===l)throw la("isecfn",e);if(l===Tf||l===Uf||l===Vf)throw la("isecff",e);}k=l.apply?l.apply(k,
|
||||
f):l(f[0],f[1],f[2],f[3],f[4]);return ta(k,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return G(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(ec),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):
|
||||
this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))}this.consume("}");return G(function(d,f){for(var g={},h=0,k=c.length;h<k;h++)g[a[h]]=c[h](d,f);return g},{literal:!0,constant:c.every(ec),inputs:c})}};var Af=ia(),zf=ia(),Bf=Object.prototype.valueOf,Ca=A("$sce"),ma={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ka=A("$compile"),Z=X.createElement("a"),gd=Ba(U.location.href);Cc.$inject=["$provide"];hd.$inject=["$locale"];jd.$inject=
|
||||
["$locale"];var md=".",Lf={yyyy:V("FullYear",4),yy:V("FullYear",2,0,!0),y:V("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:V("Month",2,1),M:V("Month",1,1),dd:V("Date",2),d:V("Date",1),HH:V("Hours",2),H:V("Hours",1),hh:V("Hours",2,-12),h:V("Hours",1,-12),mm:V("Minutes",2),m:V("Minutes",1),ss:V("Seconds",2),s:V("Seconds",1),sss:V("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=
|
||||
a?"+":"")+(Gb(Math[0<a?"floor":"ceil"](a/60),2)+Gb(Math.abs(a%60),2))},ww:od(2),w:od(1)},Kf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,Jf=/^\-?\d+$/;id.$inject=["$locale"];var Gf=ca(Q),Hf=ca(rb);kd.$inject=["$parse"];var Rd=ca({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var f="[object SVGAnimatedString]"===Ja.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}),sb=
|
||||
{};r(Bb,function(a,c){if("multiple"!=a){var d=wa("ng-"+c);sb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,!!a)})}}}}});r(Mc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Nf))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});r(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,
|
||||
link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Ja.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,function(c){c?(f.$set(h,c),Pa&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Ib={$addControl:H,$$renameControl:function(a,c){a.$name=c},$removeControl:H,$setValidity:H,$setDirty:H,$setPristine:H,$setSubmitted:H};pd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var wd=function(a){return["$timeout",function(c){return{name:"form",
|
||||
restrict:a?"EAC":"E",controller:pd,compile:function(a){a.addClass(Qa).addClass(ib);return{pre:function(a,d,g,h){if(!("action"in g)){var k=function(c){a.$apply(function(){h.$commitViewValue();h.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",k,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",k,!1)},0,!1)})}var l=h.$$parentForm,m=h.$name;m&&(Na(a,m,h,m),g.$observe(g.name?"name":"ngForm",function(c){m!==c&&(Na(a,m,u,m),m=c,Na(a,m,h,m),l.$$renameControl(h,
|
||||
m))}));d.on("$destroy",function(){l.$removeControl(h);m&&Na(a,m,u,m);G(h,Ib)})}}}}}]},Sd=wd(),ee=wd(!0),Mf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Xf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Yf=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Zf=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,xd=/^(\d{4})-(\d{2})-(\d{2})$/,yd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
|
||||
jc=/^(\d{4})-W(\d\d)$/,zd=/^(\d{4})-(\d\d)$/,Ad=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,$f=/(\s+|^)default(\s+|$)/,Lb=new A("ngModel"),Bd={text:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e)},date:hb("date",xd,Kb(xd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":hb("datetimelocal",yd,Kb(yd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:hb("time",Ad,Kb(Ad,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:hb("week",jc,function(a,c){if(pa(a))return a;if(z(a)){jc.lastIndex=0;var d=
|
||||
jc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,k=0,l=nd(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),k=c.getMilliseconds());return new Date(e,0,l.getDate()+f,d,g,h,k)}}return NaN},"yyyy-Www"),month:hb("month",zd,Kb(zd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){rd(a,c,d,e);gb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:Zf.test(a)?parseFloat(a):u});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!Y(a))throw Lb("numfmt",
|
||||
a);a=a.toString()}return a});if(d.min||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||C(h)||a>=h};d.$observe("min",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));h=Y(a)&&!isNaN(a)?a:u;e.$validate()})}if(d.max||d.ngMax){var k;e.$validators.max=function(a){return e.$isEmpty(a)||C(k)||a<=k};d.$observe("max",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));k=Y(a)&&!isNaN(a)?a:u;e.$validate()})}},url:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e);e.$$parserName="url";e.$validators.url=function(a,
|
||||
c){var d=a||c;return e.$isEmpty(d)||Xf.test(d)}},email:function(a,c,d,e,f,g){gb(a,c,d,e,f,g);hc(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||Yf.test(d)}},radio:function(a,c,d,e){C(d.name)&&c.attr("name",++kb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,k){var l=sd(k,a,"ngTrueValue",d.ngTrueValue,!0),
|
||||
m=sd(k,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ga(a,l)});e.$parsers.push(function(a){return a?l:m})},hidden:H,button:H,submit:H,reset:H,file:H},wc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,k){k[0]&&(Bd[Q(h.type)]||Bd.text)(f,g,h,k[0],
|
||||
c,a,d,e)}}}}],ib="ng-valid",td="ng-invalid",Qa="ng-pristine",Jb="ng-dirty",vd="ng-pending",ag=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,k,l,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=u;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=
|
||||
!1;this.$error={};this.$$success={};this.$pending=u;this.$name=m(d.name||"",!1)(a);var p=f(d.ngModel),q=p.assign,t=p,s=q,N=null,n=this;this.$$setOptions=function(a){if((n.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");t=function(a){var d=p(a);B(d)&&(d=c(a));return d};s=function(a,c){B(p(a))?g(a,{$$$p:n.$modelValue}):q(a,n.$modelValue)}}else if(!p.assign)throw Lb("nonassign",d.ngModel,va(e));};this.$render=H;this.$isEmpty=function(a){return C(a)||""===a||null===a||a!==
|
||||
a};var v=e.inheritedData("$formController")||Ib,w=0;qd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:v,$animate:g});this.$setPristine=function(){n.$dirty=!1;n.$pristine=!0;g.removeClass(e,Jb);g.addClass(e,Qa)};this.$setDirty=function(){n.$dirty=!0;n.$pristine=!1;g.removeClass(e,Qa);g.addClass(e,Jb);v.$setDirty()};this.$setUntouched=function(){n.$touched=!1;n.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){n.$touched=
|
||||
!0;n.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(N);n.$viewValue=n.$$lastCommittedViewValue;n.$render()};this.$validate=function(){if(!Y(n.$modelValue)||!isNaN(n.$modelValue)){var a=n.$$rawModelValue,c=n.$valid,d=n.$modelValue,e=n.$options&&n.$options.allowInvalid;n.$$runValidators(n.$error[n.$$parserName||"parse"]?!1:u,a,n.$$lastCommittedViewValue,function(f){e||c===f||(n.$modelValue=f?a:u,n.$modelValue!==d&&n.$$writeModelToScope())})}};this.$$runValidators=
|
||||
function(a,c,d,e){function f(){var a=!0;r(n.$validators,function(e,f){var g=e(c,d);a=a&&g;h(f,g)});return a?!0:(r(n.$asyncValidators,function(a,c){h(c,null)}),!1)}function g(){var a=[],e=!0;r(n.$asyncValidators,function(f,g){var k=f(c,d);if(!k||!B(k.then))throw Lb("$asyncValidators",k);h(g,u);a.push(k.then(function(){h(g,!0)},function(a){e=!1;h(g,!1)}))});a.length?l.all(a).then(function(){k(e)},H):k(!0)}function h(a,c){m===w&&n.$setValidity(a,c)}function k(a){m===w&&e(a)}w++;var m=w;(function(a){var c=
|
||||
n.$$parserName||"parse";if(a===u)h(c,null);else if(h(c,a),!a)return r(n.$validators,function(a,c){h(c,null)}),r(n.$asyncValidators,function(a,c){h(c,null)}),!1;return!0})(a)?f()?g():k(!1):k(!1)};this.$commitViewValue=function(){var a=n.$viewValue;h.cancel(N);if(n.$$lastCommittedViewValue!==a||""===a&&n.$$hasNativeValidators)n.$$lastCommittedViewValue=a,n.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=n.$$lastCommittedViewValue,d=C(c)?u:!0;if(d)for(var e=
|
||||
0;e<n.$parsers.length;e++)if(c=n.$parsers[e](c),C(c)){d=!1;break}Y(n.$modelValue)&&isNaN(n.$modelValue)&&(n.$modelValue=t(a));var f=n.$modelValue,g=n.$options&&n.$options.allowInvalid;n.$$rawModelValue=c;g&&(n.$modelValue=c,n.$modelValue!==f&&n.$$writeModelToScope());n.$$runValidators(d,c,n.$$lastCommittedViewValue,function(a){g||(n.$modelValue=a?c:u,n.$modelValue!==f&&n.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,n.$modelValue);r(n.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};
|
||||
this.$setViewValue=function(a,c){n.$viewValue=a;n.$options&&!n.$options.updateOnDefault||n.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=n.$options;e&&y(e.debounce)&&(e=e.debounce,Y(e)?d=e:Y(e[c])?d=e[c]:Y(e["default"])&&(d=e["default"]));h.cancel(N);d?N=h(function(){n.$commitViewValue()},d):k.$$phase?n.$commitViewValue():a.$apply(function(){n.$commitViewValue()})};a.$watch(function(){var c=t(a);if(c!==n.$modelValue){n.$modelValue=n.$$rawModelValue=c;for(var d=
|
||||
n.$formatters,e=d.length,f=c;e--;)f=d[e](f);n.$viewValue!==f&&(n.$viewValue=n.$$lastCommittedViewValue=f,n.$render(),n.$$runValidators(u,c,f,H))}return c})}],te=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:ag,priority:1,compile:function(c){c.addClass(Qa).addClass("ng-untouched").addClass(ib);return{pre:function(a,c,f,g){var h=g[0],k=g[1]||Ib;h.$$setOptions(g[2]&&g[2].$options);k.$addControl(h);f.$observe("name",function(a){h.$name!==a&&k.$$renameControl(h,
|
||||
a)});a.$on("$destroy",function(){k.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],ve=ca({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),yc=function(){return{restrict:"A",require:"?ngModel",link:function(a,
|
||||
c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},xc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){z(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw A("ngPattern")("noregexp",g,a,va(c));f=a||u;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||C(f)||f.test(a)}}}}},Ac=function(){return{restrict:"A",
|
||||
require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=$(a);f=isNaN(a)?-1:a;e.$validate()});e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(a)||c.length<=f}}}}},zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=$(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}},ue=function(){return{restrict:"A",priority:100,require:"ngModel",
|
||||
link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?P(f):f;e.$parsers.push(function(a){if(!C(a)){var c=[];a&&r(a.split(h),function(a){a&&c.push(g?P(a):a)});return c}});e.$formatters.push(function(a){return x(a)?a.join(f):u});e.$isEmpty=function(a){return!a||!a.length}}}},bg=/^(true|false|\d+)$/,we=function(){return{restrict:"A",priority:100,compile:function(a,c){return bg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,
|
||||
function(a){f.$set("value",a)})}}}},xe=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==u?(this.$options.updateOnDefault=!1,this.$options.updateOn=P(this.$options.updateOn.replace($f,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Xd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,
|
||||
f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===u?"":a})}}}}],Zd=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===u?"":a})}}}}],Yd=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});
|
||||
d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],$d=ic("",!0),be=ic("Odd",0),ae=ic("Even",1),ce=Ia({compile:function(a,c){c.$set("ngCloak",u);a.removeClass("ng-cloak")}}),de=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Bc={},cg={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),
|
||||
function(a){var c=wa("ng-"+a);Bc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};cg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ge=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,k,l;c.$watch(e.ngIf,function(c){c?k||g(function(c,f){k=f;c[c.length++]=X.createComment(" end ngIf: "+
|
||||
e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=qb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],he=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ha.noop,compile:function(f,g){var h=g.ngInclude||g.src,k=g.onload||"",l=g.autoscroll;return function(f,g,q,r,s){var u=0,n,v,w,K=function(){v&&(v.remove(),v=null);n&&(n.$destroy(),
|
||||
n=null);w&&(d.leave(w).then(function(){v=null}),v=w,w=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=function(){!y(l)||l&&!f.$eval(l)||c()},q=++u;e?(a(e,!0).then(function(a){if(q===u){var c=f.$new();r.template=a;a=s(c,function(a){K();d.enter(a,null,g).then(h)});n=c;w=a;n.$emit("$includeContentLoaded",e);f.$eval(k)}},function(){q===u&&(K(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(K(),r.template=null)})}}}}],ye=["$compile",function(a){return{restrict:"ECA",
|
||||
priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Ec(f.template,X).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ie=Ia({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),je=Ia({terminal:!0,priority:1E3}),ke=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function k(a){g.text(a||"")}var l=
|
||||
h.count,m=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,q=f.$eval(m)||{},t={},m=c.startSymbol(),s=c.endSymbol(),u=m+l+"-"+p+s,n=ha.noop,v;r(h,function(a,c){var d=e.exec(c);d&&(d=(d[1]?"-":"")+Q(d[2]),q[d]=g.attr(h.$attr[c]))});r(q,function(a,e){t[e]=c(a.replace(d,u))});f.$watch(l,function(c){c=parseFloat(c);var d=isNaN(c);d||c in q||(c=a.pluralCat(c-p));c===v||d&&isNaN(v)||(n(),n=f.$watch(t[c],k),v=c)})}}}],le=["$parse","$animate",function(a,c){var d=A("ngRepeat"),e=function(a,c,d,e,l,m,p){a[d]=
|
||||
e;l&&(a[l]=m);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,k=X.createComment(" end ngRepeat: "+h+" "),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw d("iexp",h);var m=l[1],p=l[2],q=l[3],t=l[4],l=m.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);
|
||||
if(!l)throw d("iidexp",m);var s=l[3]||l[1],y=l[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(q)))throw d("badident",q);var n,v,w,A,E={$id:Ma};t?n=a(t):(w=function(a,c){return Ma(c)},A=function(a){return a});return function(a,f,g,l,m){n&&(v=function(c,d,e){y&&(E[y]=c);E[s]=d;E.$index=e;return n(a,E)});var t=ia();a.$watchCollection(p,function(g){var l,n,p=f[0],F,E=ia(),C,H,G,T,B,x,z;q&&(a[q]=g);if(Ra(g))B=g,n=v||
|
||||
w;else{n=v||A;B=[];for(z in g)g.hasOwnProperty(z)&&"$"!=z.charAt(0)&&B.push(z);B.sort()}C=B.length;z=Array(C);for(l=0;l<C;l++)if(H=g===B?l:B[l],G=g[H],T=n(H,G,l),t[T])x=t[T],delete t[T],E[T]=x,z[l]=x;else{if(E[T])throw r(z,function(a){a&&a.scope&&(t[a.id]=a)}),d("dupes",h,T,G);z[l]={id:T,scope:u,clone:u};E[T]=!0}for(F in t){x=t[F];T=qb(x.clone);c.leave(T);if(T[0].parentNode)for(l=0,n=T.length;l<n;l++)T[l].$$NG_REMOVED=!0;x.scope.$destroy()}for(l=0;l<C;l++)if(H=g===B?l:B[l],G=g[H],x=z[l],x.scope){F=
|
||||
p;do F=F.nextSibling;while(F&&F.$$NG_REMOVED);x.clone[0]!=F&&c.move(qb(x.clone),null,D(p));p=x.clone[x.clone.length-1];e(x.scope,l,s,G,y,H,C)}else m(function(a,d){x.scope=d;var f=k.cloneNode(!1);a[a.length++]=f;c.enter(a,null,D(p));p=f;x.clone=a;E[x.id]=x;e(x.scope,l,s,G,y,H,C)});t=E})}}}}],me=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],fe=["$animate",
|
||||
function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ne=Ia(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&r(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),oe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],k=[],l=[],m=function(a,c){return function(){a.splice(c,
|
||||
1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=k.length;d<e;++d)a.cancel(k[d]);d=k.length=0;for(e=l.length;d<e;++d){var s=qb(h[d].clone);l[d].$destroy();(k[d]=a.leave(s)).then(m(k,d))}h.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=X.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],pe=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,
|
||||
link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),qe=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),se=Ia({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw A("ngTransclude")("orphan",va(c));f(function(a){c.empty();c.append(a)})}}),Td=["$templateCache",function(a){return{restrict:"E",
|
||||
terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],dg=A("ngOptions"),re=ca({restrict:"A",terminal:!0}),Ud=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:H};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,
|
||||
c,d){var k=this,l={},m=e,p;k.databound=d.ngModel;k.init=function(a,c,d){m=a;p=d};k.addOption=function(c,d){La(c,'"option value"');l[c]=!0;m.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};k.removeOption=function(a){this.hasOption(a)&&(delete l[a],m.$viewValue===a&&this.renderUnknownOption(a))};k.renderUnknownOption=function(c){c="? "+Ma(c)+" ?";p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};k.hasOption=function(a){return l.hasOwnProperty(a)};
|
||||
c.$on("$destroy",function(){k.renderUnknownOption=H})}],link:function(e,g,h,k){function l(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(E.parent()&&E.remove(),c.val(a),""===a&&n.prop("selected",!0)):C(a)&&n?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){E.parent()&&E.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=new cb(d.$viewValue);r(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){ga(e,
|
||||
d.$viewValue)||(e=qa(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];r(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){U[B]=d;G&&(U[G]=c);return a(e,U)}function k(a){var c;if(t)if(L&&x(a)){c=new cb([]);for(var d=0;d<a.length;d++)c.put(h(L,null,a[d]),!0)}else c=new cb(a);else L&&(a=h(L,null,a));return function(d,e){var f;f=L?L:C?C:z;return t?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){v||(e.$$postDigest(n),
|
||||
v=!0)}function m(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function n(){v=!1;var a={"":[]},c=[""],d,l,p,s,u;p=g.$viewValue;s=O(e)||[];var C=G?Object.keys(s).sort():s,x,B,D,z,S={};u=k(p);var P=!1,V,X;Q={};for(z=0;D=C.length,z<D;z++){x=z;if(G&&(x=C[z],"$"===x.charAt(0)))continue;B=s[x];d=h(J,x,B)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=u(x,B);P=P||d;B=h(E,x,B);B=y(B)?B:"";X=L?L(e,U):G?C[z]:z;L&&(Q[X]=x);l.push({id:X,label:B,selected:d})}t||(A||null===p?a[""].unshift({id:"",label:"",selected:!P}):P||a[""].unshift({id:"?",
|
||||
label:"",selected:!0}));x=0;for(C=c.length;x<C;x++){d=c[x];l=a[d];R.length<=x?(p={element:H.clone().attr("label",d),label:l.label},s=[p],R.push(s),f.append(p.element)):(s=R[x],p=s[0],p.label!=d&&p.element.attr("label",p.label=d));P=null;z=0;for(D=l.length;z<D;z++)d=l[z],(u=s[z+1])?(P=u.element,u.label!==d.label&&(m(S,u.label,!1),m(S,d.label,!0),P.text(u.label=d.label),P.prop("label",u.label)),u.id!==d.id&&P.val(u.id=d.id),P[0].selected!==d.selected&&(P.prop("selected",u.selected=d.selected),Pa&&P.prop("selected",
|
||||
u.selected))):(""===d.id&&A?V=A:(V=w.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),s.push(u={element:V,label:d.label,id:d.id,selected:d.selected}),m(S,d.label,!0),P?P.after(V):p.element.append(V),P=V);for(z++;s.length>z;)d=s.pop(),m(S,d.label,!1),d.element.remove()}for(;R.length>x;){l=R.pop();for(z=1;z<l.length;++z)m(S,l[z].label,!1);l[0].element.remove()}r(S,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var p;if(!(p=s.match(d)))throw dg("iexp",
|
||||
s,va(f));var E=c(p[2]||p[1]),B=p[4]||p[6],D=/ as /.test(p[0])&&p[1],C=D?c(D):null,G=p[5],J=c(p[3]||""),z=c(p[2]?p[1]:B),O=c(p[7]),L=p[8]?c(p[8]):null,Q={},R=[[{element:f,label:""}]],U={};A&&(a(A)(e),A.removeClass("ng-scope"),A.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=O(e)||[],c;if(t)c=[],r(f.val(),function(d){d=L?Q[d]:d;c.push("?"===d?u:""===d?null:h(C?C:z,d,a[d]))});else{var d=L?Q[f.val()]:f.val();c="?"===d?u:""===d?null:h(C?C:z,d,a[d])}g.$setViewValue(c);n()})});g.$render=
|
||||
n;e.$watchCollection(O,l);e.$watchCollection(function(){var a=O(e),c;if(a&&x(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(E,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(E,d,a[d]));return c},l);t&&e.$watchCollection(function(){return g.$modelValue},l)}if(k[1]){var q=k[0];k=k[1];var t=h.multiple,s=h.ngOptions,A=!1,n,v=!1,w=D(X.createElement("option")),H=D(X.createElement("optgroup")),E=w.clone();h=0;for(var B=g.children(),G=B.length;h<G;h++)if(""===B[h].value){n=A=B.eq(h);
|
||||
break}q.init(k,A,E);t&&(k.$isEmpty=function(a){return!a||0===a.length});s?p(e,g,k):t?m(e,g,k):l(e,g,k,q)}}}}],Wd=["$interpolate",function(a){var c={addOption:H,removeOption:H};return{restrict:"E",priority:100,compile:function(d,e){if(C(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var l=d.parent(),m=l.data("$selectController")||l.parent().data("$selectController");m&&m.databound||(m=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&m.removeOption(c);m.addOption(a,
|
||||
d)}):m.addOption(e.value,d);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],Vd=ca({restrict:"E",terminal:!1});U.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Ld(),Nd(ha),D(X).ready(function(){Hd(X,sc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
|
||||
//# sourceMappingURL=angular.min.js.map
|
11483
www/lib/ionic/js/ionic-angular.js
Normal file
11483
www/lib/ionic/js/ionic-angular.js
Normal file
File diff suppressed because it is too large
Load diff
18
www/lib/ionic/js/ionic-angular.min.js
vendored
Normal file
18
www/lib/ionic/js/ionic-angular.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
52387
www/lib/ionic/js/ionic.bundle.js
Normal file
52387
www/lib/ionic/js/ionic.bundle.js
Normal file
File diff suppressed because it is too large
Load diff
386
www/lib/ionic/js/ionic.bundle.min.js
vendored
Normal file
386
www/lib/ionic/js/ionic.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7811
www/lib/ionic/js/ionic.js
Normal file
7811
www/lib/ionic/js/ionic.js
Normal file
File diff suppressed because it is too large
Load diff
17
www/lib/ionic/js/ionic.min.js
vendored
Normal file
17
www/lib/ionic/js/ionic.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
92
www/lib/ionic/scss/_action-sheet.scss
Normal file
92
www/lib/ionic/scss/_action-sheet.scss
Normal file
|
@ -0,0 +1,92 @@
|
|||
/**
|
||||
* Action Sheets
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.action-sheet-backdrop {
|
||||
@include transition(background-color 300ms ease-in-out);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-action-sheet;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0,0,0,0);
|
||||
|
||||
&.active {
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-wrapper {
|
||||
@include translate3d(0, 100%, 0);
|
||||
@include transition(all ease-in-out 300ms);
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.action-sheet-up {
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.action-sheet {
|
||||
margin-left: 15px;
|
||||
margin-right: 15px;
|
||||
width: auto;
|
||||
z-index: $z-index-action-sheet;
|
||||
overflow: hidden;
|
||||
|
||||
.button {
|
||||
display: block;
|
||||
padding: 1px;
|
||||
width: 100%;
|
||||
border-radius: 0;
|
||||
|
||||
background-color: transparent;
|
||||
|
||||
color: $positive;
|
||||
font-size: 18px;
|
||||
|
||||
&.destructive {
|
||||
color: $assertive;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-title {
|
||||
padding: 10px;
|
||||
color: lighten($base-color, 40%);
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.action-sheet-group {
|
||||
margin-bottom: 5px;
|
||||
border-radius: $sheet-border-radius;
|
||||
background-color: #fff;
|
||||
.button {
|
||||
border-width: 1px 0px 0px 0px;
|
||||
border-radius: 0;
|
||||
|
||||
&.active {
|
||||
background-color: transparent;
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
.button:first-child:last-child {
|
||||
border-width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-open {
|
||||
pointer-events: none;
|
||||
|
||||
&.modal-open .modal {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.action-sheet-backdrop {
|
||||
pointer-events: auto;
|
||||
}
|
||||
}
|
48
www/lib/ionic/scss/_animations.scss
Normal file
48
www/lib/ionic/scss/_animations.scss
Normal file
|
@ -0,0 +1,48 @@
|
|||
|
||||
// Slide up from the bottom, used for modals
|
||||
// -------------------------------
|
||||
|
||||
.slide-in-up {
|
||||
@include translate3d(0, 100%, 0);
|
||||
}
|
||||
.slide-in-up.ng-enter,
|
||||
.slide-in-up > .ng-enter {
|
||||
@include transition(all cubic-bezier(.1, .7, .1, 1) 400ms);
|
||||
}
|
||||
.slide-in-up.ng-enter-active,
|
||||
.slide-in-up > .ng-enter-active {
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slide-in-up.ng-leave,
|
||||
.slide-in-up > .ng-leave {
|
||||
@include transition(all ease-in-out 250ms);
|
||||
}
|
||||
|
||||
|
||||
// Scale Out
|
||||
// Scale from hero (1 in this case) to zero
|
||||
// -------------------------------
|
||||
|
||||
@-webkit-keyframes scaleOut {
|
||||
from { -webkit-transform: scale(1); opacity: 1; }
|
||||
to { -webkit-transform: scale(0.8); opacity: 0; }
|
||||
}
|
||||
@keyframes scaleOut {
|
||||
from { transform: scale(1); opacity: 1; }
|
||||
to { transform: scale(0.8); opacity: 0; }
|
||||
}
|
||||
|
||||
|
||||
// Super Scale In
|
||||
// Scale from super (1.x) to duper (1 in this case)
|
||||
// -------------------------------
|
||||
|
||||
@-webkit-keyframes superScaleIn {
|
||||
from { -webkit-transform: scale(1.2); opacity: 0; }
|
||||
to { -webkit-transform: scale(1); opacity: 1 }
|
||||
}
|
||||
@keyframes superScaleIn {
|
||||
from { transform: scale(1.2); opacity: 0; }
|
||||
to { transform: scale(1); opacity: 1; }
|
||||
}
|
24
www/lib/ionic/scss/_backdrop.scss
Normal file
24
www/lib/ionic/scss/_backdrop.scss
Normal file
|
@ -0,0 +1,24 @@
|
|||
|
||||
.backdrop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-backdrop;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
background-color: $loading-backdrop-bg-color;
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
&.visible {
|
||||
visibility: visible;
|
||||
}
|
||||
&.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@include transition($loading-backdrop-fadein-duration opacity linear);
|
||||
}
|
62
www/lib/ionic/scss/_badge.scss
Normal file
62
www/lib/ionic/scss/_badge.scss
Normal file
|
@ -0,0 +1,62 @@
|
|||
|
||||
/**
|
||||
* Badges
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.badge {
|
||||
@include badge-style($badge-default-bg, $badge-default-text);
|
||||
z-index: $z-index-badge;
|
||||
display: inline-block;
|
||||
padding: 3px 8px;
|
||||
min-width: 10px;
|
||||
border-radius: $badge-border-radius;
|
||||
vertical-align: baseline;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
font-weight: $badge-font-weight;
|
||||
font-size: $badge-font-size;
|
||||
line-height: $badge-line-height;
|
||||
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
//Be sure to override specificity of rule that 'badge color matches tab color by default'
|
||||
.tabs .tab-item .badge,
|
||||
.badge {
|
||||
&.badge-light {
|
||||
@include badge-style($badge-light-bg, $badge-light-text);
|
||||
}
|
||||
&.badge-stable {
|
||||
@include badge-style($badge-stable-bg, $badge-stable-text);
|
||||
}
|
||||
&.badge-positive {
|
||||
@include badge-style($badge-positive-bg, $badge-positive-text);
|
||||
}
|
||||
&.badge-calm {
|
||||
@include badge-style($badge-calm-bg, $badge-calm-text);
|
||||
}
|
||||
&.badge-assertive {
|
||||
@include badge-style($badge-assertive-bg, $badge-assertive-text);
|
||||
}
|
||||
&.badge-balanced {
|
||||
@include badge-style($badge-balanced-bg, $badge-balanced-text);
|
||||
}
|
||||
&.badge-energized {
|
||||
@include badge-style($badge-energized-bg, $badge-energized-text);
|
||||
}
|
||||
&.badge-royal {
|
||||
@include badge-style($badge-royal-bg, $badge-royal-text);
|
||||
}
|
||||
&.badge-dark {
|
||||
@include badge-style($badge-dark-bg, $badge-dark-text);
|
||||
}
|
||||
}
|
||||
|
||||
// Quick fix for labels/badges in buttons
|
||||
.button .badge {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
373
www/lib/ionic/scss/_bar.scss
Normal file
373
www/lib/ionic/scss/_bar.scss
Normal file
|
@ -0,0 +1,373 @@
|
|||
|
||||
/**
|
||||
* Bar (Headers and Footers)
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.bar {
|
||||
@include display-flex();
|
||||
@include translate3d(0,0,0);
|
||||
@include user-select(none);
|
||||
position: absolute;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-bar;
|
||||
|
||||
box-sizing: border-box;
|
||||
padding: $bar-padding-portrait;
|
||||
|
||||
width: 100%;
|
||||
height: $bar-height;
|
||||
border-width: 0;
|
||||
border-style: solid;
|
||||
border-top: 1px solid transparent;
|
||||
border-bottom: 1px solid $bar-default-border;
|
||||
|
||||
background-color: $bar-default-bg;
|
||||
|
||||
/* border-width: 1px will actually create 2 device pixels on retina */
|
||||
/* this nifty trick sets an actual 1px border on hi-res displays */
|
||||
background-size: 0;
|
||||
@media (min--moz-device-pixel-ratio: 1.5),
|
||||
(-webkit-min-device-pixel-ratio: 1.5),
|
||||
(min-device-pixel-ratio: 1.5),
|
||||
(min-resolution: 144dpi),
|
||||
(min-resolution: 1.5dppx) {
|
||||
border: none;
|
||||
background-image: linear-gradient(0deg, $bar-default-border, $bar-default-border 50%, transparent 50%);
|
||||
background-position: bottom;
|
||||
background-size: 100% 1px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
&.bar-clear {
|
||||
border: none;
|
||||
background: none;
|
||||
color: #fff;
|
||||
|
||||
.button {
|
||||
color: #fff;
|
||||
}
|
||||
.title {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
&.item-input-inset {
|
||||
.item-input-wrapper {
|
||||
margin-top: -1px;
|
||||
|
||||
input {
|
||||
padding-left: 8px;
|
||||
width: 94%;
|
||||
height: 28px;
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.bar-light {
|
||||
@include bar-style($bar-light-bg, $bar-light-border, $bar-light-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-light-border, $bar-light-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-stable {
|
||||
@include bar-style($bar-stable-bg, $bar-stable-border, $bar-stable-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-stable-border, $bar-stable-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-positive {
|
||||
@include bar-style($bar-positive-bg, $bar-positive-border, $bar-positive-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-positive-border, $bar-positive-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-calm {
|
||||
@include bar-style($bar-calm-bg, $bar-calm-border, $bar-calm-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-calm-border, $bar-calm-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-assertive {
|
||||
@include bar-style($bar-assertive-bg, $bar-assertive-border, $bar-assertive-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-assertive-border, $bar-assertive-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-balanced {
|
||||
@include bar-style($bar-balanced-bg, $bar-balanced-border, $bar-balanced-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-balanced-border, $bar-positive-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-energized {
|
||||
@include bar-style($bar-energized-bg, $bar-energized-border, $bar-energized-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-energized-border, $bar-energized-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-royal {
|
||||
@include bar-style($bar-royal-bg, $bar-royal-border, $bar-royal-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-royal-border, $bar-royal-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-dark {
|
||||
@include bar-style($bar-dark-bg, $bar-dark-border, $bar-dark-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-dark-border, $bar-dark-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
|
||||
// Title inside of a bar is centered
|
||||
.title {
|
||||
position: absolute;
|
||||
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-bar-title;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0 10px;
|
||||
|
||||
min-width: 30px;
|
||||
height: $bar-height - 1;
|
||||
|
||||
text-align: center;
|
||||
|
||||
// Go into ellipsis if too small
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
font-size: $bar-title-font-size;
|
||||
font-weight: $headings-font-weight;
|
||||
|
||||
line-height: $bar-height;
|
||||
|
||||
&.title-left {
|
||||
text-align: left;
|
||||
}
|
||||
&.title-right {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.title a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.button {
|
||||
z-index: $z-index-bar-button;
|
||||
padding: 0 $button-bar-button-padding;
|
||||
min-width: initial;
|
||||
min-height: $button-bar-button-height - 1;
|
||||
font-weight: 400;
|
||||
font-size: $button-bar-button-font-size;
|
||||
line-height: $button-bar-button-height;
|
||||
|
||||
&.button-icon:before,
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
padding-right: 2px;
|
||||
padding-left: 2px;
|
||||
font-size: $button-bar-button-icon-size;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
|
||||
&.button-icon {
|
||||
font-size: $bar-title-font-size;
|
||||
.icon:before,
|
||||
&:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
vertical-align: top;
|
||||
font-size: $button-large-icon-size;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
}
|
||||
&.button-clear {
|
||||
padding-right: 2px;
|
||||
padding-left: 2px;
|
||||
font-weight: 300;
|
||||
font-size: $bar-title-font-size;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
font-size: $button-large-icon-size;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
}
|
||||
|
||||
&.back-button {
|
||||
display: block;
|
||||
margin-right: 5px;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
&.back-button.active,
|
||||
&.back-button.activated {
|
||||
opacity: 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
.button-bar > .button,
|
||||
.buttons > .button {
|
||||
min-height: $button-bar-button-height - 1;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
|
||||
.button-bar + .button,
|
||||
.button + .button-bar {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
// Android 4.4 messes with the display property
|
||||
.buttons,
|
||||
.buttons.primary-buttons,
|
||||
.buttons.secondary-buttons {
|
||||
display: inherit;
|
||||
}
|
||||
.buttons span {
|
||||
display: inline-block;
|
||||
}
|
||||
.buttons-left span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.buttons-right span {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
// Place the last button in a bar on the right of the bar
|
||||
.title + .button:last-child,
|
||||
> .button + .button:last-child,
|
||||
> .button.pull-right,
|
||||
.buttons.pull-right,
|
||||
.title + .buttons {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Default styles for buttons inside of styled bars
|
||||
.bar-light {
|
||||
.button {
|
||||
@include button-style($bar-light-bg, $bar-light-border, $bar-light-active-bg, $bar-light-active-border, $bar-light-text);
|
||||
@include button-clear($bar-light-text, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-stable {
|
||||
.button {
|
||||
@include button-style($bar-stable-bg, $bar-stable-border, $bar-stable-active-bg, $bar-stable-active-border, $bar-stable-text);
|
||||
@include button-clear($bar-stable-text, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-positive {
|
||||
.button {
|
||||
@include button-style($bar-positive-bg, $bar-positive-border, $bar-positive-active-bg, $bar-positive-active-border, $bar-positive-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-calm {
|
||||
.button {
|
||||
@include button-style($bar-calm-bg, $bar-calm-border, $bar-calm-active-bg, $bar-calm-active-border, $bar-calm-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-assertive {
|
||||
.button {
|
||||
@include button-style($bar-assertive-bg, $bar-assertive-border, $bar-assertive-active-bg, $bar-assertive-active-border, $bar-assertive-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-balanced {
|
||||
.button {
|
||||
@include button-style($bar-balanced-bg, $bar-balanced-border, $bar-balanced-active-bg, $bar-balanced-active-border, $bar-balanced-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-energized {
|
||||
.button {
|
||||
@include button-style($bar-energized-bg, $bar-energized-border, $bar-energized-active-bg, $bar-energized-active-border, $bar-energized-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-royal {
|
||||
.button {
|
||||
@include button-style($bar-royal-bg, $bar-royal-border, $bar-royal-active-bg, $bar-royal-active-border, $bar-royal-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-dark {
|
||||
.button {
|
||||
@include button-style($bar-dark-bg, $bar-dark-border, $bar-dark-active-bg, $bar-dark-active-border, $bar-dark-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
|
||||
// Header at top
|
||||
.bar-header {
|
||||
top: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom-width: 1px;
|
||||
&.has-tabs-top{
|
||||
border-bottom-width: 0px;
|
||||
background-image: none;
|
||||
}
|
||||
}
|
||||
|
||||
// Footer at bottom
|
||||
.bar-footer {
|
||||
bottom: 0;
|
||||
border-top-width: 1px;
|
||||
border-bottom-width: 0;
|
||||
background-position: top;
|
||||
|
||||
height: $bar-footer-height;
|
||||
|
||||
&.item-input-inset {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
// Don't render padding if the bar is just for tabs
|
||||
.bar-tabs {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.bar-subheader {
|
||||
top: $bar-height;
|
||||
display: block;
|
||||
|
||||
height: $bar-subheader-height;
|
||||
}
|
||||
.bar-subfooter {
|
||||
bottom: $bar-footer-height;
|
||||
display: block;
|
||||
|
||||
height: $bar-subfooter-height;
|
||||
}
|
||||
|
||||
.nav-bar-block {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-bar;
|
||||
}
|
||||
|
||||
.bar .back-button.hide,
|
||||
.bar .buttons .hide {
|
||||
display: none;
|
||||
}
|
54
www/lib/ionic/scss/_button-bar.scss
Normal file
54
www/lib/ionic/scss/_button-bar.scss
Normal file
|
@ -0,0 +1,54 @@
|
|||
|
||||
/**
|
||||
* Button Bar
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.button-bar {
|
||||
@include display-flex();
|
||||
@include flex(1);
|
||||
width: 100%;
|
||||
|
||||
&.button-bar-inline {
|
||||
display: block;
|
||||
width: auto;
|
||||
|
||||
@include clearfix();
|
||||
|
||||
> .button {
|
||||
width: auto;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-bar > .button {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
|
||||
overflow: hidden;
|
||||
|
||||
padding: 0 16px;
|
||||
|
||||
width: 0;
|
||||
|
||||
border-width: 1px 0px 1px 1px;
|
||||
border-radius: 0;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
&:before,
|
||||
.icon:before {
|
||||
line-height: 44px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-radius: $button-border-radius 0px 0px $button-border-radius;
|
||||
}
|
||||
&:last-child {
|
||||
border-right-width: 1px;
|
||||
border-radius: 0px $button-border-radius $button-border-radius 0px;
|
||||
}
|
||||
}
|
252
www/lib/ionic/scss/_button.scss
Normal file
252
www/lib/ionic/scss/_button.scss
Normal file
|
@ -0,0 +1,252 @@
|
|||
|
||||
/**
|
||||
* Buttons
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.button {
|
||||
// set the color defaults
|
||||
@include button-style($button-default-bg, $button-default-border, $button-default-active-bg, $button-default-active-border, $button-default-text);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
padding: 0 $button-padding;
|
||||
|
||||
min-width: ($button-padding * 3) + $button-font-size;
|
||||
min-height: $button-height + 5px;
|
||||
|
||||
border-width: $button-border-width;
|
||||
border-style: solid;
|
||||
border-radius: $button-border-radius;
|
||||
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
|
||||
text-overflow: ellipsis;
|
||||
font-size: $button-font-size;
|
||||
line-height: $button-height - $button-border-width + 1px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
&:after {
|
||||
// used to create a larger button "hit" area
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
right: -6px;
|
||||
bottom: -6px;
|
||||
left: -6px;
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
.icon {
|
||||
vertical-align: top;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
display: inline-block;
|
||||
padding: 0 0 $button-border-width 0;
|
||||
vertical-align: inherit;
|
||||
font-size: $button-icon-size;
|
||||
line-height: $button-height - $button-border-width;
|
||||
pointer-events: none;
|
||||
}
|
||||
&.icon-left:before {
|
||||
float: left;
|
||||
padding-right: .2em;
|
||||
padding-left: 0;
|
||||
}
|
||||
&.icon-right:before {
|
||||
float: right;
|
||||
padding-right: 0;
|
||||
padding-left: .2em;
|
||||
}
|
||||
|
||||
&.button-block, &.button-full {
|
||||
margin-top: $button-block-margin;
|
||||
margin-bottom: $button-block-margin;
|
||||
}
|
||||
|
||||
&.button-light {
|
||||
@include button-style($button-light-bg, $button-light-border, $button-light-active-bg, $button-light-active-border, $button-light-text);
|
||||
@include button-clear($button-light-border);
|
||||
@include button-outline($button-light-border);
|
||||
}
|
||||
|
||||
&.button-stable {
|
||||
@include button-style($button-stable-bg, $button-stable-border, $button-stable-active-bg, $button-stable-active-border, $button-stable-text);
|
||||
@include button-clear($button-stable-border);
|
||||
@include button-outline($button-stable-border);
|
||||
}
|
||||
|
||||
&.button-positive {
|
||||
@include button-style($button-positive-bg, $button-positive-border, $button-positive-active-bg, $button-positive-active-border, $button-positive-text);
|
||||
@include button-clear($button-positive-bg);
|
||||
@include button-outline($button-positive-bg);
|
||||
}
|
||||
|
||||
&.button-calm {
|
||||
@include button-style($button-calm-bg, $button-calm-border, $button-calm-active-bg, $button-calm-active-border, $button-calm-text);
|
||||
@include button-clear($button-calm-bg);
|
||||
@include button-outline($button-calm-bg);
|
||||
}
|
||||
|
||||
&.button-assertive {
|
||||
@include button-style($button-assertive-bg, $button-assertive-border, $button-assertive-active-bg, $button-assertive-active-border, $button-assertive-text);
|
||||
@include button-clear($button-assertive-bg);
|
||||
@include button-outline($button-assertive-bg);
|
||||
}
|
||||
|
||||
&.button-balanced {
|
||||
@include button-style($button-balanced-bg, $button-balanced-border, $button-balanced-active-bg, $button-balanced-active-border, $button-balanced-text);
|
||||
@include button-clear($button-balanced-bg);
|
||||
@include button-outline($button-balanced-bg);
|
||||
}
|
||||
|
||||
&.button-energized {
|
||||
@include button-style($button-energized-bg, $button-energized-border, $button-energized-active-bg, $button-energized-active-border, $button-energized-text);
|
||||
@include button-clear($button-energized-bg);
|
||||
@include button-outline($button-energized-bg);
|
||||
}
|
||||
|
||||
&.button-royal {
|
||||
@include button-style($button-royal-bg, $button-royal-border, $button-royal-active-bg, $button-royal-active-border, $button-royal-text);
|
||||
@include button-clear($button-royal-bg);
|
||||
@include button-outline($button-royal-bg);
|
||||
}
|
||||
|
||||
&.button-dark {
|
||||
@include button-style($button-dark-bg, $button-dark-border, $button-dark-active-bg, $button-dark-active-border, $button-dark-text);
|
||||
@include button-clear($button-dark-bg);
|
||||
@include button-outline($button-dark-bg);
|
||||
}
|
||||
}
|
||||
|
||||
.button-small {
|
||||
padding: 2px $button-small-padding 1px;
|
||||
min-width: $button-small-height;
|
||||
min-height: $button-small-height + 2;
|
||||
font-size: $button-small-font-size;
|
||||
line-height: $button-small-height - $button-border-width - 1;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
font-size: $button-small-icon-size;
|
||||
line-height: $button-small-icon-size + 3;
|
||||
margin-top: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.button-large {
|
||||
padding: 0 $button-large-padding;
|
||||
min-width: ($button-large-padding * 3) + $button-large-font-size;
|
||||
min-height: $button-large-height + 5;
|
||||
font-size: $button-large-font-size;
|
||||
line-height: $button-large-height - $button-border-width;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
padding-bottom: ($button-border-width * 2);
|
||||
font-size: $button-large-icon-size;
|
||||
line-height: $button-large-height - ($button-border-width * 2) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
.button-icon {
|
||||
@include transition(opacity .1s);
|
||||
padding: 0 6px;
|
||||
min-width: initial;
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
|
||||
&.button.active,
|
||||
&.button.activated {
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.icon:before,
|
||||
&.icon:before {
|
||||
font-size: $button-large-icon-size;
|
||||
}
|
||||
}
|
||||
|
||||
.button-clear {
|
||||
@include button-clear($button-default-border);
|
||||
@include transition(opacity .1s);
|
||||
padding: 0 $button-clear-padding;
|
||||
max-height: $button-height;
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
|
||||
&.active,
|
||||
&.activated {
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
.button-outline {
|
||||
@include button-outline($button-default-border);
|
||||
@include transition(opacity .1s);
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.padding > .button.button-block:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.button-block {
|
||||
display: block;
|
||||
clear: both;
|
||||
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
.button-full,
|
||||
.button-full > .button {
|
||||
display: block;
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
border-right-width: 0;
|
||||
border-left-width: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button.button-block,
|
||||
button.button-full,
|
||||
.button-full > button.button,
|
||||
input.button.button-block {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
a.button {
|
||||
text-decoration: none;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
margin-top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.button.disabled,
|
||||
.button[disabled] {
|
||||
opacity: .4;
|
||||
cursor: default !important;
|
||||
pointer-events: none;
|
||||
}
|
176
www/lib/ionic/scss/_checkbox.scss
Normal file
176
www/lib/ionic/scss/_checkbox.scss
Normal file
|
@ -0,0 +1,176 @@
|
|||
|
||||
/**
|
||||
* Checkbox
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.checkbox {
|
||||
// set the color defaults
|
||||
@include checkbox-style($checkbox-off-border-default, $checkbox-on-bg-default, $checkbox-on-border-default);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding: ($checkbox-height / 4) ($checkbox-width / 4);
|
||||
cursor: pointer;
|
||||
}
|
||||
.checkbox-light {
|
||||
@include checkbox-style($checkbox-off-border-light, $checkbox-on-bg-light, $checkbox-off-border-light);
|
||||
}
|
||||
.checkbox-stable {
|
||||
@include checkbox-style($checkbox-off-border-stable, $checkbox-on-bg-stable, $checkbox-off-border-stable);
|
||||
}
|
||||
.checkbox-positive {
|
||||
@include checkbox-style($checkbox-off-border-positive, $checkbox-on-bg-positive, $checkbox-off-border-positive);
|
||||
}
|
||||
.checkbox-calm {
|
||||
@include checkbox-style($checkbox-off-border-calm, $checkbox-on-bg-calm, $checkbox-off-border-calm);
|
||||
}
|
||||
.checkbox-assertive {
|
||||
@include checkbox-style($checkbox-off-border-assertive, $checkbox-on-bg-assertive, $checkbox-off-border-assertive);
|
||||
}
|
||||
.checkbox-balanced {
|
||||
@include checkbox-style($checkbox-off-border-balanced, $checkbox-on-bg-balanced, $checkbox-off-border-balanced);
|
||||
}
|
||||
.checkbox-energized{
|
||||
@include checkbox-style($checkbox-off-border-energized, $checkbox-on-bg-energized, $checkbox-off-border-energized);
|
||||
}
|
||||
.checkbox-royal {
|
||||
@include checkbox-style($checkbox-off-border-royal, $checkbox-on-bg-royal, $checkbox-off-border-royal);
|
||||
}
|
||||
.checkbox-dark {
|
||||
@include checkbox-style($checkbox-off-border-dark, $checkbox-on-bg-dark, $checkbox-off-border-dark);
|
||||
}
|
||||
|
||||
.checkbox input:disabled:before,
|
||||
.checkbox input:disabled + .checkbox-icon:before {
|
||||
border-color: $checkbox-off-border-light;
|
||||
}
|
||||
|
||||
.checkbox input:disabled:checked:before,
|
||||
.checkbox input:disabled:checked + .checkbox-icon:before {
|
||||
background: $checkbox-on-bg-light;
|
||||
}
|
||||
|
||||
|
||||
.checkbox.checkbox-input-hidden input {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.checkbox input,
|
||||
.checkbox-icon {
|
||||
position: relative;
|
||||
width: $checkbox-width;
|
||||
height: $checkbox-height;
|
||||
display: block;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
|
||||
&:before {
|
||||
// what the checkbox looks like when its not checked
|
||||
display: table;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-width: $checkbox-border-width;
|
||||
border-style: solid;
|
||||
border-radius: $checkbox-border-radius;
|
||||
background: $checkbox-off-bg-color;
|
||||
content: ' ';
|
||||
@include transition(background-color 20ms ease-in-out);
|
||||
}
|
||||
}
|
||||
|
||||
.checkbox input:checked:before,
|
||||
input:checked + .checkbox-icon:before {
|
||||
border-width: $checkbox-border-width + 1;
|
||||
}
|
||||
|
||||
// the checkmark within the box
|
||||
.checkbox input:after,
|
||||
.checkbox-icon:after {
|
||||
@include transition(opacity .05s ease-in-out);
|
||||
@include rotate(-45deg);
|
||||
position: absolute;
|
||||
top: 33%;
|
||||
left: 25%;
|
||||
display: table;
|
||||
width: ($checkbox-width / 2);
|
||||
height: ($checkbox-width / 4) - 1;
|
||||
border: $checkbox-check-width solid $checkbox-check-color;
|
||||
border-top: 0;
|
||||
border-right: 0;
|
||||
content: ' ';
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.platform-android .checkbox-platform input:before,
|
||||
.platform-android .checkbox-platform .checkbox-icon:before,
|
||||
.checkbox-square input:before,
|
||||
.checkbox-square .checkbox-icon:before {
|
||||
border-radius: 2px;
|
||||
width: 72%;
|
||||
height: 72%;
|
||||
margin-top: 14%;
|
||||
margin-left: 14%;
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.platform-android .checkbox-platform input:after,
|
||||
.platform-android .checkbox-platform .checkbox-icon:after,
|
||||
.checkbox-square input:after,
|
||||
.checkbox-square .checkbox-icon:after {
|
||||
border-width: 2px;
|
||||
top: 19%;
|
||||
left: 25%;
|
||||
width: ($checkbox-width / 2) - 1;
|
||||
height: 7px;
|
||||
}
|
||||
|
||||
.grade-c .checkbox input:after,
|
||||
.grade-c .checkbox-icon:after {
|
||||
@include rotate(0);
|
||||
top: 3px;
|
||||
left: 4px;
|
||||
border: none;
|
||||
color: $checkbox-check-color;
|
||||
content: '\2713';
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
// what the checkmark looks like when its checked
|
||||
.checkbox input:checked:after,
|
||||
input:checked + .checkbox-icon:after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
// make sure item content have enough padding on left to fit the checkbox
|
||||
.item-checkbox {
|
||||
padding-left: ($item-padding * 2) + $checkbox-width;
|
||||
|
||||
&.active {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
// position the checkbox to the left within an item
|
||||
.item-checkbox .checkbox {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: $item-padding / 2;
|
||||
left: $item-padding / 2;
|
||||
z-index: $z-index-item-checkbox;
|
||||
margin-top: (($checkbox-height + ($checkbox-height / 2)) / 2) * -1;
|
||||
}
|
||||
|
||||
|
||||
.item-checkbox.item-checkbox-right {
|
||||
padding-right: ($item-padding * 2) + $checkbox-width;
|
||||
padding-left: $item-padding;
|
||||
}
|
||||
|
||||
.item-checkbox-right .checkbox input,
|
||||
.item-checkbox-right .checkbox-icon {
|
||||
float: right;
|
||||
}
|
310
www/lib/ionic/scss/_form.scss
Normal file
310
www/lib/ionic/scss/_form.scss
Normal file
|
@ -0,0 +1,310 @@
|
|||
/**
|
||||
* Forms
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
// Make all forms have space below them
|
||||
form {
|
||||
margin: 0 0 $line-height-base;
|
||||
}
|
||||
|
||||
// Groups of fields with labels on top (legends)
|
||||
legend {
|
||||
display: block;
|
||||
margin-bottom: $line-height-base;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
border: $input-border-width solid $input-border;
|
||||
color: $dark;
|
||||
font-size: $font-size-base * 1.5;
|
||||
line-height: $line-height-base * 2;
|
||||
|
||||
small {
|
||||
color: $stable;
|
||||
font-size: $line-height-base * .75;
|
||||
}
|
||||
}
|
||||
|
||||
// Set font for forms
|
||||
label,
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea {
|
||||
@include font-shorthand($font-size-base, normal, $line-height-base); // Set size, weight, line-height here
|
||||
}
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea {
|
||||
font-family: $font-family-base; // And only set font-family here for those that need it (note the missing label element)
|
||||
}
|
||||
|
||||
|
||||
// Input List
|
||||
// -------------------------------
|
||||
|
||||
.item-input {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: 6px 0 5px 16px;
|
||||
|
||||
input {
|
||||
@include border-radius(0);
|
||||
@include flex(1, 0, 220px);
|
||||
@include appearance(none);
|
||||
margin: 0;
|
||||
padding-right: 24px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.button .icon {
|
||||
@include flex(0, 0, 24px);
|
||||
position: static;
|
||||
display: inline-block;
|
||||
height: auto;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.button-bar {
|
||||
@include border-radius(0);
|
||||
@include flex(1, 0, 220px);
|
||||
@include appearance(none);
|
||||
}
|
||||
|
||||
.icon {
|
||||
min-width: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.item-input-inset {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: ($item-padding / 3) * 2;
|
||||
}
|
||||
|
||||
.item-input-wrapper {
|
||||
@include display-flex();
|
||||
@include flex(1, 0);
|
||||
@include align-items(center);
|
||||
@include border-radius(4px);
|
||||
padding-right: 8px;
|
||||
padding-left: 8px;
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
.item-input-inset .item-input-wrapper input {
|
||||
padding-left: 4px;
|
||||
height: 29px;
|
||||
background: transparent;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.item-input-wrapper ~ .button {
|
||||
margin-left: ($item-padding / 3) * 2;
|
||||
}
|
||||
|
||||
.input-label {
|
||||
@include flex(1, 0, 100px);
|
||||
display: table;
|
||||
padding: 7px 10px 7px 0px;
|
||||
max-width: 200px;
|
||||
width: 35%;
|
||||
color: $input-label-color;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.placeholder-icon {
|
||||
color: #aaa;
|
||||
&:first-child {
|
||||
padding-right: 6px;
|
||||
}
|
||||
&:last-child {
|
||||
padding-left: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.item-stacked-label {
|
||||
display: block;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
|
||||
.input-label, .icon {
|
||||
display: inline-block;
|
||||
padding: 4px 0 0 0px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.item-stacked-label input,
|
||||
.item-stacked-label textarea {
|
||||
@include border-radius(2px);
|
||||
padding: 4px 8px 3px 0;
|
||||
border: none;
|
||||
background-color: $input-bg;
|
||||
}
|
||||
.item-stacked-label input {
|
||||
overflow: hidden;
|
||||
height: $line-height-computed + $font-size-base + 12px;
|
||||
}
|
||||
|
||||
.item-floating-label {
|
||||
display: block;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
|
||||
.input-label {
|
||||
position: relative;
|
||||
padding: 5px 0 0 0;
|
||||
opacity: 0;
|
||||
top: 10px;
|
||||
@include transition(opacity .15s ease-in, top .2s linear);
|
||||
|
||||
&.has-input {
|
||||
opacity: 1;
|
||||
top: 0;
|
||||
@include transition(opacity .15s ease-in, top .2s linear);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form Controls
|
||||
// -------------------------------
|
||||
|
||||
// Shared size and type resets
|
||||
textarea,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="color"] {
|
||||
display: block;
|
||||
padding-top: 2px;
|
||||
padding-left: 0;
|
||||
height: $line-height-computed + $font-size-base;
|
||||
color: $input-color;
|
||||
vertical-align: middle;
|
||||
font-size: $font-size-base;
|
||||
line-height: $font-size-base + 2;
|
||||
}
|
||||
|
||||
.platform-ios,
|
||||
.platform-android {
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"] {
|
||||
padding-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
textarea {
|
||||
padding-left: 0;
|
||||
@include placeholder($input-color-placeholder, -3px);
|
||||
}
|
||||
|
||||
// Reset height since textareas have rows
|
||||
textarea {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
// Everything else
|
||||
textarea,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="color"] {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
// Position radios and checkboxes better
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
margin: 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
// Reset width of input images, buttons, radios, checkboxes
|
||||
input[type="file"],
|
||||
input[type="image"],
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"],
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
width: auto; // Override of generic input selector
|
||||
}
|
||||
|
||||
// Set the height of file to match text inputs
|
||||
input[type="file"] {
|
||||
line-height: $input-height-base;
|
||||
}
|
||||
|
||||
// Text input classes to hide text caret during scroll
|
||||
.previous-input-focus,
|
||||
.cloned-text-input + input,
|
||||
.cloned-text-input + textarea {
|
||||
position: absolute !important;
|
||||
left: -9999px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
|
||||
// Placeholder
|
||||
// -------------------------------
|
||||
input,
|
||||
textarea {
|
||||
@include placeholder();
|
||||
}
|
||||
|
||||
|
||||
// DISABLED STATE
|
||||
// -------------------------------
|
||||
|
||||
// Disabled and read-only inputs
|
||||
input[disabled],
|
||||
select[disabled],
|
||||
textarea[disabled],
|
||||
input[readonly]:not(.cloned-text-input),
|
||||
textarea[readonly]:not(.cloned-text-input),
|
||||
select[readonly] {
|
||||
background-color: $input-bg-disabled;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
// Explicitly reset the colors here
|
||||
input[type="radio"][disabled],
|
||||
input[type="checkbox"][disabled],
|
||||
input[type="radio"][readonly],
|
||||
input[type="checkbox"][readonly] {
|
||||
background-color: transparent;
|
||||
}
|
143
www/lib/ionic/scss/_grid.scss
Normal file
143
www/lib/ionic/scss/_grid.scss
Normal file
|
@ -0,0 +1,143 @@
|
|||
/**
|
||||
* Grid
|
||||
* --------------------------------------------------
|
||||
* Using flexbox for the grid, inspired by Philip Walton:
|
||||
* http://philipwalton.github.io/solved-by-flexbox/demos/grids/
|
||||
* By default each .col within a .row will evenly take up
|
||||
* available width, and the height of each .col with take
|
||||
* up the height of the tallest .col in the same .row.
|
||||
*/
|
||||
|
||||
.row {
|
||||
@include display-flex();
|
||||
padding: ($grid-padding-width / 2);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.row-wrap {
|
||||
@include flex-wrap(wrap);
|
||||
}
|
||||
|
||||
.row + .row {
|
||||
margin-top: ($grid-padding-width / 2) * -1;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.col {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
padding: ($grid-padding-width / 2);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
/* Vertically Align Columns */
|
||||
/* .row-* vertically aligns every .col in the .row */
|
||||
.row-top {
|
||||
@include align-items(flex-start);
|
||||
}
|
||||
.row-bottom {
|
||||
@include align-items(flex-end);
|
||||
}
|
||||
.row-center {
|
||||
@include align-items(center);
|
||||
}
|
||||
.row-stretch {
|
||||
@include align-items(stretch);
|
||||
}
|
||||
.row-baseline {
|
||||
@include align-items(baseline);
|
||||
}
|
||||
|
||||
/* .col-* vertically aligns an individual .col */
|
||||
.col-top {
|
||||
@include align-self(flex-start);
|
||||
}
|
||||
.col-bottom {
|
||||
@include align-self(flex-end);
|
||||
}
|
||||
.col-center {
|
||||
@include align-self(center);
|
||||
}
|
||||
|
||||
/* Column Offsets */
|
||||
.col-offset-10 {
|
||||
margin-left: 10%;
|
||||
}
|
||||
.col-offset-20 {
|
||||
margin-left: 20%;
|
||||
}
|
||||
.col-offset-25 {
|
||||
margin-left: 25%;
|
||||
}
|
||||
.col-offset-33, .col-offset-34 {
|
||||
margin-left: 33.3333%;
|
||||
}
|
||||
.col-offset-50 {
|
||||
margin-left: 50%;
|
||||
}
|
||||
.col-offset-66, .col-offset-67 {
|
||||
margin-left: 66.6666%;
|
||||
}
|
||||
.col-offset-75 {
|
||||
margin-left: 75%;
|
||||
}
|
||||
.col-offset-80 {
|
||||
margin-left: 80%;
|
||||
}
|
||||
.col-offset-90 {
|
||||
margin-left: 90%;
|
||||
}
|
||||
|
||||
|
||||
/* Explicit Column Percent Sizes */
|
||||
/* By default each grid column will evenly distribute */
|
||||
/* across the grid. However, you can specify individual */
|
||||
/* columns to take up a certain size of the available area */
|
||||
.col-10 {
|
||||
@include flex(0, 0, 10%);
|
||||
max-width: 10%;
|
||||
}
|
||||
.col-20 {
|
||||
@include flex(0, 0, 20%);
|
||||
max-width: 20%;
|
||||
}
|
||||
.col-25 {
|
||||
@include flex(0, 0, 25%);
|
||||
max-width: 25%;
|
||||
}
|
||||
.col-33, .col-34 {
|
||||
@include flex(0, 0, 33.3333%);
|
||||
max-width: 33.3333%;
|
||||
}
|
||||
.col-50 {
|
||||
@include flex(0, 0, 50%);
|
||||
max-width: 50%;
|
||||
}
|
||||
.col-66, .col-67 {
|
||||
@include flex(0, 0, 66.6666%);
|
||||
max-width: 66.6666%;
|
||||
}
|
||||
.col-75 {
|
||||
@include flex(0, 0, 75%);
|
||||
max-width: 75%;
|
||||
}
|
||||
.col-80 {
|
||||
@include flex(0, 0, 80%);
|
||||
max-width: 80%;
|
||||
}
|
||||
.col-90 {
|
||||
@include flex(0, 0, 90%);
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
|
||||
/* Responsive Grid Classes */
|
||||
/* Adding a class of responsive-X to a row */
|
||||
/* will trigger the flex-direction to */
|
||||
/* change to column and add some margin */
|
||||
/* to any columns in the row for clearity */
|
||||
|
||||
@include responsive-grid-break('.responsive-sm', $grid-responsive-sm-break);
|
||||
@include responsive-grid-break('.responsive-md', $grid-responsive-md-break);
|
||||
@include responsive-grid-break('.responsive-lg', $grid-responsive-lg-break);
|
821
www/lib/ionic/scss/_items.scss
Normal file
821
www/lib/ionic/scss/_items.scss
Normal file
|
@ -0,0 +1,821 @@
|
|||
/**
|
||||
* Items
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item {
|
||||
@include item-style($item-default-bg, $item-default-border, $item-default-text);
|
||||
|
||||
position: relative;
|
||||
z-index: $z-index-item; // Make sure the borders and stuff don't get hidden by children
|
||||
display: block;
|
||||
|
||||
margin: $item-border-width * -1;
|
||||
padding: $item-padding;
|
||||
|
||||
border-width: $item-border-width;
|
||||
border-style: solid;
|
||||
font-size: $item-font-size;
|
||||
|
||||
h2 {
|
||||
margin: 0 0 2px 0;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
h3 {
|
||||
margin: 0 0 4px 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
h4 {
|
||||
margin: 0 0 4px 0;
|
||||
font-size: 12px;
|
||||
}
|
||||
h5, h6 {
|
||||
margin: 0 0 3px 0;
|
||||
font-size: 10px;
|
||||
}
|
||||
p {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
h1:last-child,
|
||||
h2:last-child,
|
||||
h3:last-child,
|
||||
h4:last-child,
|
||||
h5:last-child,
|
||||
h6:last-child,
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
// Align badges within items
|
||||
.badge {
|
||||
@include display-flex();
|
||||
position: absolute;
|
||||
top: $item-padding;
|
||||
right: ($item-padding * 2);
|
||||
}
|
||||
&.item-button-right .badge {
|
||||
right: ($item-padding * 2) + 35;
|
||||
}
|
||||
&.item-divider .badge {
|
||||
top: ceil($item-padding / 2);
|
||||
}
|
||||
.badge + .badge {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
// Different themes for items
|
||||
&.item-light {
|
||||
@include item-style($item-light-bg, $item-light-border, $item-light-text);
|
||||
}
|
||||
&.item-stable {
|
||||
@include item-style($item-stable-bg, $item-stable-border, $item-stable-text);
|
||||
}
|
||||
&.item-positive {
|
||||
@include item-style($item-positive-bg, $item-positive-border, $item-positive-text);
|
||||
}
|
||||
&.item-calm {
|
||||
@include item-style($item-calm-bg, $item-calm-border, $item-calm-text);
|
||||
}
|
||||
&.item-assertive {
|
||||
@include item-style($item-assertive-bg, $item-assertive-border, $item-assertive-text);
|
||||
}
|
||||
&.item-balanced {
|
||||
@include item-style($item-balanced-bg, $item-balanced-border, $item-balanced-text);
|
||||
}
|
||||
&.item-energized {
|
||||
@include item-style($item-energized-bg, $item-energized-border, $item-energized-text);
|
||||
}
|
||||
&.item-royal {
|
||||
@include item-style($item-royal-bg, $item-royal-border, $item-royal-text);
|
||||
}
|
||||
&.item-dark {
|
||||
@include item-style($item-dark-bg, $item-dark-border, $item-dark-text);
|
||||
}
|
||||
|
||||
&[ng-click]:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.list-borderless .item,
|
||||
.item-borderless {
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
// Link and Button Active States
|
||||
.item.active,
|
||||
.item.activated,
|
||||
.item-complex.active .item-content,
|
||||
.item-complex.activated .item-content,
|
||||
.item .item-content.active,
|
||||
.item .item-content.activated {
|
||||
@include item-active-style($item-default-active-bg, $item-default-active-border);
|
||||
|
||||
// Different active themes for <a> and <button> items
|
||||
&.item-light {
|
||||
@include item-active-style($item-light-active-bg, $item-light-active-border);
|
||||
}
|
||||
&.item-stable {
|
||||
@include item-active-style($item-stable-active-bg, $item-stable-active-border);
|
||||
}
|
||||
&.item-positive {
|
||||
@include item-active-style($item-positive-active-bg, $item-positive-active-border);
|
||||
}
|
||||
&.item-calm {
|
||||
@include item-active-style($item-calm-active-bg, $item-calm-active-border);
|
||||
}
|
||||
&.item-assertive {
|
||||
@include item-active-style($item-assertive-active-bg, $item-assertive-active-border);
|
||||
}
|
||||
&.item-balanced {
|
||||
@include item-active-style($item-balanced-active-bg, $item-balanced-active-border);
|
||||
}
|
||||
&.item-energized {
|
||||
@include item-active-style($item-energized-active-bg, $item-energized-active-border);
|
||||
}
|
||||
&.item-royal {
|
||||
@include item-active-style($item-royal-active-bg, $item-royal-active-border);
|
||||
}
|
||||
&.item-dark {
|
||||
@include item-active-style($item-dark-active-bg, $item-dark-active-border);
|
||||
}
|
||||
}
|
||||
|
||||
// Handle text overflow
|
||||
.item,
|
||||
.item h1,
|
||||
.item h2,
|
||||
.item h3,
|
||||
.item h4,
|
||||
.item h5,
|
||||
.item h6,
|
||||
.item p,
|
||||
.item-content,
|
||||
.item-content h1,
|
||||
.item-content h2,
|
||||
.item-content h3,
|
||||
.item-content h4,
|
||||
.item-content h5,
|
||||
.item-content h6,
|
||||
.item-content p {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
// Linked list items
|
||||
a.item {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Complex Items
|
||||
* --------------------------------------------------
|
||||
* Adding .item-complex allows the .item to be slidable and
|
||||
* have options underneath the button, but also requires an
|
||||
* additional .item-content element inside .item.
|
||||
* Basically .item-complex removes any default settings which
|
||||
* .item added, so that .item-content looks them as just .item.
|
||||
*/
|
||||
|
||||
.item-complex,
|
||||
a.item.item-complex,
|
||||
button.item.item-complex {
|
||||
padding: 0;
|
||||
}
|
||||
.item-complex .item-content,
|
||||
.item-radio .item-content {
|
||||
position: relative;
|
||||
z-index: $z-index-item;
|
||||
padding: $item-padding (ceil( ($item-padding * 3) + ($item-padding / 3) ) - 5) $item-padding $item-padding;
|
||||
border: none;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
a.item-content {
|
||||
display: block;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.item-text-wrap .item,
|
||||
.item-text-wrap .item-content,
|
||||
.item-text-wrap,
|
||||
.item-text-wrap h1,
|
||||
.item-text-wrap h2,
|
||||
.item-text-wrap h3,
|
||||
.item-text-wrap h4,
|
||||
.item-text-wrap h5,
|
||||
.item-text-wrap h6,
|
||||
.item-text-wrap p,
|
||||
.item-complex.item-text-wrap .item-content,
|
||||
.item-body h1,
|
||||
.item-body h2,
|
||||
.item-body h3,
|
||||
.item-body h4,
|
||||
.item-body h5,
|
||||
.item-body h6,
|
||||
.item-body p {
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
}
|
||||
.item-complex.item-text-wrap,
|
||||
.item-complex.item-text-wrap h1,
|
||||
.item-complex.item-text-wrap h2,
|
||||
.item-complex.item-text-wrap h3,
|
||||
.item-complex.item-text-wrap h4,
|
||||
.item-complex.item-text-wrap h5,
|
||||
.item-complex.item-text-wrap h6,
|
||||
.item-complex.item-text-wrap p {
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
// Link and Button Active States
|
||||
|
||||
.item-complex{
|
||||
// Stylized items
|
||||
&.item-light > .item-content{
|
||||
@include item-style($item-light-bg, $item-light-border, $item-light-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-light-active-bg, $item-light-active-border);
|
||||
}
|
||||
}
|
||||
&.item-stable > .item-content{
|
||||
@include item-style($item-stable-bg, $item-stable-border, $item-stable-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-stable-active-bg, $item-stable-active-border);
|
||||
}
|
||||
}
|
||||
&.item-positive > .item-content{
|
||||
@include item-style($item-positive-bg, $item-positive-border, $item-positive-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-positive-active-bg, $item-positive-active-border);
|
||||
}
|
||||
}
|
||||
&.item-calm > .item-content{
|
||||
@include item-style($item-calm-bg, $item-calm-border, $item-calm-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-calm-active-bg, $item-calm-active-border);
|
||||
}
|
||||
}
|
||||
&.item-assertive > .item-content{
|
||||
@include item-style($item-assertive-bg, $item-assertive-border, $item-assertive-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-assertive-active-bg, $item-assertive-active-border);
|
||||
}
|
||||
}
|
||||
&.item-balanced > .item-content{
|
||||
@include item-style($item-balanced-bg, $item-balanced-border, $item-balanced-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-balanced-active-bg, $item-balanced-active-border);
|
||||
}
|
||||
}
|
||||
&.item-energized > .item-content{
|
||||
@include item-style($item-energized-bg, $item-energized-border, $item-energized-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-energized-active-bg, $item-energized-active-border);
|
||||
}
|
||||
}
|
||||
&.item-royal > .item-content{
|
||||
@include item-style($item-royal-bg, $item-royal-border, $item-royal-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-royal-active-bg, $item-royal-active-border);
|
||||
}
|
||||
}
|
||||
&.item-dark > .item-content{
|
||||
@include item-style($item-dark-bg, $item-dark-border, $item-dark-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-dark-active-bg, $item-dark-active-border);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Item Icons
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-icon-left .icon,
|
||||
.item-icon-right .icon {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
font-size: $item-icon-font-size;
|
||||
|
||||
&:before {
|
||||
display: block;
|
||||
width: $item-icon-font-size;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.item .fill-icon {
|
||||
min-width: $item-icon-fill-font-size + 2;
|
||||
min-height: $item-icon-fill-font-size + 2;
|
||||
font-size: $item-icon-fill-font-size;
|
||||
}
|
||||
|
||||
.item-icon-left {
|
||||
padding-left: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
|
||||
.icon {
|
||||
left: ceil( ($item-padding / 3) * 2);
|
||||
}
|
||||
}
|
||||
.item-complex.item-icon-left {
|
||||
padding-left: 0;
|
||||
|
||||
.item-content {
|
||||
padding-left: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
}
|
||||
}
|
||||
|
||||
.item-icon-right {
|
||||
padding-right: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
|
||||
.icon {
|
||||
right: ceil( ($item-padding / 3) * 2);
|
||||
}
|
||||
}
|
||||
.item-complex.item-icon-right {
|
||||
padding-right: 0;
|
||||
|
||||
.item-content {
|
||||
padding-right: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
}
|
||||
}
|
||||
|
||||
.item-icon-left.item-icon-right .icon:first-child {
|
||||
right: auto;
|
||||
}
|
||||
.item-icon-left.item-icon-right .icon:last-child,
|
||||
.item-icon-left .item-delete .icon {
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.item-icon-left .icon-accessory,
|
||||
.item-icon-right .icon-accessory {
|
||||
color: $item-icon-accessory-color;
|
||||
font-size: $item-icon-accessory-font-size;
|
||||
}
|
||||
.item-icon-left .icon-accessory {
|
||||
left: floor($item-padding / 5);
|
||||
}
|
||||
.item-icon-right .icon-accessory {
|
||||
right: floor($item-padding / 5);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Item Button
|
||||
* --------------------------------------------------
|
||||
* An item button is a child button inside an .item (not the entire .item)
|
||||
*/
|
||||
|
||||
.item-button-left {
|
||||
padding-left: ceil($item-padding * 4.5);
|
||||
}
|
||||
|
||||
.item-button-left > .button,
|
||||
.item-button-left .item-content > .button {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: ceil($item-padding / 2);
|
||||
left: ceil( ($item-padding / 3) * 2);
|
||||
min-width: $item-icon-font-size + ($button-border-width * 2);
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
|
||||
.icon:before {
|
||||
position: relative;
|
||||
left: auto;
|
||||
width: auto;
|
||||
line-height: $item-icon-font-size - 1;
|
||||
}
|
||||
|
||||
> .button {
|
||||
margin: 0px 2px;
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
}
|
||||
}
|
||||
|
||||
.item-button-right,
|
||||
a.item.item-button-right,
|
||||
button.item.item-button-right {
|
||||
padding-right: $item-padding * 5;
|
||||
}
|
||||
|
||||
.item-button-right > .button,
|
||||
.item-button-right .item-content > .button,
|
||||
.item-button-right > .buttons,
|
||||
.item-button-right .item-content > .buttons {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: ceil($item-padding / 2);
|
||||
right: $item-padding;
|
||||
min-width: $item-icon-font-size + ($button-border-width * 2);
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
|
||||
.icon:before {
|
||||
position: relative;
|
||||
left: auto;
|
||||
width: auto;
|
||||
line-height: $item-icon-font-size - 1;
|
||||
}
|
||||
|
||||
> .button {
|
||||
margin: 0px 2px;
|
||||
min-width: $item-icon-font-size + ($button-border-width * 2);
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Avatar
|
||||
// -------------------------------
|
||||
|
||||
.item-avatar,
|
||||
.item-avatar .item-content,
|
||||
.item-avatar-left,
|
||||
.item-avatar-left .item-content {
|
||||
padding-left: $item-avatar-width + ($item-padding * 2);
|
||||
min-height: $item-avatar-width + ($item-padding * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-padding;
|
||||
left: $item-padding;
|
||||
max-width: $item-avatar-width;
|
||||
max-height: $item-avatar-height;
|
||||
width: 100%;
|
||||
border-radius: $item-avatar-border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
.item-avatar-right,
|
||||
.item-avatar-right .item-content {
|
||||
padding-right: $item-avatar-width + ($item-padding * 2);
|
||||
min-height: $item-avatar-width + ($item-padding * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-padding;
|
||||
right: $item-padding;
|
||||
max-width: $item-avatar-width;
|
||||
max-height: $item-avatar-height;
|
||||
width: 100%;
|
||||
border-radius: $item-avatar-border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Thumbnails
|
||||
// -------------------------------
|
||||
|
||||
.item-thumbnail-left,
|
||||
.item-thumbnail-left .item-content {
|
||||
padding-top: $item-padding / 2;
|
||||
padding-left: $item-thumbnail-width + $item-thumbnail-margin + $item-padding;
|
||||
min-height: $item-thumbnail-height + ($item-thumbnail-margin * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-thumbnail-margin;
|
||||
left: $item-thumbnail-margin;
|
||||
max-width: $item-thumbnail-width;
|
||||
max-height: $item-thumbnail-height;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.item-avatar.item-complex,
|
||||
.item-avatar-left.item-complex,
|
||||
.item-thumbnail-left.item-complex {
|
||||
padding-top: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.item-thumbnail-right,
|
||||
.item-thumbnail-right .item-content {
|
||||
padding-top: $item-padding / 2;
|
||||
padding-right: $item-thumbnail-width + $item-thumbnail-margin + $item-padding;
|
||||
min-height: $item-thumbnail-height + ($item-thumbnail-margin * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-thumbnail-margin;
|
||||
right: $item-thumbnail-margin;
|
||||
max-width: $item-thumbnail-width;
|
||||
max-height: $item-thumbnail-height;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.item-avatar-right.item-complex,
|
||||
.item-thumbnail-right.item-complex {
|
||||
padding-top: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
|
||||
// Item Image
|
||||
// -------------------------------
|
||||
|
||||
.item-image {
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
|
||||
img:first-child, .list-img {
|
||||
width: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Body
|
||||
// -------------------------------
|
||||
|
||||
.item-body {
|
||||
overflow: auto;
|
||||
padding: $item-padding;
|
||||
text-overflow: inherit;
|
||||
white-space: normal;
|
||||
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
margin-top: $item-padding;
|
||||
margin-bottom: $item-padding;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Divider
|
||||
// -------------------------------
|
||||
|
||||
.item-divider {
|
||||
padding-top: ceil($item-padding / 2);
|
||||
padding-bottom: ceil($item-padding / 2);
|
||||
min-height: 30px;
|
||||
background-color: $item-divider-bg;
|
||||
color: $item-divider-color;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.platform-ios .item-divider-platform,
|
||||
.item-divider-ios {
|
||||
padding-top: 26px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
background-color: #efeff4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.platform-android .item-divider-platform,
|
||||
.item-divider-android {
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
|
||||
// Item Note
|
||||
// -------------------------------
|
||||
|
||||
.item-note {
|
||||
float: right;
|
||||
color: #aaa;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
|
||||
// Item Editing
|
||||
// -------------------------------
|
||||
|
||||
.item-left-editable .item-content,
|
||||
.item-right-editable .item-content {
|
||||
// setup standard transition settings
|
||||
@include transition-duration( $item-edit-transition-duration );
|
||||
@include transition-timing-function( $item-edit-transition-function );
|
||||
-webkit-transition-property: -webkit-transform;
|
||||
-moz-transition-property: -moz-transform;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
.list-left-editing .item-left-editable .item-content,
|
||||
.item-left-editing.item-left-editable .item-content {
|
||||
// actively editing the left side of the item
|
||||
@include translate3d($item-left-edit-open-width, 0, 0);
|
||||
}
|
||||
|
||||
.list-right-editing .item-right-editable .item-content,
|
||||
.item-right-editing.item-right-editable .item-content {
|
||||
// actively editing the left side of the item
|
||||
@include translate3d(-$item-right-edit-open-width, 0, 0);
|
||||
}
|
||||
|
||||
.item-remove-animate {
|
||||
&.ng-leave {
|
||||
@include transition-duration( $item-remove-transition-duration );
|
||||
}
|
||||
&.ng-leave .item-content,
|
||||
&.ng-leave:last-of-type {
|
||||
@include transition-duration( $item-remove-transition-duration );
|
||||
@include transition-timing-function( $item-remove-transition-function );
|
||||
@include transition-property( all );
|
||||
}
|
||||
|
||||
&.ng-leave.ng-leave-active .item-content {
|
||||
opacity:0;
|
||||
-webkit-transform: translate3d(-100%, 0, 0) !important;
|
||||
transform: translate3d(-100%, 0, 0) !important;
|
||||
}
|
||||
&.ng-leave.ng-leave-active:last-of-type {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
&.ng-leave.ng-leave-active ~ ion-item:not(.ng-leave) {
|
||||
-webkit-transform: translate3d(0, unquote('-webkit-calc(-100% + 1px)'), 0);
|
||||
transform: translate3d(0, calc(-100% + 1px), 0);
|
||||
@include transition-duration( $item-remove-transition-duration );
|
||||
@include transition-timing-function( $item-remove-descendents-transition-function );
|
||||
@include transition-property( all );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Item Left Edit Button
|
||||
// -------------------------------
|
||||
|
||||
.item-left-edit {
|
||||
@include transition(all $item-edit-transition-function $item-edit-transition-duration / 2);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-item-edit;
|
||||
width: $item-left-edit-open-width;
|
||||
height: 100%;
|
||||
line-height: 100%;
|
||||
|
||||
.button {
|
||||
height: 100%;
|
||||
|
||||
&.icon {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
display: none;
|
||||
opacity: 0;
|
||||
@include translate3d( ($item-left-edit-left - $item-left-edit-open-width) / 2, 0, 0);
|
||||
&.visible {
|
||||
display: block;
|
||||
&.active {
|
||||
opacity: 1;
|
||||
@include translate3d($item-left-edit-left, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-left-editing .item-left-edit {
|
||||
@include transition-delay($item-edit-transition-duration / 2);
|
||||
}
|
||||
|
||||
// Item Delete (Left side edit button)
|
||||
// -------------------------------
|
||||
|
||||
.item-delete .button.icon {
|
||||
color: $item-delete-icon-color;
|
||||
font-size: $item-delete-icon-size;
|
||||
|
||||
&:hover {
|
||||
opacity: .7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Right Edit Button
|
||||
// -------------------------------
|
||||
|
||||
.item-right-edit {
|
||||
@include transition(all $item-edit-transition-function $item-edit-transition-duration / 2);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 0;
|
||||
width: $item-right-edit-open-width * 1.5;
|
||||
height: 100%;
|
||||
background: inherit;
|
||||
padding-left: 20px;
|
||||
|
||||
.button {
|
||||
min-width: $item-right-edit-open-width;
|
||||
height: 100%;
|
||||
|
||||
&.icon {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
font-size: $item-reorder-icon-size;
|
||||
}
|
||||
}
|
||||
|
||||
display: none;
|
||||
opacity: 0;
|
||||
@include translate3d($item-right-edit-open-width / 2, 0, 0);
|
||||
&.visible {
|
||||
display: block;
|
||||
z-index: $z-index-item-reorder;
|
||||
&.active {
|
||||
opacity: 1;
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-right-editing .item-right-edit {
|
||||
@include transition-delay($item-edit-transition-duration / 2);
|
||||
}
|
||||
|
||||
|
||||
// Item Reordering (Right side edit button)
|
||||
// -------------------------------
|
||||
|
||||
.item-reorder .button.icon {
|
||||
color: $item-reorder-icon-color;
|
||||
font-size: $item-reorder-icon-size;
|
||||
}
|
||||
|
||||
.item-reordering {
|
||||
// item is actively being reordered
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: $z-index-item-reordering;
|
||||
width: 100%;
|
||||
box-shadow: 0px 0px 10px 0px #aaa;
|
||||
|
||||
.item-reorder {
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.item-placeholder {
|
||||
// placeholder for the item that's being reordered
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The hidden right-side buttons that can be exposed under a list item
|
||||
* with dragging.
|
||||
*/
|
||||
.item-options {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: $z-index-item-options;
|
||||
height: 100%;
|
||||
|
||||
.button {
|
||||
height: 100%;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
@include display-inline-flex();
|
||||
@include align-items(center);
|
||||
|
||||
&:before{
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
125
www/lib/ionic/scss/_list.scss
Normal file
125
www/lib/ionic/scss/_list.scss
Normal file
|
@ -0,0 +1,125 @@
|
|||
|
||||
/**
|
||||
* Lists
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.list {
|
||||
position: relative;
|
||||
padding-top: $item-border-width;
|
||||
padding-bottom: $item-border-width;
|
||||
padding-left: 0; // reset padding because ul and ol
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.list:last-child {
|
||||
margin-bottom: 0px;
|
||||
&.card{
|
||||
margin-bottom:40px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* List Header
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.list-header {
|
||||
margin-top: $list-header-margin-top;
|
||||
padding: $list-header-padding;
|
||||
background-color: $list-header-bg;
|
||||
color: $list-header-color;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
// when its a card make sure it doesn't duplicate top and bottom borders
|
||||
.card.list .list-item {
|
||||
padding-right: 1px;
|
||||
padding-left: 1px;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Cards and Inset Lists
|
||||
* --------------------------------------------------
|
||||
* A card and list-inset are close to the same thing, except a card as a box shadow.
|
||||
*/
|
||||
|
||||
.card,
|
||||
.list-inset {
|
||||
overflow: hidden;
|
||||
margin: ($content-padding * 2) $content-padding;
|
||||
border-radius: $card-border-radius;
|
||||
background-color: $card-body-bg;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding-top: $item-border-width;
|
||||
padding-bottom: $item-border-width;
|
||||
box-shadow: $card-box-shadow;
|
||||
|
||||
.item {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
.item:first-child {
|
||||
border-top: 0;
|
||||
}
|
||||
.item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.padding {
|
||||
.card, .list-inset {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.card .item,
|
||||
.list-inset .item,
|
||||
.padding > .list .item
|
||||
{
|
||||
&:first-child {
|
||||
border-top-left-radius: $card-border-radius;
|
||||
border-top-right-radius: $card-border-radius;
|
||||
|
||||
.item-content {
|
||||
border-top-left-radius: $card-border-radius;
|
||||
border-top-right-radius: $card-border-radius;
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
border-bottom-right-radius: $card-border-radius;
|
||||
border-bottom-left-radius: $card-border-radius;
|
||||
|
||||
.item-content {
|
||||
border-bottom-right-radius: $card-border-radius;
|
||||
border-bottom-left-radius: $card-border-radius;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card .item:last-child,
|
||||
.list-inset .item:last-child {
|
||||
margin-bottom: $item-border-width * -1;
|
||||
}
|
||||
|
||||
.card .item,
|
||||
.list-inset .item,
|
||||
.padding > .list .item,
|
||||
.padding-horizontal > .list .item {
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
|
||||
&.item-input input {
|
||||
padding-right: 44px;
|
||||
}
|
||||
}
|
||||
.padding-left > .list .item {
|
||||
margin-left: 0;
|
||||
}
|
||||
.padding-right > .list .item {
|
||||
margin-right: 0;
|
||||
}
|
50
www/lib/ionic/scss/_loading.scss
Normal file
50
www/lib/ionic/scss/_loading.scss
Normal file
|
@ -0,0 +1,50 @@
|
|||
|
||||
/**
|
||||
* Loading
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.loading-container {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
|
||||
z-index: $z-index-loading;
|
||||
|
||||
@include display-flex();
|
||||
@include justify-content(center);
|
||||
@include align-items(center);
|
||||
|
||||
@include transition(0.2s opacity linear);
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
&:not(.visible) .icon {
|
||||
display: none;
|
||||
}
|
||||
&.visible {
|
||||
visibility: visible;
|
||||
}
|
||||
&.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.loading {
|
||||
padding: $loading-padding;
|
||||
|
||||
border-radius: $loading-border-radius;
|
||||
background-color: $loading-bg-color;
|
||||
|
||||
color: $loading-text-color;
|
||||
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
font-size: $loading-font-size;
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: $loading-text-color;
|
||||
}
|
||||
}
|
||||
}
|
64
www/lib/ionic/scss/_menu.scss
Normal file
64
www/lib/ionic/scss/_menu.scss
Normal file
|
@ -0,0 +1,64 @@
|
|||
|
||||
/**
|
||||
* Menus
|
||||
* --------------------------------------------------
|
||||
* Side panel structure
|
||||
*/
|
||||
|
||||
.menu {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: $z-index-menu;
|
||||
overflow: hidden;
|
||||
|
||||
min-height: 100%;
|
||||
max-height: 100%;
|
||||
width: $menu-width;
|
||||
|
||||
background-color: $menu-bg;
|
||||
|
||||
.scroll-content {
|
||||
z-index: $z-index-menu-scroll-content;
|
||||
}
|
||||
|
||||
.bar-header {
|
||||
z-index: $z-index-menu-bar-header;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-content {
|
||||
@include transform(none);
|
||||
box-shadow: $menu-side-shadow;
|
||||
}
|
||||
|
||||
.menu-open .menu-content .pane,
|
||||
.menu-open .menu-content .scroll-content {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.grade-b .menu-content,
|
||||
.grade-c .menu-content {
|
||||
@include box-sizing(content-box);
|
||||
right: -1px;
|
||||
left: -1px;
|
||||
border-right: 1px solid #ccc;
|
||||
border-left: 1px solid #ccc;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.menu-left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.menu-right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.aside-open.aside-resizing .menu-right {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-animated {
|
||||
@include transition-transform($menu-animation-speed ease);
|
||||
}
|
624
www/lib/ionic/scss/_mixins.scss
Normal file
624
www/lib/ionic/scss/_mixins.scss
Normal file
|
@ -0,0 +1,624 @@
|
|||
|
||||
// Button Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin button-style($bg-color, $border-color, $active-bg-color, $active-border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
|
||||
// Give desktop users something to play with
|
||||
&:hover {
|
||||
color: $color;
|
||||
text-decoration: none;
|
||||
}
|
||||
&.active,
|
||||
&.activated {
|
||||
border-color: $active-border-color;
|
||||
background-color: $active-bg-color;
|
||||
box-shadow: inset 0 1px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button-clear($color, $font-size:"") {
|
||||
&.button-clear {
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
color: $color;
|
||||
|
||||
@if $font-size != "" {
|
||||
font-size: $font-size;
|
||||
}
|
||||
}
|
||||
&.button-icon {
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button-outline($color, $text-color:"") {
|
||||
&.button-outline {
|
||||
border-color: $color;
|
||||
background: transparent;
|
||||
@if $text-color == "" {
|
||||
$text-color: $color;
|
||||
}
|
||||
color: $text-color;
|
||||
&.active,
|
||||
&.activated {
|
||||
background-color: $color;
|
||||
box-shadow: none;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Bar Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin bar-style($bg-color, $border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
background-image: linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%);
|
||||
color: $color;
|
||||
|
||||
.title {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Tab Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin tab-style($bg-color, $border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
background-image: linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%);
|
||||
color: $color;
|
||||
}
|
||||
|
||||
@mixin tab-badge-style($bg-color, $color) {
|
||||
.tab-item .badge {
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin item-style($bg-color, $border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
}
|
||||
|
||||
@mixin item-active-style($active-bg-color, $active-border-color) {
|
||||
border-color: $active-border-color;
|
||||
background-color: $active-bg-color;
|
||||
}
|
||||
|
||||
|
||||
// Badge Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin badge-style($bg-color, $color) {
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
}
|
||||
|
||||
|
||||
// Range Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin range-style($track-bg-color) {
|
||||
&::-webkit-slider-thumb:before {
|
||||
background: $track-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Checkbox Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin checkbox-style($off-border-color, $on-bg-color, $on-border-color) {
|
||||
& input:before,
|
||||
& .checkbox-icon:before {
|
||||
border-color: $off-border-color;
|
||||
}
|
||||
|
||||
// what the background looks like when its checked
|
||||
& input:checked:before,
|
||||
& input:checked + .checkbox-icon:before {
|
||||
background: $on-bg-color;
|
||||
border-color: $on-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Toggle Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin toggle-style($on-border-color, $on-bg-color) {
|
||||
// the track when the toggle is "on"
|
||||
& input:checked + .track {
|
||||
border-color: $on-border-color;
|
||||
background-color: $on-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Clearfix
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin clearfix {
|
||||
*zoom: 1;
|
||||
&:before,
|
||||
&:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Placeholder text
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin placeholder($color: $input-color-placeholder, $text-indent: 0) {
|
||||
&::-moz-placeholder { // Firefox 19+
|
||||
color: $color;
|
||||
}
|
||||
&:-ms-input-placeholder {
|
||||
color: $color;
|
||||
}
|
||||
&::-webkit-input-placeholder {
|
||||
color: $color;
|
||||
// Safari placeholder margin issue
|
||||
text-indent: $text-indent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Text Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin text-size-adjust($value: none) {
|
||||
-webkit-text-size-adjust: $value;
|
||||
-moz-text-size-adjust: $value;
|
||||
text-size-adjust: $value;
|
||||
}
|
||||
@mixin tap-highlight-transparent() {
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
-webkit-tap-highlight-color: transparent; // For some Androids
|
||||
}
|
||||
@mixin touch-callout($value: none) {
|
||||
-webkit-touch-callout: $value;
|
||||
}
|
||||
|
||||
|
||||
// Font Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin font-family-serif() {
|
||||
font-family: $serif-font-family;
|
||||
}
|
||||
@mixin font-family-sans-serif() {
|
||||
font-family: $sans-font-family;
|
||||
}
|
||||
@mixin font-family-monospace() {
|
||||
font-family: $mono-font-family;
|
||||
}
|
||||
@mixin font-shorthand($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
font-weight: $weight;
|
||||
font-size: $size;
|
||||
line-height: $line-height;
|
||||
}
|
||||
@mixin font-serif($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
@include font-family-serif();
|
||||
@include font-shorthand($size, $weight, $line-height);
|
||||
}
|
||||
@mixin font-sans-serif($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
@include font-family-sans-serif();
|
||||
@include font-shorthand($size, $weight, $line-height);
|
||||
}
|
||||
@mixin font-monospace($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
@include font-family-monospace();
|
||||
@include font-shorthand($size, $weight, $line-height);
|
||||
}
|
||||
@mixin font-smoothing($font-smoothing) {
|
||||
-webkit-font-smoothing: $font-smoothing;
|
||||
font-smoothing: $font-smoothing;
|
||||
}
|
||||
|
||||
|
||||
// Appearance
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin appearance($val) {
|
||||
-webkit-appearance: $val;
|
||||
-moz-appearance: $val;
|
||||
appearance: $val;
|
||||
}
|
||||
|
||||
|
||||
// Border Radius Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin border-radius($radius) {
|
||||
-webkit-border-radius: $radius;
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
// Single Corner Border Radius
|
||||
@mixin border-top-left-radius($radius) {
|
||||
-webkit-border-top-left-radius: $radius;
|
||||
border-top-left-radius: $radius;
|
||||
}
|
||||
@mixin border-top-right-radius($radius) {
|
||||
-webkit-border-top-right-radius: $radius;
|
||||
border-top-right-radius: $radius;
|
||||
}
|
||||
@mixin border-bottom-right-radius($radius) {
|
||||
-webkit-border-bottom-right-radius: $radius;
|
||||
border-bottom-right-radius: $radius;
|
||||
}
|
||||
@mixin border-bottom-left-radius($radius) {
|
||||
-webkit-border-bottom-left-radius: $radius;
|
||||
border-bottom-left-radius: $radius;
|
||||
}
|
||||
|
||||
// Single Side Border Radius
|
||||
@mixin border-top-radius($radius) {
|
||||
@include border-top-right-radius($radius);
|
||||
@include border-top-left-radius($radius);
|
||||
}
|
||||
@mixin border-right-radius($radius) {
|
||||
@include border-top-right-radius($radius);
|
||||
@include border-bottom-right-radius($radius);
|
||||
}
|
||||
@mixin border-bottom-radius($radius) {
|
||||
@include border-bottom-right-radius($radius);
|
||||
@include border-bottom-left-radius($radius);
|
||||
}
|
||||
@mixin border-left-radius($radius) {
|
||||
@include border-top-left-radius($radius);
|
||||
@include border-bottom-left-radius($radius);
|
||||
}
|
||||
|
||||
|
||||
// Box shadows
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin box-shadow($shadow...) {
|
||||
-webkit-box-shadow: $shadow;
|
||||
box-shadow: $shadow;
|
||||
}
|
||||
|
||||
|
||||
// Transition Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin transition($transition...) {
|
||||
-webkit-transition: $transition;
|
||||
transition: $transition;
|
||||
}
|
||||
@mixin transition-delay($transition-delay) {
|
||||
-webkit-transition-delay: $transition-delay;
|
||||
transition-delay: $transition-delay;
|
||||
}
|
||||
@mixin transition-duration($transition-duration) {
|
||||
-webkit-transition-duration: $transition-duration;
|
||||
transition-duration: $transition-duration;
|
||||
}
|
||||
@mixin transition-timing-function($transition-timing) {
|
||||
-webkit-transition-timing-function: $transition-timing;
|
||||
transition-timing-function: $transition-timing;
|
||||
}
|
||||
@mixin transition-property($property) {
|
||||
-webkit-transition-property: $property;
|
||||
transition-property: $property;
|
||||
}
|
||||
@mixin transition-transform($properties...) {
|
||||
// special case cuz of transform vendor prefixes
|
||||
-webkit-transition: -webkit-transform $properties;
|
||||
transition: transform $properties;
|
||||
}
|
||||
|
||||
|
||||
// Animation Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin animation($animation) {
|
||||
-webkit-animation: $animation;
|
||||
animation: $animation;
|
||||
}
|
||||
@mixin animation-duration($duration) {
|
||||
-webkit-animation-duration: $duration;
|
||||
animation-duration: $duration;
|
||||
}
|
||||
@mixin animation-direction($direction) {
|
||||
-webkit-animation-direction: $direction;
|
||||
animation-direction: $direction;
|
||||
}
|
||||
@mixin animation-timing-function($animation-timing) {
|
||||
-webkit-animation-timing-function: $animation-timing;
|
||||
animation-timing-function: $animation-timing;
|
||||
}
|
||||
@mixin animation-fill-mode($fill-mode) {
|
||||
-webkit-animation-fill-mode: $fill-mode;
|
||||
animation-fill-mode: $fill-mode;
|
||||
}
|
||||
@mixin animation-name($name...) {
|
||||
-webkit-animation-name: $name;
|
||||
animation-name: $name;
|
||||
}
|
||||
@mixin animation-iteration-count($count) {
|
||||
-webkit-animation-iteration-count: $count;
|
||||
animation-iteration-count: $count;
|
||||
}
|
||||
|
||||
|
||||
// Transformation Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin rotate($degrees) {
|
||||
@include transform( rotate($degrees) );
|
||||
}
|
||||
@mixin scale($ratio) {
|
||||
@include transform( scale($ratio) );
|
||||
}
|
||||
@mixin translate($x, $y) {
|
||||
@include transform( translate($x, $y) );
|
||||
}
|
||||
@mixin skew($x, $y) {
|
||||
@include transform( skew($x, $y) );
|
||||
-webkit-backface-visibility: hidden;
|
||||
}
|
||||
@mixin translate3d($x, $y, $z) {
|
||||
@include transform( translate3d($x, $y, $z) );
|
||||
}
|
||||
@mixin translateZ($z) {
|
||||
@include transform( translateZ($z) );
|
||||
}
|
||||
@mixin transform($val) {
|
||||
-webkit-transform: $val;
|
||||
transform: $val;
|
||||
}
|
||||
|
||||
@mixin transform-origin($left, $top) {
|
||||
-webkit-transform-origin: $left $top;
|
||||
transform-origin: $left $top;
|
||||
}
|
||||
|
||||
|
||||
// Backface visibility
|
||||
// --------------------------------------------------
|
||||
// Prevent browsers from flickering when using CSS 3D transforms.
|
||||
// Default value is `visible`, but can be changed to `hidden
|
||||
|
||||
@mixin backface-visibility($visibility){
|
||||
-webkit-backface-visibility: $visibility;
|
||||
backface-visibility: $visibility;
|
||||
}
|
||||
|
||||
|
||||
// Background clipping
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin background-clip($clip) {
|
||||
-webkit-background-clip: $clip;
|
||||
background-clip: $clip;
|
||||
}
|
||||
|
||||
|
||||
// Background sizing
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin background-size($size) {
|
||||
-webkit-background-size: $size;
|
||||
background-size: $size;
|
||||
}
|
||||
|
||||
|
||||
// Box sizing
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin box-sizing($boxmodel) {
|
||||
-webkit-box-sizing: $boxmodel;
|
||||
-moz-box-sizing: $boxmodel;
|
||||
box-sizing: $boxmodel;
|
||||
}
|
||||
|
||||
|
||||
// User select
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin user-select($select) {
|
||||
-webkit-user-select: $select;
|
||||
-moz-user-select: $select;
|
||||
-ms-user-select: $select;
|
||||
user-select: $select;
|
||||
}
|
||||
|
||||
|
||||
// Content Columns
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin content-columns($columnCount, $columnGap: $grid-gutter-width) {
|
||||
-webkit-column-count: $columnCount;
|
||||
-moz-column-count: $columnCount;
|
||||
column-count: $columnCount;
|
||||
-webkit-column-gap: $columnGap;
|
||||
-moz-column-gap: $columnGap;
|
||||
column-gap: $columnGap;
|
||||
}
|
||||
|
||||
|
||||
// Flexbox Mixins
|
||||
// --------------------------------------------------
|
||||
// http://philipwalton.github.io/solved-by-flexbox/
|
||||
// https://github.com/philipwalton/solved-by-flexbox
|
||||
|
||||
@mixin display-flex {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-box;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@mixin display-inline-flex {
|
||||
display: -webkit-inline-box;
|
||||
display: -webkit-inline-flex;
|
||||
display: -moz-inline-flex;
|
||||
display: -ms-inline-flexbox;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
@mixin flex-direction($value: row) {
|
||||
@if $value == row-reverse {
|
||||
-webkit-box-direction: reverse;
|
||||
-webkit-box-orient: horizontal;
|
||||
} @else if $value == column {
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: vertical;
|
||||
} @else if $value == column-reverse {
|
||||
-webkit-box-direction: reverse;
|
||||
-webkit-box-orient: vertical;
|
||||
} @else {
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: horizontal;
|
||||
}
|
||||
-webkit-flex-direction: $value;
|
||||
-moz-flex-direction: $value;
|
||||
-ms-flex-direction: $value;
|
||||
flex-direction: $value;
|
||||
}
|
||||
|
||||
@mixin flex-wrap($value: nowrap) {
|
||||
// No Webkit Box fallback.
|
||||
-webkit-flex-wrap: $value;
|
||||
-moz-flex-wrap: $value;
|
||||
@if $value == nowrap {
|
||||
-ms-flex-wrap: none;
|
||||
} @else {
|
||||
-ms-flex-wrap: $value;
|
||||
}
|
||||
flex-wrap: $value;
|
||||
}
|
||||
|
||||
@mixin flex($fg: 1, $fs: null, $fb: null) {
|
||||
-webkit-box-flex: $fg;
|
||||
-webkit-flex: $fg $fs $fb;
|
||||
-moz-box-flex: $fg;
|
||||
-moz-flex: $fg $fs $fb;
|
||||
-ms-flex: $fg $fs $fb;
|
||||
flex: $fg $fs $fb;
|
||||
}
|
||||
|
||||
@mixin flex-flow($values: (row nowrap)) {
|
||||
// No Webkit Box fallback.
|
||||
-webkit-flex-flow: $values;
|
||||
-moz-flex-flow: $values;
|
||||
-ms-flex-flow: $values;
|
||||
flex-flow: $values;
|
||||
}
|
||||
|
||||
@mixin align-items($value: stretch) {
|
||||
@if $value == flex-start {
|
||||
-webkit-box-align: start;
|
||||
-ms-flex-align: start;
|
||||
} @else if $value == flex-end {
|
||||
-webkit-box-align: end;
|
||||
-ms-flex-align: end;
|
||||
} @else {
|
||||
-webkit-box-align: $value;
|
||||
-ms-flex-align: $value;
|
||||
}
|
||||
-webkit-align-items: $value;
|
||||
-moz-align-items: $value;
|
||||
align-items: $value;
|
||||
}
|
||||
|
||||
@mixin align-self($value: auto) {
|
||||
-webkit-align-self: $value;
|
||||
-moz-align-self: $value;
|
||||
@if $value == flex-start {
|
||||
-ms-flex-item-align: start;
|
||||
} @else if $value == flex-end {
|
||||
-ms-flex-item-align: end;
|
||||
} @else {
|
||||
-ms-flex-item-align: $value;
|
||||
}
|
||||
align-self: $value;
|
||||
}
|
||||
|
||||
@mixin align-content($value: stretch) {
|
||||
-webkit-align-content: $value;
|
||||
-moz-align-content: $value;
|
||||
@if $value == flex-start {
|
||||
-ms-flex-line-pack: start;
|
||||
} @else if $value == flex-end {
|
||||
-ms-flex-line-pack: end;
|
||||
} @else {
|
||||
-ms-flex-line-pack: $value;
|
||||
}
|
||||
align-content: $value;
|
||||
}
|
||||
|
||||
@mixin justify-content($value: stretch) {
|
||||
@if $value == flex-start {
|
||||
-webkit-box-pack: start;
|
||||
-ms-flex-pack: start;
|
||||
} @else if $value == flex-end {
|
||||
-webkit-box-pack: end;
|
||||
-ms-flex-pack: end;
|
||||
} @else if $value == space-between {
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
} @else {
|
||||
-webkit-box-pack: $value;
|
||||
-ms-flex-pack: $value;
|
||||
}
|
||||
-webkit-justify-content: $value;
|
||||
-moz-justify-content: $value;
|
||||
justify-content: $value;
|
||||
}
|
||||
|
||||
@mixin flex-order($n) {
|
||||
-webkit-order: $n;
|
||||
-ms-flex-order: $n;
|
||||
order: $n;
|
||||
-webkit-box-ordinal-group: $n;
|
||||
}
|
||||
|
||||
@mixin responsive-grid-break($selector, $max-width) {
|
||||
@media (max-width: $max-width) {
|
||||
#{$selector} {
|
||||
-webkit-box-direction: normal;
|
||||
-moz-box-direction: normal;
|
||||
-webkit-box-orient: vertical;
|
||||
-moz-box-orient: vertical;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
|
||||
.col, .col-10, .col-20, .col-25, .col-33, .col-34, .col-50, .col-66, .col-67, .col-75, .col-80, .col-90 {
|
||||
@include flex(1);
|
||||
margin-bottom: ($grid-padding-width * 3) / 2;
|
||||
margin-left: 0;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
94
www/lib/ionic/scss/_modal.scss
Normal file
94
www/lib/ionic/scss/_modal.scss
Normal file
|
@ -0,0 +1,94 @@
|
|||
|
||||
/**
|
||||
* Modals
|
||||
* --------------------------------------------------
|
||||
* Modals are independent windows that slide in from off-screen.
|
||||
*/
|
||||
|
||||
.modal-backdrop {
|
||||
@include transition(background-color 300ms ease-in-out);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-modal;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: $modal-backdrop-bg-inactive;
|
||||
|
||||
&.active {
|
||||
background-color: $modal-backdrop-bg-active;
|
||||
}
|
||||
}
|
||||
|
||||
.modal {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
z-index: $z-index-modal;
|
||||
overflow: hidden;
|
||||
min-height: 100%;
|
||||
width: 100%;
|
||||
background-color: $modal-bg-color;
|
||||
}
|
||||
|
||||
@media (min-width: $modal-inset-mode-break-point) {
|
||||
// inset mode is when the modal doesn't fill the entire
|
||||
// display but instead is centered within a large display
|
||||
.modal {
|
||||
top: $modal-inset-mode-top;
|
||||
right: $modal-inset-mode-right;
|
||||
bottom: $modal-inset-mode-bottom;
|
||||
left: $modal-inset-mode-left;
|
||||
overflow: visible;
|
||||
min-height: $modal-inset-mode-min-height;
|
||||
width: (100% - $modal-inset-mode-left - $modal-inset-mode-right);
|
||||
}
|
||||
|
||||
.modal.ng-leave-active {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
// remove ios header padding from inset header
|
||||
.platform-ios.platform-cordova .modal-wrapper .modal{
|
||||
.bar-header:not(.bar-subheader) {
|
||||
height: $bar-height;
|
||||
> * {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
.tabs-top > .tabs,
|
||||
.tabs.tabs-top {
|
||||
top: $bar-height;
|
||||
}
|
||||
.has-header,
|
||||
.bar-subheader {
|
||||
top: $bar-height;
|
||||
}
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height;
|
||||
}
|
||||
.has-tabs-top {
|
||||
top: $bar-height + $tabs-height;
|
||||
}
|
||||
.has-header.has-subheader.has-tabs-top {
|
||||
top: $bar-height + $bar-subheader-height + $tabs-height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// disable clicks on all but the modal
|
||||
.modal-open {
|
||||
pointer-events: none;
|
||||
|
||||
.modal,
|
||||
.modal-backdrop {
|
||||
pointer-events: auto;
|
||||
}
|
||||
// prevent clicks on modal when loading overlay is active though
|
||||
&.loading-active {
|
||||
.modal,
|
||||
.modal-backdrop {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
59
www/lib/ionic/scss/_platform.scss
Normal file
59
www/lib/ionic/scss/_platform.scss
Normal file
|
@ -0,0 +1,59 @@
|
|||
|
||||
/**
|
||||
* Platform
|
||||
* --------------------------------------------------
|
||||
* Platform specific tweaks
|
||||
*/
|
||||
|
||||
.platform-ios.platform-cordova {
|
||||
// iOS7/8 has a status bar which sits on top of the header.
|
||||
// Bump down everything to make room for it. However, if
|
||||
// if its in Cordova, and set to fullscreen, then disregard the bump.
|
||||
&:not(.fullscreen) {
|
||||
.bar-header:not(.bar-subheader) {
|
||||
height: $bar-height + $ios-statusbar-height;
|
||||
|
||||
&.item-input-inset .item-input-wrapper {
|
||||
margin-top: 19px !important;
|
||||
}
|
||||
|
||||
> * {
|
||||
margin-top: $ios-statusbar-height;
|
||||
}
|
||||
}
|
||||
.tabs-top > .tabs,
|
||||
.tabs.tabs-top {
|
||||
top: $bar-height + $ios-statusbar-height;
|
||||
}
|
||||
|
||||
.has-header,
|
||||
.bar-subheader {
|
||||
top: $bar-height + $ios-statusbar-height;
|
||||
}
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height + $ios-statusbar-height;
|
||||
}
|
||||
.has-tabs-top {
|
||||
top: $bar-height + $tabs-height + $ios-statusbar-height;
|
||||
}
|
||||
.has-header.has-subheader.has-tabs-top {
|
||||
top: $bar-height + $bar-subheader-height + $tabs-height + $ios-statusbar-height;
|
||||
}
|
||||
}
|
||||
&.status-bar-hide {
|
||||
// Cordova doesn't adjust the body height correctly, this makes up for it
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (orientation:landscape) {
|
||||
.platform-ios.platform-browser.platform-ipad {
|
||||
position: fixed; // required for iPad 7 Safari
|
||||
}
|
||||
}
|
||||
|
||||
.platform-c:not(.enable-transitions) * {
|
||||
// disable transitions on grade-c devices (Android 2)
|
||||
-webkit-transition: none !important;
|
||||
transition: none !important;
|
||||
}
|
168
www/lib/ionic/scss/_popover.scss
Normal file
168
www/lib/ionic/scss/_popover.scss
Normal file
|
@ -0,0 +1,168 @@
|
|||
|
||||
/**
|
||||
* Popovers
|
||||
* --------------------------------------------------
|
||||
* Popovers are independent views which float over content
|
||||
*/
|
||||
|
||||
.popover-backdrop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-popover;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: $popover-backdrop-bg-inactive;
|
||||
|
||||
&.active {
|
||||
background-color: $popover-backdrop-bg-active;
|
||||
}
|
||||
}
|
||||
|
||||
.popover {
|
||||
position: absolute;
|
||||
top: 25%;
|
||||
left: 50%;
|
||||
z-index: $z-index-popover;
|
||||
display: block;
|
||||
margin-top: 12px;
|
||||
margin-left: -$popover-width / 2;
|
||||
height: $popover-height;
|
||||
width: $popover-width;
|
||||
background-color: $popover-bg-color;
|
||||
box-shadow: $popover-box-shadow;
|
||||
opacity: 0;
|
||||
|
||||
.item:first-child {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
&.popover-bottom {
|
||||
margin-top: -12px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Set popover border-radius
|
||||
.popover,
|
||||
.popover .bar-header {
|
||||
border-radius: $popover-border-radius;
|
||||
}
|
||||
.popover .scroll-content {
|
||||
z-index: 1;
|
||||
margin: 2px 0;
|
||||
}
|
||||
.popover .bar-header {
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.popover .has-header {
|
||||
border-top-right-radius: 0;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
.popover-arrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
// iOS Popover
|
||||
.platform-ios {
|
||||
|
||||
.popover {
|
||||
box-shadow: $popover-box-shadow-ios;
|
||||
}
|
||||
|
||||
.popover,
|
||||
.popover .bar-header {
|
||||
border-radius: $popover-border-radius-ios;
|
||||
}
|
||||
.popover .scroll-content {
|
||||
margin: 8px 0;
|
||||
border-radius: $popover-border-radius-ios;
|
||||
}
|
||||
.popover .scroll-content.has-header {
|
||||
margin-top: 0;
|
||||
}
|
||||
.popover-arrow {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: -17px;
|
||||
width: 30px;
|
||||
height: 19px;
|
||||
overflow: hidden;
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
left: 5px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-color: $popover-bg-color;
|
||||
border-radius: 3px;
|
||||
content: '';
|
||||
@include rotate(-45deg);
|
||||
}
|
||||
}
|
||||
.popover-bottom .popover-arrow {
|
||||
top: auto;
|
||||
bottom: -10px;
|
||||
&:after {
|
||||
top: -6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Android Popover
|
||||
.platform-android {
|
||||
|
||||
.popover {
|
||||
margin-top: -32px;
|
||||
background-color: $popover-bg-color-android;
|
||||
box-shadow: $popover-box-shadow-android;
|
||||
|
||||
.item {
|
||||
border-color: $popover-bg-color-android;
|
||||
background-color: $popover-bg-color-android;
|
||||
color: #4d4d4d;
|
||||
}
|
||||
&.popover-bottom {
|
||||
margin-top: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.popover-backdrop,
|
||||
.popover-backdrop.active {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// disable clicks on all but the popover
|
||||
.popover-open {
|
||||
pointer-events: none;
|
||||
|
||||
.popover,
|
||||
.popover-backdrop {
|
||||
pointer-events: auto;
|
||||
}
|
||||
// prevent clicks on popover when loading overlay is active though
|
||||
&.loading-active {
|
||||
.popover,
|
||||
.popover-backdrop {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// wider popover on larger viewports
|
||||
@media (min-width: $popover-large-break-point) {
|
||||
.popover {
|
||||
width: $popover-large-width;
|
||||
}
|
||||
}
|
105
www/lib/ionic/scss/_popup.scss
Normal file
105
www/lib/ionic/scss/_popup.scss
Normal file
|
@ -0,0 +1,105 @@
|
|||
|
||||
/**
|
||||
* Popups
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.popup-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background: rgba(0,0,0,0);
|
||||
|
||||
@include display-flex();
|
||||
@include justify-content(center);
|
||||
@include align-items(center);
|
||||
|
||||
z-index: $z-index-popup;
|
||||
|
||||
// Start hidden
|
||||
visibility: hidden;
|
||||
&.popup-showing {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
&.popup-hidden .popup {
|
||||
@include animation-name(scaleOut);
|
||||
@include animation-duration($popup-leave-animation-duration);
|
||||
@include animation-timing-function(ease-in-out);
|
||||
@include animation-fill-mode(both);
|
||||
}
|
||||
|
||||
&.active .popup {
|
||||
@include animation-name(superScaleIn);
|
||||
@include animation-duration($popup-enter-animation-duration);
|
||||
@include animation-timing-function(ease-in-out);
|
||||
@include animation-fill-mode(both);
|
||||
}
|
||||
|
||||
.popup {
|
||||
width: $popup-width;
|
||||
max-width: 100%;
|
||||
max-height: 90%;
|
||||
|
||||
border-radius: $popup-border-radius;
|
||||
background-color: $popup-background-color;
|
||||
|
||||
@include display-flex();
|
||||
@include flex-direction(column);
|
||||
}
|
||||
}
|
||||
|
||||
.popup-head {
|
||||
padding: 15px 10px;
|
||||
border-bottom: 1px solid #eee;
|
||||
text-align: center;
|
||||
}
|
||||
.popup-title {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 15px;
|
||||
}
|
||||
.popup-sub-title {
|
||||
margin: 5px 0 0 0;
|
||||
padding: 0;
|
||||
font-weight: normal;
|
||||
font-size: 11px;
|
||||
}
|
||||
.popup-body {
|
||||
padding: 10px;
|
||||
overflow: scroll;
|
||||
}
|
||||
|
||||
.popup-buttons {
|
||||
@include display-flex();
|
||||
@include flex-direction(row);
|
||||
padding: 10px;
|
||||
min-height: $popup-button-min-height + 20;
|
||||
|
||||
.button {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
min-height: $popup-button-min-height;
|
||||
border-radius: $popup-button-border-radius;
|
||||
line-height: $popup-button-line-height;
|
||||
|
||||
margin-right: 5px;
|
||||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.popup-open {
|
||||
pointer-events: none;
|
||||
|
||||
&.modal-open .modal {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.popup-backdrop, .popup {
|
||||
pointer-events: auto;
|
||||
}
|
||||
}
|
11
www/lib/ionic/scss/_progress.scss
Normal file
11
www/lib/ionic/scss/_progress.scss
Normal file
|
@ -0,0 +1,11 @@
|
|||
|
||||
/**
|
||||
* Progress
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
progress {
|
||||
display: block;
|
||||
margin: $progress-margin;
|
||||
width: $progress-width;
|
||||
}
|
57
www/lib/ionic/scss/_radio.scss
Normal file
57
www/lib/ionic/scss/_radio.scss
Normal file
|
@ -0,0 +1,57 @@
|
|||
|
||||
/**
|
||||
* Radio Button Inputs
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-radio {
|
||||
padding: 0;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.item-radio .item-content {
|
||||
/* give some room to the right for the checkmark icon */
|
||||
padding-right: $item-padding * 4;
|
||||
}
|
||||
|
||||
.item-radio .radio-icon {
|
||||
/* checkmark icon will be hidden by default */
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: $z-index-item-radio;
|
||||
visibility: hidden;
|
||||
padding: $item-padding - 2;
|
||||
height: 100%;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.item-radio input {
|
||||
/* hide any radio button inputs elements (the ugly circles) */
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
|
||||
&:checked ~ .item-content {
|
||||
/* style the item content when its checked */
|
||||
background: #f7f7f7;
|
||||
}
|
||||
|
||||
&:checked ~ .radio-icon {
|
||||
/* show the checkmark icon when its checked */
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
// Hack for Android to correctly display the checked item
|
||||
// http://timpietrusky.com/advanced-checkbox-hack
|
||||
.platform-android.grade-b .item-radio,
|
||||
.platform-android.grade-c .item-radio {
|
||||
-webkit-animation: androidCheckedbugfix infinite 1s;
|
||||
}
|
||||
@-webkit-keyframes androidCheckedbugfix {
|
||||
from { padding: 0; }
|
||||
to { padding: 0; }
|
||||
}
|
122
www/lib/ionic/scss/_range.scss
Normal file
122
www/lib/ionic/scss/_range.scss
Normal file
|
@ -0,0 +1,122 @@
|
|||
|
||||
/**
|
||||
* Range
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
input[type="range"] {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
padding-right: 2px;
|
||||
padding-left: 1px;
|
||||
width: auto;
|
||||
height: $range-slider-height + 15;
|
||||
outline: none;
|
||||
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, $range-default-track-bg), color-stop(100%, $range-default-track-bg));
|
||||
background: linear-gradient(to right, $range-default-track-bg 0%, $range-default-track-bg 100%);
|
||||
background-position: center;
|
||||
background-size: 99% $range-track-height;
|
||||
background-repeat: no-repeat;
|
||||
-webkit-appearance: none;
|
||||
|
||||
&::-webkit-slider-thumb {
|
||||
position: relative;
|
||||
width: $range-slider-width;
|
||||
height: $range-slider-height;
|
||||
border-radius: $range-slider-border-radius;
|
||||
background-color: $toggle-handle-off-bg-color;
|
||||
box-shadow: $range-slider-box-shadow;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
&::-webkit-slider-thumb:before {
|
||||
/* what creates the colorful line on the left side of the slider */
|
||||
position: absolute;
|
||||
top: ($range-slider-height / 2) - ($range-track-height / 2);
|
||||
left: -2001px;
|
||||
width: 2000px;
|
||||
height: $range-track-height;
|
||||
background: $dark;
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&::-webkit-slider-thumb:after {
|
||||
/* create a larger (but hidden) hit area */
|
||||
position: absolute;
|
||||
top: -15px;
|
||||
left: -15px;
|
||||
padding: 30px;
|
||||
content: ' ';
|
||||
//background: red;
|
||||
//opacity: .5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.range {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
padding: 2px 11px;
|
||||
|
||||
&.range-light {
|
||||
input { @include range-style($range-light-track-bg); }
|
||||
}
|
||||
&.range-stable {
|
||||
input { @include range-style($range-stable-track-bg); }
|
||||
}
|
||||
&.range-positive {
|
||||
input { @include range-style($range-positive-track-bg); }
|
||||
}
|
||||
&.range-calm {
|
||||
input { @include range-style($range-calm-track-bg); }
|
||||
}
|
||||
&.range-balanced {
|
||||
input { @include range-style($range-balanced-track-bg); }
|
||||
}
|
||||
&.range-assertive {
|
||||
input { @include range-style($range-assertive-track-bg); }
|
||||
}
|
||||
&.range-energized {
|
||||
input { @include range-style($range-energized-track-bg); }
|
||||
}
|
||||
&.range-royal {
|
||||
input { @include range-style($range-royal-track-bg); }
|
||||
}
|
||||
&.range-dark {
|
||||
input { @include range-style($range-dark-track-bg); }
|
||||
}
|
||||
}
|
||||
|
||||
.range .icon {
|
||||
@include flex(0);
|
||||
display: block;
|
||||
min-width: $range-icon-size;
|
||||
text-align: center;
|
||||
font-size: $range-icon-size;
|
||||
}
|
||||
|
||||
.range input {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
margin-right: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.range-label {
|
||||
@include flex(0, 0, auto);
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.range-label:first-child {
|
||||
padding-left: 5px;
|
||||
}
|
||||
.range input + .range-label {
|
||||
padding-right: 5px;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
365
www/lib/ionic/scss/_reset.scss
Normal file
365
www/lib/ionic/scss/_reset.scss
Normal file
|
@ -0,0 +1,365 @@
|
|||
|
||||
/**
|
||||
* Resets
|
||||
* --------------------------------------------------
|
||||
* Adapted from normalize.css and some reset.css. We don't care even one
|
||||
* bit about old IE, so we don't need any hacks for that in here.
|
||||
*
|
||||
* There are probably other things we could remove here, as well.
|
||||
*
|
||||
* normalize.css v2.1.2 | MIT License | git.io/normalize
|
||||
|
||||
* Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
|
||||
* http://cssreset.com
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, i, u, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed, fieldset,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
vertical-align: baseline;
|
||||
font: inherit;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
script {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
@include user-select(none);
|
||||
font-family: sans-serif; /* 1 */
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove default outlines.
|
||||
*/
|
||||
a,
|
||||
button,
|
||||
:focus,
|
||||
a:focus,
|
||||
button:focus,
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* *
|
||||
* Remove tap highlight color
|
||||
*/
|
||||
|
||||
a {
|
||||
-webkit-user-drag: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
|
||||
&[href]:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-size: 1em;
|
||||
font-family: monospace, serif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
border: 1px solid #c0c0c0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
padding: 0; /* 2 */
|
||||
border: 0; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
* 4. Remove any default :focus styles
|
||||
* 5. Make sure webkit font smoothing is being inherited
|
||||
* 6. Remove default gradient in Android Firefox / FirefoxOS
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
margin: 0; /* 3 */
|
||||
font-size: 100%; /* 2 */
|
||||
font-family: inherit; /* 1 */
|
||||
outline-offset: 0; /* 4 */
|
||||
outline-style: none; /* 4 */
|
||||
outline-width: 0; /* 4 */
|
||||
-webkit-font-smoothing: inherit; /* 5 */
|
||||
background-image: none; /* 6 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `importnt` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
cursor: pointer; /* 3 */
|
||||
-webkit-appearance: button; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
365
www/lib/ionic/scss/_scaffolding.scss
Normal file
365
www/lib/ionic/scss/_scaffolding.scss
Normal file
|
@ -0,0 +1,365 @@
|
|||
|
||||
/**
|
||||
* Scaffolding
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
@include box-sizing(border-box);
|
||||
}
|
||||
|
||||
html {
|
||||
overflow: hidden;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
}
|
||||
|
||||
body,
|
||||
.ionic-body {
|
||||
@include touch-callout(none);
|
||||
@include font-smoothing(antialiased);
|
||||
@include text-size-adjust(none);
|
||||
@include tap-highlight-transparent();
|
||||
@include user-select(none);
|
||||
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
color: $base-color;
|
||||
word-wrap: break-word;
|
||||
font-size: $font-size-base;
|
||||
font-family: $font-family-base;
|
||||
line-height: $line-height-computed;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
|
||||
body.grade-b,
|
||||
body.grade-c {
|
||||
// disable optimizeLegibility for low end devices
|
||||
text-rendering: auto;
|
||||
}
|
||||
|
||||
.content {
|
||||
// used for content areas not using the content directive
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.scroll-content {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
|
||||
// Hide the top border if any
|
||||
margin-top: -1px;
|
||||
|
||||
// Prevents any distortion of lines
|
||||
padding-top:1px;
|
||||
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.scroll-content-false,
|
||||
.menu .scroll-content.scroll-content-false{
|
||||
z-index: $z-index-scroll-content-false;
|
||||
}
|
||||
|
||||
.scroll-view {
|
||||
position: relative;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
// Hide the top border if any
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scroll is the scroll view component available for complex and custom
|
||||
* scroll view functionality.
|
||||
*/
|
||||
.scroll {
|
||||
@include user-select(none);
|
||||
@include touch-callout(none);
|
||||
@include text-size-adjust(none);
|
||||
@include transform-origin(left, top);
|
||||
}
|
||||
|
||||
// hide webkit scrollbars
|
||||
::-webkit-scrollbar {
|
||||
display:none;
|
||||
}
|
||||
|
||||
// Scroll bar styles
|
||||
.scroll-bar {
|
||||
position: absolute;
|
||||
z-index: $z-index-scroll-bar;
|
||||
}
|
||||
// hide the scroll-bar during animations
|
||||
.ng-animate .scroll-bar {
|
||||
visibility: hidden;
|
||||
}
|
||||
.scroll-bar-h {
|
||||
right: 2px;
|
||||
bottom: 3px;
|
||||
left: 2px;
|
||||
height: 3px;
|
||||
|
||||
.scroll-bar-indicator {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.scroll-bar-v {
|
||||
top: 2px;
|
||||
right: 3px;
|
||||
bottom: 2px;
|
||||
width: 3px;
|
||||
|
||||
.scroll-bar-indicator {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.scroll-bar-indicator {
|
||||
position: absolute;
|
||||
border-radius: 4px;
|
||||
background: rgba(0,0,0,0.3);
|
||||
opacity: 1;
|
||||
@include transition(opacity .3s linear);
|
||||
|
||||
&.scroll-bar-fade-out {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
.platform-android .scroll-bar-indicator {
|
||||
// android doesn't have rounded ends on scrollbar
|
||||
border-radius: 0;
|
||||
}
|
||||
.grade-b .scroll-bar-indicator,
|
||||
.grade-c .scroll-bar-indicator {
|
||||
// disable rgba background and border radius for low end devices
|
||||
background: #aaa;
|
||||
|
||||
&.scroll-bar-fade-out {
|
||||
@include transition(none);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes refresh-spin {
|
||||
0% { transform: translate3d(0,0,0) rotate(0); }
|
||||
100% { transform: translate3d(0,0,0) rotate(180deg); }
|
||||
}
|
||||
|
||||
@-webkit-keyframes refresh-spin {
|
||||
0% {-webkit-transform: translate3d(0,0,0) rotate(0); }
|
||||
100% {-webkit-transform: translate3d(0,0,0) rotate(180deg); }
|
||||
}
|
||||
|
||||
@keyframes refresh-spin-back {
|
||||
0% { transform: translate3d(0,0,0) rotate(180deg); }
|
||||
100% { transform: translate3d(0,0,0) rotate(0); }
|
||||
}
|
||||
|
||||
@-webkit-keyframes refresh-spin-back {
|
||||
0% {-webkit-transform: translate3d(0,0,0) rotate(180deg); }
|
||||
100% {-webkit-transform: translate3d(0,0,0) rotate(0); }
|
||||
}
|
||||
|
||||
// Scroll refresher (for pull to refresh)
|
||||
.scroll-refresher {
|
||||
position: absolute;
|
||||
top: -60px;
|
||||
right: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
margin: auto;
|
||||
height: 60px;
|
||||
|
||||
.ionic-refresher-content {
|
||||
position: absolute;
|
||||
bottom: 15px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
color: $scroll-refresh-icon-color;
|
||||
text-align: center;
|
||||
|
||||
font-size: 30px;
|
||||
|
||||
.text-refreshing,
|
||||
.text-pulling {
|
||||
font-size: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
&.ionic-refresher-with-text {
|
||||
bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.icon-refreshing,
|
||||
.icon-pulling {
|
||||
width: 100%;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
backface-visibility: hidden;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.icon-pulling {
|
||||
@include animation-name(refresh-spin-back);
|
||||
@include animation-duration(200ms);
|
||||
@include animation-timing-function(linear);
|
||||
@include animation-fill-mode(none);
|
||||
-webkit-transform: translate3d(0,0,0) rotate(0deg);
|
||||
transform: translate3d(0,0,0) rotate(0deg);
|
||||
}
|
||||
.icon-refreshing,
|
||||
.text-refreshing {
|
||||
display: none;
|
||||
}
|
||||
.icon-refreshing {
|
||||
@include animation-duration(1.5s);
|
||||
}
|
||||
|
||||
&.active {
|
||||
.icon-pulling:not(.pulling-rotation-disabled) {
|
||||
@include animation-name(refresh-spin);
|
||||
-webkit-transform: translate3d(0,0,0) rotate(-180deg);
|
||||
transform: translate3d(0,0,0) rotate(-180deg);
|
||||
}
|
||||
&.refreshing {
|
||||
@include transition(transform .2s);
|
||||
@include transition(-webkit-transform .2s);
|
||||
-webkit-transform: scale(1,1);
|
||||
transform: scale(1,1);
|
||||
.icon-pulling,
|
||||
.text-pulling {
|
||||
display: none;
|
||||
}
|
||||
.icon-refreshing,
|
||||
.text-refreshing {
|
||||
display: block;
|
||||
}
|
||||
&.refreshing-tail{
|
||||
-webkit-transform: scale(0,0);
|
||||
transform: scale(0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ion-infinite-scroll {
|
||||
height: 60px;
|
||||
width: 100%;
|
||||
opacity: 0;
|
||||
display: block;
|
||||
|
||||
@include transition(opacity 0.25s);
|
||||
@include display-flex();
|
||||
@include flex-direction(row);
|
||||
@include justify-content(center);
|
||||
@include align-items(center);
|
||||
|
||||
.icon {
|
||||
color: #666666;
|
||||
font-size: 30px;
|
||||
color: $scroll-refresh-icon-color;
|
||||
}
|
||||
|
||||
&.active {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.overflow-scroll {
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
|
||||
.scroll {
|
||||
position: static;
|
||||
height: 100%;
|
||||
-webkit-transform: translate3d(0, 0, 0); // fix iOS bug where relative children of scroller disapear while scrolling. see: http://stackoverflow.com/questions/9807620/ipad-safari-scrolling-causes-html-elements-to-disappear-and-reappear-with-a-dela
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Pad top/bottom of content so it doesn't hide behind .bar-title and .bar-tab.
|
||||
// Note: For these to work, content must come after both bars in the markup
|
||||
/* If you change these, change platform.scss as well */
|
||||
.has-header {
|
||||
top: $bar-height;
|
||||
}
|
||||
// Force no header
|
||||
.no-header {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height;
|
||||
}
|
||||
.has-tabs-top {
|
||||
top: $bar-height + $tabs-height;
|
||||
}
|
||||
.has-header.has-subheader.has-tabs-top {
|
||||
top: $bar-height + $bar-subheader-height + $tabs-height;
|
||||
}
|
||||
|
||||
.has-footer {
|
||||
bottom: $bar-footer-height;
|
||||
}
|
||||
.has-subfooter {
|
||||
bottom: $bar-footer-height + $bar-subfooter-height;
|
||||
}
|
||||
|
||||
.has-tabs,
|
||||
.bar-footer.has-tabs {
|
||||
bottom: $tabs-height;
|
||||
}
|
||||
|
||||
.has-footer.has-tabs {
|
||||
bottom: $tabs-height + $bar-footer-height;
|
||||
}
|
||||
|
||||
// A full screen section with a solid background
|
||||
.pane {
|
||||
@include translate3d(0,0,0);
|
||||
@include transition-duration(0);
|
||||
z-index: $z-index-pane;
|
||||
}
|
||||
.view {
|
||||
z-index: $z-index-view;
|
||||
}
|
||||
.pane,
|
||||
.view {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: $base-background-color;
|
||||
overflow: hidden;
|
||||
}
|
||||
.view-container {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
141
www/lib/ionic/scss/_select.scss
Normal file
141
www/lib/ionic/scss/_select.scss
Normal file
|
@ -0,0 +1,141 @@
|
|||
|
||||
/**
|
||||
* Select
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-select {
|
||||
position: relative;
|
||||
|
||||
select {
|
||||
@include appearance(none);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding: ($item-padding - 2) ($item-padding * 3) ($item-padding) $item-padding;
|
||||
max-width: 65%;
|
||||
|
||||
border: none;
|
||||
background: $item-default-bg;
|
||||
color: #333;
|
||||
|
||||
// hack to hide default dropdown arrow in FF
|
||||
text-indent: .01px;
|
||||
text-overflow: '';
|
||||
|
||||
white-space: nowrap;
|
||||
font-size: $font-size-base;
|
||||
|
||||
cursor: pointer;
|
||||
direction: rtl; // right align the select text
|
||||
}
|
||||
|
||||
select::-ms-expand {
|
||||
// hide default dropdown arrow in IE
|
||||
display: none;
|
||||
}
|
||||
|
||||
option {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: $item-padding;
|
||||
margin-top: -3px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-top: 5px solid;
|
||||
border-right: 5px solid rgba(0, 0, 0, 0);
|
||||
border-left: 5px solid rgba(0, 0, 0, 0);
|
||||
color: #999;
|
||||
content: "";
|
||||
pointer-events: none;
|
||||
}
|
||||
&.item-light {
|
||||
select{
|
||||
background:$item-light-bg;
|
||||
color:$item-light-text;
|
||||
}
|
||||
}
|
||||
&.item-stable {
|
||||
select{
|
||||
background:$item-stable-bg;
|
||||
color:$item-stable-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:darken($item-stable-border,30%);
|
||||
}
|
||||
}
|
||||
&.item-positive {
|
||||
select{
|
||||
background:$item-positive-bg;
|
||||
color:$item-positive-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-positive-text;
|
||||
}
|
||||
}
|
||||
&.item-calm {
|
||||
select{
|
||||
background:$item-calm-bg;
|
||||
color:$item-calm-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-calm-text;
|
||||
}
|
||||
}
|
||||
&.item-assertive {
|
||||
select{
|
||||
background:$item-assertive-bg;
|
||||
color:$item-assertive-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-assertive-text;
|
||||
}
|
||||
}
|
||||
&.item-balanced {
|
||||
select{
|
||||
background:$item-balanced-bg;
|
||||
color:$item-balanced-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-balanced-text;
|
||||
}
|
||||
}
|
||||
&.item-energized {
|
||||
select{
|
||||
background:$item-energized-bg;
|
||||
color:$item-energized-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-energized-text;
|
||||
}
|
||||
}
|
||||
&.item-royal {
|
||||
select{
|
||||
background:$item-royal-bg;
|
||||
color:$item-royal-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-royal-text;
|
||||
}
|
||||
}
|
||||
&.item-dark {
|
||||
select{
|
||||
background:$item-dark-bg;
|
||||
color:$item-dark-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-dark-text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
&[multiple],
|
||||
&[size] {
|
||||
height: auto;
|
||||
}
|
||||
}
|
56
www/lib/ionic/scss/_slide-box.scss
Normal file
56
www/lib/ionic/scss/_slide-box.scss
Normal file
|
@ -0,0 +1,56 @@
|
|||
|
||||
/**
|
||||
* Slide Box
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.slider {
|
||||
position: relative;
|
||||
visibility: hidden;
|
||||
// Make sure items don't scroll over ever
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.slider-slides {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.slider-slide {
|
||||
position: relative;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.slider-slide-image {
|
||||
> img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.slider-pager {
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
z-index: $z-index-slider-pager;
|
||||
width: 100%;
|
||||
height: 15px;
|
||||
text-align: center;
|
||||
|
||||
.slider-pager-page {
|
||||
display: inline-block;
|
||||
margin: 0px 3px;
|
||||
width: 15px;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
|
||||
opacity: 0.3;
|
||||
|
||||
&.active {
|
||||
@include transition(opacity 0.4s ease-in);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
494
www/lib/ionic/scss/_tabs.scss
Normal file
494
www/lib/ionic/scss/_tabs.scss
Normal file
|
@ -0,0 +1,494 @@
|
|||
/**
|
||||
* Tabs
|
||||
* --------------------------------------------------
|
||||
* A navigation bar with any number of tab items supported.
|
||||
*/
|
||||
|
||||
.tabs {
|
||||
@include display-flex();
|
||||
@include flex-direction(horizontal);
|
||||
@include justify-content(center);
|
||||
@include translate3d(0,0,0);
|
||||
|
||||
@include tab-style($tabs-default-bg, $tabs-default-border, $tabs-default-text);
|
||||
@include tab-badge-style($tabs-default-text, $tabs-default-bg);
|
||||
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
|
||||
z-index: $z-index-tabs;
|
||||
|
||||
width: 100%;
|
||||
height: $tabs-height;
|
||||
|
||||
border-style: solid;
|
||||
border-top-width: 1px;
|
||||
|
||||
background-size: 0;
|
||||
line-height: $tabs-height;
|
||||
|
||||
@media (min--moz-device-pixel-ratio: 1.5),
|
||||
(-webkit-min-device-pixel-ratio: 1.5),
|
||||
(min-device-pixel-ratio: 1.5),
|
||||
(min-resolution: 144dpi),
|
||||
(min-resolution: 1.5dppx) {
|
||||
padding-top: 2px;
|
||||
border-top: none !important;
|
||||
border-bottom: none;
|
||||
background-position: top;
|
||||
background-size: 100% 1px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
}
|
||||
/* Allow parent element of tabs to define color, or just the tab itself */
|
||||
.tabs-light > .tabs,
|
||||
.tabs.tabs-light {
|
||||
@include tab-style($tabs-light-bg, $tabs-light-border, $tabs-light-text);
|
||||
@include tab-badge-style($tabs-light-text, $tabs-light-bg);
|
||||
}
|
||||
.tabs-stable > .tabs,
|
||||
.tabs.tabs-stable {
|
||||
@include tab-style($tabs-stable-bg, $tabs-stable-border, $tabs-stable-text);
|
||||
@include tab-badge-style($tabs-stable-text, $tabs-stable-bg);
|
||||
}
|
||||
.tabs-positive > .tabs,
|
||||
.tabs.tabs-positive {
|
||||
@include tab-style($tabs-positive-bg, $tabs-positive-border, $tabs-positive-text);
|
||||
@include tab-badge-style($tabs-positive-text, $tabs-positive-bg);
|
||||
}
|
||||
.tabs-calm > .tabs,
|
||||
.tabs.tabs-calm {
|
||||
@include tab-style($tabs-calm-bg, $tabs-calm-border, $tabs-calm-text);
|
||||
@include tab-badge-style($tabs-calm-text, $tabs-calm-bg);
|
||||
}
|
||||
.tabs-assertive > .tabs,
|
||||
.tabs.tabs-assertive {
|
||||
@include tab-style($tabs-assertive-bg, $tabs-assertive-border, $tabs-assertive-text);
|
||||
@include tab-badge-style($tabs-assertive-text, $tabs-assertive-bg);
|
||||
}
|
||||
.tabs-balanced > .tabs,
|
||||
.tabs.tabs-balanced {
|
||||
@include tab-style($tabs-balanced-bg, $tabs-balanced-border, $tabs-balanced-text);
|
||||
@include tab-badge-style($tabs-balanced-text, $tabs-balanced-bg);
|
||||
}
|
||||
.tabs-energized > .tabs,
|
||||
.tabs.tabs-energized {
|
||||
@include tab-style($tabs-energized-bg, $tabs-energized-border, $tabs-energized-text);
|
||||
@include tab-badge-style($tabs-energized-text, $tabs-energized-bg);
|
||||
}
|
||||
.tabs-royal > .tabs,
|
||||
.tabs.tabs-royal {
|
||||
@include tab-style($tabs-royal-bg, $tabs-royal-border, $tabs-royal-text);
|
||||
@include tab-badge-style($tabs-royal-text, $tabs-royal-bg);
|
||||
}
|
||||
.tabs-dark > .tabs,
|
||||
.tabs.tabs-dark {
|
||||
@include tab-style($tabs-dark-bg, $tabs-dark-border, $tabs-dark-text);
|
||||
@include tab-badge-style($tabs-dark-text, $tabs-dark-bg);
|
||||
}
|
||||
|
||||
@mixin tabs-striped($style, $color, $background) {
|
||||
&.#{$style} {
|
||||
.tabs{
|
||||
background-color: $background;
|
||||
}
|
||||
.tab-item {
|
||||
color: rgba($color, $tabs-striped-off-opacity);
|
||||
opacity: 1;
|
||||
.badge{
|
||||
opacity:$tabs-striped-off-opacity;
|
||||
}
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: -$tabs-striped-border-width;
|
||||
color: $color;
|
||||
border-style: solid;
|
||||
border-width: $tabs-striped-border-width 0 0 0;
|
||||
border-color: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.tabs-top{
|
||||
.tab-item {
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
.badge {
|
||||
top: 4%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-background($style, $color, $border-color) {
|
||||
.#{$style} {
|
||||
.tabs,
|
||||
&> .tabs{
|
||||
background-color: $color;
|
||||
background-image: linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%);
|
||||
border-color: $border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-striped-background($style, $color) {
|
||||
&.#{$style} {
|
||||
.tabs {
|
||||
background-color: $color;
|
||||
background-image:none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-color($style, $color) {
|
||||
.#{$style} {
|
||||
.tab-item {
|
||||
color: rgba($color, $tabs-off-opacity);
|
||||
opacity: 1;
|
||||
.badge{
|
||||
opacity:$tabs-off-opacity;
|
||||
}
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
color: $color;
|
||||
border: 0 solid $color;
|
||||
.badge{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-striped-color($style, $color) {
|
||||
&.#{$style} {
|
||||
.tab-item {
|
||||
color: rgba($color, $tabs-striped-off-opacity);
|
||||
opacity: 1;
|
||||
.badge{
|
||||
opacity:$tabs-striped-off-opacity;
|
||||
}
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: -$tabs-striped-border-width;
|
||||
color: $color;
|
||||
border: 0 solid $color;
|
||||
border-top-width: $tabs-striped-border-width;
|
||||
.badge{
|
||||
top:$tabs-striped-border-width;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-striped {
|
||||
.tabs {
|
||||
background-color: white;
|
||||
background-image: none;
|
||||
border: none;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding-top: $tabs-striped-border-width;
|
||||
}
|
||||
.tab-item {
|
||||
// default android tab style
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: -$tabs-striped-border-width;
|
||||
border-style: solid;
|
||||
border-width: $tabs-striped-border-width 0 0 0;
|
||||
border-color: $dark;
|
||||
.badge{
|
||||
top:$tabs-striped-border-width;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@include tabs-striped('tabs-light', $dark, $light);
|
||||
@include tabs-striped('tabs-stable', $dark, $stable);
|
||||
@include tabs-striped('tabs-positive', $light, $positive);
|
||||
@include tabs-striped('tabs-calm', $light, $calm);
|
||||
@include tabs-striped('tabs-assertive', $light, $assertive);
|
||||
@include tabs-striped('tabs-balanced', $light, $balanced);
|
||||
@include tabs-striped('tabs-energized', $light, $energized);
|
||||
@include tabs-striped('tabs-royal', $light, $royal);
|
||||
@include tabs-striped('tabs-dark', $light, $dark);
|
||||
|
||||
// doing this twice so striped tabs styles don't override specific bg and color vals
|
||||
@include tabs-striped-background('tabs-background-light', $light);
|
||||
@include tabs-striped-background('tabs-background-stable', $stable);
|
||||
@include tabs-striped-background('tabs-background-positive', $positive);
|
||||
@include tabs-striped-background('tabs-background-calm', $calm);
|
||||
@include tabs-striped-background('tabs-background-assertive', $assertive);
|
||||
@include tabs-striped-background('tabs-background-balanced', $balanced);
|
||||
@include tabs-striped-background('tabs-background-energized',$energized);
|
||||
@include tabs-striped-background('tabs-background-royal', $royal);
|
||||
@include tabs-striped-background('tabs-background-dark', $dark);
|
||||
|
||||
@include tabs-striped-color('tabs-color-light', $light);
|
||||
@include tabs-striped-color('tabs-color-stable', $stable);
|
||||
@include tabs-striped-color('tabs-color-positive', $positive);
|
||||
@include tabs-striped-color('tabs-color-calm', $calm);
|
||||
@include tabs-striped-color('tabs-color-assertive', $assertive);
|
||||
@include tabs-striped-color('tabs-color-balanced', $balanced);
|
||||
@include tabs-striped-color('tabs-color-energized',$energized);
|
||||
@include tabs-striped-color('tabs-color-royal', $royal);
|
||||
@include tabs-striped-color('tabs-color-dark', $dark);
|
||||
|
||||
}
|
||||
|
||||
@include tabs-background('tabs-background-light', $light, $bar-light-border);
|
||||
@include tabs-background('tabs-background-stable', $stable, $bar-stable-border);
|
||||
@include tabs-background('tabs-background-positive', $positive, $bar-positive-border);
|
||||
@include tabs-background('tabs-background-calm', $calm, $bar-calm-border);
|
||||
@include tabs-background('tabs-background-assertive', $assertive, $bar-assertive-border);
|
||||
@include tabs-background('tabs-background-balanced', $balanced, $bar-balanced-border);
|
||||
@include tabs-background('tabs-background-energized',$energized, $bar-energized-border);
|
||||
@include tabs-background('tabs-background-royal', $royal, $bar-royal-border);
|
||||
@include tabs-background('tabs-background-dark', $dark, $bar-dark-border);
|
||||
|
||||
@include tabs-color('tabs-color-light', $light);
|
||||
@include tabs-color('tabs-color-stable', $stable);
|
||||
@include tabs-color('tabs-color-positive', $positive);
|
||||
@include tabs-color('tabs-color-calm', $calm);
|
||||
@include tabs-color('tabs-color-assertive', $assertive);
|
||||
@include tabs-color('tabs-color-balanced', $balanced);
|
||||
@include tabs-color('tabs-color-energized',$energized);
|
||||
@include tabs-color('tabs-color-royal', $royal);
|
||||
@include tabs-color('tabs-color-dark', $dark);
|
||||
|
||||
@mixin tabs-standard-color($style, $color, $off-color:$dark) {
|
||||
&.#{$style} {
|
||||
.tab-item {
|
||||
color: $off-color;
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ion-tabs {
|
||||
@include tabs-standard-color('tabs-color-active-light', $light, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-stable', $stable, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-positive', $positive, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-calm', $calm, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-assertive', $assertive, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-balanced', $balanced, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-energized',$energized, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-royal', $royal, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-dark', $dark, $light);
|
||||
}
|
||||
|
||||
.tabs-top {
|
||||
&.tabs-striped {
|
||||
padding-bottom:0;
|
||||
.tab-item{
|
||||
background: transparent;
|
||||
// animate the top bar, leave bottom for platform consistency
|
||||
-webkit-transition: all .1s ease;
|
||||
-moz-transition: all .1s ease;
|
||||
-ms-transition: all .1s ease;
|
||||
-o-transition: all .1s ease;
|
||||
transition: all .1s ease;
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: 0;
|
||||
margin-bottom: -$tabs-striped-border-width;
|
||||
border-width: 0px 0px $tabs-striped-border-width 0px !important;
|
||||
border-style: solid;
|
||||
}
|
||||
.badge{
|
||||
-webkit-transition: all .2s ease;
|
||||
-moz-transition: all .2s ease;
|
||||
-ms-transition: all .2s ease;
|
||||
-o-transition: all .2s ease;
|
||||
transition: all .2s ease;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Allow parent element to have tabs-top */
|
||||
/* If you change this, change platform.scss as well */
|
||||
.tabs-top > .tabs,
|
||||
.tabs.tabs-top {
|
||||
top: $bar-height;
|
||||
padding-top: 0;
|
||||
background-position: bottom;
|
||||
border-top-width: 0;
|
||||
border-bottom-width: 1px;
|
||||
.tab-item {
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
.badge {
|
||||
top: 4%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.tabs-top ~ .bar-header {
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
max-width: $tab-item-max-width;
|
||||
height: 100%;
|
||||
|
||||
color: inherit;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
font-weight: 400;
|
||||
font-size: $tabs-text-font-size;
|
||||
font-family: $font-family-sans-serif;
|
||||
|
||||
opacity: 0.7;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
&.tab-hidden{
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-item-hide > .tabs,
|
||||
.tabs.tabs-item-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tabs-icon-top > .tabs .tab-item,
|
||||
.tabs-icon-top.tabs .tab-item,
|
||||
.tabs-icon-bottom > .tabs .tab-item,
|
||||
.tabs-icon-bottom.tabs .tab-item {
|
||||
font-size: $tabs-text-font-size-side-icon;
|
||||
line-height: $tabs-text-font-size;
|
||||
}
|
||||
|
||||
.tab-item .icon {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
height: $tabs-icon-size;
|
||||
font-size: $tabs-icon-size;
|
||||
}
|
||||
|
||||
.tabs-icon-left.tabs .tab-item,
|
||||
.tabs-icon-left > .tabs .tab-item,
|
||||
.tabs-icon-right.tabs .tab-item,
|
||||
.tabs-icon-right > .tabs .tab-item {
|
||||
font-size: $tabs-text-font-size-side-icon;
|
||||
|
||||
.icon {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin-top: -.1em;
|
||||
|
||||
&:before {
|
||||
font-size: $tabs-icon-size - 8;
|
||||
line-height: $tabs-height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-icon-left > .tabs .tab-item .icon,
|
||||
.tabs-icon-left.tabs .tab-item .icon {
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
.tabs-icon-right > .tabs .tab-item .icon,
|
||||
.tabs-icon-right.tabs .tab-item .icon {
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
.tabs-icon-only > .tabs .icon,
|
||||
.tabs-icon-only.tabs .icon {
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
|
||||
.tab-item.has-badge {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tab-item .badge {
|
||||
position: absolute;
|
||||
top: 4%;
|
||||
right: 33%; // fallback
|
||||
right: calc(50% - 26px);
|
||||
padding: $tabs-badge-padding;
|
||||
height: auto;
|
||||
font-size: $tabs-badge-font-size;
|
||||
line-height: $tabs-badge-font-size + 4;
|
||||
}
|
||||
|
||||
|
||||
/* Navigational tab */
|
||||
|
||||
/* Active state for tab */
|
||||
.tab-item.tab-item-active,
|
||||
.tab-item.active,
|
||||
.tab-item.activated {
|
||||
opacity: 1;
|
||||
|
||||
&.tab-item-light {
|
||||
color: $light;
|
||||
}
|
||||
&.tab-item-stable {
|
||||
color: $stable;
|
||||
}
|
||||
&.tab-item-positive {
|
||||
color: $positive;
|
||||
}
|
||||
&.tab-item-calm {
|
||||
color: $calm;
|
||||
}
|
||||
&.tab-item-assertive {
|
||||
color: $assertive;
|
||||
}
|
||||
&.tab-item-balanced {
|
||||
color: $balanced;
|
||||
}
|
||||
&.tab-item-energized {
|
||||
color: $energized;
|
||||
}
|
||||
&.tab-item-royal {
|
||||
color: $royal;
|
||||
}
|
||||
&.tab-item-dark {
|
||||
color: $dark;
|
||||
}
|
||||
}
|
||||
|
||||
.item.tabs {
|
||||
@include display-flex();
|
||||
padding: 0;
|
||||
|
||||
.icon:before {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.tab-item.disabled,
|
||||
.tab-item[disabled] {
|
||||
opacity: .4;
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
}
|
138
www/lib/ionic/scss/_toggle.scss
Normal file
138
www/lib/ionic/scss/_toggle.scss
Normal file
|
@ -0,0 +1,138 @@
|
|||
|
||||
/**
|
||||
* Toggle
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-toggle {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.toggle {
|
||||
// set the color defaults
|
||||
@include toggle-style($toggle-on-default-border, $toggle-on-default-bg);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
pointer-events: auto;
|
||||
margin: -$toggle-hit-area-expansion;
|
||||
padding: $toggle-hit-area-expansion;
|
||||
|
||||
&.dragging {
|
||||
.handle {
|
||||
background-color: $toggle-handle-dragging-bg-color !important;
|
||||
}
|
||||
}
|
||||
|
||||
&.toggle-light {
|
||||
@include toggle-style($toggle-on-light-border, $toggle-on-light-bg);
|
||||
}
|
||||
&.toggle-stable {
|
||||
@include toggle-style($toggle-on-stable-border, $toggle-on-stable-bg);
|
||||
}
|
||||
&.toggle-positive {
|
||||
@include toggle-style($toggle-on-positive-border, $toggle-on-positive-bg);
|
||||
}
|
||||
&.toggle-calm {
|
||||
@include toggle-style($toggle-on-calm-border, $toggle-on-calm-bg);
|
||||
}
|
||||
&.toggle-assertive {
|
||||
@include toggle-style($toggle-on-assertive-border, $toggle-on-assertive-bg);
|
||||
}
|
||||
&.toggle-balanced {
|
||||
@include toggle-style($toggle-on-balanced-border, $toggle-on-balanced-bg);
|
||||
}
|
||||
&.toggle-energized {
|
||||
@include toggle-style($toggle-on-energized-border, $toggle-on-energized-bg);
|
||||
}
|
||||
&.toggle-royal {
|
||||
@include toggle-style($toggle-on-royal-border, $toggle-on-royal-bg);
|
||||
}
|
||||
&.toggle-dark {
|
||||
@include toggle-style($toggle-on-dark-border, $toggle-on-dark-bg);
|
||||
}
|
||||
}
|
||||
|
||||
.toggle input {
|
||||
// hide the actual input checkbox
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* the track appearance when the toggle is "off" */
|
||||
.toggle .track {
|
||||
@include transition-timing-function(ease-in-out);
|
||||
@include transition-duration($toggle-transition-duration);
|
||||
@include transition-property((background-color, border));
|
||||
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
width: $toggle-width;
|
||||
height: $toggle-height;
|
||||
border: solid $toggle-border-width $toggle-off-border-color;
|
||||
border-radius: $toggle-border-radius;
|
||||
background-color: $toggle-off-bg-color;
|
||||
content: ' ';
|
||||
cursor: pointer;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Fix to avoid background color bleeding */
|
||||
/* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */
|
||||
.platform-android4_2 .toggle .track {
|
||||
-webkit-background-clip: padding-box;
|
||||
}
|
||||
|
||||
/* the handle (circle) thats inside the toggle's track area */
|
||||
/* also the handle's appearance when it is "off" */
|
||||
.toggle .handle {
|
||||
@include transition($toggle-transition-duration ease-in-out);
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: $toggle-handle-width;
|
||||
height: $toggle-handle-height;
|
||||
border-radius: $toggle-handle-radius;
|
||||
background-color: $toggle-handle-off-bg-color;
|
||||
top: $toggle-border-width + $toggle-hit-area-expansion;
|
||||
left: $toggle-border-width + $toggle-hit-area-expansion;
|
||||
|
||||
&:before {
|
||||
// used to create a larger (but hidden) hit area to slide the handle
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
left: ( ($toggle-handle-width / 2) * -1) - 8;
|
||||
padding: ($toggle-handle-height / 2) + 5 ($toggle-handle-width + 7);
|
||||
content: " ";
|
||||
}
|
||||
}
|
||||
|
||||
.toggle input:checked + .track .handle {
|
||||
// the handle when the toggle is "on"
|
||||
@include translate3d($toggle-width - $toggle-handle-width - ($toggle-border-width * 2), 0, 0);
|
||||
background-color: $toggle-handle-on-bg-color;
|
||||
}
|
||||
|
||||
.item-toggle.active {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.item-toggle,
|
||||
.item-toggle.item-complex .item-content {
|
||||
// make sure list item content have enough padding on right to fit the toggle
|
||||
padding-right: ($item-padding * 3) + $toggle-width;
|
||||
}
|
||||
|
||||
.item-toggle.item-complex {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.item-toggle .toggle {
|
||||
// position the toggle to the right within a list item
|
||||
position: absolute;
|
||||
top: $item-padding / 2;
|
||||
right: $item-padding;
|
||||
z-index: $z-index-item-toggle;
|
||||
}
|
||||
|
||||
.toggle input:disabled + .track {
|
||||
opacity: .6;
|
||||
}
|
163
www/lib/ionic/scss/_transitions.scss
Normal file
163
www/lib/ionic/scss/_transitions.scss
Normal file
|
@ -0,0 +1,163 @@
|
|||
|
||||
// iOS View Transitions
|
||||
// -------------------------------
|
||||
|
||||
$ios-transition-duration: 450ms !default;
|
||||
$ios-transition-timing-function: cubic-bezier(.3, .9, .4, 1) !default;
|
||||
$ios-transition-container-bg-color: #000 !default;
|
||||
|
||||
|
||||
[nav-view-transition="ios"] {
|
||||
|
||||
[nav-view="entering"],
|
||||
[nav-view="leaving"] {
|
||||
@include transition-duration( $ios-transition-duration );
|
||||
@include transition-timing-function( $ios-transition-timing-function );
|
||||
-webkit-transition-property: opacity, -webkit-transform;
|
||||
transition-property: opacity, transform;
|
||||
}
|
||||
|
||||
&[nav-view-direction="forward"],
|
||||
&[nav-view-direction="back"] {
|
||||
background-color: $ios-transition-container-bg-color;
|
||||
}
|
||||
|
||||
[nav-view="active"],
|
||||
&[nav-view-direction="forward"] [nav-view="entering"],
|
||||
&[nav-view-direction="back"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-above;
|
||||
}
|
||||
|
||||
&[nav-view-direction="back"] [nav-view="entering"],
|
||||
&[nav-view-direction="forward"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-below;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// iOS Nav Bar Transitions
|
||||
// -------------------------------
|
||||
|
||||
[nav-bar-transition="ios"] {
|
||||
|
||||
.title,
|
||||
.buttons,
|
||||
.back-text {
|
||||
@include transition-duration( $ios-transition-duration );
|
||||
@include transition-timing-function( $ios-transition-timing-function );
|
||||
-webkit-transition-property: opacity, -webkit-transform;
|
||||
transition-property: opacity, transform;
|
||||
}
|
||||
|
||||
[nav-bar="active"],
|
||||
[nav-bar="entering"] {
|
||||
z-index: $z-index-bar-above;
|
||||
|
||||
.bar {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
[nav-bar="cached"] {
|
||||
display: block;
|
||||
|
||||
.header-item {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Android View Transitions
|
||||
// -------------------------------
|
||||
|
||||
$android-transition-duration: 200ms !default;
|
||||
$android-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1) !default;
|
||||
|
||||
|
||||
[nav-view-transition="android"] {
|
||||
|
||||
[nav-view="entering"],
|
||||
[nav-view="leaving"] {
|
||||
@include transition-duration( $android-transition-duration );
|
||||
@include transition-timing-function( $android-transition-timing-function );
|
||||
-webkit-transition-property: -webkit-transform;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
[nav-view="active"],
|
||||
&[nav-view-direction="forward"] [nav-view="entering"],
|
||||
&[nav-view-direction="back"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-above;
|
||||
}
|
||||
|
||||
&[nav-view-direction="back"] [nav-view="entering"],
|
||||
&[nav-view-direction="forward"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-below;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Android Nav Bar Transitions
|
||||
// -------------------------------
|
||||
|
||||
[nav-bar-transition="android"] {
|
||||
|
||||
.title,
|
||||
.buttons {
|
||||
@include transition-duration( $android-transition-duration );
|
||||
@include transition-timing-function( $android-transition-timing-function );
|
||||
-webkit-transition-property: opacity;
|
||||
transition-property: opacity;
|
||||
}
|
||||
|
||||
[nav-bar="active"],
|
||||
[nav-bar="entering"] {
|
||||
z-index: $z-index-bar-above;
|
||||
|
||||
.bar {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
[nav-bar="cached"] {
|
||||
display: block;
|
||||
|
||||
.header-item {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transition Settings
|
||||
// -------------------------------
|
||||
|
||||
[nav-view="cached"],
|
||||
[nav-bar="cached"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[nav-view="stage"] {
|
||||
opacity: 0;
|
||||
@include transition-duration( 0 );
|
||||
}
|
||||
|
||||
[nav-bar="stage"] {
|
||||
.title,
|
||||
.buttons,
|
||||
.back-text {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
@include transition-duration(0s);
|
||||
}
|
||||
}
|
||||
|
163
www/lib/ionic/scss/_type.scss
Normal file
163
www/lib/ionic/scss/_type.scss
Normal file
|
@ -0,0 +1,163 @@
|
|||
|
||||
/**
|
||||
* Typography
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
// Body text
|
||||
// -------------------------
|
||||
|
||||
p {
|
||||
margin: 0 0 ($line-height-computed / 2);
|
||||
}
|
||||
|
||||
|
||||
// Emphasis & misc
|
||||
// -------------------------
|
||||
|
||||
small { font-size: 85%; }
|
||||
cite { font-style: normal; }
|
||||
|
||||
|
||||
// Alignment
|
||||
// -------------------------
|
||||
|
||||
.text-left { text-align: left; }
|
||||
.text-right { text-align: right; }
|
||||
.text-center { text-align: center; }
|
||||
|
||||
|
||||
// Headings
|
||||
// -------------------------
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
color: $base-color;
|
||||
font-weight: $headings-font-weight;
|
||||
font-family: $headings-font-family;
|
||||
line-height: $headings-line-height;
|
||||
|
||||
small {
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
h1, .h1,
|
||||
h2, .h2,
|
||||
h3, .h3 {
|
||||
margin-top: $line-height-computed;
|
||||
margin-bottom: ($line-height-computed / 2);
|
||||
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
+ h1, + .h1,
|
||||
+ h2, + .h2,
|
||||
+ h3, + .h3 {
|
||||
margin-top: ($line-height-computed / 2);
|
||||
}
|
||||
}
|
||||
|
||||
h4, .h4,
|
||||
h5, .h5,
|
||||
h6, .h6 {
|
||||
margin-top: ($line-height-computed / 2);
|
||||
margin-bottom: ($line-height-computed / 2);
|
||||
}
|
||||
|
||||
h1, .h1 { font-size: floor($font-size-base * 2.60); } // ~36px
|
||||
h2, .h2 { font-size: floor($font-size-base * 2.15); } // ~30px
|
||||
h3, .h3 { font-size: ceil($font-size-base * 1.70); } // ~24px
|
||||
h4, .h4 { font-size: ceil($font-size-base * 1.25); } // ~18px
|
||||
h5, .h5 { font-size: $font-size-base; }
|
||||
h6, .h6 { font-size: ceil($font-size-base * 0.85); } // ~12px
|
||||
|
||||
h1 small, .h1 small { font-size: ceil($font-size-base * 1.70); } // ~24px
|
||||
h2 small, .h2 small { font-size: ceil($font-size-base * 1.25); } // ~18px
|
||||
h3 small, .h3 small,
|
||||
h4 small, .h4 small { font-size: $font-size-base; }
|
||||
|
||||
|
||||
// Description Lists
|
||||
// -------------------------
|
||||
|
||||
dl {
|
||||
margin-bottom: $line-height-computed;
|
||||
}
|
||||
dt,
|
||||
dd {
|
||||
line-height: $line-height-base;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
// Blockquotes
|
||||
// -------------------------
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 $line-height-computed;
|
||||
padding: ($line-height-computed / 2) $line-height-computed;
|
||||
border-left: 5px solid gray;
|
||||
|
||||
p {
|
||||
font-weight: 300;
|
||||
font-size: ($font-size-base * 1.25);
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
small {
|
||||
display: block;
|
||||
line-height: $line-height-base;
|
||||
&:before {
|
||||
content: '\2014 \00A0';// EM DASH, NBSP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Quotes
|
||||
// -------------------------
|
||||
|
||||
q:before,
|
||||
q:after,
|
||||
blockquote:before,
|
||||
blockquote:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
|
||||
// Addresses
|
||||
// -------------------------
|
||||
|
||||
address {
|
||||
display: block;
|
||||
margin-bottom: $line-height-computed;
|
||||
font-style: normal;
|
||||
line-height: $line-height-base;
|
||||
}
|
||||
|
||||
|
||||
// Links
|
||||
// -------------------------
|
||||
|
||||
a.subdued {
|
||||
padding-right: 10px;
|
||||
color: #888;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
250
www/lib/ionic/scss/_util.scss
Normal file
250
www/lib/ionic/scss/_util.scss
Normal file
|
@ -0,0 +1,250 @@
|
|||
|
||||
/**
|
||||
* Utility Classes
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
.opacity-hide {
|
||||
opacity: 0;
|
||||
}
|
||||
.grade-b .opacity-hide,
|
||||
.grade-c .opacity-hide {
|
||||
opacity: 1;
|
||||
display: none;
|
||||
}
|
||||
.show {
|
||||
display: block;
|
||||
}
|
||||
.opacity-show {
|
||||
opacity: 1;
|
||||
}
|
||||
.invisible {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.keyboard-open .hide-on-keyboard-open {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs,
|
||||
.keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.disable-pointer-events {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.enable-pointer-events {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.disable-user-behavior {
|
||||
// used to prevent the browser from doing its native behavior. this doesnt
|
||||
// prevent the scrolling, but cancels the contextmenu, tap highlighting, etc
|
||||
|
||||
@include user-select(none);
|
||||
@include touch-callout(none);
|
||||
@include tap-highlight-transparent();
|
||||
|
||||
-webkit-user-drag: none;
|
||||
|
||||
-ms-touch-action: none;
|
||||
-ms-content-zooming: none;
|
||||
}
|
||||
|
||||
// Fill the screen to block clicks (a better pointer-events: none) for the body
|
||||
// to avoid full-page reflows and paints which can cause flickers
|
||||
.click-block {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-click-block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0;
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
.click-block-hide {
|
||||
@include translate3d(-9999px, 0, 0);
|
||||
}
|
||||
|
||||
.no-resize {
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
clear: both;
|
||||
&:after {
|
||||
display: block;
|
||||
visibility: hidden;
|
||||
clear: both;
|
||||
height: 0;
|
||||
content: ".";
|
||||
}
|
||||
}
|
||||
|
||||
.full-image {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
&:before,
|
||||
&:after {
|
||||
display: table;
|
||||
content: "";
|
||||
// Fixes Opera/contenteditable bug:
|
||||
// http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
|
||||
line-height: 0;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Content Padding
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.padding {
|
||||
padding: $content-padding;
|
||||
}
|
||||
|
||||
.padding-top,
|
||||
.padding-vertical {
|
||||
padding-top: $content-padding;
|
||||
}
|
||||
|
||||
.padding-right,
|
||||
.padding-horizontal {
|
||||
padding-right: $content-padding;
|
||||
}
|
||||
|
||||
.padding-bottom,
|
||||
.padding-vertical {
|
||||
padding-bottom: $content-padding;
|
||||
}
|
||||
|
||||
.padding-left,
|
||||
.padding-horizontal {
|
||||
padding-left: $content-padding;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Rounded
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.rounded {
|
||||
border-radius: $border-radius-base;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Utility Colors
|
||||
* --------------------------------------------------
|
||||
* Utility colors are added to help set a naming convention. You'll
|
||||
* notice we purposely do not use words like "red" or "blue", but
|
||||
* instead have colors which represent an emotion or generic theme.
|
||||
*/
|
||||
|
||||
.light, a.light {
|
||||
color: $light;
|
||||
}
|
||||
.light-bg {
|
||||
background-color: $light;
|
||||
}
|
||||
.light-border {
|
||||
border-color: $button-light-border;
|
||||
}
|
||||
|
||||
.stable, a.stable {
|
||||
color: $stable;
|
||||
}
|
||||
.stable-bg {
|
||||
background-color: $stable;
|
||||
}
|
||||
.stable-border {
|
||||
border-color: $button-stable-border;
|
||||
}
|
||||
|
||||
.positive, a.positive {
|
||||
color: $positive;
|
||||
}
|
||||
.positive-bg {
|
||||
background-color: $positive;
|
||||
}
|
||||
.positive-border {
|
||||
border-color: $button-positive-border;
|
||||
}
|
||||
|
||||
.calm, a.calm {
|
||||
color: $calm;
|
||||
}
|
||||
.calm-bg {
|
||||
background-color: $calm;
|
||||
}
|
||||
.calm-border {
|
||||
border-color: $button-calm-border;
|
||||
}
|
||||
|
||||
.assertive, a.assertive {
|
||||
color: $assertive;
|
||||
}
|
||||
.assertive-bg {
|
||||
background-color: $assertive;
|
||||
}
|
||||
.assertive-border {
|
||||
border-color: $button-assertive-border;
|
||||
}
|
||||
|
||||
.balanced, a.balanced {
|
||||
color: $balanced;
|
||||
}
|
||||
.balanced-bg {
|
||||
background-color: $balanced;
|
||||
}
|
||||
.balanced-border {
|
||||
border-color: $button-balanced-border;
|
||||
}
|
||||
|
||||
.energized, a.energized {
|
||||
color: $energized;
|
||||
}
|
||||
.energized-bg {
|
||||
background-color: $energized;
|
||||
}
|
||||
.energized-border {
|
||||
border-color: $button-energized-border;
|
||||
}
|
||||
|
||||
.royal, a.royal {
|
||||
color: $royal;
|
||||
}
|
||||
.royal-bg {
|
||||
background-color: $royal;
|
||||
}
|
||||
.royal-border {
|
||||
border-color: $button-royal-border;
|
||||
}
|
||||
|
||||
.dark, a.dark {
|
||||
color: $dark;
|
||||
}
|
||||
.dark-bg {
|
||||
background-color: $dark;
|
||||
}
|
||||
.dark-border {
|
||||
border-color: $button-dark-border;
|
||||
}
|
722
www/lib/ionic/scss/_variables.scss
Normal file
722
www/lib/ionic/scss/_variables.scss
Normal file
|
@ -0,0 +1,722 @@
|
|||
|
||||
// Colors
|
||||
// -------------------------------
|
||||
|
||||
$light: #fff !default;
|
||||
$stable: #f8f8f8 !default;
|
||||
$positive: #387ef5 !default;
|
||||
$calm: #11c1f3 !default;
|
||||
$balanced: #33cd5f !default;
|
||||
$energized: #ffc900 !default;
|
||||
$assertive: #ef473a !default;
|
||||
$royal: #886aea !default;
|
||||
$dark: #444 !default;
|
||||
|
||||
|
||||
// Base
|
||||
// -------------------------------
|
||||
|
||||
$font-family-sans-serif: "Helvetica Neue", "Roboto", sans-serif !default;
|
||||
$font-family-light-sans-serif: "HelveticaNeue-Light", "Roboto-Light", sans-serif-light !default;
|
||||
$font-family-serif: serif !default;
|
||||
$font-family-monospace: monospace !default;
|
||||
|
||||
$font-family-base: $font-family-sans-serif !default;
|
||||
$font-size-base: 14px !default;
|
||||
$font-size-large: 18px !default;
|
||||
$font-size-small: 11px !default;
|
||||
|
||||
$line-height-base: 1.428571429 !default; // 20/14
|
||||
$line-height-computed: floor($font-size-base * $line-height-base) !default; // ~20px
|
||||
$line-height-large: 1.33 !default;
|
||||
$line-height-small: 1.5 !default;
|
||||
|
||||
$headings-font-family: $font-family-base !default;
|
||||
$headings-font-weight: 500 !default;
|
||||
$headings-line-height: 1.2 !default;
|
||||
|
||||
$base-background-color: #fff !default;
|
||||
$base-color: #000 !default;
|
||||
|
||||
$link-color: $positive !default;
|
||||
$link-hover-color: darken($link-color, 15%) !default;
|
||||
|
||||
$content-padding: 10px !default;
|
||||
|
||||
$padding-base-vertical: 6px !default;
|
||||
$padding-base-horizontal: 12px !default;
|
||||
|
||||
$padding-large-vertical: 10px !default;
|
||||
$padding-large-horizontal: 16px !default;
|
||||
|
||||
$padding-small-vertical: 5px !default;
|
||||
$padding-small-horizontal: 10px !default;
|
||||
|
||||
$border-radius-base: 4px !default;
|
||||
$border-radius-large: 6px !default;
|
||||
$border-radius-small: 3px !default;
|
||||
|
||||
|
||||
// Content
|
||||
// -------------------------------
|
||||
|
||||
$scroll-refresh-icon-color: #666666 !default;
|
||||
|
||||
|
||||
// Buttons
|
||||
// -------------------------------
|
||||
|
||||
$button-color: #222 !default;
|
||||
$button-block-margin: 10px !default;
|
||||
$button-clear-padding: 6px !default;
|
||||
$button-border-radius: 2px !default;
|
||||
$button-border-width: 1px !default;
|
||||
|
||||
$button-font-size: 16px !default;
|
||||
$button-height: 42px !default;
|
||||
$button-padding: 12px !default;
|
||||
$button-icon-size: 24px !default;
|
||||
|
||||
$button-large-font-size: 20px !default;
|
||||
$button-large-height: 54px !default;
|
||||
$button-large-padding: 16px !default;
|
||||
$button-large-icon-size: 32px !default;
|
||||
|
||||
$button-small-font-size: 12px !default;
|
||||
$button-small-height: 28px !default;
|
||||
$button-small-padding: 4px !default;
|
||||
$button-small-icon-size: 16px !default;
|
||||
|
||||
$button-bar-button-font-size: 13px !default;
|
||||
$button-bar-button-height: 32px !default;
|
||||
$button-bar-button-padding: 8px !default;
|
||||
$button-bar-button-icon-size: 20px !default;
|
||||
|
||||
$button-light-bg: $light !default;
|
||||
$button-light-text: #444 !default;
|
||||
$button-light-border: #ddd !default;
|
||||
$button-light-active-bg: #fafafa !default;
|
||||
$button-light-active-border: #ccc !default;
|
||||
|
||||
$button-stable-bg: $stable !default;
|
||||
$button-stable-text: #444 !default;
|
||||
$button-stable-border: #b2b2b2 !default;
|
||||
$button-stable-active-bg: #e5e5e5 !default;
|
||||
$button-stable-active-border: #a2a2a2 !default;
|
||||
|
||||
$button-positive-bg: $positive !default;
|
||||
$button-positive-text: #fff !default;
|
||||
$button-positive-border: darken($positive, 10%) !default;
|
||||
$button-positive-active-bg: darken($positive, 10%) !default;
|
||||
$button-positive-active-border: darken($positive, 10%) !default;
|
||||
|
||||
$button-calm-bg: $calm !default;
|
||||
$button-calm-text: #fff !default;
|
||||
$button-calm-border: darken($calm, 10%) !default;
|
||||
$button-calm-active-bg: darken($calm, 10%) !default;
|
||||
$button-calm-active-border: darken($calm, 10%) !default;
|
||||
|
||||
$button-assertive-bg: $assertive !default;
|
||||
$button-assertive-text: #fff !default;
|
||||
$button-assertive-border: darken($assertive, 10%) !default;
|
||||
$button-assertive-active-bg: darken($assertive, 10%) !default;
|
||||
$button-assertive-active-border: darken($assertive, 10%) !default;
|
||||
|
||||
$button-balanced-bg: $balanced !default;
|
||||
$button-balanced-text: #fff !default;
|
||||
$button-balanced-border: darken($balanced, 10%) !default;
|
||||
$button-balanced-active-bg: darken($balanced, 10%) !default;
|
||||
$button-balanced-active-border: darken($balanced, 10%) !default;
|
||||
|
||||
$button-energized-bg: $energized !default;
|
||||
$button-energized-text: #fff !default;
|
||||
$button-energized-border: darken($energized, 5%) !default;
|
||||
$button-energized-active-bg: darken($energized, 5%) !default;
|
||||
$button-energized-active-border: darken($energized, 5%) !default;
|
||||
|
||||
$button-royal-bg: $royal !default;
|
||||
$button-royal-text: #fff !default;
|
||||
$button-royal-border: darken($royal, 8%) !default;
|
||||
$button-royal-active-bg: darken($royal, 8%) !default;
|
||||
$button-royal-active-border: darken($royal, 8%) !default;
|
||||
|
||||
$button-dark-bg: $dark !default;
|
||||
$button-dark-text: #fff !default;
|
||||
$button-dark-border: #111 !default;
|
||||
$button-dark-active-bg: #262626 !default;
|
||||
$button-dark-active-border: #000 !default;
|
||||
|
||||
$button-default-bg: $button-stable-bg !default;
|
||||
$button-default-text: $button-stable-text !default;
|
||||
$button-default-border: $button-stable-border !default;
|
||||
$button-default-active-bg: $button-stable-active-bg !default;
|
||||
$button-default-active-border: $button-stable-active-border !default;
|
||||
|
||||
|
||||
// Bars
|
||||
// -------------------------------
|
||||
|
||||
$bar-height: 44px !default;
|
||||
$bar-title-font-size: 17px !default;
|
||||
$bar-padding-portrait: 5px !default;
|
||||
$bar-padding-landscape: 5px !default;
|
||||
$bar-transparency: 1 !default;
|
||||
|
||||
$bar-footer-height: $bar-height !default;
|
||||
$bar-subheader-height: $bar-height !default;
|
||||
$bar-subfooter-height: $bar-height !default;
|
||||
|
||||
$bar-light-bg: rgba($button-light-bg, $bar-transparency) !default;
|
||||
$bar-light-text: $button-light-text !default;
|
||||
$bar-light-border: $button-light-border !default;
|
||||
$bar-light-active-bg: $button-light-active-bg !default;
|
||||
$bar-light-active-border: $button-light-active-border !default;
|
||||
|
||||
$bar-stable-bg: rgba($button-stable-bg, $bar-transparency) !default;
|
||||
$bar-stable-text: $button-stable-text !default;
|
||||
$bar-stable-border: $button-stable-border !default;
|
||||
$bar-stable-active-bg: $button-stable-active-bg !default;
|
||||
$bar-stable-active-border: $button-stable-active-border !default;
|
||||
|
||||
$bar-positive-bg: rgba($button-positive-bg, $bar-transparency) !default;
|
||||
$bar-positive-text: $button-positive-text !default;
|
||||
$bar-positive-border: $button-positive-border !default;
|
||||
$bar-positive-active-bg: $button-positive-active-bg !default;
|
||||
$bar-positive-active-border: $button-positive-active-border !default;
|
||||
|
||||
$bar-calm-bg: rgba($button-calm-bg, $bar-transparency) !default;
|
||||
$bar-calm-text: $button-calm-text !default;
|
||||
$bar-calm-border: $button-calm-border !default;
|
||||
$bar-calm-active-bg: $button-calm-active-bg !default;
|
||||
$bar-calm-active-border: $button-calm-active-border !default;
|
||||
|
||||
$bar-assertive-bg: rgba($button-assertive-bg, $bar-transparency) !default;
|
||||
$bar-assertive-text: $button-assertive-text !default;
|
||||
$bar-assertive-border: $button-assertive-border !default;
|
||||
$bar-assertive-active-bg: $button-assertive-active-bg !default;
|
||||
$bar-assertive-active-border: $button-assertive-active-border !default;
|
||||
|
||||
$bar-balanced-bg: rgba($button-balanced-bg, $bar-transparency) !default;
|
||||
$bar-balanced-text: $button-balanced-text !default;
|
||||
$bar-balanced-border: $button-balanced-border !default;
|
||||
$bar-balanced-active-bg: $button-balanced-active-bg !default;
|
||||
$bar-balanced-active-border: $button-balanced-active-border !default;
|
||||
|
||||
$bar-energized-bg: rgba($button-energized-bg, $bar-transparency) !default;
|
||||
$bar-energized-text: $button-energized-text !default;
|
||||
$bar-energized-border: $button-energized-border !default;
|
||||
$bar-energized-active-bg: $button-energized-active-bg !default;
|
||||
$bar-energized-active-border: $button-energized-active-border !default;
|
||||
|
||||
$bar-royal-bg: rgba($button-royal-bg, $bar-transparency) !default;
|
||||
$bar-royal-text: $button-royal-text !default;
|
||||
$bar-royal-border: $button-royal-border !default;
|
||||
$bar-royal-active-bg: $button-royal-active-bg !default;
|
||||
$bar-royal-active-border: $button-royal-active-border !default;
|
||||
|
||||
$bar-dark-bg: rgba($button-dark-bg, $bar-transparency) !default;
|
||||
$bar-dark-text: $button-dark-text !default;
|
||||
$bar-dark-border: $button-dark-border !default;
|
||||
$bar-dark-active-bg: $button-dark-active-bg !default;
|
||||
$bar-dark-active-border: $button-dark-active-border !default;
|
||||
|
||||
$bar-default-bg: $bar-light-bg !default;
|
||||
$bar-default-text: $bar-light-text !default;
|
||||
$bar-default-border: $bar-light-border !default;
|
||||
$bar-default-active-bg: $bar-light-active-bg !default;
|
||||
$bar-default-active-border: $bar-light-active-border !default;
|
||||
|
||||
|
||||
// Tabs
|
||||
// -------------------------------
|
||||
|
||||
$tabs-height: 49px !default;
|
||||
$tabs-text-font-size: 14px !default;
|
||||
$tabs-text-font-size-side-icon: 10px !default;
|
||||
$tabs-icon-size: 32px !default;
|
||||
$tabs-badge-padding: 1px 6px !default;
|
||||
$tabs-badge-font-size: 12px !default;
|
||||
|
||||
$tabs-light-bg: $button-light-bg !default;
|
||||
$tabs-light-border: $button-light-border !default;
|
||||
$tabs-light-text: $button-light-text !default;
|
||||
|
||||
$tabs-stable-bg: $button-stable-bg !default;
|
||||
$tabs-stable-border: $button-stable-border !default;
|
||||
$tabs-stable-text: $button-stable-text !default;
|
||||
|
||||
$tabs-positive-bg: $button-positive-bg !default;
|
||||
$tabs-positive-border: $button-positive-border !default;
|
||||
$tabs-positive-text: $button-positive-text !default;
|
||||
|
||||
$tabs-calm-bg: $button-calm-bg !default;
|
||||
$tabs-calm-border: $button-calm-border !default;
|
||||
$tabs-calm-text: $button-calm-text !default;
|
||||
|
||||
$tabs-assertive-bg: $button-assertive-bg !default;
|
||||
$tabs-assertive-border: $button-assertive-border !default;
|
||||
$tabs-assertive-text: $button-assertive-text !default;
|
||||
|
||||
$tabs-balanced-bg: $button-balanced-bg !default;
|
||||
$tabs-balanced-border: $button-balanced-border !default;
|
||||
$tabs-balanced-text: $button-balanced-text !default;
|
||||
|
||||
$tabs-energized-bg: $button-energized-bg !default;
|
||||
$tabs-energized-border: $button-energized-border !default;
|
||||
$tabs-energized-text: $button-energized-text !default;
|
||||
|
||||
$tabs-royal-bg: $button-royal-bg !default;
|
||||
$tabs-royal-border: $button-royal-border !default;
|
||||
$tabs-royal-text: $button-royal-text !default;
|
||||
|
||||
$tabs-dark-bg: $button-dark-bg !default;
|
||||
$tabs-dark-border: $button-dark-border !default;
|
||||
$tabs-dark-text: $button-dark-text !default;
|
||||
|
||||
$tabs-default-bg: $tabs-stable-bg !default;
|
||||
$tabs-default-border: $tabs-stable-border !default;
|
||||
$tabs-default-text: $tabs-stable-text !default;
|
||||
|
||||
$tab-item-max-width: 150px !default;
|
||||
|
||||
$tabs-off-opacity: 0.4 !default;
|
||||
$tabs-striped-off-opacity: $tabs-off-opacity !default;
|
||||
$tabs-striped-off-color: #000;
|
||||
$tabs-striped-border-width: 2px;
|
||||
|
||||
|
||||
// Items
|
||||
// -------------------------------
|
||||
|
||||
$item-font-size: 16px !default;
|
||||
$item-border-width: 1px !default;
|
||||
$item-padding: 16px !default;
|
||||
|
||||
$item-button-font-size: 18px !default;
|
||||
$item-button-line-height: 32px !default;
|
||||
$item-icon-font-size: 32px !default;
|
||||
$item-icon-fill-font-size: 28px !default;
|
||||
|
||||
$item-icon-accessory-color: #ccc !default;
|
||||
$item-icon-accessory-font-size: 16px !default;
|
||||
|
||||
$item-avatar-width: 40px !default;
|
||||
$item-avatar-height: 40px !default;
|
||||
$item-avatar-border-radius: 50% !default;
|
||||
|
||||
$item-thumbnail-width: 80px !default;
|
||||
$item-thumbnail-height: 80px !default;
|
||||
$item-thumbnail-margin: 10px !default;
|
||||
|
||||
$item-divider-bg: #f5f5f5 !default;
|
||||
$item-divider-color: #222 !default;
|
||||
$item-divider-padding: 5px 15px !default;
|
||||
|
||||
$item-light-bg: $button-light-bg !default;
|
||||
$item-light-border: $button-light-border !default;
|
||||
$item-light-text: $button-light-text !default;
|
||||
$item-light-active-bg: $button-light-active-bg !default;
|
||||
$item-light-active-border: $button-light-active-border !default;
|
||||
|
||||
$item-stable-bg: $button-stable-bg !default;
|
||||
$item-stable-border: $button-stable-border !default;
|
||||
$item-stable-text: $button-stable-text !default;
|
||||
$item-stable-active-bg: $button-stable-active-bg !default;
|
||||
$item-stable-active-border: $button-stable-active-border !default;
|
||||
|
||||
$item-positive-bg: $button-positive-bg !default;
|
||||
$item-positive-border: $button-positive-border !default;
|
||||
$item-positive-text: $button-positive-text !default;
|
||||
$item-positive-active-bg: $button-positive-active-bg !default;
|
||||
$item-positive-active-border: $button-positive-active-border !default;
|
||||
|
||||
$item-calm-bg: $button-calm-bg !default;
|
||||
$item-calm-border: $button-calm-border !default;
|
||||
$item-calm-text: $button-calm-text !default;
|
||||
$item-calm-active-bg: $button-calm-active-bg !default;
|
||||
$item-calm-active-border: $button-calm-active-border !default;
|
||||
|
||||
$item-assertive-bg: $button-assertive-bg !default;
|
||||
$item-assertive-border: $button-assertive-border !default;
|
||||
$item-assertive-text: $button-assertive-text !default;
|
||||
$item-assertive-active-bg: $button-assertive-active-bg !default;
|
||||
$item-assertive-active-border: $button-assertive-active-border !default;
|
||||
|
||||
$item-balanced-bg: $button-balanced-bg !default;
|
||||
$item-balanced-border: $button-balanced-border !default;
|
||||
$item-balanced-text: $button-balanced-text !default;
|
||||
$item-balanced-active-bg: $button-balanced-active-bg !default;
|
||||
$item-balanced-active-border: $button-balanced-active-border !default;
|
||||
|
||||
$item-energized-bg: $button-energized-bg !default;
|
||||
$item-energized-border: $button-energized-border !default;
|
||||
$item-energized-text: $button-energized-text !default;
|
||||
$item-energized-active-bg: $button-energized-active-bg !default;
|
||||
$item-energized-active-border: $button-energized-active-border !default;
|
||||
|
||||
$item-royal-bg: $button-royal-bg !default;
|
||||
$item-royal-border: $button-royal-border !default;
|
||||
$item-royal-text: $button-royal-text !default;
|
||||
$item-royal-active-bg: $button-royal-active-bg !default;
|
||||
$item-royal-active-border: $button-royal-active-border !default;
|
||||
|
||||
$item-dark-bg: $button-dark-bg !default;
|
||||
$item-dark-border: $button-dark-border !default;
|
||||
$item-dark-text: $button-dark-text !default;
|
||||
$item-dark-active-bg: $button-dark-active-bg !default;
|
||||
$item-dark-active-border: $button-dark-active-border !default;
|
||||
|
||||
$item-default-bg: $item-light-bg !default;
|
||||
$item-default-border: $item-light-border !default;
|
||||
$item-default-text: $item-light-text !default;
|
||||
$item-default-active-bg: #D9D9D9 !default;
|
||||
$item-default-active-border: $item-light-active-border !default;
|
||||
|
||||
|
||||
// Item Editing
|
||||
// -------------------------------
|
||||
|
||||
$item-edit-transition-duration: 250ms !default;
|
||||
$item-edit-transition-function: ease-in-out !default;
|
||||
|
||||
$item-remove-transition-duration: 300ms !default;
|
||||
$item-remove-transition-function: ease-in !default;
|
||||
$item-remove-descendents-transition-function: cubic-bezier(.25,.81,.24,1) !default;
|
||||
|
||||
$item-left-edit-left: 8px !default; // item's left side edit's "left" property
|
||||
|
||||
$item-right-edit-open-width: 50px !default;
|
||||
$item-left-edit-open-width: 50px !default;
|
||||
|
||||
$item-delete-icon-size: 24px !default;
|
||||
$item-delete-icon-color: $assertive !default;
|
||||
|
||||
$item-reorder-icon-size: 32px !default;
|
||||
$item-reorder-icon-color: $dark !default;
|
||||
|
||||
|
||||
// Lists
|
||||
// -------------------------------
|
||||
|
||||
$list-header-bg: transparent !default;
|
||||
$list-header-color: #222 !default;
|
||||
$list-header-padding: 5px 15px !default;
|
||||
$list-header-margin-top: 20px !default;
|
||||
|
||||
|
||||
// Cards
|
||||
// -------------------------------
|
||||
|
||||
$card-header-bg: #F5F5F5 !default;
|
||||
$card-body-bg: #fff !default;
|
||||
$card-footer-bg: #F5F5F5 !default;
|
||||
|
||||
$card-padding: 10px !default;
|
||||
$card-border-width: 1px !default;
|
||||
|
||||
$card-border-color: #ccc !default;
|
||||
$card-border-radius: 2px !default;
|
||||
$card-box-shadow: 0 1px 3px rgba(0, 0, 0, .3) !default;
|
||||
|
||||
|
||||
// Forms
|
||||
// -------------------------------
|
||||
|
||||
$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
|
||||
$input-height-large: (floor($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
|
||||
$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
|
||||
|
||||
$input-bg: $light !default;
|
||||
$input-bg-disabled: $stable !default;
|
||||
|
||||
$input-color: #111 !default;
|
||||
$input-border: $item-default-border !default;
|
||||
$input-border-width: $item-border-width !default;
|
||||
$input-label-color: $dark !default;
|
||||
$input-color-placeholder: lighten($dark, 40%) !default;
|
||||
|
||||
|
||||
// Progress
|
||||
// -------------------------------
|
||||
|
||||
$progress-width: 100% !default;
|
||||
$progress-margin: 15px auto !default;
|
||||
|
||||
|
||||
// Toggle
|
||||
// -------------------------------
|
||||
|
||||
$toggle-width: 54px !default;
|
||||
$toggle-height: 32px !default;
|
||||
$toggle-border-width: 2px !default;
|
||||
$toggle-border-radius: 20px !default;
|
||||
|
||||
$toggle-handle-width: $toggle-height - ($toggle-border-width * 2) !default;
|
||||
$toggle-handle-height: $toggle-handle-width !default;
|
||||
$toggle-handle-radius: $toggle-handle-width !default;
|
||||
$toggle-handle-dragging-bg-color: darken(#fff, 5%) !default;
|
||||
|
||||
$toggle-off-bg-color: #E5E5E5 !default;
|
||||
$toggle-off-border-color: #E5E5E5 !default;
|
||||
|
||||
$toggle-on-light-bg: $button-light-border !default;
|
||||
$toggle-on-light-border: $toggle-on-light-bg !default;
|
||||
$toggle-on-stable-bg: $button-stable-border !default;
|
||||
$toggle-on-stable-border: $toggle-on-stable-bg !default;
|
||||
$toggle-on-positive-bg: $positive !default;
|
||||
$toggle-on-positive-border: $toggle-on-positive-bg !default;
|
||||
$toggle-on-calm-bg: $calm !default;
|
||||
$toggle-on-calm-border: $toggle-on-calm-bg !default;
|
||||
$toggle-on-assertive-bg: $assertive !default;
|
||||
$toggle-on-assertive-border: $toggle-on-assertive-bg !default;
|
||||
$toggle-on-balanced-bg: $balanced !default;
|
||||
$toggle-on-balanced-border: $toggle-on-balanced-bg !default;
|
||||
$toggle-on-energized-bg: $energized !default;
|
||||
$toggle-on-energized-border: $toggle-on-energized-bg !default;
|
||||
$toggle-on-royal-bg: $royal !default;
|
||||
$toggle-on-royal-border: $toggle-on-royal-bg !default;
|
||||
$toggle-on-dark-bg: $dark !default;
|
||||
$toggle-on-dark-border: $toggle-on-dark-bg !default;
|
||||
$toggle-on-default-bg: $positive !default;
|
||||
$toggle-on-default-border: $toggle-on-default-bg !default;
|
||||
|
||||
$toggle-handle-off-bg-color: $light !default;
|
||||
$toggle-handle-on-bg-color: $toggle-handle-off-bg-color !default;
|
||||
|
||||
$toggle-transition-duration: .2s !default;
|
||||
|
||||
$toggle-hit-area-expansion: 5px;
|
||||
|
||||
|
||||
// Checkbox
|
||||
// -------------------------------
|
||||
|
||||
$checkbox-width: 28px !default;
|
||||
$checkbox-height: 28px !default;
|
||||
$checkbox-border-radius: $checkbox-width !default;
|
||||
$checkbox-border-width: 1px !default;
|
||||
|
||||
$checkbox-off-bg-color: #fff !default;
|
||||
$checkbox-off-border-light: $button-light-border !default;
|
||||
$checkbox-on-bg-light: $button-light-border !default;
|
||||
$checkbox-off-border-stable: $button-stable-border !default;
|
||||
$checkbox-on-bg-stable: $button-stable-border !default;
|
||||
$checkbox-off-border-positive: $positive !default;
|
||||
$checkbox-on-bg-positive: $positive !default;
|
||||
$checkbox-off-border-calm: $calm !default;
|
||||
$checkbox-on-bg-calm: $calm !default;
|
||||
$checkbox-off-border-assertive: $assertive !default;
|
||||
$checkbox-on-bg-assertive: $assertive !default;
|
||||
$checkbox-off-border-balanced: $balanced !default;
|
||||
$checkbox-on-bg-balanced: $balanced !default;
|
||||
$checkbox-off-border-energized: $energized !default;
|
||||
$checkbox-on-bg-energized: $energized !default;
|
||||
$checkbox-off-border-royal: $royal !default;
|
||||
$checkbox-on-bg-royal: $royal !default;
|
||||
$checkbox-off-border-dark: $dark !default;
|
||||
$checkbox-on-bg-dark: $dark !default;
|
||||
$checkbox-off-border-default: $button-light-border !default;
|
||||
$checkbox-on-bg-default: $positive !default;
|
||||
$checkbox-on-border-default: $positive !default;
|
||||
|
||||
$checkbox-check-width: 1px !default;
|
||||
$checkbox-check-color: #fff !default;
|
||||
|
||||
|
||||
// Range
|
||||
// -------------------------------
|
||||
|
||||
$range-track-height: 2px !default;
|
||||
$range-slider-width: 28px !default;
|
||||
$range-slider-height: 28px !default;
|
||||
$range-slider-border-radius: 50% !default;
|
||||
$range-icon-size: 24px !default;
|
||||
$range-slider-box-shadow: 0 0 2px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,0.2) !default;
|
||||
|
||||
$range-light-track-bg: $button-light-border !default;
|
||||
$range-stable-track-bg: $button-stable-border !default;
|
||||
$range-positive-track-bg: $button-positive-bg !default;
|
||||
$range-calm-track-bg: $button-calm-bg !default;
|
||||
$range-balanced-track-bg: $button-balanced-bg !default;
|
||||
$range-assertive-track-bg: $button-assertive-bg !default;
|
||||
$range-energized-track-bg: $button-energized-bg !default;
|
||||
$range-royal-track-bg: $button-royal-bg !default;
|
||||
$range-dark-track-bg: $button-dark-bg !default;
|
||||
$range-default-track-bg: #ccc !default;
|
||||
|
||||
|
||||
// Menus
|
||||
// -------------------------------
|
||||
|
||||
$menu-bg: #fff !default;
|
||||
$menu-width: 275px !default;
|
||||
$menu-animation-speed: 200ms !default;
|
||||
|
||||
$menu-side-shadow: -1px 0px 2px rgba(0, 0, 0, 0.2), 1px 0px 2px rgba(0,0,0,0.2) !default;
|
||||
|
||||
|
||||
// Modals
|
||||
// -------------------------------
|
||||
|
||||
$modal-bg-color: #fff !default;
|
||||
$modal-backdrop-bg-active: rgba(0,0,0,0.5) !default;
|
||||
$modal-backdrop-bg-inactive: rgba(0,0,0,0) !default;
|
||||
|
||||
$modal-inset-mode-break-point: 680px !default; // @media min-width
|
||||
$modal-inset-mode-top: 20% !default;
|
||||
$modal-inset-mode-right: 20% !default;
|
||||
$modal-inset-mode-bottom: 20% !default;
|
||||
$modal-inset-mode-left: 20% !default;
|
||||
$modal-inset-mode-min-height: 240px !default;
|
||||
|
||||
|
||||
// Popovers
|
||||
// -------------------------------
|
||||
|
||||
$popover-bg-color: $light !default;
|
||||
$popover-backdrop-bg-active: rgba(0,0,0,0.1) !default;
|
||||
$popover-backdrop-bg-inactive: rgba(0,0,0,0) !default;
|
||||
$popover-width: 220px !default;
|
||||
$popover-height: 280px !default;
|
||||
$popover-large-break-point: 680px !default;
|
||||
$popover-large-width: 360px !default;
|
||||
|
||||
$popover-box-shadow: 0 1px 3px rgba(0,0,0,0.4) !default;
|
||||
$popover-border-radius: 2px !default;
|
||||
|
||||
$popover-box-shadow-ios: 0 0 40px rgba(0,0,0,0.08) !default;
|
||||
$popover-border-radius-ios: 10px !default;
|
||||
|
||||
$popover-bg-color-android: #fafafa !default;
|
||||
$popover-box-shadow-android: 0 2px 6px rgba(0,0,0,0.35) !default;
|
||||
|
||||
|
||||
// Grids
|
||||
// -------------------------------
|
||||
|
||||
$grid-padding-width: 10px !default;
|
||||
$grid-responsive-sm-break: 567px !default; // smaller than landscape phone
|
||||
$grid-responsive-md-break: 767px !default; // smaller than portrait tablet
|
||||
$grid-responsive-lg-break: 1023px !default; // smaller than landscape tablet
|
||||
|
||||
|
||||
// Action Sheets
|
||||
// -------------------------------
|
||||
|
||||
$sheet-bg-color: rgba(255, 255, 255, 0.6) !default;
|
||||
$sheet-opacity: 0.95 !default;
|
||||
|
||||
$sheet-border-radius: 3px 3px 3px 3px !default;
|
||||
$sheet-border-radius-top: 3px 3px 0px 0px !default;
|
||||
$sheet-border-radius-bottom: 0px 0px 3px 3px !default;
|
||||
|
||||
|
||||
// Popups
|
||||
// -------------------------------
|
||||
|
||||
$popup-width: 250px !default;
|
||||
$popup-enter-animation: superScaleIn !default;
|
||||
$popup-enter-animation-duration: 0.2s !default;
|
||||
$popup-leave-animation-duration: 0.1s !default;
|
||||
|
||||
$popup-border-radius: 0px !default;
|
||||
$popup-background-color: rgba(255,255,255,0.9) !default;
|
||||
|
||||
$popup-button-border-radius: 2px !default;
|
||||
$popup-button-line-height: 20px !default;
|
||||
$popup-button-min-height: 45px !default;
|
||||
|
||||
|
||||
// Loading
|
||||
// -------------------------------
|
||||
|
||||
$loading-text-color: #fff !default;
|
||||
$loading-bg-color: rgba(0,0,0,0.7) !default;
|
||||
$loading-padding: 20px !default;
|
||||
$loading-border-radius: 5px !default;
|
||||
$loading-font-size: 15px !default;
|
||||
|
||||
$loading-backdrop-fadein-duration:0.1s !default;
|
||||
$loading-backdrop-bg-color: rgba(0,0,0,0.4) !default;
|
||||
|
||||
|
||||
// Badges
|
||||
// -------------------------------
|
||||
|
||||
$badge-font-size: 14px !default;
|
||||
$badge-line-height: 16px !default;
|
||||
$badge-font-weight: bold !default;
|
||||
$badge-border-radius: 10px !default;
|
||||
|
||||
$badge-light-bg: $button-light-bg !default;
|
||||
$badge-light-text: $button-light-text !default;
|
||||
|
||||
$badge-stable-bg: $button-stable-bg !default;
|
||||
$badge-stable-text: $button-stable-text !default;
|
||||
|
||||
$badge-positive-bg: $button-positive-bg !default;
|
||||
$badge-positive-text: $button-positive-text !default;
|
||||
|
||||
$badge-calm-bg: $button-calm-bg !default;
|
||||
$badge-calm-text: $button-calm-text !default;
|
||||
|
||||
$badge-balanced-bg: $button-balanced-bg !default;
|
||||
$badge-balanced-text: $button-balanced-text !default;
|
||||
|
||||
$badge-assertive-bg: $button-assertive-bg !default;
|
||||
$badge-assertive-text: $button-assertive-text !default;
|
||||
|
||||
$badge-energized-bg: $button-energized-bg !default;
|
||||
$badge-energized-text: $button-energized-text !default;
|
||||
|
||||
$badge-royal-bg: $button-royal-bg !default;
|
||||
$badge-royal-text: $button-royal-text !default;
|
||||
|
||||
$badge-dark-bg: $button-dark-bg !default;
|
||||
$badge-dark-text: $button-dark-text !default;
|
||||
|
||||
$badge-default-bg: transparent !default;
|
||||
$badge-default-text: #AAAAAA !default;
|
||||
|
||||
|
||||
// Z-Indexes
|
||||
// -------------------------------
|
||||
|
||||
$z-index-bar-title: 0 !default;
|
||||
$z-index-item-drag: 0 !default;
|
||||
$z-index-item-edit: 0 !default;
|
||||
$z-index-menu: 0 !default;
|
||||
$z-index-badge: 1 !default;
|
||||
$z-index-bar-button: 1 !default;
|
||||
$z-index-item-options: 1 !default;
|
||||
$z-index-pane: 1 !default;
|
||||
$z-index-slider-pager: 1 !default;
|
||||
$z-index-view: 1 !default;
|
||||
$z-index-view-below: 2 !default;
|
||||
$z-index-item: 2 !default;
|
||||
$z-index-item-checkbox: 3 !default;
|
||||
$z-index-item-radio: 3 !default;
|
||||
$z-index-item-reorder: 3 !default;
|
||||
$z-index-item-toggle: 3 !default;
|
||||
$z-index-view-above: 3 !default;
|
||||
$z-index-tabs: 5 !default;
|
||||
$z-index-item-reordering: 9 !default;
|
||||
$z-index-bar: 9 !default;
|
||||
$z-index-bar-above: 10 !default;
|
||||
$z-index-menu-scroll-content: 10 !default;
|
||||
$z-index-modal: 10 !default;
|
||||
$z-index-popover: 10 !default;
|
||||
$z-index-action-sheet: 11 !default;
|
||||
$z-index-backdrop: 11 !default;
|
||||
$z-index-menu-bar-header: 11 !default;
|
||||
$z-index-scroll-content-false: 11 !default;
|
||||
$z-index-popup: 12 !default;
|
||||
$z-index-loading: 13 !default;
|
||||
$z-index-scroll-bar: 9999 !default;
|
||||
$z-index-click-block: 99999 !default;
|
||||
|
||||
|
||||
// Platform
|
||||
// -------------------------------
|
||||
|
||||
$ios-statusbar-height: 20px !default;
|
51
www/lib/ionic/scss/ionic.scss
Normal file
51
www/lib/ionic/scss/ionic.scss
Normal file
|
@ -0,0 +1,51 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
@import
|
||||
// Ionicons
|
||||
"ionicons/ionicons.scss",
|
||||
|
||||
// Variables
|
||||
"mixins",
|
||||
"variables",
|
||||
|
||||
// Base
|
||||
"reset",
|
||||
"scaffolding",
|
||||
"type",
|
||||
|
||||
// Components
|
||||
"action-sheet",
|
||||
"backdrop",
|
||||
"bar",
|
||||
"tabs",
|
||||
"menu",
|
||||
"modal",
|
||||
"popover",
|
||||
"popup",
|
||||
"loading",
|
||||
"items",
|
||||
"list",
|
||||
"badge",
|
||||
"slide-box",
|
||||
|
||||
// Forms
|
||||
"form",
|
||||
"checkbox",
|
||||
"toggle",
|
||||
"radio",
|
||||
"range",
|
||||
"select",
|
||||
"progress",
|
||||
|
||||
// Buttons
|
||||
"button",
|
||||
"button-bar",
|
||||
|
||||
// Util
|
||||
"grid",
|
||||
"util",
|
||||
"platform",
|
||||
|
||||
// Animations
|
||||
"animations",
|
||||
"transitions";
|
77
www/lib/ionic/scss/ionicons/_ionicons-animation.scss
Normal file
77
www/lib/ionic/scss/ionicons/_ionicons-animation.scss
Normal file
|
@ -0,0 +1,77 @@
|
|||
// Animation Icons
|
||||
// --------------------------
|
||||
|
||||
.#{$ionicons-prefix}spin {
|
||||
-webkit-animation: spin 1s infinite linear;
|
||||
-moz-animation: spin 1s infinite linear;
|
||||
-o-animation: spin 1s infinite linear;
|
||||
animation: spin 1s infinite linear;
|
||||
}
|
||||
|
||||
@-moz-keyframes spin {
|
||||
0% { -moz-transform: rotate(0deg); }
|
||||
100% { -moz-transform: rotate(359deg); }
|
||||
}
|
||||
@-webkit-keyframes spin {
|
||||
0% { -webkit-transform: rotate(0deg); }
|
||||
100% { -webkit-transform: rotate(359deg); }
|
||||
}
|
||||
@-o-keyframes spin {
|
||||
0% { -o-transform: rotate(0deg); }
|
||||
100% { -o-transform: rotate(359deg); }
|
||||
}
|
||||
@-ms-keyframes spin {
|
||||
0% { -ms-transform: rotate(0deg); }
|
||||
100% { -ms-transform: rotate(359deg); }
|
||||
}
|
||||
@keyframes spin {
|
||||
0% { transform: rotate(0deg); }
|
||||
100% { transform: rotate(359deg); }
|
||||
}
|
||||
|
||||
|
||||
.#{$ionicons-prefix}loading-a,
|
||||
.#{$ionicons-prefix}loading-b,
|
||||
.#{$ionicons-prefix}loading-c,
|
||||
.#{$ionicons-prefix}loading-d,
|
||||
.#{$ionicons-prefix}looping,
|
||||
.#{$ionicons-prefix}refreshing,
|
||||
.#{$ionicons-prefix}ios7-reloading {
|
||||
@extend .ion;
|
||||
// must spin entire element for android 4.3 and below
|
||||
@extend .#{$ionicons-prefix}spin;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}loading-a {
|
||||
-webkit-animation-timing-function: steps(8, start);
|
||||
-moz-animation-timing-function: steps(8, start);
|
||||
animation-timing-function: steps(8, start);
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}loading-a:before {
|
||||
@extend .#{$ionicons-prefix}load-a:before;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}loading-b:before {
|
||||
@extend .#{$ionicons-prefix}load-b:before;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}loading-c:before {
|
||||
@extend .#{$ionicons-prefix}load-c:before;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}loading-d:before {
|
||||
@extend .#{$ionicons-prefix}load-d:before;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}looping:before {
|
||||
@extend .#{$ionicons-prefix}loop:before;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}refreshing:before {
|
||||
@extend .#{$ionicons-prefix}refresh:before;
|
||||
}
|
||||
|
||||
.#{$ionicons-prefix}ios7-reloading:before {
|
||||
@extend .#{$ionicons-prefix}ios7-reload:before;
|
||||
}
|
27
www/lib/ionic/scss/ionicons/_ionicons-font.scss
Normal file
27
www/lib/ionic/scss/ionicons/_ionicons-font.scss
Normal file
|
@ -0,0 +1,27 @@
|
|||
// Ionicons Font Path
|
||||
// --------------------------
|
||||
|
||||
@font-face {
|
||||
font-family: $ionicons-font-family;
|
||||
src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}");
|
||||
src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix") format("embedded-opentype"),
|
||||
url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype"),
|
||||
url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"),
|
||||
url("#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.ion {
|
||||
display: inline-block;
|
||||
font-family: $ionicons-font-family;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
text-rendering: auto;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
1209
www/lib/ionic/scss/ionicons/_ionicons-icons.scss
Normal file
1209
www/lib/ionic/scss/ionicons/_ionicons-icons.scss
Normal file
File diff suppressed because it is too large
Load diff
609
www/lib/ionic/scss/ionicons/_ionicons-variables.scss
Normal file
609
www/lib/ionic/scss/ionicons/_ionicons-variables.scss
Normal file
|
@ -0,0 +1,609 @@
|
|||
// Ionicons Variables
|
||||
// --------------------------
|
||||
|
||||
$ionicons-font-path: "../fonts" !default;
|
||||
$ionicons-font-family: "Ionicons" !default;
|
||||
$ionicons-version: "1.5.2" !default;
|
||||
$ionicons-prefix: ion- !default;
|
||||
|
||||
$ionicon-var-alert: "\f101";
|
||||
$ionicon-var-alert-circled: "\f100";
|
||||
$ionicon-var-android-add: "\f2c7";
|
||||
$ionicon-var-android-add-contact: "\f2c6";
|
||||
$ionicon-var-android-alarm: "\f2c8";
|
||||
$ionicon-var-android-archive: "\f2c9";
|
||||
$ionicon-var-android-arrow-back: "\f2ca";
|
||||
$ionicon-var-android-arrow-down-left: "\f2cb";
|
||||
$ionicon-var-android-arrow-down-right: "\f2cc";
|
||||
$ionicon-var-android-arrow-forward: "\f30f";
|
||||
$ionicon-var-android-arrow-up-left: "\f2cd";
|
||||
$ionicon-var-android-arrow-up-right: "\f2ce";
|
||||
$ionicon-var-android-battery: "\f2cf";
|
||||
$ionicon-var-android-book: "\f2d0";
|
||||
$ionicon-var-android-calendar: "\f2d1";
|
||||
$ionicon-var-android-call: "\f2d2";
|
||||
$ionicon-var-android-camera: "\f2d3";
|
||||
$ionicon-var-android-chat: "\f2d4";
|
||||
$ionicon-var-android-checkmark: "\f2d5";
|
||||
$ionicon-var-android-clock: "\f2d6";
|
||||
$ionicon-var-android-close: "\f2d7";
|
||||
$ionicon-var-android-contact: "\f2d8";
|
||||
$ionicon-var-android-contacts: "\f2d9";
|
||||
$ionicon-var-android-data: "\f2da";
|
||||
$ionicon-var-android-developer: "\f2db";
|
||||
$ionicon-var-android-display: "\f2dc";
|
||||
$ionicon-var-android-download: "\f2dd";
|
||||
$ionicon-var-android-drawer: "\f310";
|
||||
$ionicon-var-android-dropdown: "\f2de";
|
||||
$ionicon-var-android-earth: "\f2df";
|
||||
$ionicon-var-android-folder: "\f2e0";
|
||||
$ionicon-var-android-forums: "\f2e1";
|
||||
$ionicon-var-android-friends: "\f2e2";
|
||||
$ionicon-var-android-hand: "\f2e3";
|
||||
$ionicon-var-android-image: "\f2e4";
|
||||
$ionicon-var-android-inbox: "\f2e5";
|
||||
$ionicon-var-android-information: "\f2e6";
|
||||
$ionicon-var-android-keypad: "\f2e7";
|
||||
$ionicon-var-android-lightbulb: "\f2e8";
|
||||
$ionicon-var-android-locate: "\f2e9";
|
||||
$ionicon-var-android-location: "\f2ea";
|
||||
$ionicon-var-android-mail: "\f2eb";
|
||||
$ionicon-var-android-microphone: "\f2ec";
|
||||
$ionicon-var-android-mixer: "\f2ed";
|
||||
$ionicon-var-android-more: "\f2ee";
|
||||
$ionicon-var-android-note: "\f2ef";
|
||||
$ionicon-var-android-playstore: "\f2f0";
|
||||
$ionicon-var-android-printer: "\f2f1";
|
||||
$ionicon-var-android-promotion: "\f2f2";
|
||||
$ionicon-var-android-reminder: "\f2f3";
|
||||
$ionicon-var-android-remove: "\f2f4";
|
||||
$ionicon-var-android-search: "\f2f5";
|
||||
$ionicon-var-android-send: "\f2f6";
|
||||
$ionicon-var-android-settings: "\f2f7";
|
||||
$ionicon-var-android-share: "\f2f8";
|
||||
$ionicon-var-android-social: "\f2fa";
|
||||
$ionicon-var-android-social-user: "\f2f9";
|
||||
$ionicon-var-android-sort: "\f2fb";
|
||||
$ionicon-var-android-stair-drawer: "\f311";
|
||||
$ionicon-var-android-star: "\f2fc";
|
||||
$ionicon-var-android-stopwatch: "\f2fd";
|
||||
$ionicon-var-android-storage: "\f2fe";
|
||||
$ionicon-var-android-system-back: "\f2ff";
|
||||
$ionicon-var-android-system-home: "\f300";
|
||||
$ionicon-var-android-system-windows: "\f301";
|
||||
$ionicon-var-android-timer: "\f302";
|
||||
$ionicon-var-android-trash: "\f303";
|
||||
$ionicon-var-android-user-menu: "\f312";
|
||||
$ionicon-var-android-volume: "\f304";
|
||||
$ionicon-var-android-wifi: "\f305";
|
||||
$ionicon-var-aperture: "\f313";
|
||||
$ionicon-var-archive: "\f102";
|
||||
$ionicon-var-arrow-down-a: "\f103";
|
||||
$ionicon-var-arrow-down-b: "\f104";
|
||||
$ionicon-var-arrow-down-c: "\f105";
|
||||
$ionicon-var-arrow-expand: "\f25e";
|
||||
$ionicon-var-arrow-graph-down-left: "\f25f";
|
||||
$ionicon-var-arrow-graph-down-right: "\f260";
|
||||
$ionicon-var-arrow-graph-up-left: "\f261";
|
||||
$ionicon-var-arrow-graph-up-right: "\f262";
|
||||
$ionicon-var-arrow-left-a: "\f106";
|
||||
$ionicon-var-arrow-left-b: "\f107";
|
||||
$ionicon-var-arrow-left-c: "\f108";
|
||||
$ionicon-var-arrow-move: "\f263";
|
||||
$ionicon-var-arrow-resize: "\f264";
|
||||
$ionicon-var-arrow-return-left: "\f265";
|
||||
$ionicon-var-arrow-return-right: "\f266";
|
||||
$ionicon-var-arrow-right-a: "\f109";
|
||||
$ionicon-var-arrow-right-b: "\f10a";
|
||||
$ionicon-var-arrow-right-c: "\f10b";
|
||||
$ionicon-var-arrow-shrink: "\f267";
|
||||
$ionicon-var-arrow-swap: "\f268";
|
||||
$ionicon-var-arrow-up-a: "\f10c";
|
||||
$ionicon-var-arrow-up-b: "\f10d";
|
||||
$ionicon-var-arrow-up-c: "\f10e";
|
||||
$ionicon-var-asterisk: "\f314";
|
||||
$ionicon-var-at: "\f10f";
|
||||
$ionicon-var-bag: "\f110";
|
||||
$ionicon-var-battery-charging: "\f111";
|
||||
$ionicon-var-battery-empty: "\f112";
|
||||
$ionicon-var-battery-full: "\f113";
|
||||
$ionicon-var-battery-half: "\f114";
|
||||
$ionicon-var-battery-low: "\f115";
|
||||
$ionicon-var-beaker: "\f269";
|
||||
$ionicon-var-beer: "\f26a";
|
||||
$ionicon-var-bluetooth: "\f116";
|
||||
$ionicon-var-bonfire: "\f315";
|
||||
$ionicon-var-bookmark: "\f26b";
|
||||
$ionicon-var-briefcase: "\f26c";
|
||||
$ionicon-var-bug: "\f2be";
|
||||
$ionicon-var-calculator: "\f26d";
|
||||
$ionicon-var-calendar: "\f117";
|
||||
$ionicon-var-camera: "\f118";
|
||||
$ionicon-var-card: "\f119";
|
||||
$ionicon-var-cash: "\f316";
|
||||
$ionicon-var-chatbox: "\f11b";
|
||||
$ionicon-var-chatbox-working: "\f11a";
|
||||
$ionicon-var-chatboxes: "\f11c";
|
||||
$ionicon-var-chatbubble: "\f11e";
|
||||
$ionicon-var-chatbubble-working: "\f11d";
|
||||
$ionicon-var-chatbubbles: "\f11f";
|
||||
$ionicon-var-checkmark: "\f122";
|
||||
$ionicon-var-checkmark-circled: "\f120";
|
||||
$ionicon-var-checkmark-round: "\f121";
|
||||
$ionicon-var-chevron-down: "\f123";
|
||||
$ionicon-var-chevron-left: "\f124";
|
||||
$ionicon-var-chevron-right: "\f125";
|
||||
$ionicon-var-chevron-up: "\f126";
|
||||
$ionicon-var-clipboard: "\f127";
|
||||
$ionicon-var-clock: "\f26e";
|
||||
$ionicon-var-close: "\f12a";
|
||||
$ionicon-var-close-circled: "\f128";
|
||||
$ionicon-var-close-round: "\f129";
|
||||
$ionicon-var-closed-captioning: "\f317";
|
||||
$ionicon-var-cloud: "\f12b";
|
||||
$ionicon-var-code: "\f271";
|
||||
$ionicon-var-code-download: "\f26f";
|
||||
$ionicon-var-code-working: "\f270";
|
||||
$ionicon-var-coffee: "\f272";
|
||||
$ionicon-var-compass: "\f273";
|
||||
$ionicon-var-compose: "\f12c";
|
||||
$ionicon-var-connection-bars: "\f274";
|
||||
$ionicon-var-contrast: "\f275";
|
||||
$ionicon-var-cube: "\f318";
|
||||
$ionicon-var-disc: "\f12d";
|
||||
$ionicon-var-document: "\f12f";
|
||||
$ionicon-var-document-text: "\f12e";
|
||||
$ionicon-var-drag: "\f130";
|
||||
$ionicon-var-earth: "\f276";
|
||||
$ionicon-var-edit: "\f2bf";
|
||||
$ionicon-var-egg: "\f277";
|
||||
$ionicon-var-eject: "\f131";
|
||||
$ionicon-var-email: "\f132";
|
||||
$ionicon-var-eye: "\f133";
|
||||
$ionicon-var-eye-disabled: "\f306";
|
||||
$ionicon-var-female: "\f278";
|
||||
$ionicon-var-filing: "\f134";
|
||||
$ionicon-var-film-marker: "\f135";
|
||||
$ionicon-var-fireball: "\f319";
|
||||
$ionicon-var-flag: "\f279";
|
||||
$ionicon-var-flame: "\f31a";
|
||||
$ionicon-var-flash: "\f137";
|
||||
$ionicon-var-flash-off: "\f136";
|
||||
$ionicon-var-flask: "\f138";
|
||||
$ionicon-var-folder: "\f139";
|
||||
$ionicon-var-fork: "\f27a";
|
||||
$ionicon-var-fork-repo: "\f2c0";
|
||||
$ionicon-var-forward: "\f13a";
|
||||
$ionicon-var-funnel: "\f31b";
|
||||
$ionicon-var-game-controller-a: "\f13b";
|
||||
$ionicon-var-game-controller-b: "\f13c";
|
||||
$ionicon-var-gear-a: "\f13d";
|
||||
$ionicon-var-gear-b: "\f13e";
|
||||
$ionicon-var-grid: "\f13f";
|
||||
$ionicon-var-hammer: "\f27b";
|
||||
$ionicon-var-happy: "\f31c";
|
||||
$ionicon-var-headphone: "\f140";
|
||||
$ionicon-var-heart: "\f141";
|
||||
$ionicon-var-heart-broken: "\f31d";
|
||||
$ionicon-var-help: "\f143";
|
||||
$ionicon-var-help-buoy: "\f27c";
|
||||
$ionicon-var-help-circled: "\f142";
|
||||
$ionicon-var-home: "\f144";
|
||||
$ionicon-var-icecream: "\f27d";
|
||||
$ionicon-var-icon-social-google-plus: "\f146";
|
||||
$ionicon-var-icon-social-google-plus-outline: "\f145";
|
||||
$ionicon-var-image: "\f147";
|
||||
$ionicon-var-images: "\f148";
|
||||
$ionicon-var-information: "\f14a";
|
||||
$ionicon-var-information-circled: "\f149";
|
||||
$ionicon-var-ionic: "\f14b";
|
||||
$ionicon-var-ios7-alarm: "\f14d";
|
||||
$ionicon-var-ios7-alarm-outline: "\f14c";
|
||||
$ionicon-var-ios7-albums: "\f14f";
|
||||
$ionicon-var-ios7-albums-outline: "\f14e";
|
||||
$ionicon-var-ios7-americanfootball: "\f31f";
|
||||
$ionicon-var-ios7-americanfootball-outline: "\f31e";
|
||||
$ionicon-var-ios7-analytics: "\f321";
|
||||
$ionicon-var-ios7-analytics-outline: "\f320";
|
||||
$ionicon-var-ios7-arrow-back: "\f150";
|
||||
$ionicon-var-ios7-arrow-down: "\f151";
|
||||
$ionicon-var-ios7-arrow-forward: "\f152";
|
||||
$ionicon-var-ios7-arrow-left: "\f153";
|
||||
$ionicon-var-ios7-arrow-right: "\f154";
|
||||
$ionicon-var-ios7-arrow-thin-down: "\f27e";
|
||||
$ionicon-var-ios7-arrow-thin-left: "\f27f";
|
||||
$ionicon-var-ios7-arrow-thin-right: "\f280";
|
||||
$ionicon-var-ios7-arrow-thin-up: "\f281";
|
||||
$ionicon-var-ios7-arrow-up: "\f155";
|
||||
$ionicon-var-ios7-at: "\f157";
|
||||
$ionicon-var-ios7-at-outline: "\f156";
|
||||
$ionicon-var-ios7-barcode: "\f323";
|
||||
$ionicon-var-ios7-barcode-outline: "\f322";
|
||||
$ionicon-var-ios7-baseball: "\f325";
|
||||
$ionicon-var-ios7-baseball-outline: "\f324";
|
||||
$ionicon-var-ios7-basketball: "\f327";
|
||||
$ionicon-var-ios7-basketball-outline: "\f326";
|
||||
$ionicon-var-ios7-bell: "\f159";
|
||||
$ionicon-var-ios7-bell-outline: "\f158";
|
||||
$ionicon-var-ios7-bolt: "\f15b";
|
||||
$ionicon-var-ios7-bolt-outline: "\f15a";
|
||||
$ionicon-var-ios7-bookmarks: "\f15d";
|
||||
$ionicon-var-ios7-bookmarks-outline: "\f15c";
|
||||
$ionicon-var-ios7-box: "\f15f";
|
||||
$ionicon-var-ios7-box-outline: "\f15e";
|
||||
$ionicon-var-ios7-briefcase: "\f283";
|
||||
$ionicon-var-ios7-briefcase-outline: "\f282";
|
||||
$ionicon-var-ios7-browsers: "\f161";
|
||||
$ionicon-var-ios7-browsers-outline: "\f160";
|
||||
$ionicon-var-ios7-calculator: "\f285";
|
||||
$ionicon-var-ios7-calculator-outline: "\f284";
|
||||
$ionicon-var-ios7-calendar: "\f163";
|
||||
$ionicon-var-ios7-calendar-outline: "\f162";
|
||||
$ionicon-var-ios7-camera: "\f165";
|
||||
$ionicon-var-ios7-camera-outline: "\f164";
|
||||
$ionicon-var-ios7-cart: "\f167";
|
||||
$ionicon-var-ios7-cart-outline: "\f166";
|
||||
$ionicon-var-ios7-chatboxes: "\f169";
|
||||
$ionicon-var-ios7-chatboxes-outline: "\f168";
|
||||
$ionicon-var-ios7-chatbubble: "\f16b";
|
||||
$ionicon-var-ios7-chatbubble-outline: "\f16a";
|
||||
$ionicon-var-ios7-checkmark: "\f16e";
|
||||
$ionicon-var-ios7-checkmark-empty: "\f16c";
|
||||
$ionicon-var-ios7-checkmark-outline: "\f16d";
|
||||
$ionicon-var-ios7-circle-filled: "\f16f";
|
||||
$ionicon-var-ios7-circle-outline: "\f170";
|
||||
$ionicon-var-ios7-clock: "\f172";
|
||||
$ionicon-var-ios7-clock-outline: "\f171";
|
||||
$ionicon-var-ios7-close: "\f2bc";
|
||||
$ionicon-var-ios7-close-empty: "\f2bd";
|
||||
$ionicon-var-ios7-close-outline: "\f2bb";
|
||||
$ionicon-var-ios7-cloud: "\f178";
|
||||
$ionicon-var-ios7-cloud-download: "\f174";
|
||||
$ionicon-var-ios7-cloud-download-outline: "\f173";
|
||||
$ionicon-var-ios7-cloud-outline: "\f175";
|
||||
$ionicon-var-ios7-cloud-upload: "\f177";
|
||||
$ionicon-var-ios7-cloud-upload-outline: "\f176";
|
||||
$ionicon-var-ios7-cloudy: "\f17a";
|
||||
$ionicon-var-ios7-cloudy-night: "\f308";
|
||||
$ionicon-var-ios7-cloudy-night-outline: "\f307";
|
||||
$ionicon-var-ios7-cloudy-outline: "\f179";
|
||||
$ionicon-var-ios7-cog: "\f17c";
|
||||
$ionicon-var-ios7-cog-outline: "\f17b";
|
||||
$ionicon-var-ios7-compose: "\f17e";
|
||||
$ionicon-var-ios7-compose-outline: "\f17d";
|
||||
$ionicon-var-ios7-contact: "\f180";
|
||||
$ionicon-var-ios7-contact-outline: "\f17f";
|
||||
$ionicon-var-ios7-copy: "\f182";
|
||||
$ionicon-var-ios7-copy-outline: "\f181";
|
||||
$ionicon-var-ios7-download: "\f184";
|
||||
$ionicon-var-ios7-download-outline: "\f183";
|
||||
$ionicon-var-ios7-drag: "\f185";
|
||||
$ionicon-var-ios7-email: "\f187";
|
||||
$ionicon-var-ios7-email-outline: "\f186";
|
||||
$ionicon-var-ios7-expand: "\f30d";
|
||||
$ionicon-var-ios7-eye: "\f189";
|
||||
$ionicon-var-ios7-eye-outline: "\f188";
|
||||
$ionicon-var-ios7-fastforward: "\f18b";
|
||||
$ionicon-var-ios7-fastforward-outline: "\f18a";
|
||||
$ionicon-var-ios7-filing: "\f18d";
|
||||
$ionicon-var-ios7-filing-outline: "\f18c";
|
||||
$ionicon-var-ios7-film: "\f18f";
|
||||
$ionicon-var-ios7-film-outline: "\f18e";
|
||||
$ionicon-var-ios7-flag: "\f191";
|
||||
$ionicon-var-ios7-flag-outline: "\f190";
|
||||
$ionicon-var-ios7-folder: "\f193";
|
||||
$ionicon-var-ios7-folder-outline: "\f192";
|
||||
$ionicon-var-ios7-football: "\f329";
|
||||
$ionicon-var-ios7-football-outline: "\f328";
|
||||
$ionicon-var-ios7-gear: "\f195";
|
||||
$ionicon-var-ios7-gear-outline: "\f194";
|
||||
$ionicon-var-ios7-glasses: "\f197";
|
||||
$ionicon-var-ios7-glasses-outline: "\f196";
|
||||
$ionicon-var-ios7-heart: "\f199";
|
||||
$ionicon-var-ios7-heart-outline: "\f198";
|
||||
$ionicon-var-ios7-help: "\f19c";
|
||||
$ionicon-var-ios7-help-empty: "\f19a";
|
||||
$ionicon-var-ios7-help-outline: "\f19b";
|
||||
$ionicon-var-ios7-home: "\f32b";
|
||||
$ionicon-var-ios7-home-outline: "\f32a";
|
||||
$ionicon-var-ios7-infinite: "\f19e";
|
||||
$ionicon-var-ios7-infinite-outline: "\f19d";
|
||||
$ionicon-var-ios7-information: "\f1a1";
|
||||
$ionicon-var-ios7-information-empty: "\f19f";
|
||||
$ionicon-var-ios7-information-outline: "\f1a0";
|
||||
$ionicon-var-ios7-ionic-outline: "\f1a2";
|
||||
$ionicon-var-ios7-keypad: "\f1a4";
|
||||
$ionicon-var-ios7-keypad-outline: "\f1a3";
|
||||
$ionicon-var-ios7-lightbulb: "\f287";
|
||||
$ionicon-var-ios7-lightbulb-outline: "\f286";
|
||||
$ionicon-var-ios7-location: "\f1a6";
|
||||
$ionicon-var-ios7-location-outline: "\f1a5";
|
||||
$ionicon-var-ios7-locked: "\f1a8";
|
||||
$ionicon-var-ios7-locked-outline: "\f1a7";
|
||||
$ionicon-var-ios7-loop: "\f32d";
|
||||
$ionicon-var-ios7-loop-strong: "\f32c";
|
||||
$ionicon-var-ios7-medkit: "\f289";
|
||||
$ionicon-var-ios7-medkit-outline: "\f288";
|
||||
$ionicon-var-ios7-mic: "\f1ab";
|
||||
$ionicon-var-ios7-mic-off: "\f1a9";
|
||||
$ionicon-var-ios7-mic-outline: "\f1aa";
|
||||
$ionicon-var-ios7-minus: "\f1ae";
|
||||
$ionicon-var-ios7-minus-empty: "\f1ac";
|
||||
$ionicon-var-ios7-minus-outline: "\f1ad";
|
||||
$ionicon-var-ios7-monitor: "\f1b0";
|
||||
$ionicon-var-ios7-monitor-outline: "\f1af";
|
||||
$ionicon-var-ios7-moon: "\f1b2";
|
||||
$ionicon-var-ios7-moon-outline: "\f1b1";
|
||||
$ionicon-var-ios7-more: "\f1b4";
|
||||
$ionicon-var-ios7-more-outline: "\f1b3";
|
||||
$ionicon-var-ios7-musical-note: "\f1b5";
|
||||
$ionicon-var-ios7-musical-notes: "\f1b6";
|
||||
$ionicon-var-ios7-navigate: "\f1b8";
|
||||
$ionicon-var-ios7-navigate-outline: "\f1b7";
|
||||
$ionicon-var-ios7-paper: "\f32f";
|
||||
$ionicon-var-ios7-paper-outline: "\f32e";
|
||||
$ionicon-var-ios7-paperplane: "\f1ba";
|
||||
$ionicon-var-ios7-paperplane-outline: "\f1b9";
|
||||
$ionicon-var-ios7-partlysunny: "\f1bc";
|
||||
$ionicon-var-ios7-partlysunny-outline: "\f1bb";
|
||||
$ionicon-var-ios7-pause: "\f1be";
|
||||
$ionicon-var-ios7-pause-outline: "\f1bd";
|
||||
$ionicon-var-ios7-paw: "\f331";
|
||||
$ionicon-var-ios7-paw-outline: "\f330";
|
||||
$ionicon-var-ios7-people: "\f1c0";
|
||||
$ionicon-var-ios7-people-outline: "\f1bf";
|
||||
$ionicon-var-ios7-person: "\f1c2";
|
||||
$ionicon-var-ios7-person-outline: "\f1c1";
|
||||
$ionicon-var-ios7-personadd: "\f1c4";
|
||||
$ionicon-var-ios7-personadd-outline: "\f1c3";
|
||||
$ionicon-var-ios7-photos: "\f1c6";
|
||||
$ionicon-var-ios7-photos-outline: "\f1c5";
|
||||
$ionicon-var-ios7-pie: "\f28b";
|
||||
$ionicon-var-ios7-pie-outline: "\f28a";
|
||||
$ionicon-var-ios7-play: "\f1c8";
|
||||
$ionicon-var-ios7-play-outline: "\f1c7";
|
||||
$ionicon-var-ios7-plus: "\f1cb";
|
||||
$ionicon-var-ios7-plus-empty: "\f1c9";
|
||||
$ionicon-var-ios7-plus-outline: "\f1ca";
|
||||
$ionicon-var-ios7-pricetag: "\f28d";
|
||||
$ionicon-var-ios7-pricetag-outline: "\f28c";
|
||||
$ionicon-var-ios7-pricetags: "\f333";
|
||||
$ionicon-var-ios7-pricetags-outline: "\f332";
|
||||
$ionicon-var-ios7-printer: "\f1cd";
|
||||
$ionicon-var-ios7-printer-outline: "\f1cc";
|
||||
$ionicon-var-ios7-pulse: "\f335";
|
||||
$ionicon-var-ios7-pulse-strong: "\f334";
|
||||
$ionicon-var-ios7-rainy: "\f1cf";
|
||||
$ionicon-var-ios7-rainy-outline: "\f1ce";
|
||||
$ionicon-var-ios7-recording: "\f1d1";
|
||||
$ionicon-var-ios7-recording-outline: "\f1d0";
|
||||
$ionicon-var-ios7-redo: "\f1d3";
|
||||
$ionicon-var-ios7-redo-outline: "\f1d2";
|
||||
$ionicon-var-ios7-refresh: "\f1d6";
|
||||
$ionicon-var-ios7-refresh-empty: "\f1d4";
|
||||
$ionicon-var-ios7-refresh-outline: "\f1d5";
|
||||
$ionicon-var-ios7-reload: "\f28e";
|
||||
$ionicon-var-ios7-reverse-camera: "\f337";
|
||||
$ionicon-var-ios7-reverse-camera-outline: "\f336";
|
||||
$ionicon-var-ios7-rewind: "\f1d8";
|
||||
$ionicon-var-ios7-rewind-outline: "\f1d7";
|
||||
$ionicon-var-ios7-search: "\f1da";
|
||||
$ionicon-var-ios7-search-strong: "\f1d9";
|
||||
$ionicon-var-ios7-settings: "\f339";
|
||||
$ionicon-var-ios7-settings-strong: "\f338";
|
||||
$ionicon-var-ios7-shrink: "\f30e";
|
||||
$ionicon-var-ios7-skipbackward: "\f1dc";
|
||||
$ionicon-var-ios7-skipbackward-outline: "\f1db";
|
||||
$ionicon-var-ios7-skipforward: "\f1de";
|
||||
$ionicon-var-ios7-skipforward-outline: "\f1dd";
|
||||
$ionicon-var-ios7-snowy: "\f309";
|
||||
$ionicon-var-ios7-speedometer: "\f290";
|
||||
$ionicon-var-ios7-speedometer-outline: "\f28f";
|
||||
$ionicon-var-ios7-star: "\f1e0";
|
||||
$ionicon-var-ios7-star-half: "\f33a";
|
||||
$ionicon-var-ios7-star-outline: "\f1df";
|
||||
$ionicon-var-ios7-stopwatch: "\f1e2";
|
||||
$ionicon-var-ios7-stopwatch-outline: "\f1e1";
|
||||
$ionicon-var-ios7-sunny: "\f1e4";
|
||||
$ionicon-var-ios7-sunny-outline: "\f1e3";
|
||||
$ionicon-var-ios7-telephone: "\f1e6";
|
||||
$ionicon-var-ios7-telephone-outline: "\f1e5";
|
||||
$ionicon-var-ios7-tennisball: "\f33c";
|
||||
$ionicon-var-ios7-tennisball-outline: "\f33b";
|
||||
$ionicon-var-ios7-thunderstorm: "\f1e8";
|
||||
$ionicon-var-ios7-thunderstorm-outline: "\f1e7";
|
||||
$ionicon-var-ios7-time: "\f292";
|
||||
$ionicon-var-ios7-time-outline: "\f291";
|
||||
$ionicon-var-ios7-timer: "\f1ea";
|
||||
$ionicon-var-ios7-timer-outline: "\f1e9";
|
||||
$ionicon-var-ios7-toggle: "\f33e";
|
||||
$ionicon-var-ios7-toggle-outline: "\f33d";
|
||||
$ionicon-var-ios7-trash: "\f1ec";
|
||||
$ionicon-var-ios7-trash-outline: "\f1eb";
|
||||
$ionicon-var-ios7-undo: "\f1ee";
|
||||
$ionicon-var-ios7-undo-outline: "\f1ed";
|
||||
$ionicon-var-ios7-unlocked: "\f1f0";
|
||||
$ionicon-var-ios7-unlocked-outline: "\f1ef";
|
||||
$ionicon-var-ios7-upload: "\f1f2";
|
||||
$ionicon-var-ios7-upload-outline: "\f1f1";
|
||||
$ionicon-var-ios7-videocam: "\f1f4";
|
||||
$ionicon-var-ios7-videocam-outline: "\f1f3";
|
||||
$ionicon-var-ios7-volume-high: "\f1f5";
|
||||
$ionicon-var-ios7-volume-low: "\f1f6";
|
||||
$ionicon-var-ios7-wineglass: "\f294";
|
||||
$ionicon-var-ios7-wineglass-outline: "\f293";
|
||||
$ionicon-var-ios7-world: "\f1f8";
|
||||
$ionicon-var-ios7-world-outline: "\f1f7";
|
||||
$ionicon-var-ipad: "\f1f9";
|
||||
$ionicon-var-iphone: "\f1fa";
|
||||
$ionicon-var-ipod: "\f1fb";
|
||||
$ionicon-var-jet: "\f295";
|
||||
$ionicon-var-key: "\f296";
|
||||
$ionicon-var-knife: "\f297";
|
||||
$ionicon-var-laptop: "\f1fc";
|
||||
$ionicon-var-leaf: "\f1fd";
|
||||
$ionicon-var-levels: "\f298";
|
||||
$ionicon-var-lightbulb: "\f299";
|
||||
$ionicon-var-link: "\f1fe";
|
||||
$ionicon-var-load-a: "\f29a";
|
||||
$ionicon-var-load-b: "\f29b";
|
||||
$ionicon-var-load-c: "\f29c";
|
||||
$ionicon-var-load-d: "\f29d";
|
||||
$ionicon-var-location: "\f1ff";
|
||||
$ionicon-var-locked: "\f200";
|
||||
$ionicon-var-log-in: "\f29e";
|
||||
$ionicon-var-log-out: "\f29f";
|
||||
$ionicon-var-loop: "\f201";
|
||||
$ionicon-var-magnet: "\f2a0";
|
||||
$ionicon-var-male: "\f2a1";
|
||||
$ionicon-var-man: "\f202";
|
||||
$ionicon-var-map: "\f203";
|
||||
$ionicon-var-medkit: "\f2a2";
|
||||
$ionicon-var-merge: "\f33f";
|
||||
$ionicon-var-mic-a: "\f204";
|
||||
$ionicon-var-mic-b: "\f205";
|
||||
$ionicon-var-mic-c: "\f206";
|
||||
$ionicon-var-minus: "\f209";
|
||||
$ionicon-var-minus-circled: "\f207";
|
||||
$ionicon-var-minus-round: "\f208";
|
||||
$ionicon-var-model-s: "\f2c1";
|
||||
$ionicon-var-monitor: "\f20a";
|
||||
$ionicon-var-more: "\f20b";
|
||||
$ionicon-var-mouse: "\f340";
|
||||
$ionicon-var-music-note: "\f20c";
|
||||
$ionicon-var-navicon: "\f20e";
|
||||
$ionicon-var-navicon-round: "\f20d";
|
||||
$ionicon-var-navigate: "\f2a3";
|
||||
$ionicon-var-network: "\f341";
|
||||
$ionicon-var-no-smoking: "\f2c2";
|
||||
$ionicon-var-nuclear: "\f2a4";
|
||||
$ionicon-var-outlet: "\f342";
|
||||
$ionicon-var-paper-airplane: "\f2c3";
|
||||
$ionicon-var-paperclip: "\f20f";
|
||||
$ionicon-var-pause: "\f210";
|
||||
$ionicon-var-person: "\f213";
|
||||
$ionicon-var-person-add: "\f211";
|
||||
$ionicon-var-person-stalker: "\f212";
|
||||
$ionicon-var-pie-graph: "\f2a5";
|
||||
$ionicon-var-pin: "\f2a6";
|
||||
$ionicon-var-pinpoint: "\f2a7";
|
||||
$ionicon-var-pizza: "\f2a8";
|
||||
$ionicon-var-plane: "\f214";
|
||||
$ionicon-var-planet: "\f343";
|
||||
$ionicon-var-play: "\f215";
|
||||
$ionicon-var-playstation: "\f30a";
|
||||
$ionicon-var-plus: "\f218";
|
||||
$ionicon-var-plus-circled: "\f216";
|
||||
$ionicon-var-plus-round: "\f217";
|
||||
$ionicon-var-podium: "\f344";
|
||||
$ionicon-var-pound: "\f219";
|
||||
$ionicon-var-power: "\f2a9";
|
||||
$ionicon-var-pricetag: "\f2aa";
|
||||
$ionicon-var-pricetags: "\f2ab";
|
||||
$ionicon-var-printer: "\f21a";
|
||||
$ionicon-var-pull-request: "\f345";
|
||||
$ionicon-var-qr-scanner: "\f346";
|
||||
$ionicon-var-quote: "\f347";
|
||||
$ionicon-var-radio-waves: "\f2ac";
|
||||
$ionicon-var-record: "\f21b";
|
||||
$ionicon-var-refresh: "\f21c";
|
||||
$ionicon-var-reply: "\f21e";
|
||||
$ionicon-var-reply-all: "\f21d";
|
||||
$ionicon-var-ribbon-a: "\f348";
|
||||
$ionicon-var-ribbon-b: "\f349";
|
||||
$ionicon-var-sad: "\f34a";
|
||||
$ionicon-var-scissors: "\f34b";
|
||||
$ionicon-var-search: "\f21f";
|
||||
$ionicon-var-settings: "\f2ad";
|
||||
$ionicon-var-share: "\f220";
|
||||
$ionicon-var-shuffle: "\f221";
|
||||
$ionicon-var-skip-backward: "\f222";
|
||||
$ionicon-var-skip-forward: "\f223";
|
||||
$ionicon-var-social-android: "\f225";
|
||||
$ionicon-var-social-android-outline: "\f224";
|
||||
$ionicon-var-social-apple: "\f227";
|
||||
$ionicon-var-social-apple-outline: "\f226";
|
||||
$ionicon-var-social-bitcoin: "\f2af";
|
||||
$ionicon-var-social-bitcoin-outline: "\f2ae";
|
||||
$ionicon-var-social-buffer: "\f229";
|
||||
$ionicon-var-social-buffer-outline: "\f228";
|
||||
$ionicon-var-social-designernews: "\f22b";
|
||||
$ionicon-var-social-designernews-outline: "\f22a";
|
||||
$ionicon-var-social-dribbble: "\f22d";
|
||||
$ionicon-var-social-dribbble-outline: "\f22c";
|
||||
$ionicon-var-social-dropbox: "\f22f";
|
||||
$ionicon-var-social-dropbox-outline: "\f22e";
|
||||
$ionicon-var-social-facebook: "\f231";
|
||||
$ionicon-var-social-facebook-outline: "\f230";
|
||||
$ionicon-var-social-foursquare: "\f34d";
|
||||
$ionicon-var-social-foursquare-outline: "\f34c";
|
||||
$ionicon-var-social-freebsd-devil: "\f2c4";
|
||||
$ionicon-var-social-github: "\f233";
|
||||
$ionicon-var-social-github-outline: "\f232";
|
||||
$ionicon-var-social-google: "\f34f";
|
||||
$ionicon-var-social-google-outline: "\f34e";
|
||||
$ionicon-var-social-googleplus: "\f235";
|
||||
$ionicon-var-social-googleplus-outline: "\f234";
|
||||
$ionicon-var-social-hackernews: "\f237";
|
||||
$ionicon-var-social-hackernews-outline: "\f236";
|
||||
$ionicon-var-social-instagram: "\f351";
|
||||
$ionicon-var-social-instagram-outline: "\f350";
|
||||
$ionicon-var-social-linkedin: "\f239";
|
||||
$ionicon-var-social-linkedin-outline: "\f238";
|
||||
$ionicon-var-social-pinterest: "\f2b1";
|
||||
$ionicon-var-social-pinterest-outline: "\f2b0";
|
||||
$ionicon-var-social-reddit: "\f23b";
|
||||
$ionicon-var-social-reddit-outline: "\f23a";
|
||||
$ionicon-var-social-rss: "\f23d";
|
||||
$ionicon-var-social-rss-outline: "\f23c";
|
||||
$ionicon-var-social-skype: "\f23f";
|
||||
$ionicon-var-social-skype-outline: "\f23e";
|
||||
$ionicon-var-social-tumblr: "\f241";
|
||||
$ionicon-var-social-tumblr-outline: "\f240";
|
||||
$ionicon-var-social-tux: "\f2c5";
|
||||
$ionicon-var-social-twitter: "\f243";
|
||||
$ionicon-var-social-twitter-outline: "\f242";
|
||||
$ionicon-var-social-usd: "\f353";
|
||||
$ionicon-var-social-usd-outline: "\f352";
|
||||
$ionicon-var-social-vimeo: "\f245";
|
||||
$ionicon-var-social-vimeo-outline: "\f244";
|
||||
$ionicon-var-social-windows: "\f247";
|
||||
$ionicon-var-social-windows-outline: "\f246";
|
||||
$ionicon-var-social-wordpress: "\f249";
|
||||
$ionicon-var-social-wordpress-outline: "\f248";
|
||||
$ionicon-var-social-yahoo: "\f24b";
|
||||
$ionicon-var-social-yahoo-outline: "\f24a";
|
||||
$ionicon-var-social-youtube: "\f24d";
|
||||
$ionicon-var-social-youtube-outline: "\f24c";
|
||||
$ionicon-var-speakerphone: "\f2b2";
|
||||
$ionicon-var-speedometer: "\f2b3";
|
||||
$ionicon-var-spoon: "\f2b4";
|
||||
$ionicon-var-star: "\f24e";
|
||||
$ionicon-var-stats-bars: "\f2b5";
|
||||
$ionicon-var-steam: "\f30b";
|
||||
$ionicon-var-stop: "\f24f";
|
||||
$ionicon-var-thermometer: "\f2b6";
|
||||
$ionicon-var-thumbsdown: "\f250";
|
||||
$ionicon-var-thumbsup: "\f251";
|
||||
$ionicon-var-toggle: "\f355";
|
||||
$ionicon-var-toggle-filled: "\f354";
|
||||
$ionicon-var-trash-a: "\f252";
|
||||
$ionicon-var-trash-b: "\f253";
|
||||
$ionicon-var-trophy: "\f356";
|
||||
$ionicon-var-umbrella: "\f2b7";
|
||||
$ionicon-var-university: "\f357";
|
||||
$ionicon-var-unlocked: "\f254";
|
||||
$ionicon-var-upload: "\f255";
|
||||
$ionicon-var-usb: "\f2b8";
|
||||
$ionicon-var-videocamera: "\f256";
|
||||
$ionicon-var-volume-high: "\f257";
|
||||
$ionicon-var-volume-low: "\f258";
|
||||
$ionicon-var-volume-medium: "\f259";
|
||||
$ionicon-var-volume-mute: "\f25a";
|
||||
$ionicon-var-wand: "\f358";
|
||||
$ionicon-var-waterdrop: "\f25b";
|
||||
$ionicon-var-wifi: "\f25c";
|
||||
$ionicon-var-wineglass: "\f2b9";
|
||||
$ionicon-var-woman: "\f25d";
|
||||
$ionicon-var-wrench: "\f2ba";
|
||||
$ionicon-var-xbox: "\f30c";
|
11
www/lib/ionic/scss/ionicons/ionicons.scss
Normal file
11
www/lib/ionic/scss/ionicons/ionicons.scss
Normal file
|
@ -0,0 +1,11 @@
|
|||
@import "ionicons-variables";
|
||||
/*!
|
||||
Ionicons, v1.5.2
|
||||
Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
|
||||
https://twitter.com/benjsperry https://twitter.com/ionicframework
|
||||
MIT License: https://github.com/driftyco/ionicons
|
||||
*/
|
||||
|
||||
@import "ionicons-font";
|
||||
@import "ionicons-animation";
|
||||
@import "ionicons-icons";
|
6
www/lib/ionic/version.json
Normal file
6
www/lib/ionic/version.json
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"version": "1.0.0-beta.14",
|
||||
"codename": "magnesium-mongoose",
|
||||
"date": "2014-12-15",
|
||||
"time": "20:15:38"
|
||||
}
|
5
www/templates/browse.html
Normal file
5
www/templates/browse.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<ion-view view-title="Browse">
|
||||
<ion-content>
|
||||
<h1>Browse</h1>
|
||||
</ion-content>
|
||||
</ion-view>
|
51
www/templates/grades.html
Normal file
51
www/templates/grades.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
<ion-view view-title="גיליון ציונים" >
|
||||
<ion-content>
|
||||
<div class="page-content">
|
||||
<h1><i class="icon ion-clipboard"></i> גיליון ציונים</h1>
|
||||
|
||||
<!-- <div class="list card" ng-repeat="grade in grades" >
|
||||
|
||||
<div class="item">
|
||||
<h2>{{ grade.subject }}</h2>
|
||||
<p>{{ grade.credits }} נק"ז</p>
|
||||
</div>
|
||||
|
||||
<div class="item item-body">
|
||||
{{ grade.final_grade}}
|
||||
<br> שנה ציון לבדיקת הממוצע: <input type="number" name="quantity" min="55" max="100" ng-bind="grade.final_grade">
|
||||
</div>
|
||||
|
||||
</div> -->
|
||||
|
||||
|
||||
<!-- <div class="list" >
|
||||
<div class="item item-avatar-right" ng-repeat="grade in grades">
|
||||
<img ng-src="{{ getMedal(grade.final_grade) }}" alt="">
|
||||
<h4>{{ grade.subject }}</h4><i>{{ grade.credits }} נק"ז - מועד {{ grade.moed }}</i> : {{ grade.final_grade}}
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<div class="list card" ng-repeat="grade in grades | orderBy:['-year','semester']">
|
||||
|
||||
<div class="item item-avatar">
|
||||
<h2>{{grade.subject}}</h2>
|
||||
<p>{{ grade.credits }} נק"ז</p>
|
||||
</div>
|
||||
|
||||
<div class="item tabs tabs-secondary item-divider" ng-repeat="test in grade.tests">
|
||||
<p class="tab-item" href="#" >
|
||||
מועד {{test.moed}}' : {{test.final_grade}}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
79
www/templates/home.html
Normal file
79
www/templates/home.html
Normal file
|
@ -0,0 +1,79 @@
|
|||
<ion-view view-title="עמוד הבית" >
|
||||
<ion-content>
|
||||
<div class="page-content">
|
||||
<ion-refresher
|
||||
pulling-text="משוך לעדכון..."
|
||||
on-refresh="update()">
|
||||
</ion-refresher>
|
||||
|
||||
<center>
|
||||
<div style="width: 30%; height: 30%">
|
||||
<img src="https://camo.githubusercontent.com/796c0e156ff48c9985296e03d55017f8adefd154/687474703a2f2f6c6972616e62672e6769746875622e696f2f4a63654d616e616765722f6173736574732f696d616765732f6c6f676f2e706e67" alt="" style="width: 100%">
|
||||
</div>
|
||||
</center>
|
||||
|
||||
|
||||
<div class="list card" ng-if="!isLoggedIn()">
|
||||
<!-- <a href="#" class="item item-icon-left">
|
||||
<i class="icon ion-alert"></i>
|
||||
<marquee behavior="slide" direction="right">
|
||||
על מנת להנות מכל האפשרויות העומדות לרשותך, אנא התחבר עם שם המשתמש והסיסמא של המכללה
|
||||
</marquee>
|
||||
</a> -->
|
||||
<a ng-click="login()" class="item item-icon-right">
|
||||
<i class="icon ion-wifi"></i>
|
||||
לחץ כאן ע"מ להתחבר
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="list card" ng-if="isLoggedIn()">
|
||||
<a ng-click="goToNotes()" class="item item-icon-right" ng-if="newNotes">
|
||||
<i class="icon ion-paper-airplane"></i>
|
||||
ישנה הודעה חדשה מהמכללה
|
||||
</a>
|
||||
|
||||
<a ng-click="goToGrades()" class="item item-icon-right" ng-if="newGrades">
|
||||
<i class="icon ion-university"></i>
|
||||
יש עדכון בגיליון ציונים
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="list card" ng-if="isLoggedIn()">
|
||||
<div ng-init="getInfo()">
|
||||
|
||||
<a href="#" class="item item-icon-right" >
|
||||
<i class="icon ion-person"></i>
|
||||
{{ userData.user_fullName}}
|
||||
</a>
|
||||
|
||||
<a href="#" class="item item-icon-right">
|
||||
<i class="icon ion-ios7-telephone"></i>
|
||||
{{userData.user_phone}}
|
||||
</a>
|
||||
|
||||
<a href="#" class="item item-icon-right">
|
||||
<i class="icon ion-email"></i>
|
||||
{{userData.user_email}}
|
||||
</a>
|
||||
|
||||
<a ng-click="logout()" class="item item-icon-right">
|
||||
<i class="icon ion-power"></i>
|
||||
התנתק
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
version: {{version}}
|
||||
|
||||
</ion-content>
|
||||
</ion-view>
|
24
www/templates/jceNews.html
Normal file
24
www/templates/jceNews.html
Normal file
|
@ -0,0 +1,24 @@
|
|||
<ion-view view-title="הודעות" >
|
||||
<ion-content>
|
||||
<div class="page-content">
|
||||
<h1><i class="icon ion-paper-airplane"></i> הודעות</h1>
|
||||
|
||||
<div class="list card" ng-repeat="news in newss" >
|
||||
|
||||
<div class="item item-avatar">
|
||||
<img ng-src="http://media.nirshamim.co.il/images_up/upload_Supplier_Big_Pictureazrieli_161.logo.gif">
|
||||
<h2>{{ news.title }}</h2>
|
||||
<p>{{ news.date }}</p>
|
||||
</div>
|
||||
|
||||
<div class="item item-body">
|
||||
<div ng-bind-html="news.text"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
25
www/templates/login.html
Normal file
25
www/templates/login.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
<ion-modal-view>
|
||||
<ion-header-bar>
|
||||
<h1 class="title">התחבר</h1>
|
||||
<div class="buttons">
|
||||
<button class="button button-clear" ng-click="closeLogin()">סגור</button>
|
||||
</div>
|
||||
</ion-header-bar>
|
||||
<ion-content>
|
||||
<form ng-submit="doLogin()">
|
||||
<div class="list">
|
||||
<label class="item item-input">
|
||||
<span class="input-label">שם משתמש</span>
|
||||
<input type="text" ng-model="loginData.username">
|
||||
</label>
|
||||
<label class="item item-input">
|
||||
<span class="input-label">סיסמה</span>
|
||||
<input type="password" ng-model="loginData.password">
|
||||
</label>
|
||||
<label class="item">
|
||||
<button class="button button-block button-positive" type="submit">התחבר</button>
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
31
www/templates/loginPage.html
Normal file
31
www/templates/loginPage.html
Normal file
|
@ -0,0 +1,31 @@
|
|||
<div >
|
||||
<div class="page-content">
|
||||
<ion-header-bar>
|
||||
<h1 class="title">התחבר</h1>
|
||||
<div class="buttons">
|
||||
<button class="button button-clear" ng-click="closeApp()">סגור</button>
|
||||
</div>
|
||||
</ion-header-bar>
|
||||
<ion-content>
|
||||
<center>
|
||||
<div style="width: 30%; height: 30%">
|
||||
<img src="https://camo.githubusercontent.com/796c0e156ff48c9985296e03d55017f8adefd154/687474703a2f2f6c6972616e62672e6769746875622e696f2f4a63654d616e616765722f6173736574732f696d616765732f6c6f676f2e706e67" alt="" style="width: 100%">
|
||||
</div>
|
||||
</center>
|
||||
<form ng-submit="doLogin()">
|
||||
<div class="list">
|
||||
<label class="item item-input">
|
||||
<span class="input-label">שם משתמש</span>
|
||||
<input type="text" ng-model="loginData.username">
|
||||
</label>
|
||||
<label class="item item-input">
|
||||
<span class="input-label">סיסמה</span>
|
||||
<input type="password" ng-model="loginData.password">
|
||||
</label>
|
||||
<label class="item">
|
||||
<button class="button button-block button-positive" type="submit">התחבר</button>
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
51
www/templates/menu.html
Normal file
51
www/templates/menu.html
Normal file
|
@ -0,0 +1,51 @@
|
|||
<ion-side-menus enable-menu-with-back-views="false">
|
||||
<ion-side-menu-content>
|
||||
<ion-nav-bar class="bar-stable bar-assertive">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
|
||||
<ion-nav-buttons side="left">
|
||||
<button class="button button-icon button-clear ion-navicon" menu-toggle="left">
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-nav-view name="menuContent"></ion-nav-view>
|
||||
</ion-side-menu-content>
|
||||
|
||||
<ion-side-menu side="left">
|
||||
<ion-header-bar class="bar-stable bar-dark">
|
||||
<h1 class="title">תפריט</h1>
|
||||
</ion-header-bar>
|
||||
<ion-content>
|
||||
|
||||
|
||||
<ion-list >
|
||||
<ion-item nav-clear menu-close ng-click="login()" ng-if="!isLoggedIn()">
|
||||
התחבר
|
||||
</ion-item>
|
||||
<ion-item nav-clear menu-close href="#/app/home">
|
||||
עמוד הבית
|
||||
</ion-item>
|
||||
<ion-item nav-clear menu-close href="#/app/playlists">
|
||||
הודעות אגודת הסטודנטים
|
||||
</ion-item>
|
||||
<ion-item nav-clear menu-close href="#/app/jcenews" ng-if="isLoggedIn()">
|
||||
הודעות
|
||||
</ion-item>
|
||||
<ion-item nav-clear menu-close href="#/app/grades" ng-if="isLoggedIn()">
|
||||
גיליון ציונים
|
||||
</ion-item>
|
||||
<ion-item nav-clear menu-close href="#/app/playlists" ng-if="isLoggedIn()">
|
||||
מערכת שעות
|
||||
</ion-item>
|
||||
<ion-item nav-clear menu-close ng-click="logout()" ng-if="isLoggedIn()">
|
||||
התנתק
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
|
||||
|
||||
|
||||
|
||||
</ion-content>
|
||||
</ion-side-menu>
|
||||
</ion-side-menus>
|
5
www/templates/playlist.html
Normal file
5
www/templates/playlist.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<ion-view view-title="Playlist">
|
||||
<ion-content>
|
||||
<h1>BETA</h1>
|
||||
</ion-content>
|
||||
</ion-view>
|
5
www/templates/playlists.html
Normal file
5
www/templates/playlists.html
Normal file
|
@ -0,0 +1,5 @@
|
|||
<ion-view view-title="Playlists">
|
||||
<ion-content>
|
||||
<h1>BETA</h1>
|
||||
</ion-content>
|
||||
</ion-view>
|
Loading…
Reference in a new issue