ionic-Material Design , Codecanyon

This commit is contained in:
Carsten Hilmer
2016-08-22 12:59:56 +02:00
parent 7cd84fe179
commit 92601ec169
1440 changed files with 482763 additions and 0 deletions

BIN
IonicMaterialDesign/www/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,66 @@
[
{
"title": "Plain Shirt",
"detail": "A shirt with plain design.",
"fullDetail": "Plain design shirt. Created by material team.",
"img": "img/shirt_01.png",
"price": "590",
"promotionPrice": "59"
},
{
"title": "Spring Shirt",
"detail": "Made by high quality silk",
"fullDetail": "Plain design shirt. Created by material team. Made by high quality material.",
"img": "img/shirt_05.png",
"price": "800",
"promotionPrice": "80"
},
{
"title": "Plain Shirt",
"detail": "A shirt with plain design.",
"fullDetail": "Plain design shirt made by material.",
"img": "img/shirt_03.png",
"price": "450",
"promotionPrice": "45"
},
{
"title": "Spring Shirt",
"detail": "Made by quality silk",
"fullDetail": "Plain design shirt. Created by material team.",
"img": "img/shirt_04.png",
"price": "800",
"promotionPrice": "80"
},
{
"title": "Spring Shirt",
"detail": "Made by quality silk",
"fullDetail": "Plain design shirt made by high quality material.",
"img": "img/shirt_05.png",
"price": "990",
"promotionPrice": "99"
},
{
"title": "Plain Shirt",
"detail": "A shirt with plain design.",
"fullDetail": "Plain design shirt made by high quality material.",
"img": "img/shirt_02.png",
"price": "100",
"promotionPrice": "10"
},
{
"title": "Plain Shirt",
"detail": "A shirt with plain design.",
"fullDetail": "Plain design shirt made by high quality material.",
"img": "img/shirt_06.png",
"price": "870",
"promotionPrice": "87"
},
{
"title": "Plain Shirt",
"detail": "A shirt with plain design.",
"fullDetail": "Plain design shirt made by high quality material.",
"img": "img/shirt_01.png",
"price": "300",
"promotionPrice": "30"
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

BIN
IonicMaterialDesign/www/img/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 875 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><g><path fill="#7d7d7d" d="M40,4H8C5.8,4,4,5.8,4,8l0,32c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V8C44,5.8,42.2,4,40,4z M38,8v6h-4c-1.1,0-2,0.9-2,2v4h6v6h-6v14h-6V26h-4v-6h4v-5c0-3.9,3.1-7,7-7H38z"/></g><g><rect fill="none" width="48" height="48"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 403 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M0 0h24v24h-24z" fill="none"/>
<path d="M12 21.35l-1.45-1.32c-5.15-4.67-8.55-7.75-8.55-11.53 0-3.08 2.42-5.5 5.5-5.5 1.74 0 3.41.81 4.5 2.09 1.09-1.28 2.76-2.09 4.5-2.09 3.08 0 5.5 2.42 5.5 5.5 0 3.78-3.4 6.86-8.55 11.54l-1.45 1.31z"/>
</svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><path fill="#7d7d7d" d="M40,8H8c-2.2,0-4,1.8-4,4l0,24c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V12C44,9.8,42.2,8,40,8z M40,16L24,26L8,16v-4l16,10l16-10V16z"/><rect fill="none" width="48" height="48"/></g></g></svg>

After

Width:  |  Height:  |  Size: 351 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
<path d="M0 0h18v18h-18z" fill="none"/>
<path d="M2 13.5h14v-1.5h-14v1.5zm0-4h14v-1.5h-14v1.5zm0-5.5v1.5h14v-1.5h-14z"/>
</svg>

After

Width:  |  Height:  |  Size: 220 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><path fill="#7d7d7d" d="M40,4H8C5.8,4,4,5.8,4,8l0,36l8-8h28c2.2,0,4-1.8,4-4V8C44,5.8,42.2,4,40,4z M36,28H12v-4h24V28z M36,22H12v-4h24V22zM36,16H12v-4h24V16z"/><rect x="0" fill="none" width="48" height="48"/></g></g></svg>

After

Width:  |  Height:  |  Size: 365 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
<path d="M0 0h18v18h-18z" fill="none"/>
<path d="M9 5.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zm0 2c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"/>
</svg>

After

Width:  |  Height:  |  Size: 378 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"><g><g><path fill="#7d7d7d" d="M21,11l-7-7v4C7,9,4,14,3,19c2.5-3.5,6-5.1,11-5.1V18L21,11z"/><rect fill="none" width="24" height="24"/></g></g></svg>

After

Width:  |  Height:  |  Size: 285 B

View File

@@ -0,0 +1,2 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><g><path fill="#7d7d7d" d="M40,4H8C5.8,4,4,5.8,4,8l0,32c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V8C44,5.8,42.2,4,40,4z M35.4,18.7c-0.1,9.2-6,15.6-14.8,16c-3.6,0.2-6.3-1-8.6-2.5c2.7,0.4,6-0.6,7.8-2.2c-2.6-0.3-4.2-1.6-4.9-3.8c0.8,0.1,1.6,0.1,2.3-0.1
c-2.4-0.8-4.1-2.3-4.2-5.3c0.7,0.3,1.4,0.6,2.3,0.6c-1.8-1-3.1-4.7-1.6-7.2c2.6,2.9,5.8,5.3,11,5.6c-1.3-5.6,6.1-8.6,9.2-4.9c1.3-0.3,2.4-0.8,3.4-1.3c-0.4,1.3-1.2,2.2-2.2,2.9c1.1-0.1,2.1-0.4,2.9-0.8C37.5,16.9,36.4,17.9,35.4,18.7z"/></g><g><rect fill="none" width="48" height="48"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 680 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -0,0 +1,142 @@
<!--This is a main HTML file of project default page when application start.-->
<!--All reference of css and javascript lib is here.-->
<!DOCTYPE html>
<html>
<!--head section This is a place of all reference of css and javascript lib-->
<head>
<!-- Meta section -->
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<meta name="format-detection" content="telephone=no"> <!-- To disable phone number typing.-->
<!-- end Meta section -->
<title></title>
<!-- Font reference section -->
<link href="lib/robotodraft/robotodraft.css">
<!-- end Font reference section -->
<!-- CSS reference section -->
<link rel="stylesheet" href="css/ionic.app.css">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet prefetch" href="lib/angular-material/angular-material.css">
<link rel="stylesheet" href="lib/font-awesome-4.4.0/css/font-awesome.css">
<!-- end CSS reference section -->
<!-- Ionic javascript lib -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<!-- end Ionic javascript lib -->
<!-- Angular javascript lib -->
<script src="lib/angular-messages/angular-messages.js"></script>
<script src="lib/angular-aria/angular-aria.js"></script>
<script src="lib/angular-material/angular-material.js"></script>
<!-- end Angular javascript lib -->
<!-- Cordova script (this will be a 404 during development) -->
<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
<!-- end Cordova script -->
<!--ionic framework ngIOS9UIWebViewPatch-->
<!--Learn more about ngIOS9UIWebViewPatch at : http://blog.ionic.io/ios-9-potential-breaking-change/-->
<script src="lib/ngIOS9UIWebViewPatch/angular-ios9-uiwebview.patch.js"></script>
<!--end ionic framework ngIOS9UIWebViewPatch-->
<!-- app.js section-->
<script src="js/app.js"></script>
<!-- end app.js section-->
<!-- Controllers section-->
<script src="js/controllers.js"></script>
<script src="js/shared/directives.js"></script>
<script src="js/shared/filter.js"></script>
<script src="js/shared/controllers.js"></script>
<script src="templates/menu/js/controllers.js"></script>
<script src="templates/material-user-interface/dashboard/js/controllers.js"></script>
<script src="templates/application-storage/sqLite/js/controllers.js"></script>
<script src="templates/application-storage/sqLite/js/services.js"></script>
<script src="templates/application-storage/local-application-db/js/controllers.js"></script>
<script src="templates/application-storage/local-application-db/js/services.js"></script>
<script src="templates/social-network-connect/facebook/js/controllers.js"></script>
<script src="templates/social-network-connect/instagram/js/controllers.js"></script>
<script src="templates/social-network-connect/google-plus/js/controllers.js"></script>
<script src="templates/social-network-connect/foursquare/js/controllers.js"></script>
<script src="templates/social-network-connect/dropbox/js/controllers.js"></script>
<script src="templates/share-application-content/social-share/js/controllers.js"></script>
<script src="templates/share-application-content/email-message/js/controllers.js"></script>
<script src="templates/hardware-connect/device-information/js/controllers.js"></script>
<script src="templates/hardware-connect/mobile-contract/js/controllers.js"></script>
<script src="templates/hardware-connect/flash-light/js/controllers.js"></script>
<script src="templates/hardware-connect/vibration/js/controllers.js"></script>
<script src="templates/advertising-application/googleAdmob/js/controllers.js"></script>
<script src="templates/hardware-connect/image-picker/js/controllers.js"></script>
<script src="templates/social-network-connect/wordpress/js/controllers.js"></script>
<script src="templates/material-user-interface/dashboard/js/controllers.js"></script>
<script src="templates/material-user-interface/default-user-interface/js/controllers.js"></script>
<script src="templates/themes/menu-dashboard/js/controllers.js"></script>
<script src="templates/themes/expense-dashboard/js/controllers.js"></script>
<script src="templates/themes/catalog/js/controllers.js"></script>
<script src="templates/push-notification/single-push-notification/js/controllers.js"></script>
<script src="templates/push-notification/schedule-push-notification/js/controllers.js"></script>
<script src="templates/map-and-location/ios-map-connect/js/controllers.js"></script>
<script src="templates/map-and-location/android-map-connect/js/controllers.js"></script>
<!-- end Controllers section-->
<!-- jQuery section-->
<script src="lib/jQuery/jquery.js"></script>
<!-- end jQuery section-->
</head><!-- end head section-->
<!--body section-->
<body ng-app="starter" class="hide-native-scroll-y">
<!--Custom Style section-->
<style type="text/css">
{{customStyle}}
</style><!-- end Custom Style section-->
<!-- Ionic navigation bar section-->
<ion-nav-view></ion-nav-view>
<!-- end Ionic navigation bar section-->
</body><!-- end body section-->
<!-- Angular custom template section-->
<!--Share template confirm-dialog section-->
<script type="text/ng-template" id="confirm-dialog.html">
<md-dialog aria-label="confirm-dialog">
<form>
<md-dialog-content>
<div>
<h2 class="md-title">{{displayOption.title}}</h2>
<p>{{displayOption.content}}</p>
</div>
</md-dialog-content>
<div class="md-actions" layout="row">
<a class="md-primary-color dialog-action-btn" ng-click="cancel()">
{{displayOption.cancel}}
</a>
<a class="md-primary-color dialog-action-btn" ng-click="ok()">
{{displayOption.ok}}
</a>
</div>
</form>
</md-dialog>
</script> <!-- end share template confirm-dialog section-->
<!-- Share template toast section-->
<script type="text/ng-template" id="toast.html">
<md-toast class="toast-form">
<span flex>{{displayOption.title}}</span>
</md-toast>
</script><!-- end share template toast section-->
<!-- end Angular custom template section-->
</html>

View File

@@ -0,0 +1,918 @@
//
//Welcome to app.js
//This is main application config of project. You can change a setting of :
// - Global Variable
// - Theme setting
// - Icon setting
// - Register View
// - Spinner setting
// - Custom style
//
//Global variable use for setting color, start page, message, oAuth key.
var db = null; //Use for SQLite database.
window.globalVariable = {
//custom color style variable
color: {
appPrimaryColor: "",
dropboxColor: "#017EE6",
facebookColor: "#3C5C99",
foursquareColor: "#F94777",
googlePlusColor: "#D73D32",
instagramColor: "#517FA4",
wordpressColor: "#0087BE"
},// End custom color style variable
startPage: {
url: "/app/dashboard",//Url of start page.
state: "app.dashboard"//State name of start page.
},
message: {
errorMessage: "Technical error please try again later." //Default error message.
},
oAuth: {
dropbox: "your_api_key",//Use for Dropbox API clientID.
facebook: "your_api_key",//Use for Facebook API appID.
foursquare: "your_api_key", //Use for Foursquare API clientID.
instagram: "your_api_key",//Use for Instagram API clientID.
googlePlus: "your_api_key",//Use for Google API clientID.
},
adMob: "your_api_key" //Use for AdMob API clientID.
};// End Global variable
angular.module('starter', ['ionic','ngIOS9UIWebViewPatch', 'starter.controllers', 'starter.services', 'ngMaterial', 'ngMessages', 'ngCordova'])
.run(function ($ionicPlatform, $cordovaSQLite, $rootScope, $ionicHistory, $state, $mdDialog, $mdBottomSheet) {
//Create database table of contracts by using sqlite database.
//Table schema :
//Column Type Primary key
// id Integer Yes
// firstName Text No
// lastName Text No
// telephone Text No
// email Text No
// note Text No
// createDate DateTime No
// age Integer No
// isEnable Boolean No
function initialSQLite() {
db = window.cordova ? $cordovaSQLite.openDB("contract.db") : window.openDatabase("contract.db", "1.0", "IonicMaterialDesignDB", -1);
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS contracts " +
"( id integer primary key , " +
" firstName text , " +
" lastName text , " +
" telephone text , " +
" email text , " +
" note text , " +
" createDate dateTime , " +
" age integer , " +
" isEnable Boolean) ");
};
// End creating SQLite database table.
// Create custom defaultStyle.
function getDefaultStyle() {
return "" +
".material-background-nav-bar { " +
" background-color : " + appPrimaryColor + " !important; " +
" border-style : none;" +
"}" +
".md-primary-color {" +
" color : " + appPrimaryColor + " !important;" +
"}";
}// End create custom defaultStyle
// Create custom style for product view.
function getProductStyle() {
return "" +
".material-background-nav-bar { " +
" background-color : " + appPrimaryColor + " !important;" +
" border-style : none;" +
" background-image : url('img/background_cover_pixels.png') !important;" +
" background-size : initial !important;" +
"}" +
".md-primary-color {" +
" color : " + appPrimaryColor + " !important;" +
"}";
}// End create custom style for product view.
// Create custom style for contract us view.
function getContractUsStyle() {
return "" +
".material-background-nav-bar { " +
" background-color : transparent !important;" +
" border-style : none;" +
" background-image : none !important;" +
" background-position-y : 4px !important;" +
" background-size : initial !important;" +
"}" +
".md-primary-color {" +
" color : " + appPrimaryColor + " !important;" +
"}";
} // End create custom style for contract us view.
// Create custom style for Social Network view.
function getSocialNetworkStyle(socialColor) {
return "" +
".material-background-nav-bar {" +
" background : " + socialColor + " !important;" +
" border-style : none;" +
"} " +
"md-ink-bar {" +
" color : " + socialColor + " !important;" +
" background : " + socialColor + " !important;" +
"}" +
"md-tab-item {" +
" color : " + socialColor + " !important;" +
"}" +
" md-progress-circular.md-warn .md-inner .md-left .md-half-circle {" +
" border-left-color : " + socialColor + " !important;" +
"}" +
" md-progress-circular.md-warn .md-inner .md-left .md-half-circle, md-progress-circular.md-warn .md-inner .md-right .md-half-circle {" +
" border-top-color : " + socialColor + " !important;" +
"}" +
" md-progress-circular.md-warn .md-inner .md-gap {" +
" border-top-color : " + socialColor + " !important;" +
" border-bottom-color : " + socialColor + " !important;" +
"}" +
"md-progress-circular.md-warn .md-inner .md-right .md-half-circle {" +
" border-right-color : " + socialColor + " !important;" +
" }" +
".spinner-android {" +
" stroke : " + socialColor + " !important;" +
"}" +
".md-primary-color {" +
" color : " + socialColor + " !important;" +
"}" +
"a.md-button.md-primary, .md-button.md-primary {" +
" color : " + socialColor + " !important;" +
"}";
}// End create custom style for Social Network view.
function initialRootScope() {
$rootScope.appPrimaryColor = appPrimaryColor;// Add value of appPrimaryColor to rootScope for use it to base color.
$rootScope.isAndroid = ionic.Platform.isAndroid();// Check platform of running device is android or not.
$rootScope.isIOS = ionic.Platform.isIOS();// Check platform of running device is ios or not.
};
function hideActionControl() {
//For android if user tap hardware back button, Action and Dialog should be hide.
$mdBottomSheet.cancel();
$mdDialog.cancel();
};
// createCustomStyle will change a style of view while view changing.
// Parameter :
// stateName = name of state that going to change for add style of that page.
function createCustomStyle(stateName) {
var customStyle =
".material-background {" +
" background-color : " + appPrimaryColor + " !important;" +
" border-style : none;" +
"}" +
".spinner-android {" +
" stroke : " + appPrimaryColor + " !important;" +
"}";
switch (stateName) {
case "app.productList" :
case "app.productDetail":
case "app.productCheckout":
case "app.clothShop" :
case "app.catalog" :
customStyle += getProductStyle();
break;
case "app.dropboxLogin" :
case "app.dropboxProfile":
case "app.dropboxFeed" :
customStyle += getSocialNetworkStyle(window.globalVariable.color.dropboxColor);
break;
case "app.facebookLogin" :
case "app.facebookProfile":
case "app.facebookFeed" :
case "app.facebookFriendList":
customStyle += getSocialNetworkStyle(window.globalVariable.color.facebookColor);
break;
case "app.foursquareLogin" :
case "app.foursquareProfile":
case "app.foursquareFeed" :
customStyle += getSocialNetworkStyle(window.globalVariable.color.foursquareColor);
break;
case "app.googlePlusLogin" :
case "app.googlePlusProfile":
case "app.googlePlusFeed" :
customStyle += getSocialNetworkStyle(window.globalVariable.color.googlePlusColor);
break;
case "app.instagramLogin" :
case "app.instagramProfile":
case "app.instagramFeed" :
customStyle += getSocialNetworkStyle(window.globalVariable.color.instagramColor);
break;
case "app.wordpressLogin" :
case "app.wordpressFeed":
case "app.wordpressPost" :
customStyle += getSocialNetworkStyle(window.globalVariable.color.wordpressColor);
break;
case "app.contractUs":
customStyle += getContractUsStyle();
break;
default:
customStyle += getDefaultStyle();
break;
}
return customStyle;
}// End createCustomStyle
// Add custom style while initial application.
$rootScope.customStyle = createCustomStyle(window.globalVariable.startPage.state);
$ionicPlatform.ready(function () {
ionic.Platform.isFullScreen = true;
if (window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
StatusBar.styleDefault();
}
initialSQLite();
initialRootScope();
//Checking if view is changing it will go to this function.
$rootScope.$on('$ionicView.beforeEnter', function () {
//hide Action Control for android back button.
hideActionControl();
// Add custom style ti view.
$rootScope.customStyle = createCustomStyle($ionicHistory.currentStateName());
});
});
})
.config(function ($ionicConfigProvider, $stateProvider, $urlRouterProvider, $mdThemingProvider, $mdIconProvider, $mdColorPalette, $mdIconProvider) {
// Use for change ionic spinner to android pattern.
$ionicConfigProvider.spinner.icon("android");
$ionicConfigProvider.views.swipeBackEnabled(false);
// mdIconProvider is function of Angular Material.
// It use for reference .SVG file and improve performance loading.
$mdIconProvider
.icon('facebook', 'img/icons/facebook.svg')
.icon('twitter', 'img/icons/twitter.svg')
.icon('mail', 'img/icons/mail.svg')
.icon('message', 'img/icons/message.svg')
.icon('share-arrow', 'img/icons/share-arrow.svg')
.icon('more', 'img/icons/more_vert.svg');
//mdThemingProvider use for change theme color of Ionic Material Design Application.
/* You can select color from Material Color List configuration :
* red
* pink
* purple
* purple
* deep-purple
* indigo
* blue
* light-blue
* cyan
* teal
* green
* light-green
* lime
* yellow
* amber
* orange
* deep-orange
* brown
* grey
* blue-grey
*/
//Learn more about material color patten: https://www.materialpalette.com/
//Learn more about material theme: https://material.angularjs.org/latest/#/Theming/01_introduction
$mdThemingProvider
.theme('default')
.primaryPalette('pink')
.accentPalette('red');
appPrimaryColor = $mdColorPalette[$mdThemingProvider._THEMES.default.colors.primary.name]["500"]; //Use for get base color of theme.
//$stateProvider is using for add or edit HTML view to navigation bar.
//
//Schema :
//state_name(String) : Name of state to use in application.
//page_name(String) : Name of page to present at localhost url.
//cache(Bool) : Cache of view and controller default is true. Change to false if you want page reload when application navigate back to this view.
//html_file_path(String) : Path of html file.
//controller_name(String) : Name of Controller.
//
//Learn more about ionNavView at http://ionicframework.com/docs/api/directive/ionNavView/
//Learn more about AngularUI Router's at https://github.com/angular-ui/ui-router/wiki
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu/html/menu.html",
controller: 'menuCtrl'
})
.state('app.dashboard', {
url: "/dashboard",
params:{
isAnimated:false
},
views: {
'menuContent': {
templateUrl: "templates/material-user-interface/dashboard/html/dashboard.html",
controller: 'dashboardCtrl'
}
}
})
.state('app.dashboardSetting', {
url: "/dashboardSetting",
views: {
'menuContent': {
templateUrl: "templates/material-user-interface/dashboard/html/dashboard-setting.html",
controller: "dashboardSettingCtrl"
}
}
})
.state('app.contractlist', {
url: "/contractlist",
cache: false,
params:{
isAnimated:(ionic.Platform.isAndroid()==false)
},
views: {
'menuContent': {
templateUrl: "templates/application-storage/sqLite/html/contract-list.html",
controller: 'contractListCtrl'
}
}
})
.state('app.contractdetail', {
url: "/contractdetail",
params: {
contractdetail: null,
actionDelete: false
},
views: {
'menuContent': {
templateUrl: "templates/application-storage/sqLite/html/contract-detail.html",
controller: 'contractDetailCtrl'
}
}
})
.state('app.contractsetting', {
url: "/contractsetting",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/application-storage/sqLite/html/contract-setting.html",
controller: 'contractSettingCtrl'
}
}
})
.state('app.notelist', {
url: "/notelist",
params:{
isAnimated:false
},
cache: false,
views: {
'menuContent': {
templateUrl: "templates/application-storage/local-application-db/html/note-list.html",
controller: 'noteListCtrl'
}
}
})
.state('app.notedetail', {
url: "/notedetail",
params: {
noteDetail: null,
actionDelete: false
},
views: {
'menuContent': {
templateUrl: "templates/application-storage/local-application-db/html/note-detail.html",
controller: 'noteDetailCtrl'
}
}
})
.state('app.notesetting', {
url: "/notesetting",
views: {
'menuContent': {
templateUrl: "templates/application-storage/local-application-db/html/note-setting.html",
controller: 'noteSettingCtrl'
}
}
})
.state('app.facebookLogin', {
url: "/facebookLogin",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/facebook/html/facebook-login.html",
controller: 'facebookLoginCtrl'
}
}
})
.state('app.facebookProfile', {
url: "/facebookProfile",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/facebook/html/facebook-profile.html",
controller: 'facebookProfileCtrl'
}
}
})
.state('app.facebookFeed', {
url: "/facebookFeed",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/facebook/html/facebook-feed.html",
controller: 'facebookFeedCtrl'
}
}
})
.state('app.facebookFriendList', {
url: "/facebookFriendList",
cache: false,
params: {
access_token: null,
},
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/facebook/html/facebook-friend-list.html",
controller: 'facebookFriendListCtrl'
}
}
})
.state('app.googlePlusLogin', {
url: "/googlePlusLogin",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/google-plus/html/google-login.html",
controller: 'googlePlusLoginCtrl'
}
}
})
.state('app.googlePlusProfile', {
url: "/googlePlusProfile",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/google-plus/html/google-profile.html",
controller: 'googlePlusProfileCtrl'
}
}
})
.state('app.googlePlusFeed', {
url: "/googlePlusFeed",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/google-plus/html/google-feed.html",
controller: 'googlePlusFeedCtrl'
}
}
})
.state('app.instagramLogin', {
url: "/instagramLogin",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/instagram/html/instagram-login.html",
controller: 'instagramLoginCtrl'
}
}
})
.state('app.instagramProfile', {
url: "/instagramProfile",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/instagram/html/instagram-profile.html",
controller: 'instagramProfileCtrl'
}
}
})
.state('app.instagramFeed', {
url: "/instagramFeed",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/instagram/html/instagram-feed.html",
controller: 'instagramFeedCtrl'
}
}
})
.state('app.foursquareLogin', {
url: "/foursquareLogin",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/foursquare/html/foursquare-login.html",
controller: 'foursquareLoginCtrl'
}
}
})
.state('app.foursquareProfile', {
url: "/foursquareProfile",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/foursquare/html/foursquare-profile.html",
controller: 'foursquareProfileCtrl'
}
}
})
.state('app.foursquareFeed', {
url: "/foursquareFeed",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/foursquare/html/foursquare-feed.html",
controller: 'foursquareFeedCtrl'
}
}
})
.state('app.dropboxLogin', {
url: "/dropboxLogin",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/dropbox/html/dropbox-login.html",
controller: 'dropboxLoginCtrl'
}
}
})
.state('app.dropboxProfile', {
url: "/dropboxProfile",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/dropbox/html/dropbox-profile.html",
controller: 'dropboxProfileCtrl'
}
}
})
.state('app.dropboxFeed', {
url: "/dropboxFeed",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/dropbox/html/dropbox-feed.html",
controller: 'dropboxFeedCtrl'
}
}
})
.state('app.fakeLogin', {
url: "/fakeLogin",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/themes/authentication/html/fake-login.html"
}
}
})
.state('app.fakeSignUp', {
url: "/fakeSignUp",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/themes/authentication/html/fake-sign-up.html"
}
}
})
.state('app.productList', {
url: "/productList",
views: {
'menuContent': {
templateUrl: "templates/share-application-content/social-share/html/product-list.html",
controller: 'productListCtrl'
}
}
})
.state('app.productDetail', {
url: "/productDetail",
params: {
product: null,
},
views: {
'menuContent': {
templateUrl: "templates/share-application-content/social-share/html/product-detail.html",
controller: 'productDetailCtrl'
}
}
})
.state('app.productCheckout', {
url: "/productCheckout",
views: {
'menuContent': {
templateUrl: "templates/share-application-content/social-share/html/product-checkout.html",
controller: 'productCheckoutCtrl'
}
}
})
.state('app.contractUs', {
url: "/contractUs",
views: {
'menuContent': {
templateUrl: "templates/share-application-content/email-message/html/contract-us.html",
controller: 'contractUsCtrl'
}
}
})
.state('app.deviceInformation', {
url: "/deviceInformation",
views: {
'menuContent': {
templateUrl: "templates/hardware-connect/device-information/html/device-information.html",
controller: 'deviceInformationCtrl'
}
}
})
.state('app.mobileContractList', {
url: "/mobileContractList",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/hardware-connect/mobile-contract/html/mobile-contract-list.html",
controller: 'mobileContractListCtrl'
}
}
})
.state('app.mobileContractDetail', {
url: "/mobileContractDetail",
params: {
contractDetail: null,
actionDelete: false
},
views: {
'menuContent': {
templateUrl: "templates/hardware-connect/mobile-contract/html/mobile-contract-detail.html",
controller: 'mobileContractDetailCtrl'
}
}
})
.state('app.flashLight', {
url: "/flashLight",
views: {
'menuContent': {
templateUrl: "templates/hardware-connect/flash-light/html/flash-light.html",
controller: 'flashLightCtrl'
}
}
})
.state('app.vibration', {
url: "/vibration",
views: {
'menuContent': {
templateUrl: "templates/hardware-connect/vibration/html/vibration.html",
controller: 'vibrationCtrl'
}
}
})
.state('app.googleAdmob', {
url: "/googleAdmob",
views: {
'menuContent': {
templateUrl: "templates/advertising-application/googleAdmob/html/googleAdmob.html",
controller: 'googleAdmobCtrl'
}
}
})
.state('app.imagePicker', {
url: "/imagePicker",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/hardware-connect/image-picker/html/image-picker.html",
controller: 'imagePickerCtrl'
}
}
})
.state('app.wordpressFeed', {
url: "/wordpressFeed",
params: {
wordpressUrl: null
},
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/wordpress/html/wordpress-feed.html",
controller: 'wordpressFeedCtrl'
}
}
})
.state('app.wordpressLogin', {
url: "/wordpressLogin",
cache: false,
params: {
isShowError: false
},
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/wordpress/html/wordpress-login.html",
controller: 'wordpressLoginCtrl'
}
}
})
.state('app.wordpressPost', {
url: "/wordpressPost",
cache: false,
params: {
postDetail: null,
wordpressUrl: null
},
views: {
'menuContent': {
templateUrl: "templates/social-network-connect/wordpress/html/wordpress-post.html",
controller: 'wordpressPostCtrl'
}
}
})
.state('app.defaultUI', {
url: "/defaultUI",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/material-user-interface/default-user-interface/html/default-user-interface.html",
controller: 'defaultUserInterfaceCtrl'
}
}
})
.state('app.tryApp', {
url: "/tryApp",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/themes/try-app/html/try-app.html"
}
}
})
.state('app.tryAppNoBackBtn', {
url: "/tryAppNoBackBtn",
cache: false,
views: {
'menuContent': {
templateUrl: "templates/themes/try-app/html/try-app-no-back-btn.html"
}
}
})
.state('app.pricing', {
url: "/pricing",
views: {
'menuContent': {
templateUrl: "templates/themes/pricing/html/pricing.html"
}
}
})
.state('app.menuDashboard', {
url: "/menuDashboard",
views: {
'menuContent': {
templateUrl: "templates/themes/menu-dashboard/html/menu-dashboard.html",
controller: "menuDashboardCtrl"
}
}
})
.state('app.expense', {
url: "/expense",
params:{
isAnimated:true
},
views: {
'menuContent': {
templateUrl: "templates/themes/expense-dashboard/html/expense-dashboard.html",
controller: "expenseDashboardCtrl"
}
}
})
.state('app.expenseSetting', {
url: "/expenseSetting",
views: {
'menuContent': {
templateUrl: "templates/themes/expense-dashboard/html/expense-dashboard-setting.html",
controller: "expenseDashboardSettingCtrl"
}
}
})
.state('app.newsFeed', {
url: "/newsFeed",
views: {
'menuContent': {
templateUrl: "templates/themes/news-feed/html/news-feed.html"
}
}
})
.state('app.clothShop', {
url: "/clothShop",
views: {
'menuContent': {
templateUrl: "templates/themes/cloth-shop/html/cloth-shop.html"
}
}
})
.state('app.onlineCourse', {
url: "/onlineCourse",
views: {
'menuContent': {
templateUrl: "templates/themes/online-course/html/online-course.html"
}
}
})
.state('app.catalog', {
url: "/catalog",
views: {
'menuContent': {
templateUrl: "templates/themes/catalog/html/catalog.html",
controller: "catalogCtrl"
}
}
})
.state('app.locationFeed', {
url: "/locationFeed",
views: {
'menuContent': {
templateUrl: "templates/themes/location-feed/html/location-feed.html"
}
}
})
.state('app.cubeFeed', {
url: "/cubeFeed",
views: {
'menuContent': {
templateUrl: "templates/themes/cube-feed/html/cube-feed.html"
}
}
})
.state('app.restaurant', {
url: "/restaurant",
views: {
'menuContent': {
templateUrl: "templates/themes/restaurant/html/restaurant.html"
}
}
})
.state('app.singlePushNotification', {
url: "/singlePushNotification",
views: {
'menuContent': {
templateUrl: "templates/push-notification/single-push-notification/html/single-push-notification.html",
controller: "singlePushNotificationCtrl"
}
}
})
.state('app.schedulePushNotification', {
url: "/schedulePushNotification",
views: {
'menuContent': {
templateUrl: "templates/push-notification/schedule-push-notification/html/schedule-push-notification.html",
controller: "schedulePushNotificationCtrl"
}
}
})
.state('app.iosMapConnect', {
url: "/iosMapConnect",
views: {
'menuContent': {
templateUrl: "templates/map-and-location/ios-map-connect/html/ios-map-connect.html",
controller: "iosMapConnectCtrl"
}
}
})
.state('app.androidMapConnect', {
url: "/androidMapConnect",
views: {
'menuContent': {
templateUrl: "templates/map-and-location/android-map-connect/html/android-map-connect.html",
controller: "androidMapConnectCtrl"
}
}
});// End $stateProvider
//Use $urlRouterProvider.otherwise(Url);
$urlRouterProvider.otherwise(window.globalVariable.startPage.url);
});

View File

@@ -0,0 +1,2 @@
var appControllers = angular.module('starter.controllers', []); // Use for all controller of application.
var appServices = angular.module('starter.services', []);// Use for all service of application.

View File

@@ -0,0 +1,34 @@
//This is Controller for Dialog box.
appControllers.controller('DialogController', function ($scope, $mdDialog, displayOption) {
//This variable for display wording of dialog.
//object schema:
//displayOption: {
// title: "Confirm to remove all data?",
// content: "All data will remove from local storage.",
// ok: "Confirm",
// cancel: "Close"
//}
$scope.displayOption = displayOption;
$scope.cancel = function () {
$mdDialog.cancel(); //close dialog.
};
$scope.ok = function () {
$mdDialog.hide();//hide dialog.
};
});// End Controller for Dialog box.
//Controller for Toast.
appControllers.controller('toastController', function ($scope, displayOption) {
//this variable for display wording of toast.
//object schema:
// displayOption: {
// title: "Data Saved !"
//}
$scope.displayOption = displayOption;
});// End Controller for Toast.

View File

@@ -0,0 +1,25 @@
//Directive numbersOnly :
//Use for change input to have ability accept only number.
//Example : <input ng-model="contract.age" numbers-only type="tel">
//
appControllers.directive('numbersOnly', function () {
return {
require: 'ngModel',
link: function (scope, element, attr, ngModelCtrl) {
function fromUser(text) {
if (text) {
var transformedInput = text.replace(/[^0-9]/g, '');
if (transformedInput !== text) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
}
return undefined;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
});// End Directive numbersOnly.

View File

@@ -0,0 +1,33 @@
//Filter epochToDate :
//Use for convert epoch date format to default date format.
//Example :
//<p>{{item.createdAt |epochToDate | date:"short"}}</p>
appControllers.filter('epochToDate', function ($filter) {
return function (input) {
return new Date(Date(input));
};
});// End Filter epochToDate.
//Filter numberSuffix :
//Use for convert number to have suffix 1,000 to 1K.
//Example :
//{{item.likes.summary.total_count | numberSuffix}}
//
appControllers.filter('numberSuffix', function () {
return function (input) {
var exp;
var suffixes = ['k', 'M', 'G', 'T', 'P', 'E'];
if (window.isNaN(input)) {
return 0;
}
if (input < 1000) {
return input;
}
exp = Math.floor(Math.log(input) / Math.log(1000));
return (input / Math.pow(1000, exp)).toFixed(1) + suffixes[exp - 1];
}
});// End Filter numberSuffix.

View File

@@ -0,0 +1,19 @@
{
"name": "angular-animate",
"version": "1.4.2",
"main": "./angular-animate.js",
"ignore": [],
"dependencies": {
"angular": "1.4.2"
},
"homepage": "https://github.com/angular/bower-angular-animate",
"_release": "1.4.2",
"_resolution": {
"type": "version",
"tag": "v1.4.2",
"commit": "8753e3cc8facaf2da19dbe26d318e566b89e452e"
},
"_source": "git://github.com/angular/bower-angular-animate.git",
"_target": "^1.3.0 || >1.4.0-beta.0",
"_originalSource": "angular-animate"
}

View File

@@ -0,0 +1,68 @@
# packaged angular-animate
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular-animate
```
Then add `ngAnimate` as a dependency for your app:
```javascript
angular.module('myApp', [require('angular-animate')]);
```
### bower
```shell
bower install angular-animate
```
Then add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular-animate/angular-animate.js"></script>
```
Then add `ngAnimate` as a dependency for your app:
```javascript
angular.module('myApp', ['ngAnimate']);
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,52 @@
/*
AngularJS v1.4.2
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
(function(F,t,W){'use strict';function ua(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function va(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ea(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function ba(a,b,c){var d="";a=X(a)?a:a&&U(a)&&a.length?a.split(/\s+/):[];u(a,function(a,s){a&&0<a.length&&(d+=0<s?" ":"",d+=c?b+a:a+b)});return d}function Fa(a){if(a instanceof G)switch(a.length){case 0:return[];
case 1:if(1===a[0].nodeType)return a;break;default:return G(ka(a))}if(1===a.nodeType)return G(a)}function ka(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Ga(a,b,c){u(b,function(b){a.addClass(b,c)})}function Ha(a,b,c){u(b,function(b){a.removeClass(b,c)})}function ha(a){return function(b,c){c.addClass&&(Ga(a,b,c.addClass),c.addClass=null);c.removeClass&&(Ha(a,b,c.removeClass),c.removeClass=null)}}function ia(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
H;a.domOperation=function(){a.$$domOperationFired=!0;b();b=H};a.$$prepared=!0}return a}function ca(a,b){wa(a,b);xa(a,b)}function wa(a,b){b.from&&(a.css(b.from),b.from=null)}function xa(a,b){b.to&&(a.css(b.to),b.to=null)}function R(a,b,c){var d=(b.addClass||"")+" "+(c.addClass||""),e=(b.removeClass||"")+" "+(c.removeClass||"");a=Ia(a.attr("class"),d,e);ya(b,c);b.addClass=a.addClass?a.addClass:null;b.removeClass=a.removeClass?a.removeClass:null;return b}function Ia(a,b,c){function d(a){U(a)&&(a=a.split(" "));
var b={};u(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);u(b,function(a,b){e[b]=1});c=d(c);u(c,function(a,b){e[b]=1===e[b]?null:-1});var s={addClass:"",removeClass:""};u(e,function(b,c){var d,e;1===b?(d="addClass",e=!a[c]):-1===b&&(d="removeClass",e=a[c]);e&&(s[d].length&&(s[d]+=" "),s[d]+=c)});return s}function A(a){return a instanceof t.element?a[0]:a}function za(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};u(c,function(a,b){var c=e[a];if(c){var l=c.charAt(0);
if("-"===l||"+"===l||0<=l)c=Ja(c);0===c&&(c=null);d[b]=c}});return d}function Ja(a){var b=0;a=a.split(/\s*,\s*/);u(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function la(a){return 0===a||null!=a}function Aa(a,b){var c=O,d=a+"s";b?c+="Duration":d+=" linear all";return[c,d]}function ja(a,b){var c=b?"-"+b+"s":"";da(a,[ea,c]);return[ea,c]}function ma(a,b){var c=b?"paused":"",d=V+"PlayState";da(a,[d,c]);return[d,c]}function da(a,
b){a.style[b[0]]=b[1]}function Ba(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}var H=t.noop,ya=t.extend,G=t.element,u=t.forEach,X=t.isArray,U=t.isString,na=t.isObject,Ka=t.isUndefined,La=t.isDefined,Ca=t.isFunction,oa=t.isElement,O,pa,V,qa;F.ontransitionend===W&&F.onwebkittransitionend!==W?(O="WebkitTransition",pa="webkitTransitionEnd transitionend"):
(O="transition",pa="transitionend");F.onanimationend===W&&F.onwebkitanimationend!==W?(V="WebkitAnimation",qa="webkitAnimationEnd animationend"):(V="animation",qa="animationend");var ra=V+"Delay",sa=V+"Duration",ea=O+"Delay";F=O+"Duration";var Ma={transitionDuration:F,transitionDelay:ea,transitionProperty:O+"Property",animationDuration:sa,animationDelay:ra,animationIterationCount:V+"IterationCount"},Na={transitionDuration:F,transitionDelay:ea,animationDuration:sa,animationDelay:ra};t.module("ngAnimate",
[]).directive("ngAnimateChildren",[function(){return function(a,b,c){a=c.ngAnimateChildren;t.isString(a)&&0===a.length?b.data("$$ngAnimateChildren",!0):c.$observe("ngAnimateChildren",function(a){b.data("$$ngAnimateChildren","on"===a||"true"===a)})}}]).factory("$$rAFMutex",["$$rAF",function(a){return function(){var b=!1;a(function(){b=!0});return function(c){b?c():a(c)}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d.push([].concat(a));c()}function c(){if(d.length){for(var b=[],n=
0;n<d.length;n++){var g=d[n];g.shift()();g.length&&b.push(g)}d=b;e||a(function(){e||c()})}}var d=[],e;b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).factory("$$AnimateRunner",["$q","$$rAFMutex",function(a,b){function c(a){this.setHost(a);this._doneCallbacks=[];this._runInAnimationFrame=b();this._state=0}c.chain=function(a,b){function c(){if(n===a.length)b(!0);else a[n](function(a){!1===a?b(!1):(n++,c())})}var n=0;c()};c.all=function(a,b){function c(s){g=g&&s;++n===
a.length&&b(g)}var n=0,g=!0;u(a,function(a){a.done(c)})};c.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:H,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&
this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._runInAnimationFrame(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(u(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return c}]).provider("$$animateQueue",["$animateProvider",
function(a){function b(a,b,c,g){return d[a].some(function(a){return a(b,c,g)})}function c(a,b){a=a||{};var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var d=this.rules={skip:[],cancel:[],join:[]};d.join.push(function(a,b,d){return!b.structural&&c(b.options)});d.skip.push(function(a,b,d){return!b.structural&&!c(b.options)});d.skip.push(function(a,b,c){return"leave"==c.event&&b.structural});d.skip.push(function(a,b,c){return c.structural&&!b.structural});d.cancel.push(function(a,
b,c){return c.structural&&b.structural});d.cancel.push(function(a,b,c){return 2===c.state&&b.structural});d.cancel.push(function(a,b,c){a=b.options;c=c.options;return a.addClass&&a.addClass===c.removeClass||a.removeClass&&a.removeClass===c.addClass});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite",function(d,s,n,g,l,D,z,Z,I){function w(a,b){var c=A(a),f=[],d=m[b];d&&u(d,function(a){a.node.contains(c)&&f.push(a.callback)});
return f}function B(a,b,c,f){d(function(){u(w(b,a),function(a){a(b,c,f)})})}function r(a,S,p){function d(b,c,f,p){B(c,a,f,p);b.progress(c,f,p)}function k(b){Da(a,p);ca(a,p);p.domOperation();m.complete(!b)}var P,E;if(a=Fa(a))P=A(a),E=a.parent();p=ia(p);var m=new z;if(!P)return k(),m;X(p.addClass)&&(p.addClass=p.addClass.join(" "));X(p.removeClass)&&(p.removeClass=p.removeClass.join(" "));p.from&&!na(p.from)&&(p.from=null);p.to&&!na(p.to)&&(p.to=null);var e=[P.className,p.addClass,p.removeClass].join(" ");
if(!v(e))return k(),m;var M=0<=["enter","move","leave"].indexOf(S),g=!x||L.get(P),e=!g&&h.get(P)||{},l=!!e.state;g||l&&1==e.state||(g=!ta(a,E,S));if(g)return k(),m;M&&K(a);g={structural:M,element:a,event:S,close:k,options:p,runner:m};if(l){if(b("skip",a,g,e)){if(2===e.state)return k(),m;R(a,e.options,p);return e.runner}if(b("cancel",a,g,e))2===e.state?e.runner.end():e.structural?e.close():R(a,g.options,e.options);else if(b("join",a,g,e))if(2===e.state)R(a,p,{});else return S=g.event=e.event,p=R(a,
e.options,g.options),m}else R(a,p,{});(l=g.structural)||(l="animate"===g.event&&0<Object.keys(g.options.to||{}).length||c(g.options));if(!l)return k(),C(a),m;M&&f(E);var r=(e.counter||0)+1;g.counter=r;ga(a,1,g);s.$$postDigest(function(){var b=h.get(P),v=!b,b=b||{},e=a.parent()||[],E=0<e.length&&("animate"===b.event||b.structural||c(b.options));if(v||b.counter!==r||!E){v&&(Da(a,p),ca(a,p));if(v||M&&b.event!==S)p.domOperation(),m.end();E||C(a)}else S=!b.structural&&c(b.options,!0)?"setClass":b.event,
b.structural&&f(e),ga(a,2),b=D(a,S,b.options),b.done(function(b){k(!b);(b=h.get(P))&&b.counter===r&&C(A(a));d(m,S,"close",{})}),m.setHost(b),d(m,S,"start",{})});return m}function K(a){a=A(a).querySelectorAll("[data-ng-animate]");u(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=h.get(a);switch(b){case 2:c.runner.end();case 1:c&&h.remove(a)}})}function C(a){a=A(a);a.removeAttribute("data-ng-animate");h.remove(a)}function E(a,b){return A(a)===A(b)}function f(a){a=A(a);do{if(!a||1!==
a.nodeType)break;var b=h.get(a);if(b){var f=a;!b.structural&&c(b.options)&&(2===b.state&&b.runner.end(),C(f))}a=a.parentNode}while(1)}function ta(a,b,c){var f=c=!1,d=!1,v;for((a=a.data("$ngAnimatePin"))&&(b=a);b&&b.length;){f||(f=E(b,n));a=b[0];if(1!==a.nodeType)break;var e=h.get(a)||{};d||(d=e.structural||L.get(a));if(Ka(v)||!0===v)a=b.data("$$ngAnimateChildren"),La(a)&&(v=a);if(d&&!1===v)break;f||(f=E(b,n),f||(a=b.data("$ngAnimatePin"))&&(b=a));c||(c=E(b,k));b=b.parent()}return(!d||v)&&f&&c}function ga(a,
b,c){c=c||{};c.state=b;a=A(a);a.setAttribute("data-ng-animate",b);c=(b=h.get(a))?ya(b,c):c;h.put(a,c)}var h=new l,L=new l,x=null,M=s.$watch(function(){return 0===Z.totalPendingRequests},function(a){a&&(M(),s.$$postDigest(function(){s.$$postDigest(function(){null===x&&(x=!0)})}))}),k=G(g[0].body),m={},P=a.classNameFilter(),v=P?function(a){return P.test(a)}:function(){return!0},Da=ha(I);return{on:function(a,b,c){b=ka(b);m[a]=m[a]||[];m[a].push({node:b,callback:c})},off:function(a,b,c){function f(a,
b,c){var d=ka(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===c))})}var d=m[a];d&&(m[a]=1===arguments.length?null:f(d,b,c))},pin:function(a,b){ua(oa(a),"element","not an element");ua(oa(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=c||{};c.domOperation=f;return r(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!x;else if(oa(a)){var f=A(a),d=L.get(f);1===c?b=!d:(b=!!b)?d&&L.remove(f):L.put(f,!0)}else b=x=!!a;return b}}}]}]).provider("$$animation",
["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")}var c=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$rAFScheduler",function(a,e,s,n,g){var l=[],D=ha(a),z=0,Z=0,I=[];return function(w,B,r){function K(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];u(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function C(a){var b=[],c={};u(a,function(a,f){var d=A(a.element),
e=0<=["enter","move"].indexOf(a.event),d=a.structural?K(d):[];if(d.length){var h=e?"to":"from";u(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][h]={animationID:f,element:G(a)}})}else b.push(a)});var f={},d={};u(c,function(c,e){var h=c.from,k=c.to;if(h&&k){var m=a[h.animationID],g=a[k.animationID],x=h.animationID.toString();if(!d[x]){var B=d[x]={structural:!0,beforeStart:function(){m.beforeStart();g.beforeStart()},close:function(){m.close();g.close()},classes:E(m.classes,g.classes),
from:m,to:g,anchors:[]};B.classes.length?b.push(B):(b.push(m),b.push(g))}d[x].anchors.push({out:h.element,"in":k.element})}else h=h?h.animationID:k.animationID,k=h.toString(),f[k]||(f[k]=!0,b.push(a[h]))});return b}function E(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],f=0;f<a.length;f++){var d=a[f];if("ng-"!==d.substring(0,3))for(var h=0;h<b.length;h++)if(d===b[h]){c.push(d);break}}return c.join(" ")}function f(a){for(var b=c.length-1;0<=b;b--){var f=c[b];if(s.has(f)&&(f=s.get(f)(a)))return f}}
function ta(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function ga(){var a=b(w);!a||"leave"===B&&r.$$domOperationFired||a.end()}function h(b){w.off("$destroy",ga);w.removeData("$$animationRunner");D(w,r);ca(w,r);r.domOperation();k&&a.removeClass(w,k);w.removeClass("ng-animate");x.complete(!b)}r=ia(r);var L=0<=["enter","move","leave"].indexOf(B),x=new n({end:function(){h()},cancel:function(){h(!0)}});if(!c.length)return h(),x;w.data("$$animationRunner",
x);var M=va(w.attr("class"),va(r.addClass,r.removeClass)),k=r.tempClasses;k&&(M+=" "+k,r.tempClasses=null);var m;L||(m=z,z+=1);l.push({element:w,classes:M,event:B,classBasedIndex:m,structural:L,options:r,beforeStart:function(){w.addClass("ng-animate");k&&a.addClass(w,k)},close:h});w.on("$destroy",ga);if(1<l.length)return x;e.$$postDigest(function(){Z=z;z=0;I.length=0;var a=[];u(l,function(c){b(c.element)&&a.push(c)});l.length=0;u(C(a),function(a){function c(){a.beforeStart();var d,h=a.close;if(b(a.anchors?
a.from.element||a.to.element:a.element)){var k=f(a);k&&(d=k.start)}d?(d=d(),d.done(function(a){h(!a)}),ta(a,d)):h()}a.structural?c():(I.push({node:A(a.element),fn:c}),a.classBasedIndex===Z-1&&(I=I.sort(function(a,b){return b.node.contains(a.node)}).map(function(a){return a.fn}),g(I)))})});return x}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Ba(),c=Ba();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$document","$sniffer","$$rAFScheduler",function(a,e,s,n,g,l,D){function z(a,
b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++r))+"-"+a.getAttribute("class")+"-"+b}function Z(g,f,B,l){var h;0<b.count(B)&&(h=c.get(B),h||(f=ba(f,"-stagger"),e.addClass(g,f),h=za(a,g,l),h.animationDuration=Math.max(h.animationDuration,0),h.transitionDuration=Math.max(h.transitionDuration,0),e.removeClass(g,f),c.put(B,h)));return h||{}}function I(a){C.push(a);D.waitUntilQuiet(function(){b.flush();c.flush();for(var a=K.offsetWidth+1,d=0;d<C.length;d++)C[d](a);C.length=
0})}function w(c,f,e){f=b.get(e);f||(f=za(a,c,Ma),"infinite"===f.animationIterationCount&&(f.animationIterationCount=1));b.put(e,f);c=f;e=c.animationDelay;f=c.transitionDelay;c.maxDelay=e&&f?Math.max(e,f):e||f;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var B=ha(e),r=0,K=A(g).body,C=[];return function(a,c){function d(){h()}function g(){h(!0)}function h(b){if(!(K||C&&D)){K=!0;D=!1;e.removeClass(a,Y);e.removeClass(a,W);ma(k,!1);ja(k,!1);u(m,function(a){k.style[a[0]]=
""});B(a,c);ca(a,c);if(c.onDone)c.onDone();p&&p.complete(!b)}}function L(a){q.blockTransition&&ja(k,a);q.blockKeyframeAnimation&&ma(k,!!a)}function x(){p=new s({end:d,cancel:g});h();return{$$willAnimate:!1,start:function(){return p},end:d}}function M(){function b(){if(!K){L(!1);u(m,function(a){k.style[a[0]]=a[1]});B(a,c);e.addClass(a,W);if(q.recalculateTimingStyles){fa=k.className+" "+Y;$=z(k,fa);y=w(k,fa,$);Q=y.maxDelay;H=Math.max(Q,0);J=y.maxDuration;if(0===J){h();return}q.hasTransitions=0<y.transitionDuration;
q.hasAnimations=0<y.animationDuration}if(q.applyTransitionDelay||q.applyAnimationDelay){Q="boolean"!==typeof c.delay&&la(c.delay)?parseFloat(c.delay):Q;H=Math.max(Q,0);var l;q.applyTransitionDelay&&(y.transitionDelay=Q,l=[ea,Q+"s"],m.push(l),k.style[l[0]]=l[1]);q.applyAnimationDelay&&(y.animationDelay=Q,l=[ra,Q+"s"],m.push(l),k.style[l[0]]=l[1])}F=1E3*H;G=1E3*J;if(c.easing){var r=c.easing;q.hasTransitions&&(l=O+"TimingFunction",m.push([l,r]),k.style[l]=r);q.hasAnimations&&(l=V+"TimingFunction",m.push([l,
r]),k.style[l]=r)}y.transitionDuration&&p.push(pa);y.animationDuration&&p.push(qa);x=Date.now();a.on(p.join(" "),g);n(d,F+1.5*G);xa(a,c)}}function d(){h()}function g(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-x,0)>=F&&b>=J&&(C=!0,h())}if(!K){var x,p=[],l=function(a){if(C)D&&a&&(D=!1,h());else if(D=!a,y.animationDuration)if(a=ma(k,D),D)m.push(a);else{var b=m,c=b.indexOf(a);0<=a&&b.splice(c,1)}},r=0<
U&&(y.transitionDuration&&0===T.transitionDuration||y.animationDuration&&0===T.animationDuration)&&Math.max(T.animationDelay,T.transitionDelay);r?n(b,Math.floor(r*U*1E3),!1):b();t.resume=function(){l(!0)};t.pause=function(){l(!1)}}}var k=A(a);c=ia(c);var m=[],r=a.attr("class"),v=Ea(c),K,D,C,p,t,H,F,J,G;if(0===c.duration||!l.animations&&!l.transitions)return x();var aa=c.event&&X(c.event)?c.event.join(" "):c.event,R="",N="";aa&&c.structural?R=ba(aa,"ng-",!0):aa&&(R=aa);c.addClass&&(N+=ba(c.addClass,
"-add"));c.removeClass&&(N.length&&(N+=" "),N+=ba(c.removeClass,"-remove"));c.applyClassesEarly&&N.length&&(B(a,c),N="");var Y=[R,N].join(" ").trim(),fa=r+" "+Y,W=ba(Y,"-active"),r=v.to&&0<Object.keys(v.to).length;if(!r&&!Y)return x();var $,T;0<c.stagger?(v=parseFloat(c.stagger),T={transitionDelay:v,animationDelay:v,transitionDuration:0,animationDuration:0}):($=z(k,fa),T=Z(k,Y,$,Na));e.addClass(a,Y);c.transitionStyle&&(v=[O,c.transitionStyle],da(k,v),m.push(v));0<=c.duration&&(v=0<k.style[O].length,
v=Aa(c.duration,v),da(k,v),m.push(v));c.keyframeStyle&&(v=[V,c.keyframeStyle],da(k,v),m.push(v));var U=T?0<=c.staggerIndex?c.staggerIndex:b.count($):0;(aa=0===U)&&ja(k,9999);var y=w(k,fa,$),Q=y.maxDelay;H=Math.max(Q,0);J=y.maxDuration;var q={};q.hasTransitions=0<y.transitionDuration;q.hasAnimations=0<y.animationDuration;q.hasTransitionAll=q.hasTransitions&&"all"==y.transitionProperty;q.applyTransitionDuration=r&&(q.hasTransitions&&!q.hasTransitionAll||q.hasAnimations&&!q.hasTransitions);q.applyAnimationDuration=
c.duration&&q.hasAnimations;q.applyTransitionDelay=la(c.delay)&&(q.applyTransitionDuration||q.hasTransitions);q.applyAnimationDelay=la(c.delay)&&q.hasAnimations;q.recalculateTimingStyles=0<N.length;if(q.applyTransitionDuration||q.applyAnimationDuration)J=c.duration?parseFloat(c.duration):J,q.applyTransitionDuration&&(q.hasTransitions=!0,y.transitionDuration=J,v=0<k.style[O+"Property"].length,m.push(Aa(J,v))),q.applyAnimationDuration&&(q.hasAnimations=!0,y.animationDuration=J,m.push([sa,J+"s"]));if(0===
J&&!q.recalculateTimingStyles)return x();null==c.duration&&0<y.transitionDuration&&(q.recalculateTimingStyles=q.recalculateTimingStyles||aa);F=1E3*H;G=1E3*J;c.skipBlocking||(q.blockTransition=0<y.transitionDuration,q.blockKeyframeAnimation=0<y.animationDuration&&0<T.animationDelay&&0===T.animationDuration);wa(a,c);q.blockTransition||ja(k,!1);L(J);return{$$willAnimate:!0,end:d,start:function(){if(!K)return t={end:d,cancel:g,resume:null,pause:null},p=new s(t),I(M),p}}}}]}]).provider("$$animateCssDriver",
["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$document","$sniffer",function(a,c,d,e,s,n){function g(a){return a.replace(/\bng-\S+\b/g,"")}function l(a,b){U(a)&&(a=a.split(" "));U(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function D(c,e,z){function D(a){var b={},c=A(a).getBoundingClientRect();u(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=
I.scrollTop;break;case "left":d+=I.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function s(){var c=g(z.attr("class")||""),d=l(c,t),c=l(t,c),d=a(n,{to:D(z),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function f(){n.remove();e.removeClass("ng-animate-shim");z.removeClass("ng-animate-shim")}var n=G(A(e).cloneNode(!0)),t=g(n.attr("class")||"");e.addClass("ng-animate-shim");z.addClass("ng-animate-shim");n.addClass("ng-anchor");w.append(n);var h;c=
function(){var c=a(n,{addClass:"ng-anchor-out",delay:!0,from:D(e)});return c.$$willAnimate?c:null}();if(!c&&(h=s(),!h))return f();var L=c||h;return{start:function(){function a(){c&&c.end()}var b,c=L.start();c.done(function(){c=null;if(!h&&(h=s()))return c=h.start(),c.done(function(){c=null;f();b.complete()}),c;f();b.complete()});return b=new d({end:a,cancel:a})}}}function z(a,b,c,e){var g=t(a),f=t(b),l=[];u(e,function(a){(a=D(c,a.out,a["in"]))&&l.push(a)});if(g||f||0!==l.length)return{start:function(){function a(){u(b,
function(a){a.end()})}var b=[];g&&b.push(g.start());f&&b.push(f.start());u(l,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function t(c){var d=c.element,e=c.options||{};c.structural?(e.structural=e.applyClassesEarly=!0,e.event=c.event,"leave"===e.event&&(e.onDone=e.domOperation)):e.event=null;c=a(d,e);return c.$$willAnimate?c:null}if(!n.animations&&!n.transitions)return H;var I=A(s).body;c=A(e);var w=G(I.parentNode===c?I:c);return function(a){return a.from&&
a.to?z(a.from,a.to,a.classes,a.anchors):t(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$rAFMutex","$$jqLite",function(b,c,d,e){function s(c){c=X(c)?c:c.split(" ");for(var d=[],e={},z=0;z<c.length;z++){var n=c[z],s=a.$$registeredAnimations[n];s&&!e[n]&&(d.push(b.get(s)),e[n]=!0)}return d}var n=ha(e);return function(a,b,d,e){function t(){e.domOperation();n(a,e)}function A(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=
[b,r,K,f];break;case "addClass":b=[b,r,f];break;case "removeClass":b=[b,K,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Ca(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Ca(a))return a;return H}function w(a,b,d,e,f){var m=[];u(e,function(e){var g=e[f];g&&m.push(function(){var e,f,m=!1,k=function(a){m||(m=!0,(f||H)(a),e.complete(!a))};e=new c({end:function(){k()},cancel:function(){k(!0)}});f=A(g,a,b,d,function(a){k(!1===a)});return e})});return m}function B(a,b,d,e,f){var m=w(a,
b,d,e,f);if(0===m.length){var g,l;"beforeSetClass"===f?(g=w(a,"removeClass",d,e,"beforeRemoveClass"),l=w(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(g=w(a,"removeClass",d,e,"removeClass"),l=w(a,"addClass",d,e,"addClass"));g&&(m=m.concat(g));l&&(m=m.concat(l))}if(0!==m.length)return function(a){var b=[];m.length&&u(m,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){u(b,function(b){a?b.cancel():b.end()})}}}3===arguments.length&&na(d)&&(e=d,d=null);e=ia(e);d||(d=a.attr("class")||
"",e.addClass&&(d+=" "+e.addClass),e.removeClass&&(d+=" "+e.removeClass));var r=e.addClass,K=e.removeClass,C=s(d),E,f;if(C.length){var F,G;"leave"==b?(G="leave",F="afterLeave"):(G="before"+b.charAt(0).toUpperCase()+b.substr(1),F=b);"enter"!==b&&"move"!==b&&(E=B(a,b,e,C,G));f=B(a,b,e,C,F)}if(E||f)return{start:function(){function b(c){n=!0;t();ca(a,e);k.complete(c)}var d,l=[];E&&l.push(function(a){d=E(a)});l.length?l.push(function(a){t();a(!0)}):t();f&&l.push(function(a){d=f(a)});var n=!1,k=new c({end:function(){n||
((d||H)(void 0),b(void 0))},cancel:function(){n||((d||H)(!0),b(!0))}});c.chain(l,b);return k}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),n=d(a.to);if(b||n)return{start:function(){function a(){return function(){u(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());
n&&d.push(n.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);
//# sourceMappingURL=angular-animate.min.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
{
"name": "angular-animate",
"version": "1.4.2",
"main": "./angular-animate.js",
"ignore": [],
"dependencies": {
"angular": "1.4.2"
}
}

View File

@@ -0,0 +1,2 @@
require('./angular-animate');
module.exports = 'ngAnimate';

View File

@@ -0,0 +1,26 @@
{
"name": "angular-animate",
"version": "1.4.2",
"description": "AngularJS module for animations",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/angular/angular.js.git"
},
"keywords": [
"angular",
"framework",
"browser",
"animation",
"client-side"
],
"author": "Angular Core Team <angular-core+npm@google.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
"homepage": "http://angularjs.org"
}

View File

@@ -0,0 +1,19 @@
{
"name": "angular-aria",
"version": "1.4.2",
"main": "./angular-aria.js",
"ignore": [],
"dependencies": {
"angular": "1.4.2"
},
"homepage": "https://github.com/angular/bower-angular-aria",
"_release": "1.4.2",
"_resolution": {
"type": "version",
"tag": "v1.4.2",
"commit": "b5b37f3d12b8b23f2a0212efd08c1902216d2d8c"
},
"_source": "git://github.com/angular/bower-angular-aria.git",
"_target": "^1.3.15 || >1.4.0-beta.0",
"_originalSource": "angular-aria"
}

View File

@@ -0,0 +1,67 @@
# packaged angular-aria
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAria).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular-aria
```
Then add `ngAria` as a dependency for your app:
```javascript
angular.module('myApp', [require('angular-aria')]);
```
### bower
```shell
bower install angular-aria
```
Add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular-aria/angular-aria.js"></script>
```
Then add `ngAria` as a dependency for your app:
```javascript
angular.module('myApp', ['ngAria']);
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/api/ngAria).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,393 @@
/**
* @license AngularJS v1.4.2
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window, angular, undefined) {'use strict';
/**
* @ngdoc module
* @name ngAria
* @description
*
* The `ngAria` module provides support for common
* [<abbr title="Accessible Rich Internet Applications">ARIA</abbr>](http://www.w3.org/TR/wai-aria/)
* attributes that convey state or semantic information about the application for users
* of assistive technologies, such as screen readers.
*
* <div doc-module-components="ngAria"></div>
*
* ## Usage
*
* For ngAria to do its magic, simply include the module `ngAria` as a dependency. The following
* directives are supported:
* `ngModel`, `ngDisabled`, `ngShow`, `ngHide`, `ngClick`, `ngDblClick`, and `ngMessages`.
*
* Below is a more detailed breakdown of the attributes handled by ngAria:
*
* | Directive | Supported Attributes |
* |---------------------------------------------|----------------------------------------------------------------------------------------|
* | {@link ng.directive:ngDisabled ngDisabled} | aria-disabled |
* | {@link ng.directive:ngShow ngShow} | aria-hidden |
* | {@link ng.directive:ngHide ngHide} | aria-hidden |
* | {@link ng.directive:ngDblclick ngDblclick} | tabindex |
* | {@link module:ngMessages ngMessages} | aria-live |
* | {@link ng.directive:ngModel ngModel} | aria-checked, aria-valuemin, aria-valuemax, aria-valuenow, aria-invalid, aria-required, input roles |
* | {@link ng.directive:ngClick ngClick} | tabindex, keypress event, button role |
*
* Find out more information about each directive by reading the
* {@link guide/accessibility ngAria Developer Guide}.
*
* ##Example
* Using ngDisabled with ngAria:
* ```html
* <md-checkbox ng-disabled="disabled">
* ```
* Becomes:
* ```html
* <md-checkbox ng-disabled="disabled" aria-disabled="true">
* ```
*
* ##Disabling Attributes
* It's possible to disable individual attributes added by ngAria with the
* {@link ngAria.$ariaProvider#config config} method. For more details, see the
* {@link guide/accessibility Developer Guide}.
*/
/* global -ngAriaModule */
var ngAriaModule = angular.module('ngAria', ['ng']).
provider('$aria', $AriaProvider);
/**
* @ngdoc provider
* @name $ariaProvider
*
* @description
*
* Used for configuring the ARIA attributes injected and managed by ngAria.
*
* ```js
* angular.module('myApp', ['ngAria'], function config($ariaProvider) {
* $ariaProvider.config({
* ariaValue: true,
* tabindex: false
* });
* });
*```
*
* ## Dependencies
* Requires the {@link ngAria} module to be installed.
*
*/
function $AriaProvider() {
var config = {
ariaHidden: true,
ariaChecked: true,
ariaDisabled: true,
ariaRequired: true,
ariaInvalid: true,
ariaMultiline: true,
ariaValue: true,
tabindex: true,
bindKeypress: true,
bindRoleForClick: true
};
/**
* @ngdoc method
* @name $ariaProvider#config
*
* @param {object} config object to enable/disable specific ARIA attributes
*
* - **ariaHidden** `{boolean}` Enables/disables aria-hidden tags
* - **ariaChecked** `{boolean}` Enables/disables aria-checked tags
* - **ariaDisabled** `{boolean}` Enables/disables aria-disabled tags
* - **ariaRequired** `{boolean}` Enables/disables aria-required tags
* - **ariaInvalid** `{boolean}` Enables/disables aria-invalid tags
* - **ariaMultiline** `{boolean}` Enables/disables aria-multiline tags
* - **ariaValue** `{boolean}` Enables/disables aria-valuemin, aria-valuemax and aria-valuenow tags
* - **tabindex** `{boolean}` Enables/disables tabindex tags
* - **bindKeypress** `{boolean}` Enables/disables keypress event binding on `&lt;div&gt;` and
* `&lt;li&gt;` elements with ng-click
* - **bindRoleForClick** `{boolean}` Adds role=button to non-interactive elements like `div`
* using ng-click, making them more accessible to users of assistive technologies
*
* @description
* Enables/disables various ARIA attributes
*/
this.config = function(newConfig) {
config = angular.extend(config, newConfig);
};
function watchExpr(attrName, ariaAttr, negate) {
return function(scope, elem, attr) {
var ariaCamelName = attr.$normalize(ariaAttr);
if (config[ariaCamelName] && !attr[ariaCamelName]) {
scope.$watch(attr[attrName], function(boolVal) {
// ensure boolean value
boolVal = negate ? !boolVal : !!boolVal;
elem.attr(ariaAttr, boolVal);
});
}
};
}
/**
* @ngdoc service
* @name $aria
*
* @description
* @priority 200
*
* The $aria service contains helper methods for applying common
* [ARIA](http://www.w3.org/TR/wai-aria/) attributes to HTML directives.
*
* ngAria injects common accessibility attributes that tell assistive technologies when HTML
* elements are enabled, selected, hidden, and more. To see how this is performed with ngAria,
* let's review a code snippet from ngAria itself:
*
*```js
* ngAriaModule.directive('ngDisabled', ['$aria', function($aria) {
* return $aria.$$watchExpr('ngDisabled', 'aria-disabled');
* }])
*```
* Shown above, the ngAria module creates a directive with the same signature as the
* traditional `ng-disabled` directive. But this ngAria version is dedicated to
* solely managing accessibility attributes. The internal `$aria` service is used to watch the
* boolean attribute `ngDisabled`. If it has not been explicitly set by the developer,
* `aria-disabled` is injected as an attribute with its value synchronized to the value in
* `ngDisabled`.
*
* Because ngAria hooks into the `ng-disabled` directive, developers do not have to do
* anything to enable this feature. The `aria-disabled` attribute is automatically managed
* simply as a silent side-effect of using `ng-disabled` with the ngAria module.
*
* The full list of directives that interface with ngAria:
* * **ngModel**
* * **ngShow**
* * **ngHide**
* * **ngClick**
* * **ngDblclick**
* * **ngMessages**
* * **ngDisabled**
*
* Read the {@link guide/accessibility ngAria Developer Guide} for a thorough explanation of each
* directive.
*
*
* ## Dependencies
* Requires the {@link ngAria} module to be installed.
*/
this.$get = function() {
return {
config: function(key) {
return config[key];
},
$$watchExpr: watchExpr
};
};
}
ngAriaModule.directive('ngShow', ['$aria', function($aria) {
return $aria.$$watchExpr('ngShow', 'aria-hidden', true);
}])
.directive('ngHide', ['$aria', function($aria) {
return $aria.$$watchExpr('ngHide', 'aria-hidden', false);
}])
.directive('ngModel', ['$aria', function($aria) {
function shouldAttachAttr(attr, normalizedAttr, elem) {
return $aria.config(normalizedAttr) && !elem.attr(attr);
}
function shouldAttachRole(role, elem) {
return !elem.attr('role') && (elem.attr('type') === role) && (elem[0].nodeName !== 'INPUT');
}
function getShape(attr, elem) {
var type = attr.type,
role = attr.role;
return ((type || role) === 'checkbox' || role === 'menuitemcheckbox') ? 'checkbox' :
((type || role) === 'radio' || role === 'menuitemradio') ? 'radio' :
(type === 'range' || role === 'progressbar' || role === 'slider') ? 'range' :
(type || role) === 'textbox' || elem[0].nodeName === 'TEXTAREA' ? 'multiline' : '';
}
return {
restrict: 'A',
require: '?ngModel',
priority: 200, //Make sure watches are fired after any other directives that affect the ngModel value
compile: function(elem, attr) {
var shape = getShape(attr, elem);
return {
pre: function(scope, elem, attr, ngModel) {
if (shape === 'checkbox' && attr.type !== 'checkbox') {
//Use the input[checkbox] $isEmpty implementation for elements with checkbox roles
ngModel.$isEmpty = function(value) {
return value === false;
};
}
},
post: function(scope, elem, attr, ngModel) {
var needsTabIndex = shouldAttachAttr('tabindex', 'tabindex', elem);
function ngAriaWatchModelValue() {
return ngModel.$modelValue;
}
function getRadioReaction() {
if (needsTabIndex) {
needsTabIndex = false;
return function ngAriaRadioReaction(newVal) {
var boolVal = (attr.value == ngModel.$viewValue);
elem.attr('aria-checked', boolVal);
elem.attr('tabindex', 0 - !boolVal);
};
} else {
return function ngAriaRadioReaction(newVal) {
elem.attr('aria-checked', (attr.value == ngModel.$viewValue));
};
}
}
function ngAriaCheckboxReaction() {
elem.attr('aria-checked', !ngModel.$isEmpty(ngModel.$viewValue));
}
switch (shape) {
case 'radio':
case 'checkbox':
if (shouldAttachRole(shape, elem)) {
elem.attr('role', shape);
}
if (shouldAttachAttr('aria-checked', 'ariaChecked', elem)) {
scope.$watch(ngAriaWatchModelValue, shape === 'radio' ?
getRadioReaction() : ngAriaCheckboxReaction);
}
break;
case 'range':
if (shouldAttachRole(shape, elem)) {
elem.attr('role', 'slider');
}
if ($aria.config('ariaValue')) {
var needsAriaValuemin = !elem.attr('aria-valuemin') &&
(attr.hasOwnProperty('min') || attr.hasOwnProperty('ngMin'));
var needsAriaValuemax = !elem.attr('aria-valuemax') &&
(attr.hasOwnProperty('max') || attr.hasOwnProperty('ngMax'));
var needsAriaValuenow = !elem.attr('aria-valuenow');
if (needsAriaValuemin) {
attr.$observe('min', function ngAriaValueMinReaction(newVal) {
elem.attr('aria-valuemin', newVal);
});
}
if (needsAriaValuemax) {
attr.$observe('max', function ngAriaValueMinReaction(newVal) {
elem.attr('aria-valuemax', newVal);
});
}
if (needsAriaValuenow) {
scope.$watch(ngAriaWatchModelValue, function ngAriaValueNowReaction(newVal) {
elem.attr('aria-valuenow', newVal);
});
}
}
break;
case 'multiline':
if (shouldAttachAttr('aria-multiline', 'ariaMultiline', elem)) {
elem.attr('aria-multiline', true);
}
break;
}
if (needsTabIndex) {
elem.attr('tabindex', 0);
}
if (ngModel.$validators.required && shouldAttachAttr('aria-required', 'ariaRequired', elem)) {
scope.$watch(function ngAriaRequiredWatch() {
return ngModel.$error.required;
}, function ngAriaRequiredReaction(newVal) {
elem.attr('aria-required', !!newVal);
});
}
if (shouldAttachAttr('aria-invalid', 'ariaInvalid', elem)) {
scope.$watch(function ngAriaInvalidWatch() {
return ngModel.$invalid;
}, function ngAriaInvalidReaction(newVal) {
elem.attr('aria-invalid', !!newVal);
});
}
}
};
}
};
}])
.directive('ngDisabled', ['$aria', function($aria) {
return $aria.$$watchExpr('ngDisabled', 'aria-disabled');
}])
.directive('ngMessages', function() {
return {
restrict: 'A',
require: '?ngMessages',
link: function(scope, elem, attr, ngMessages) {
if (!elem.attr('aria-live')) {
elem.attr('aria-live', 'assertive');
}
}
};
})
.directive('ngClick',['$aria', '$parse', function($aria, $parse) {
return {
restrict: 'A',
compile: function(elem, attr) {
var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true);
return function(scope, elem, attr) {
var nodeBlackList = ['BUTTON', 'A', 'INPUT', 'TEXTAREA'];
function isNodeOneOf(elem, nodeTypeArray) {
if (nodeTypeArray.indexOf(elem[0].nodeName) !== -1) {
return true;
}
}
if ($aria.config('bindRoleForClick')
&& !elem.attr('role')
&& !isNodeOneOf(elem, nodeBlackList)) {
elem.attr('role', 'button');
}
if ($aria.config('tabindex') && !elem.attr('tabindex')) {
elem.attr('tabindex', 0);
}
if ($aria.config('bindKeypress') && !attr.ngKeypress && !isNodeOneOf(elem, nodeBlackList)) {
elem.on('keypress', function(event) {
var keyCode = event.which || event.keyCode;
if (keyCode === 32 || keyCode === 13) {
scope.$apply(callback);
}
function callback() {
fn(scope, { $event: event });
}
});
}
};
}
};
}])
.directive('ngDblclick', ['$aria', function($aria) {
return function(scope, elem, attr) {
if ($aria.config('tabindex') && !elem.attr('tabindex')) {
elem.attr('tabindex', 0);
}
};
}]);
})(window, window.angular);

View File

@@ -0,0 +1,13 @@
/*
AngularJS v1.4.2
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
(function(s,n,t){'use strict';n.module("ngAria",["ng"]).provider("$aria",function(){function a(a,f,l){return function(m,d,e){var b=e.$normalize(f);c[b]&&!e[b]&&m.$watch(e[a],function(b){b=l?!b:!!b;d.attr(f,b)})}}var c={ariaHidden:!0,ariaChecked:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaMultiline:!0,ariaValue:!0,tabindex:!0,bindKeypress:!0,bindRoleForClick:!0};this.config=function(a){c=n.extend(c,a)};this.$get=function(){return{config:function(a){return c[a]},$$watchExpr:a}}}).directive("ngShow",
["$aria",function(a){return a.$$watchExpr("ngShow","aria-hidden",!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",!1)}]).directive("ngModel",["$aria",function(a){function c(c,m,d){return a.config(m)&&!d.attr(c)}function k(a,c){return!c.attr("role")&&c.attr("type")===a&&"INPUT"!==c[0].nodeName}function f(a,c){var d=a.type,e=a.role;return"checkbox"===(d||e)||"menuitemcheckbox"===e?"checkbox":"radio"===(d||e)||"menuitemradio"===e?"radio":"range"===d||"progressbar"===
e||"slider"===e?"range":"textbox"===(d||e)||"TEXTAREA"===c[0].nodeName?"multiline":""}return{restrict:"A",require:"?ngModel",priority:200,compile:function(l,m){var d=f(m,l);return{pre:function(a,b,c,g){"checkbox"===d&&"checkbox"!==c.type&&(g.$isEmpty=function(b){return!1===b})},post:function(e,b,h,g){function f(){return g.$modelValue}function m(){return p?(p=!1,function(a){a=h.value==g.$viewValue;b.attr("aria-checked",a);b.attr("tabindex",0-!a)}):function(a){b.attr("aria-checked",h.value==g.$viewValue)}}
function l(){b.attr("aria-checked",!g.$isEmpty(g.$viewValue))}var p=c("tabindex","tabindex",b);switch(d){case "radio":case "checkbox":k(d,b)&&b.attr("role",d);c("aria-checked","ariaChecked",b)&&e.$watch(f,"radio"===d?m():l);break;case "range":k(d,b)&&b.attr("role","slider");if(a.config("ariaValue")){var n=!b.attr("aria-valuemin")&&(h.hasOwnProperty("min")||h.hasOwnProperty("ngMin")),q=!b.attr("aria-valuemax")&&(h.hasOwnProperty("max")||h.hasOwnProperty("ngMax")),r=!b.attr("aria-valuenow");n&&h.$observe("min",
function(a){b.attr("aria-valuemin",a)});q&&h.$observe("max",function(a){b.attr("aria-valuemax",a)});r&&e.$watch(f,function(a){b.attr("aria-valuenow",a)})}break;case "multiline":c("aria-multiline","ariaMultiline",b)&&b.attr("aria-multiline",!0)}p&&b.attr("tabindex",0);g.$validators.required&&c("aria-required","ariaRequired",b)&&e.$watch(function(){return g.$error.required},function(a){b.attr("aria-required",!!a)});c("aria-invalid","ariaInvalid",b)&&e.$watch(function(){return g.$invalid},function(a){b.attr("aria-invalid",
!!a)})}}}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled")}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,c,k,f){c.attr("aria-live")||c.attr("aria-live","assertive")}}}).directive("ngClick",["$aria","$parse",function(a,c){return{restrict:"A",compile:function(k,f){var l=c(f.ngClick,null,!0);return function(c,d,e){function b(a,b){if(-1!==b.indexOf(a[0].nodeName))return!0}var f=["BUTTON","A","INPUT","TEXTAREA"];
!a.config("bindRoleForClick")||d.attr("role")||b(d,f)||d.attr("role","button");a.config("tabindex")&&!d.attr("tabindex")&&d.attr("tabindex",0);if(a.config("bindKeypress")&&!e.ngKeypress&&!b(d,f))d.on("keypress",function(a){function b(){l(c,{$event:a})}var d=a.which||a.keyCode;32!==d&&13!==d||c.$apply(b)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(c,k,f){a.config("tabindex")&&!k.attr("tabindex")&&k.attr("tabindex",0)}}])})(window,window.angular);
//# sourceMappingURL=angular-aria.min.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,9 @@
{
"name": "angular-aria",
"version": "1.4.2",
"main": "./angular-aria.js",
"ignore": [],
"dependencies": {
"angular": "1.4.2"
}
}

View File

@@ -0,0 +1,2 @@
require('./angular-aria');
module.exports = 'ngAria';

View File

@@ -0,0 +1,27 @@
{
"name": "angular-aria",
"version": "1.4.2",
"description": "AngularJS module for making accessibility easy",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/angular/angular.js.git"
},
"keywords": [
"angular",
"framework",
"browser",
"accessibility",
"a11y",
"client-side"
],
"author": "Angular Core Team <angular-core+npm@google.com>",
"license": "MIT",
"bugs": {
"url": "https://github.com/angular/angular.js/issues"
},
"homepage": "http://angularjs.org"
}

View File

@@ -0,0 +1,25 @@
{
"name": "angular-material",
"version": "0.10.0",
"ignore": [],
"dependencies": {
"angular": "^1.3.0 || >1.4.0-beta.0",
"angular-animate": "^1.3.0 || >1.4.0-beta.0",
"angular-aria": "^1.3.15 || >1.4.0-beta.0"
},
"main": [
"angular-material.js",
"angular-material.css"
],
"homepage": "https://github.com/angular/bower-material",
"_release": "0.10.0",
"_resolution": {
"type": "version",
"tag": "v0.10.0",
"commit": "1e48d39c2be9aa2bf6ebb212f978947d7e52e608"
},
"_source": "git://github.com/angular/bower-material.git",
"_target": "~0.10.0",
"_originalSource": "angular-material",
"_direct": true
}

View File

@@ -0,0 +1,5 @@
*.log
*.sw*
.DS_STORE
/.idea/
default-theme.css

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,21 @@
The MIT License
Copyright (c) 2014 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,211 @@
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main Angular Material repo](https://github.com/angular/material).
Please file issues and pull requests against that repo.
## Installing Angular Material
You can install this package locally either with `npm`, `jspm`, or `bower`.
### npm
```shell
# To install latest formal release
npm install angular-material
# To install latest release and update package.json
npm install angular-material --save-dev
# To install from HEAD of master
npm install http://github.com/angular/bower-material/tarball/master
# To view all installed package
npm list;
```
### jspm
```shell
# To install latest formal release
jspm install angular-material;
# To install from HEAD of master
jspm install angular-material=github:angular/bower-material@master;
# To view all installed package versions
jspm inspect;
```
Now you can use `require('angular-material')` when installing with npm or jsmp and using Browserify or Webpack.
### bower
```shell
# To get the latest stable version, use bower from the command line.
bower install angular-material
# To get the most recent, last committed-to-master version use:
bower install angular-material#master
# To save the bower settings for future use:
bower install angular-material --save
# Later, you can use easily update with:
bower update
```
> Please note that Angular Material requires **Angular 1.3.x** or higher.
## Using the Angular Material Library
Now that you have installed the Angular libraries, simply include the scripts and
stylesheet in your main HTML file, in the order shown in the example below. Note that npm
will install the files under `/node_modules/angular-material/` and bower will install them
under `/bower_components/angular-material/`.
### npm
```html
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
<link rel="stylesheet" href="/node_modules/angular-material/angular-material.css">
</head>
<body ng-app="YourApp">
<div ng-controller="YourController">
</div>
<script src="/node_modules/angular/angular.js"></script>
<script src="/node_modules/angular-aria/angular-aria.js"></script>
<script src="/node_modules/angular-animate/angular-animate.js"></script>
<script src="/node_modules/angular-material/angular-material.js"></script>
<script>
// Include app dependency on ngMaterial
angular.module( 'YourApp', [ 'ngMaterial' ] )
.controller("YourController", YourController );
</script>
</body>
</html>
```
### bower
```html
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
<link rel="stylesheet" href="/bower_components/angular-material/angular-material.css">
</head>
<body ng-app="YourApp">
<div ng-controller="YourController">
</div>
<script src="/bower_components/angular/angular.js"></script>
<script src="/bower_components/angular-aria/angular-aria.js"></script>
<script src="/bower_components/angular-animate/angular-animate.js"></script>
<script src="/bower_components/angular-material/angular-material.js"></script>
<script>
// Include app dependency on ngMaterial
angular.module( 'YourApp', [ 'ngMaterial' ] )
.controller("YourController", YourController );
</script>
</body>
</html>
```
## Using the CDN
CDN versions of Angular Material are now available at
[Google Hosted Libraries](https://developers.google.com/speed/libraries/devguide#angularmaterial).
With the Google CDN, you will not need to download local copies of the distribution files.
Instead simply reference the CDN urls to easily use those remote library files.
This is especially useful when using online tools such as CodePen, Plunkr, or jsFiddle.
```html
<head>
<!-- Angular Material CSS now available via Google CDN; version 0.9.4 used here -->
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.css">
</head>
<body>
<!-- Angular Material Dependencies -->
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-animate.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-aria.min.js"></script>
<!-- Angular Material Javascript now available via Google CDN; version 0.9.4 used here -->
<script src="//ajax.googleapis.com/ajax/libs/angular_material/0.9.4/angular-material.min.js"></script>
</body>
```
> Note that the above sample references the 0.9.4 CDN release. Your version will change
based on the latest stable release version.
## Jasmine Testing with Angular Material
<br/>
If you are using Angular Material and will be using Jasmine to test your own custom application code, you will need to also load two (2) Angular mock files:
* Angular Mocks - **angular-mocks.js** from `/node_modules/angular-mocks/angular-mocks.js`
* Angular Material Mocks - **angular-material-mocks.js** from `/node_modules/angular-material/angular-material-mocks.js`
<br/>
Shown below is a karma-configuration file (`karma.conf.js`) sample that may be a useful template for your own testing purposes:<br/><br/>
```js
module.exports = function(config) {
var SRC = [
'src/myApp/**/*.js',
'test/myApp/**/*.spec.js'
];
var LIBS = [
'node_modules/angular/angular.js',
'node_modules/angular-animate/angular-animate.js',
'node_modules/angular-aria/angular-aria.js',
'node_modules/angular-material/angular-material.js',
'node_modules/angular-mocks/angular-mocks.js',
'node_modules/angular-material/angular-material-mocks.js'
];
config.set({
basePath: __dirname + '/..',
frameworks: ['jasmine'],
files: LIBS.concat(SRC),
port: 9876,
reporters: ['progress'],
colors: true,
autoWatch: false,
singleRun: true,
browsers: ['PhantomJS,Chrome']
});
};
```

View File

@@ -0,0 +1,77 @@
/**
*
* Angular-Material-Mocks
*
* Developers interested in running their own custom unit tests WITH angular-material.js loaded...
* must also include this *mocks* file. Similar to `angular-mocks.js`, `angular-material-mocks.js`
* will override and disable specific Angular Material performance settings:
*
* - Disabled Theme CSS rule generations
* - Forces $mdAria.expectWithText() to be synchronous
* - Mocks $$rAF.throttle()
* - Captures flush exceptions from $$rAF
*
*/
(function(window, angular, undefined) {
'use strict';
/**
* @ngdoc module
* @name ngMaterial-mock
* @packageName angular-material-mocks
*
* @description
*
* The `ngMaterial-mock` module provides support
*
*/
angular.module('ngMaterial-mock', ['ngMock', 'material.core'])
.config(['$provide', function($provide) {
/**
* Angular Material dynamically generates Style tags
* based on themes and palletes; for each ng-app.
*
* For testing, we want to disable generation and
* <style> DOM injections. So we clear the huge THEME
* styles while testing...
*/
$provide.constant('$MD_THEME_CSS', '/**/');
/**
* Intercept to make .expectWithText() to be synchronous
*/
$provide.decorator('$mdAria', function($delegate){
$delegate.expectWithText = function(element, attrName){
$delegate.expect(element, attrName, element.text().trim());
};
return $delegate;
});
/**
* Add throttle() and wrap .flush() to catch `no callbacks present`
* errors
*/
$provide.decorator('$$rAF', function throttleInjector($delegate){
$delegate.throttle = function(cb) {
return function() {
cb.apply(this, arguments);
};
};
var ngFlush = $delegate.flush;
$delegate.flush = function() {
try { ngFlush(); }
catch(e) { ; }
};
return $delegate;
});
}]);
})(window, window.angular);

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,14 @@
{
"name": "angular-material",
"version": "0.10.0",
"ignore": [],
"dependencies": {
"angular": "^1.3.0 || >1.4.0-beta.0",
"angular-animate": "^1.3.0 || >1.4.0-beta.0",
"angular-aria": "^1.3.15 || >1.4.0-beta.0"
},
"main": [
"angular-material.js",
"angular-material.css"
]
}

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"><g><g><rect fill="none" width="24" height="24"/><path fill="#7d7d7d" d="M16,1H4C2.9,1,2,1.9,2,3v14h2V3h12V1z M19,5H8C6.9,5,6,5.9,6,7v14c0,1.1,0.9,2,2,2h11c1.1,0,2-0.9,2-2V7C21,5.9,20.1,5,19,5z M19,21H8V7h11V21z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 365 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><rect fill="none" width="48" height="48"/><path fill="#7d7d7d" d="M32,2H8C5.8,2,4,3.8,4,6v28h4V6h24V2z M38,10H16c-2.2,0-4,1.8-4,4v28c0,2.2,1.8,4,4,4h22c2.2,0,4-1.8,4-4V14C42,11.8,40.2,10,38,10z M38,42H16V14h22V42z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 374 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><g><path fill="#7d7d7d" d="M40,4H8C5.8,4,4,5.8,4,8l0,32c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V8C44,5.8,42.2,4,40,4z M38,8v6h-4c-1.1,0-2,0.9-2,2v4h6v6h-6v14h-6V26h-4v-6h4v-5c0-3.9,3.1-7,7-7H38z"/></g><g><rect fill="none" width="48" height="48"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 403 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><path fill="#159F5C" d="M23,4C13.6,4,6,11.6,6,21s7.6,17,17,17h1v7c9.7-4.7,16-15,16-24C40,11.6,32.4,4,23,4z M22,22l-2,4h-3l2-4h-3v-6h6V22zM30,22l-2,4h-3l2-4h-3v-6h6V22z"/><rect x="0" fill="none" width="48" height="48"/></g></g></svg>

After

Width:  |  Height:  |  Size: 376 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><path fill="#7d7d7d" d="M40,8H8c-2.2,0-4,1.8-4,4l0,24c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V12C44,9.8,42.2,8,40,8z M40,16L24,26L8,16v-4l16,10l16-10V16z"/><rect fill="none" width="48" height="48"/></g></g></svg>

After

Width:  |  Height:  |  Size: 351 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><path fill="#7d7d7d" d="M40,4H8C5.8,4,4,5.8,4,8l0,36l8-8h28c2.2,0,4-1.8,4-4V8C44,5.8,42.2,4,40,4z M36,28H12v-4h24V28z M36,22H12v-4h24V22zM36,16H12v-4h24V16z"/><rect x="0" fill="none" width="48" height="48"/></g></g></svg>

After

Width:  |  Height:  |  Size: 365 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="24px"height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"><g><g><g><path d="M19,8H5c-1.7,0-3,1.3-3,3v6h4v4h12v-4h4v-6C22,9.3,20.7,8,19,8z M16,19H8v-5h8V19z M19,12c-0.6,0-1-0.4-1-1s0.4-1,1-1c0.6,0,1,0.4,1,1S19.6,12,19,12z M18,3H6v4h12V3z" fill="#7d7d7d"/></g><rect fill="none" width="24" height="24"/></g></g></svg>

After

Width:  |  Height:  |  Size: 393 B

View File

@@ -0,0 +1,2 @@
<svg version="1.1" x="0px" y="0px" width="48px" height="48px" viewBox="0 0 48 48" enable-background="new 0 0 48 48" xml:space="preserve"><g><g><g><path fill="#7d7d7d" d="M40,4H8C5.8,4,4,5.8,4,8l0,32c0,2.2,1.8,4,4,4h32c2.2,0,4-1.8,4-4V8C44,5.8,42.2,4,40,4z M35.4,18.7c-0.1,9.2-6,15.6-14.8,16c-3.6,0.2-6.3-1-8.6-2.5c2.7,0.4,6-0.6,7.8-2.2c-2.6-0.3-4.2-1.6-4.9-3.8c0.8,0.1,1.6,0.1,2.3-0.1
c-2.4-0.8-4.1-2.3-4.2-5.3c0.7,0.3,1.4,0.6,2.3,0.6c-1.8-1-3.1-4.7-1.6-7.2c2.6,2.9,5.8,5.3,11,5.6c-1.3-5.6,6.1-8.6,9.2-4.9c1.3-0.3,2.4-0.8,3.4-1.3c-0.4,1.3-1.2,2.2-2.2,2.9c1.1-0.1,2.1-0.4,2.9-0.8C37.5,16.9,36.4,17.9,35.4,18.7z"/></g><g><rect fill="none" width="48" height="48"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 680 B

View File

@@ -0,0 +1 @@
<svg version="1.1" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"><g><g><rect x="-618" y="-2232" fill="none" width="1400" height="3600"/></g></g><g><g><rect fill="none" width="24" height="24"/><path fill="#7d7d7d" d="M19.4,10c-0.7-3.4-3.7-6-7.4-6C9.1,4,6.6,5.6,5.4,8C2.3,8.4,0,10.9,0,14c0,3.3,2.7,6,6,6h13c2.8,0,5-2.2,5-5C24,12.4,21.9,10.2,19.4,10z M14,13v4h-4v-4H7l5-5l5,5H14z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 466 B

View File

@@ -0,0 +1,39 @@
.custom-chips {
.md-chip {
position: relative;
padding-right: 35px;
.md-chip-remove-container {
position: absolute;
right: 4px;
top: 4px;
margin-right: 0;
height: 24px;
button.vegetablechip {
position: relative;
height: 24px;
width: 24px;
line-height: 30px;
text-align: center;
background: rgba(black, 0.3);
border-radius: 50%;
border: none;
box-shadow: none;
padding: 0;
margin: 0;
transition: background 0.15s linear;
display: block;
md-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate3d(-50%, -50%, 0) scale(0.7);
color: white;
fill: white;
}
&:hover, &:focus {
background: rgba(red, 0.8);
}
}
}
}
}

View File

@@ -0,0 +1,47 @@
md-content.autocomplete {
min-height: 250px;
}
.md-item-text.compact {
padding-top: 8px;
padding-bottom: 8px;
}
.contact-item {
box-sizing: border-box;
&.selected {
opacity: 0.5;
h3 {
opacity: 0.5;
}
}
.md-list-item-text {
padding: 14px 0;
h3 {
margin: 0 !important;
padding: 0;
line-height: 1.2em !important;
}
h3, p {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
}
@media (min-width: 900px) {
float: left;
width: 33%;
}
}
md-contact-chips {
margin-bottom : 10px;
}
.md-chips {
padding: 5px 0 8px;
}
.fixedRows {
height: 250px;
overflow:hidden;
}

Some files were not shown because too many files have changed in this diff Show More