├── .DS_Store ├── README.md ├── css ├── app.css ├── commonFunc.css ├── disease.css └── sports.css ├── img ├── 1.png ├── 2.png └── view.png ├── index.html ├── js ├── .DS_Store ├── app.js ├── controllers │ ├── diseaseCtrl.js │ ├── homeCtrl.js │ ├── loginCtrl.js │ ├── reportCtrl.js │ └── sportsCtrl.js ├── main.js └── routeManager.js ├── libs ├── .DS_Store ├── angular │ ├── .DS_Store │ ├── angular-animate.min.js │ ├── angular-css.min.js │ ├── angular-translate.min.js │ ├── angular-ui-router.min.js │ ├── angular.min.v1.2.js │ ├── angular.min.v1.5.js │ ├── angularAMD.min.js │ └── ngload.min.js ├── jquery │ ├── .DS_Store │ ├── jquery-1.12.4.min.js │ └── jquery-2.2.2.min.js ├── plugin │ └── echarts.min.js └── require.js └── views ├── disease.html ├── home.html ├── login.html ├── report.html └── sports.html /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/.DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # 应用场景 3 | 基于angular的PC端web项目,采用require加载资源,使用angularAMD和angularCSS实现按需加载angular的controllers和css。 4 | 5 | # 项目框架搭建 6 | ### 1、项目目录 7 | 目录结构较简单,index是项目启动首页,js存放项目的自定义js,libs存放第三方插件及工具,views存放页面; 8 | 9 | ![](https://github.com/xingxiaoyiyio/angular-require-case/raw/master/img/1.png) 10 | 11 | ### 2、目录说明 12 | 本项目搭建好的目录包含一个登录页面login,主界面home,三个home页面下的子页面disease、report、sports; 13 | 14 | ### 3、require资源加载 15 | 本项目采用require加载静态资源,main.js是require加载资源的配置文件,内容如下: 16 | 17 | ```javascript 18 | require.config({ 19 | paths: { 20 | //angular 21 | "angular": '../libs/angular/angular.min.v1.2', 22 | //实现angular单页面路由 23 | "uiRouter": '../libs/angular/angular-ui-router.min', 24 | //动态加载js 25 | "angularAMD": '../libs/angular/angularAMD.min', 26 | //动态加载js 27 | "ngload": '../libs/angular/ngload.min', 28 | //动态加载css 29 | "angularCSS": "../libs/angular/angular-css.min", 30 | //jquery引用 31 | "jquery": '../libs/jquery/jquery-1.12.4.min', 32 | //echart插件引用 33 | "echart":'../libs/plugin/echarts.min', 34 | //angular路径文件引用 35 | "routeManager":'routeManager' 36 | }, 37 | shim: { 38 | //定义require加载的优先顺序 39 | "angular": { exports: "angular" }, 40 | "uiRouter": ["angular"], 41 | "angularAMD": ["angular"], 42 | "ngload": ["angularAMD"], 43 | "angularCSS": ["angular"], 44 | 'commonFunc':['jquery'], 45 | 'routeManager':["angularAMD","uiRouter"] 46 | } 47 | }); 48 | 49 | //app.js是定义初始化angular项目的配置 50 | define(["angular", "angularAMD", "uiRouter", "angularCSS","app","jquery" 51 | ], function (angular,angularAMD,uiRouter,angularCSS,myApp) { 52 | //资源加载后手动启动项目angular的app 53 | return angularAMD.bootstrap(myApp); 54 | }); 55 | 56 | ``` 57 | ### 4、app.js配置angular 58 | 59 | ```javascript 60 | //routeManager是路径配置文件 61 | define(['angular', 'routeManager'], 62 | function(angular,RouteManager) { 63 | var myApp = angular.module('starter', ['ui.router',"door3.css"]); 64 | myApp.config( 65 | //配置按需加载contrlloer 66 | ['$controllerProvider', function($controllerProvider) { 67 | myApp.controller = $controllerProvider.register; 68 | }]) 69 | //配置路有文件 70 | .config(RouteManager) 71 | }]) 72 | .run(['$rootScope', '$state', '$window',function($rootScope, $state, $window) { 73 | //$rootScope下可以定义全局方法和全局变量,以下定义了页面跳转的公共方法 74 | $rootScope.go=function(path,param){ 75 | $state.go(path,param); 76 | } 77 | 78 | }]); 79 | 80 | window.app = myApp; 81 | return myApp; 82 | }); 83 | ``` 84 | 85 | ### 5、routeManager.js配置angular路由 86 | 87 | ```javascript 88 | define(["angularAMD"], function (angularAMD) { 89 | 'use strict'; 90 | var routeManager = function($stateProvider, $urlRouterProvider) { 91 | //定义默认路径为登录页面 92 | $urlRouterProvider.otherwise('/login'); 93 | 94 | $stateProvider.state('login', angularAMD.route({ 95 | url: '/login', 96 | controllerUrl: "js/controllers/loginCtrl.js", //登录页面的controller文件 97 | templateUrl: 'views/login.html' //登录页面的文件路径 98 | })) 99 | .state('home', angularAMD.route({ 100 | url: '/home', 101 | cache:'true', 102 | templateUrl: 'views/home.html', 103 | controllerUrl: 'js/controllers/homeCtrl.js' 104 | })) 105 | .state('home.disease', angularAMD.route({ 106 | url: '/disease', //home文件下的子页面 107 | templateUrl:'views/disease.html', 108 | controllerUrl: 'js/controllers/diseaseCtrl.js', //子页面的controller 109 | css:"css/disease.css" //子页面的css文件 110 | 111 | })) 112 | } 113 | 114 | return routeManager; 115 | }); 116 | ``` 117 | 118 | ### 6、运行 119 | git下载下来以后,在服务器中直接运行 120 | web服务器前端开发工具, 121 | sublime建议用 ,sublime-server ; 122 | vsCode建议用 live-server 123 | 124 | ![img](https://github.com/xingxiaoyiyio/angular-require-case/blob/master/img/view.png) 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /css/app.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*-----base-----*/ 4 | body,html{ 5 | height: 100%; 6 | width: 100%; 7 | } 8 | 9 | /*-----indexPage-----*/ 10 | footer{ 11 | text-align: center; 12 | background: #3B8974; 13 | color: #fff; 14 | height: 50px; 15 | line-height: 50px; 16 | position: fixed; 17 | bottom: 0; 18 | width: 100%; 19 | } 20 | 21 | /*-----homePage-----*/ 22 | .homeHeader{ 23 | height: 80px; 24 | width: 100%; 25 | text-align: center; 26 | border-bottom: 1px solid #eee;} 27 | 28 | 29 | .menu-bar{ 30 | width: 150px; 31 | float: left; 32 | border-right: 1px solid #eee; 33 | } 34 | 35 | .main-content{ 36 | height: 100%; 37 | margin-left: 160px; 38 | } -------------------------------------------------------------------------------- /css/commonFunc.css: -------------------------------------------------------------------------------- 1 | 2 | #alertBox{ 3 | width:300px; 4 | display: none; 5 | position: absolute; 6 | top: 30%; 7 | zIndex: 10000; 8 | left: 50%; 9 | margin-left:-150px; 10 | } 11 | 12 | #innerLoadding{ 13 | position:absolute; 14 | width: 100%; 15 | top:0; 16 | bottom:0; 17 | left:0; 18 | background: rgba(255,255,255,0.5); 19 | } 20 | 21 | #innerLoadding .loaddingImg{ 22 | width:40px; 23 | height:40px; 24 | position:absolute; 25 | top:50%; 26 | left:50%; 27 | margin-top:-20px; 28 | margin-left:-20px; 29 | background: url('../../images/smallLoading.gif') no-repeat center center; 30 | background-size:24px 24px; 31 | } 32 | -------------------------------------------------------------------------------- /css/disease.css: -------------------------------------------------------------------------------- 1 | h3{ 2 | color: green; 3 | } -------------------------------------------------------------------------------- /css/sports.css: -------------------------------------------------------------------------------- 1 | 2 | h3{ 3 | color: blue; 4 | } 5 | 6 | #chart{ 7 | margin-top:20px; 8 | height:300px; 9 | width:300px; 10 | } 11 | -------------------------------------------------------------------------------- /img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/img/1.png -------------------------------------------------------------------------------- /img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/img/2.png -------------------------------------------------------------------------------- /img/view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/img/view.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 卫生服务中心 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /js/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/js/.DS_Store -------------------------------------------------------------------------------- /js/app.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by penglijiao on 17/5/19. 3 | */ 4 | 5 | define(['angular', 'routeManager'], 6 | function(angular,RouteManager) { 7 | var myApp = angular.module('starter', ['ui.router',"door3.css"]); 8 | myApp.config( 9 | ['$controllerProvider', function($controllerProvider) { 10 | myApp.controller = $controllerProvider.register; 11 | }]) 12 | .config(RouteManager) 13 | .run(['$rootScope', '$state', '$window',function($rootScope, $state, $window) { 14 | $rootScope.go=function(path,param){ 15 | $state.go(path,param); 16 | } 17 | 18 | }]); 19 | 20 | window.app = myApp; 21 | return myApp; 22 | }); -------------------------------------------------------------------------------- /js/controllers/diseaseCtrl.js: -------------------------------------------------------------------------------- 1 | 2 | define([],function(){ 3 | function homeCtrl($rootScope,$scope) { 4 | $scope.title='这里是疾病风险评估!'; 5 | } 6 | 7 | return homeCtrl; 8 | }); -------------------------------------------------------------------------------- /js/controllers/homeCtrl.js: -------------------------------------------------------------------------------- 1 | 2 | define([],function(){ 3 | function homeCtrl($rootScope,$scope) { 4 | $scope.menus=[ 5 | {name:'disease',label:'疾病风险评估'}, 6 | {name:'sports',label:'运动评估'}, 7 | {name:'report',label:'我的报告'}]; 8 | 9 | $scope.toSubPage=function(name){ 10 | var param={}; 11 | if(name=='report'){ 12 | param={id:1}; 13 | } 14 | $rootScope.go('home.'+name,param) 15 | console.log(name) 16 | } 17 | 18 | } 19 | 20 | return homeCtrl; 21 | }); -------------------------------------------------------------------------------- /js/controllers/loginCtrl.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | define([],function(){ 4 | function homeCtrl($rootScope,$scope) { 5 | $scope.name="欢迎使用健康评估服务终端系统"; 6 | $("#login").click(function(){ 7 | $rootScope.go("home") 8 | }) 9 | 10 | } 11 | 12 | return homeCtrl; 13 | }); -------------------------------------------------------------------------------- /js/controllers/reportCtrl.js: -------------------------------------------------------------------------------- 1 | define([],function(){ 2 | function homeCtrl($rootScope,$scope,$stateParams) { 3 | 4 | console.log($stateParams.id) 5 | $scope.id=$stateParams.id; 6 | 7 | } 8 | 9 | return homeCtrl; 10 | }); -------------------------------------------------------------------------------- /js/controllers/sportsCtrl.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | define(["echart"],function(echart){ 4 | function homeCtrl($rootScope,$scope) { 5 | $scope.title='这里是运动评估!' 6 | $("#testBtn").click(function(){ 7 | alert("你点击了") 8 | }) 9 | var myChart = echart.init(document.getElementById('chart')); 10 | // 指定图表的配置项和数据 11 | var option = { 12 | title: { 13 | text: 'ECharts 插件引入案例示范' 14 | }, 15 | tooltip: {}, 16 | xAxis: { 17 | data: ["体重秤","跑步机","瑜伽垫","健身球","动感单车","仰卧起坐机"] 18 | }, 19 | yAxis: {}, 20 | series: [{ 21 | name: '销量', 22 | type: 'bar', 23 | data: [5, 20, 60, 10, 10, 20] 24 | }] 25 | }; 26 | myChart.setOption(option); 27 | 28 | 29 | } 30 | 31 | return homeCtrl; 32 | }); -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by penglijiao on 17/5/19. 3 | */ 4 | 5 | require.config({ 6 | paths: { 7 | "angular": '../libs/angular/angular.min.v1.2', 8 | "uiRouter": '../libs/angular/angular-ui-router.min', 9 | "angularAMD": '../libs/angular/angularAMD.min', 10 | "ngload": '../libs/angular/ngload.min', 11 | "angularCSS": "../libs/angular/angular-css.min", 12 | "jquery": '../libs/jquery/jquery-1.12.4.min', 13 | "echart":'../libs/plugin/echarts.min', 14 | "commonFunc":"../js/common/commonFunc", 15 | "routeManager":'routeManager' 16 | }, 17 | shim: { 18 | "angular": { exports: "angular" }, 19 | "uiRouter": ["angular"], 20 | "angularAMD": ["angular"], 21 | "ngload": ["angularAMD"], 22 | "angularCSS": ["angular"], 23 | 'commonFunc':['jquery'], 24 | 'routeManager':["angularAMD","uiRouter"] 25 | } 26 | }); 27 | 28 | define(["angular", "angularAMD", "uiRouter", "angularCSS","app","jquery" 29 | ], function (angular,angularAMD,uiRouter,angularCSS,myApp) { 30 | 31 | return angularAMD.bootstrap(myApp); 32 | }); 33 | 34 | 35 | -------------------------------------------------------------------------------- /js/routeManager.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by penglijiao on 17/5/19. 3 | */ 4 | 5 | define(["angularAMD"], function (angularAMD) { 6 | 'use strict'; 7 | var routeManager = function($stateProvider, $urlRouterProvider) { 8 | 9 | $urlRouterProvider.otherwise('/login'); 10 | 11 | $stateProvider.state('login', angularAMD.route({ 12 | url: '/login', 13 | controllerUrl: "js/controllers/loginCtrl.js", 14 | templateUrl: 'views/login.html' 15 | })) 16 | .state('home', angularAMD.route({ 17 | url: '/home', 18 | cache:'true', 19 | templateUrl: 'views/home.html', 20 | controllerUrl: 'js/controllers/homeCtrl.js' 21 | })) 22 | .state('home.disease', angularAMD.route({ 23 | url: '/disease', 24 | templateUrl:'views/disease.html', 25 | controllerUrl: 'js/controllers/diseaseCtrl.js', 26 | css:"css/disease.css" 27 | 28 | })) 29 | .state('home.sports', angularAMD.route({ 30 | url: '/sports', 31 | templateUrl:'views/sports.html', 32 | controllerUrl: 'js/controllers/sportsCtrl.js', 33 | css:"css/sports.css" 34 | })) 35 | .state('home.report', angularAMD.route({ 36 | url: '/report', 37 | params:{"id":""}, 38 | templateUrl:'views/report.html', 39 | controllerUrl: 'js/controllers/reportCtrl.js' 40 | })) 41 | } 42 | 43 | return routeManager; 44 | }); -------------------------------------------------------------------------------- /libs/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/libs/.DS_Store -------------------------------------------------------------------------------- /libs/angular/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xingxiaoyiyio/angular-require-case/4ee59da2f2ac452e1e7403e4472769274c3684ae/libs/angular/.DS_Store -------------------------------------------------------------------------------- /libs/angular/angular-animate.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.4.3 3 | (c) 2010-2015 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (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=F&&b>=J&&(C=!0,m())}if(!K)if(g.parentNode){var x,p=[],k=function(a){if(C)D&&a&&(D=!1,m());else if(D=!a,y.animationDuration)if(a= 37 | ma(g,D),D)l.push(a);else{var b=l,c=b.indexOf(a);0<=a&&b.splice(c,1)}},r=0',y={},z={},A=["print"],B=a.extend({},b),C=a.element(document.querySelector?document.querySelector(B.container):document.getElementsByTagName(B.container)[0]),D=[];return a.forEach(c,function(a,b){a.hasOwnProperty("css")&&(c[b]=q(a.css))}),d.stylesheets=[],C[B.method](i(x)(d)),d.$on("$directiveAdd",m),d.$on("$routeChangeSuccess",n),d.$on("$stateChangeSuccess",o),w.getFromRoute=function(b){if(!b)return l.error("Get From Route: No route provided");var c=null,d=[];return b.$$route&&b.$$route.css?c=b.$$route.css:b.css&&(c=b.css),c&&(a.isArray(c)?a.forEach(c,function(b){a.isFunction(b)&&D.push(q(b)),d.push(q(b))}):(a.isFunction(c)&&D.push(q(c)),d.push(q(c)))),d},w.getFromRoutes=function(b){if(!b)return l.error("Get From Routes: No routes provided");var c=[];return a.forEach(b,function(a){var b=w.getFromRoute(a);b.length&&c.push(b[0])}),c},w.getFromState=function(b){if(!b)return l.error("Get From State: No state provided");var c=[];return a.isDefined(b.views)&&a.forEach(b.views,function(b){b.css&&(a.isFunction(b.css)&&D.push(q(b.css)),c.push(q(b.css)))}),a.isDefined(b.children)&&a.forEach(b.children,function(b){b.css&&(a.isFunction(b.css)&&D.push(q(b.css)),c.push(q(b.css))),a.isDefined(b.children)&&a.forEach(b.children,function(b){b.css&&(a.isFunction(b.css)&&D.push(q(b.css)),c.push(q(b.css)))})}),a.isDefined(b.css)&&(a.isArray(b.css)?a.forEach(b.css,function(b){a.isFunction(b)&&D.push(q(b)),c.push(q(b))}):(a.isFunction(b.css)&&D.push(q(b.css)),c.push(q(b.css)))),c},w.getFromStates=function(b){if(!b)return l.error("Get From States: No states provided");var c=[];return a.forEach(b,function(b){var d=w.getFromState(b);a.isArray(d)?a.forEach(d,function(a){c.push(a)}):c.push(d)}),c},w.preload=function(b,d){b||(b=[],c.length&&Array.prototype.push.apply(b,c),e.has("$route")&&Array.prototype.push.apply(b,w.getFromRoutes(e.get("$route").routes)),e.has("$state")&&Array.prototype.push.apply(b,w.getFromStates(e.get("$state").get())),b=s(b,"preload")),a.isArray(b)||(b=[b]);var g=[];a.forEach(b,function(a,c){a=b[c]=q(a),g.push(j.get(a.href).error(function(){l.error("AngularCSS: Incorrect path for "+a.href)}))}),a.isFunction(d)&&f.all(g).then(function(){d(b)})},w.bind=function(b,c){if(!b||!c)return l.error("No scope or stylesheets provided");var d=[];a.isArray(b)?a.forEach(b,function(a){d.push(q(a))}):d.push(q(b)),w.add(d),l.debug("$css.bind(): Added",d),c.$on("$destroy",function(){w.remove(d),l.debug("$css.bind(): Removed",d)})},w.add=function(b){return b?(a.isArray(b)||(b=[b]),a.forEach(b,function(a){a=q(a),a.href&&!k("filter")(d.stylesheets,{href:a.href}).length&&(r(a),v(a)?t(a):d.stylesheets.push(a),l.debug("$css.add(): "+a.href))}),void d.$broadcast("$cssAdd",b,d.stylesheets)):l.error("No stylesheets provided")},w.remove=function(b){return b?(a.isArray(b)||(b=[b]),b=k("filter")(b,function(a){return!a.persist}),a.forEach(b,function(a){a=q(a);var b=d.stylesheets.indexOf(k("filter")(d.stylesheets,{href:a.href})[0]);-1!==b&&d.stylesheets.splice(b,1),u(a),l.debug("$css.remove(): "+a.href)}),void d.$broadcast("$cssRemove",b,d.stylesheets)):l.error("No stylesheets provided")},w.removeAll=function(){d&&d.hasOwnProperty("stylesheets")&&(d.stylesheets.length=0),l.debug("all stylesheets removed")},w.preload(),w}]}]),b.filter("$cssLinks",function(){return function(b){if(!b||!a.isArray(b))return b;var c="";return a.forEach(b,function(a){c+='");// not chainable, see #1044 14 | return b.text(a),b.html()},g=function(b){if(!a)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.");return a(b)},h=function(a,b,c){if(angular.isObject(a)){var d=angular.isArray(a)?[]:{};if(c){if(c.indexOf(a)>-1)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot interpolate parameter due recursive object")}else c=[];// remove last 15 | return c.push(a),angular.forEach(a,function(a,e){d[e]=h(a,b,c)}),c.splice(-1,1),d}return angular.isNumber(a)?a:b(a)}}function c(a,b,c,d){"use strict";var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u={},v=[],w=a,x=[],y="translate-cloak",z=!1,A=!1,B=".",C=!1,D=0,E=!0,F="default",G={"default":function(a){return(a||"").split("-").join("_")},java:function(a){var b=(a||"").split("-").join("_"),c=b.split("_");return c.length>1?c[0].toLowerCase()+"_"+c[1].toUpperCase():b},bcp47:function(a){var b=(a||"").split("_").join("-"),c=b.split("-");return c.length>1?c[0].toLowerCase()+"-"+c[1].toUpperCase():b},"iso639-1":function(a){var b=(a||"").split("_").join("-"),c=b.split("-");return c[0].toLowerCase()}},H="2.11.0",I=function(){ 16 | // internal purpose only 17 | if(angular.isFunction(d.getLocale))return d.getLocale();var a,c,e=b.$get().navigator,f=["language","browserLanguage","systemLanguage","userLanguage"]; 18 | // support for HTML 5.1 "navigator.languages" 19 | if(angular.isArray(e.languages))for(a=0;ac;c++)if(a[c]===b)return c;return-1},L=function(){return this.toString().replace(/^\s+|\s+$/g,"")},M=function(a){if(a){for(var b=[],c=angular.lowercase(a),d=0,e=v.length;e>d;d++)b.push(angular.lowercase(v[d])); 36 | // Check for an exact match in our list of available keys 37 | if(K(b,c)>-1)return a;if(f){var g;for(var h in f)if(f.hasOwnProperty(h)){var i=!1,j=Object.prototype.hasOwnProperty.call(f,h)&&angular.lowercase(h)===angular.lowercase(a);if("*"===h.slice(-1)&&(i=h.slice(0,-1)===a.slice(0,h.length-1)),(j||i)&&(g=f[h],K(b,angular.lowercase(g))>-1))return g}} 38 | // Check for a language code without region 39 | var k=a.split("_");return k.length>1&&K(b,angular.lowercase(k[0]))>-1?k[0]:void 0}},N=function(a,b){if(!a&&!b)return u;if(a&&!b){if(angular.isString(a))return u[a]}else angular.isObject(u[a])||(u[a]={}),angular.extend(u[a],O(b));return this};this.translations=N,/** 40 | * @ngdoc function 41 | * @name pascalprecht.translate.$translateProvider#cloakClassName 42 | * @methodOf pascalprecht.translate.$translateProvider 43 | * 44 | * @description 45 | * 46 | * Let's you change the class name for `translate-cloak` directive. 47 | * Default class name is `translate-cloak`. 48 | * 49 | * @param {string} name translate-cloak class name 50 | */ 51 | this.cloakClassName=function(a){return a?(y=a,this):y},/** 52 | * @ngdoc function 53 | * @name pascalprecht.translate.$translateProvider#nestedObjectDelimeter 54 | * @methodOf pascalprecht.translate.$translateProvider 55 | * 56 | * @description 57 | * 58 | * Let's you change the delimiter for namespaced translations. 59 | * Default delimiter is `.`. 60 | * 61 | * @param {string} delimiter namespace separator 62 | */ 63 | this.nestedObjectDelimeter=function(a){return a?(B=a,this):B};/** 64 | * @name flatObject 65 | * @private 66 | * 67 | * @description 68 | * Flats an object. This function is used to flatten given translation data with 69 | * namespaces, so they are later accessible via dot notation. 70 | */ 71 | var O=function(a,b,c,d){var e,f,g,h;b||(b=[]),c||(c={});for(e in a)Object.prototype.hasOwnProperty.call(a,e)&&(h=a[e],angular.isObject(h)?O(h,b.concat(e),c,e):(f=b.length?""+b.join(B)+B+e:e,b.length&&e===d&&(g=""+b.join(B),c[g]="@:"+f),c[f]=h));return c};O.displayName="flatObject",/** 72 | * @ngdoc function 73 | * @name pascalprecht.translate.$translateProvider#addInterpolation 74 | * @methodOf pascalprecht.translate.$translateProvider 75 | * 76 | * @description 77 | * Adds interpolation services to angular-translate, so it can manage them. 78 | * 79 | * @param {object} factory Interpolation service factory 80 | */ 81 | this.addInterpolation=function(a){return x.push(a),this},/** 82 | * @ngdoc function 83 | * @name pascalprecht.translate.$translateProvider#useMessageFormatInterpolation 84 | * @methodOf pascalprecht.translate.$translateProvider 85 | * 86 | * @description 87 | * Tells angular-translate to use interpolation functionality of messageformat.js. 88 | * This is useful when having high level pluralization and gender selection. 89 | */ 90 | this.useMessageFormatInterpolation=function(){return this.useInterpolation("$translateMessageFormatInterpolation")},/** 91 | * @ngdoc function 92 | * @name pascalprecht.translate.$translateProvider#useInterpolation 93 | * @methodOf pascalprecht.translate.$translateProvider 94 | * 95 | * @description 96 | * Tells angular-translate which interpolation style to use as default, application-wide. 97 | * Simply pass a factory/service name. The interpolation service has to implement 98 | * the correct interface. 99 | * 100 | * @param {string} factory Interpolation service name. 101 | */ 102 | this.useInterpolation=function(a){return n=a,this},/** 103 | * @ngdoc function 104 | * @name pascalprecht.translate.$translateProvider#useSanitizeStrategy 105 | * @methodOf pascalprecht.translate.$translateProvider 106 | * 107 | * @description 108 | * Simply sets a sanitation strategy type. 109 | * 110 | * @param {string} value Strategy type. 111 | */ 112 | this.useSanitizeValueStrategy=function(a){return c.useStrategy(a),this},/** 113 | * @ngdoc function 114 | * @name pascalprecht.translate.$translateProvider#preferredLanguage 115 | * @methodOf pascalprecht.translate.$translateProvider 116 | * 117 | * @description 118 | * Tells the module which of the registered translation tables to use for translation 119 | * at initial startup by passing a language key. Similar to `$translateProvider#use` 120 | * only that it says which language to **prefer**. 121 | * 122 | * @param {string} langKey A language key. 123 | */ 124 | this.preferredLanguage=function(a){return a?(P(a),this):e};var P=function(a){return a&&(e=a),e};/** 125 | * @ngdoc function 126 | * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicator 127 | * @methodOf pascalprecht.translate.$translateProvider 128 | * 129 | * @description 130 | * Sets an indicator which is used when a translation isn't found. E.g. when 131 | * setting the indicator as 'X' and one tries to translate a translation id 132 | * called `NOT_FOUND`, this will result in `X NOT_FOUND X`. 133 | * 134 | * Internally this methods sets a left indicator and a right indicator using 135 | * `$translateProvider.translationNotFoundIndicatorLeft()` and 136 | * `$translateProvider.translationNotFoundIndicatorRight()`. 137 | * 138 | * **Note**: These methods automatically add a whitespace between the indicators 139 | * and the translation id. 140 | * 141 | * @param {string} indicator An indicator, could be any string. 142 | */ 143 | this.translationNotFoundIndicator=function(a){return this.translationNotFoundIndicatorLeft(a),this.translationNotFoundIndicatorRight(a),this},/** 144 | * ngdoc function 145 | * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft 146 | * @methodOf pascalprecht.translate.$translateProvider 147 | * 148 | * @description 149 | * Sets an indicator which is used when a translation isn't found left to the 150 | * translation id. 151 | * 152 | * @param {string} indicator An indicator. 153 | */ 154 | this.translationNotFoundIndicatorLeft=function(a){return a?(q=a,this):q},/** 155 | * ngdoc function 156 | * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft 157 | * @methodOf pascalprecht.translate.$translateProvider 158 | * 159 | * @description 160 | * Sets an indicator which is used when a translation isn't found right to the 161 | * translation id. 162 | * 163 | * @param {string} indicator An indicator. 164 | */ 165 | this.translationNotFoundIndicatorRight=function(a){return a?(r=a,this):r},/** 166 | * @ngdoc function 167 | * @name pascalprecht.translate.$translateProvider#fallbackLanguage 168 | * @methodOf pascalprecht.translate.$translateProvider 169 | * 170 | * @description 171 | * Tells the module which of the registered translation tables to use when missing translations 172 | * at initial startup by passing a language key. Similar to `$translateProvider#use` 173 | * only that it says which language to **fallback**. 174 | * 175 | * @param {string||array} langKey A language key. 176 | * 177 | */ 178 | this.fallbackLanguage=function(a){return Q(a),this};var Q=function(a){return a?(angular.isString(a)?(h=!0,g=[a]):angular.isArray(a)&&(h=!1,g=a),angular.isString(e)&&K(g,e)<0&&g.push(e),this):h?g[0]:g};/** 179 | * @ngdoc function 180 | * @name pascalprecht.translate.$translateProvider#use 181 | * @methodOf pascalprecht.translate.$translateProvider 182 | * 183 | * @description 184 | * Set which translation table to use for translation by given language key. When 185 | * trying to 'use' a language which isn't provided, it'll throw an error. 186 | * 187 | * You actually don't have to use this method since `$translateProvider#preferredLanguage` 188 | * does the job too. 189 | * 190 | * @param {string} langKey A language key. 191 | */ 192 | this.use=function(a){if(a){if(!u[a]&&!o) 193 | // only throw an error, when not loading translation data asynchronously 194 | throw new Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");return i=a,this}return i},/** 195 | * @ngdoc function 196 | * @name pascalprecht.translate.$translateProvider#resolveClientLocale 197 | * @methodOf pascalprecht.translate.$translateProvider 198 | * 199 | * @description 200 | * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver. 201 | * 202 | * @returns {string} the current client/browser language key 203 | */ 204 | this.resolveClientLocale=function(){return J()};/** 205 | * @ngdoc function 206 | * @name pascalprecht.translate.$translateProvider#storageKey 207 | * @methodOf pascalprecht.translate.$translateProvider 208 | * 209 | * @description 210 | * Tells the module which key must represent the choosed language by a user in the storage. 211 | * 212 | * @param {string} key A key for the storage. 213 | */ 214 | var R=function(a){return a?(w=a,this):l?l+w:w};this.storageKey=R,/** 215 | * @ngdoc function 216 | * @name pascalprecht.translate.$translateProvider#useUrlLoader 217 | * @methodOf pascalprecht.translate.$translateProvider 218 | * 219 | * @description 220 | * Tells angular-translate to use `$translateUrlLoader` extension service as loader. 221 | * 222 | * @param {string} url Url 223 | * @param {Object=} options Optional configuration object 224 | */ 225 | this.useUrlLoader=function(a,b){return this.useLoader("$translateUrlLoader",angular.extend({url:a},b))},/** 226 | * @ngdoc function 227 | * @name pascalprecht.translate.$translateProvider#useStaticFilesLoader 228 | * @methodOf pascalprecht.translate.$translateProvider 229 | * 230 | * @description 231 | * Tells angular-translate to use `$translateStaticFilesLoader` extension service as loader. 232 | * 233 | * @param {Object=} options Optional configuration object 234 | */ 235 | this.useStaticFilesLoader=function(a){return this.useLoader("$translateStaticFilesLoader",a)},/** 236 | * @ngdoc function 237 | * @name pascalprecht.translate.$translateProvider#useLoader 238 | * @methodOf pascalprecht.translate.$translateProvider 239 | * 240 | * @description 241 | * Tells angular-translate to use any other service as loader. 242 | * 243 | * @param {string} loaderFactory Factory name to use 244 | * @param {Object=} options Optional configuration object 245 | */ 246 | this.useLoader=function(a,b){return o=a,p=b||{},this},/** 247 | * @ngdoc function 248 | * @name pascalprecht.translate.$translateProvider#useLocalStorage 249 | * @methodOf pascalprecht.translate.$translateProvider 250 | * 251 | * @description 252 | * Tells angular-translate to use `$translateLocalStorage` service as storage layer. 253 | * 254 | */ 255 | this.useLocalStorage=function(){return this.useStorage("$translateLocalStorage")},/** 256 | * @ngdoc function 257 | * @name pascalprecht.translate.$translateProvider#useCookieStorage 258 | * @methodOf pascalprecht.translate.$translateProvider 259 | * 260 | * @description 261 | * Tells angular-translate to use `$translateCookieStorage` service as storage layer. 262 | */ 263 | this.useCookieStorage=function(){return this.useStorage("$translateCookieStorage")},/** 264 | * @ngdoc function 265 | * @name pascalprecht.translate.$translateProvider#useStorage 266 | * @methodOf pascalprecht.translate.$translateProvider 267 | * 268 | * @description 269 | * Tells angular-translate to use custom service as storage layer. 270 | */ 271 | this.useStorage=function(a){return k=a,this},/** 272 | * @ngdoc function 273 | * @name pascalprecht.translate.$translateProvider#storagePrefix 274 | * @methodOf pascalprecht.translate.$translateProvider 275 | * 276 | * @description 277 | * Sets prefix for storage key. 278 | * 279 | * @param {string} prefix Storage key prefix 280 | */ 281 | this.storagePrefix=function(a){return a?(l=a,this):a},/** 282 | * @ngdoc function 283 | * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandlerLog 284 | * @methodOf pascalprecht.translate.$translateProvider 285 | * 286 | * @description 287 | * Tells angular-translate to use built-in log handler when trying to translate 288 | * a translation Id which doesn't exist. 289 | * 290 | * This is actually a shortcut method for `useMissingTranslationHandler()`. 291 | * 292 | */ 293 | this.useMissingTranslationHandlerLog=function(){return this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},/** 294 | * @ngdoc function 295 | * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandler 296 | * @methodOf pascalprecht.translate.$translateProvider 297 | * 298 | * @description 299 | * Expects a factory name which later gets instantiated with `$injector`. 300 | * This method can be used to tell angular-translate to use a custom 301 | * missingTranslationHandler. Just build a factory which returns a function 302 | * and expects a translation id as argument. 303 | * 304 | * Example: 305 | *
 306 |    *  app.config(function ($translateProvider) {
 307 |    *    $translateProvider.useMissingTranslationHandler('customHandler');
 308 |    *  });
 309 |    *
 310 |    *  app.factory('customHandler', function (dep1, dep2) {
 311 |    *    return function (translationId) {
 312 |    *      // something with translationId and dep1 and dep2
 313 |    *    };
 314 |    *  });
 315 |    * 
316 | * 317 | * @param {string} factory Factory name 318 | */ 319 | this.useMissingTranslationHandler=function(a){return m=a,this},/** 320 | * @ngdoc function 321 | * @name pascalprecht.translate.$translateProvider#usePostCompiling 322 | * @methodOf pascalprecht.translate.$translateProvider 323 | * 324 | * @description 325 | * If post compiling is enabled, all translated values will be processed 326 | * again with AngularJS' $compile. 327 | * 328 | * Example: 329 | *
 330 |    *  app.config(function ($translateProvider) {
 331 |    *    $translateProvider.usePostCompiling(true);
 332 |    *  });
 333 |    * 
334 | * 335 | * @param {string} factory Factory name 336 | */ 337 | this.usePostCompiling=function(a){return z=!!a,this},/** 338 | * @ngdoc function 339 | * @name pascalprecht.translate.$translateProvider#forceAsyncReload 340 | * @methodOf pascalprecht.translate.$translateProvider 341 | * 342 | * @description 343 | * If force async reload is enabled, async loader will always be called 344 | * even if $translationTable already contains the language key, adding 345 | * possible new entries to the $translationTable. 346 | * 347 | * Example: 348 | *
 349 |    *  app.config(function ($translateProvider) {
 350 |    *    $translateProvider.forceAsyncReload(true);
 351 |    *  });
 352 |    * 
353 | * 354 | * @param {boolean} value - valid values are true or false 355 | */ 356 | this.forceAsyncReload=function(a){return A=!!a,this},/** 357 | * @ngdoc function 358 | * @name pascalprecht.translate.$translateProvider#uniformLanguageTag 359 | * @methodOf pascalprecht.translate.$translateProvider 360 | * 361 | * @description 362 | * Tells angular-translate which language tag should be used as a result when determining 363 | * the current browser language. 364 | * 365 | * This setting must be set before invoking {@link pascalprecht.translate.$translateProvider#methods_determinePreferredLanguage determinePreferredLanguage()}. 366 | * 367 | *
 368 |    * $translateProvider
 369 |    *   .uniformLanguageTag('bcp47')
 370 |    *   .determinePreferredLanguage()
 371 |    * 
372 | * 373 | * The resolver currently supports: 374 | * * default 375 | * (traditionally: hyphens will be converted into underscores, i.e. en-US => en_US) 376 | * en-US => en_US 377 | * en_US => en_US 378 | * en-us => en_us 379 | * * java 380 | * like default, but the second part will be always in uppercase 381 | * en-US => en_US 382 | * en_US => en_US 383 | * en-us => en_US 384 | * * BCP 47 (RFC 4646 & 4647) 385 | * en-US => en-US 386 | * en_US => en-US 387 | * en-us => en-US 388 | * 389 | * See also: 390 | * * http://en.wikipedia.org/wiki/IETF_language_tag 391 | * * http://www.w3.org/International/core/langtags/ 392 | * * http://tools.ietf.org/html/bcp47 393 | * 394 | * @param {string|object} options - options (or standard) 395 | * @param {string} options.standard - valid values are 'default', 'bcp47', 'java' 396 | */ 397 | this.uniformLanguageTag=function(a){return a?angular.isString(a)&&(a={standard:a}):a={},F=a.standard,this},/** 398 | * @ngdoc function 399 | * @name pascalprecht.translate.$translateProvider#determinePreferredLanguage 400 | * @methodOf pascalprecht.translate.$translateProvider 401 | * 402 | * @description 403 | * Tells angular-translate to try to determine on its own which language key 404 | * to set as preferred language. When `fn` is given, angular-translate uses it 405 | * to determine a language key, otherwise it uses the built-in `getLocale()` 406 | * method. 407 | * 408 | * The `getLocale()` returns a language key in the format `[lang]_[country]` or 409 | * `[lang]` depending on what the browser provides. 410 | * 411 | * Use this method at your own risk, since not all browsers return a valid 412 | * locale (see {@link pascalprecht.translate.$translateProvider#methods_uniformLanguageTag uniformLanguageTag()}). 413 | * 414 | * @param {Function=} fn Function to determine a browser's locale 415 | */ 416 | this.determinePreferredLanguage=function(a){var b=a&&angular.isFunction(a)?a():J();return e=v.length?M(b)||b:b,this},/** 417 | * @ngdoc function 418 | * @name pascalprecht.translate.$translateProvider#registerAvailableLanguageKeys 419 | * @methodOf pascalprecht.translate.$translateProvider 420 | * 421 | * @description 422 | * Registers a set of language keys the app will work with. Use this method in 423 | * combination with 424 | * {@link pascalprecht.translate.$translateProvider#determinePreferredLanguage determinePreferredLanguage}. 425 | * When available languages keys are registered, angular-translate 426 | * tries to find the best fitting language key depending on the browsers locale, 427 | * considering your language key convention. 428 | * 429 | * @param {object} languageKeys Array of language keys the your app will use 430 | * @param {object=} aliases Alias map. 431 | */ 432 | this.registerAvailableLanguageKeys=function(a,b){return a?(v=a,b&&(f=b),this):v},/** 433 | * @ngdoc function 434 | * @name pascalprecht.translate.$translateProvider#useLoaderCache 435 | * @methodOf pascalprecht.translate.$translateProvider 436 | * 437 | * @description 438 | * Registers a cache for internal $http based loaders. 439 | * {@link pascalprecht.translate.$translationCache $translationCache}. 440 | * When false the cache will be disabled (default). When true or undefined 441 | * the cache will be a default (see $cacheFactory). When an object it will 442 | * be treat as a cache object itself: the usage is $http({cache: cache}) 443 | * 444 | * @param {object} cache boolean, string or cache-object 445 | */ 446 | this.useLoaderCache=function(a){ 447 | // disable cache 448 | // enable cache using AJS defaults 449 | // enable cache using default 450 | // enable cache using given one (see $cacheFactory) 451 | return a===!1?s=void 0:a===!0?s=!0:"undefined"==typeof a?s="$translationCache":a&&(s=a),this},/** 452 | * @ngdoc function 453 | * @name pascalprecht.translate.$translateProvider#directivePriority 454 | * @methodOf pascalprecht.translate.$translateProvider 455 | * 456 | * @description 457 | * Sets the default priority of the translate directive. The standard value is `0`. 458 | * Calling this function without an argument will return the current value. 459 | * 460 | * @param {number} priority for the translate-directive 461 | */ 462 | this.directivePriority=function(a){ 463 | // setter with chaining 464 | return void 0===a?D:(D=a,this)},/** 465 | * @ngdoc function 466 | * @name pascalprecht.translate.$translateProvider#statefulFilter 467 | * @methodOf pascalprecht.translate.$translateProvider 468 | * 469 | * @description 470 | * Since AngularJS 1.3, filters which are not stateless (depending at the scope) 471 | * have to explicit define this behavior. 472 | * Sets whether the translate filter should be stateful or stateless. The standard value is `true` 473 | * meaning being stateful. 474 | * Calling this function without an argument will return the current value. 475 | * 476 | * @param {boolean} state - defines the state of the filter 477 | */ 478 | this.statefulFilter=function(a){ 479 | // setter with chaining 480 | return void 0===a?E:(E=a,this)},/** 481 | * @ngdoc function 482 | * @name pascalprecht.translate.$translateProvider#postProcess 483 | * @methodOf pascalprecht.translate.$translateProvider 484 | * 485 | * @description 486 | * The post processor will be intercept right after the translation result. It can modify the result. 487 | * 488 | * @param {object} fn Function or service name (string) to be called after the translation value has been set / resolved. The function itself will enrich every value being processed and then continue the normal resolver process 489 | */ 490 | this.postProcess=function(a){return t=a?a:void 0,this},/** 491 | * @ngdoc object 492 | * @name pascalprecht.translate.$translate 493 | * @requires $interpolate 494 | * @requires $log 495 | * @requires $rootScope 496 | * @requires $q 497 | * 498 | * @description 499 | * The `$translate` service is the actual core of angular-translate. It expects a translation id 500 | * and optional interpolate parameters to translate contents. 501 | * 502 | *
 503 |    *  $translate('HEADLINE_TEXT').then(function (translation) {
 504 |    *    $scope.translatedText = translation;
 505 |    *  });
 506 |    * 
507 | * 508 | * @param {string|array} translationId A token which represents a translation id 509 | * This can be optionally an array of translation ids which 510 | * results that the function returns an object where each key 511 | * is the translation id and the value the translation. 512 | * @param {object=} interpolateParams An object hash for dynamic values 513 | * @param {string} interpolationId The id of the interpolation to use 514 | * @param {string} forceLanguage A language to be used instead of the current language 515 | * @returns {object} promise 516 | */ 517 | this.$get=["$log","$injector","$rootScope","$q",function(a,b,c,d){var f,l,F,G=b.get(n||"$translateDefaultInterpolation"),I=!1,S={},T={},U=function(a,b,c,h,j){!i&&e&&(i=e);var m=j&&j!==i?// we don't want to re-negotiate $uses 518 | M(j)||j:i; 519 | // Duck detection: If the first argument is an array, a bunch of translations was requested. 520 | // The result is an object. 521 | if( 522 | // Check forceLanguage is present 523 | j&&ja(j),angular.isArray(a)){ 524 | // Inspired by Q.allSettled by Kris Kowal 525 | // https://github.com/kriskowal/q/blob/b0fa72980717dc202ffc3cbf03b936e10ebbb9d7/q.js#L1553-1563 526 | // This transforms all promises regardless resolved or rejected 527 | var n=function(a){for(var e={},f=[],g=function(a){var f=d.defer(),g=function(b){e[a]=b,f.resolve([a,b])}; 528 | // we don't care whether the promise was resolved or rejected; just store the values 529 | return U(a,b,c,h,j).then(g,g),f.promise},i=0,k=a.length;k>i;i++)f.push(g(a[i])); 530 | // wait for all (including storing to results) 531 | return d.all(f).then(function(){ 532 | // return the results 533 | return e})};return n(a)}var o=d.defer(); 534 | // trim off any whitespace 535 | a&&(a=L.apply(a));var p=function(){var a=e?T[e]:T[m];if(l=0,k&&!a){ 536 | // looks like there's no pending promise for $preferredLanguage or 537 | // $uses. Maybe there's one pending for a language that comes from 538 | // storage. 539 | var b=f.get(w);if(a=T[b],g&&g.length){var c=K(g,b); 540 | // maybe the language from storage is also defined as fallback language 541 | // we increase the fallback language index to not search in that language 542 | // as fallback, since it's probably the first used language 543 | // in that case the index starts after the first element 544 | l=0===c?1:0, 545 | // but we can make sure to ALWAYS fallback to preferred language at least 546 | K(g,e)<0&&g.push(e)}}return a}();if(p){var q=function(){ 547 | // $uses may have changed while waiting 548 | j||(m=i),fa(a,b,c,h,m).then(o.resolve,o.reject)};q.displayName="promiseResolved",p["finally"](q)}else 549 | // no promise to wait for? okay. Then there's no loader registered 550 | // nor is a one pending for language that comes from storage. 551 | // We can just translate. 552 | fa(a,b,c,h,m).then(o.resolve,o.reject);return o.promise},V=function(a){ 553 | // applying notFoundIndicators 554 | return q&&(a=[q,a].join(" ")),r&&(a=[a,r].join(" ")),a},W=function(a){i=a,k&&f.put(U.storageKey(),i),c.$emit("$translateChangeSuccess",{language:a}),G.setLocale(i);var b=function(a,b){S[b].setLocale(i)};b.displayName="eachInterpolatorLocaleSetter", 555 | // inform all others too! 556 | angular.forEach(S,b),c.$emit("$translateChangeEnd",{language:a})},X=function(a){if(!a)throw"No language key specified for loading.";var e=d.defer();c.$emit("$translateLoadingStart",{language:a}),I=!0;var f=s;"string"==typeof f&&( 557 | // getting on-demand instance of loader 558 | f=b.get(f));var g=angular.extend({},p,{key:a,$http:angular.extend({},{cache:f},p.$http)}),h=function(b){var d={};c.$emit("$translateLoadingSuccess",{language:a}),angular.isArray(b)?angular.forEach(b,function(a){angular.extend(d,O(a))}):angular.extend(d,O(b)),I=!1,e.resolve({key:a,table:d}),c.$emit("$translateLoadingEnd",{language:a})};h.displayName="onLoaderSuccess";var i=function(a){c.$emit("$translateLoadingError",{language:a}),e.reject(a),c.$emit("$translateLoadingEnd",{language:a})};return i.displayName="onLoaderError",b.get(o)(g).then(h,i),e.promise};if(k&&(f=b.get(k),!f.get||!f.put))throw new Error("Couldn't use storage '"+k+"', missing get() or put() method!"); 559 | // if we have additional interpolations that were added via 560 | // $translateProvider.addInterpolation(), we have to map'em 561 | if(x.length){var Y=function(a){var c=b.get(a); 562 | // setting initial locale for each interpolation service 563 | c.setLocale(e||i), 564 | // make'em recognizable through id 565 | S[c.getInterpolationIdentifier()]=c};Y.displayName="interpolationFactoryAdder",angular.forEach(x,Y)}/** 566 | * @name getTranslationTable 567 | * @private 568 | * 569 | * @description 570 | * Returns a promise that resolves to the translation table 571 | * or is rejected if an error occurred. 572 | * 573 | * @param langKey 574 | * @returns {Q.promise} 575 | */ 576 | var Z=function(a){var b=d.defer();if(Object.prototype.hasOwnProperty.call(u,a))b.resolve(u[a]);else if(T[a]){var c=function(a){N(a.key,a.table),b.resolve(a.table)};c.displayName="translationTableResolver",T[a].then(c,b.reject)}else b.reject();return b.promise},$=function(a,b,c,e){var f=d.defer(),g=function(d){if(Object.prototype.hasOwnProperty.call(d,b)){e.setLocale(a);var g=d[b];if("@:"===g.substr(0,2))$(a,g.substr(2),c,e).then(f.resolve,f.reject);else{var h=e.interpolate(d[b],c);h=ia(b,d[b],h,c,a),f.resolve(h)}e.setLocale(i)}else f.reject()};return g.displayName="fallbackTranslationResolver",Z(a).then(g,f.reject),f.promise},_=function(a,b,c,d){var e,f=u[a];if(f&&Object.prototype.hasOwnProperty.call(f,b)){if(d.setLocale(a),e=d.interpolate(f[b],c),"@:"===e.substr(0,2))return _(a,e.substr(2),c,d);d.setLocale(i)}return e},aa=function(a,c,d){ 577 | // If we have a handler factory - we might also call it here to determine if it provides 578 | // a default text for a translationid that can't be found anywhere in our tables 579 | if(m){var e=b.get(m)(a,i,c,d);return void 0!==e?e:a}return a},ba=function(a,b,c,e,f){var h=d.defer();if(a0?F:l,a,b,c,d)},ea=function(a,b,c){ 591 | // Start with the fallbackLanguage with index 0 592 | return ca(F>0?F:l,a,b,c)},fa=function(a,b,c,e,f){var h=d.defer(),i=f?u[f]:u,j=c?S[c]:G; 593 | // if the translation id exists, we can just interpolate it 594 | if(i&&Object.prototype.hasOwnProperty.call(i,a)){var k=i[a]; 595 | // If using link, rerun $translate with linked translationId and return it 596 | if("@:"===k.substr(0,2))U(k.substr(2),b,c,e,f).then(h.resolve,h.reject);else{ 597 | // 598 | var l=j.interpolate(k,b);l=ia(a,k,l,b,f),h.resolve(l)}}else{var n; 599 | // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise 600 | m&&!I&&(n=aa(a,b,e)), 601 | // since we couldn't translate the inital requested translation id, 602 | // we try it now with one or more fallback languages, if fallback language(s) is 603 | // configured. 604 | f&&g&&g.length?da(a,b,j,e).then(function(a){h.resolve(a)},function(a){h.reject(V(a))}):m&&!I&&n? 605 | // looks like the requested translation id doesn't exists. 606 | // Now, if there is a registered handler for missing translations and no 607 | // asyncLoader is pending, we execute the handler 608 | e?h.resolve(e):h.resolve(n):e?h.resolve(e):h.reject(V(a))}return h.promise},ga=function(a,b,c,d){var e,f=d?u[d]:u,h=G; 609 | // if the translation id exists, we can just interpolate it 610 | if( 611 | // if the interpolation id exists use custom interpolator 612 | S&&Object.prototype.hasOwnProperty.call(S,c)&&(h=S[c]),f&&Object.prototype.hasOwnProperty.call(f,a)){var i=f[a]; 613 | // If using link, rerun $translate with linked translationId and return it 614 | e="@:"===i.substr(0,2)?ga(i.substr(2),b,c,d):h.interpolate(i,b)}else{var j; 615 | // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise 616 | m&&!I&&(j=aa(a,b)), 617 | // since we couldn't translate the inital requested translation id, 618 | // we try it now with one or more fallback languages, if fallback language(s) is 619 | // configured. 620 | d&&g&&g.length?(l=0,e=ea(a,b,h)):e=m&&!I&&j?j:V(a)}return e},ha=function(a){j===a&&(j=void 0),T[a]=void 0},ia=function(a,c,d,e,f){var g=t; 621 | // getting on-demand instance 622 | return g&&("string"==typeof g&&(g=b.get(g)),g)?g(a,c,d,e,f):d},ja=function(a){u[a]||!o||T[a]||(T[a]=X(a).then(function(a){N(a.key,a.table)}))};/** 623 | * @ngdoc function 624 | * @name pascalprecht.translate.$translate#preferredLanguage 625 | * @methodOf pascalprecht.translate.$translate 626 | * 627 | * @description 628 | * Returns the language key for the preferred language. 629 | * 630 | * @param {string} langKey language String or Array to be used as preferredLanguage (changing at runtime) 631 | * 632 | * @return {string} preferred language key 633 | */ 634 | U.preferredLanguage=function(a){return a&&P(a),e},/** 635 | * @ngdoc function 636 | * @name pascalprecht.translate.$translate#cloakClassName 637 | * @methodOf pascalprecht.translate.$translate 638 | * 639 | * @description 640 | * Returns the configured class name for `translate-cloak` directive. 641 | * 642 | * @return {string} cloakClassName 643 | */ 644 | U.cloakClassName=function(){return y},/** 645 | * @ngdoc function 646 | * @name pascalprecht.translate.$translate#nestedObjectDelimeter 647 | * @methodOf pascalprecht.translate.$translate 648 | * 649 | * @description 650 | * Returns the configured delimiter for nested namespaces. 651 | * 652 | * @return {string} nestedObjectDelimeter 653 | */ 654 | U.nestedObjectDelimeter=function(){return B},/** 655 | * @ngdoc function 656 | * @name pascalprecht.translate.$translate#fallbackLanguage 657 | * @methodOf pascalprecht.translate.$translate 658 | * 659 | * @description 660 | * Returns the language key for the fallback languages or sets a new fallback stack. 661 | * 662 | * @param {string=} langKey language String or Array of fallback languages to be used (to change stack at runtime) 663 | * 664 | * @return {string||array} fallback language key 665 | */ 666 | U.fallbackLanguage=function(a){if(void 0!==a&&null!==a){ 667 | // as we might have an async loader initiated and a new translation language might have been defined 668 | // we need to add the promise to the stack also. So - iterate. 669 | if(Q(a),o&&g&&g.length)for(var b=0,c=g.length;c>b;b++)T[g[b]]||(T[g[b]]=X(g[b]));U.use(U.use())}return h?g[0]:g},/** 670 | * @ngdoc function 671 | * @name pascalprecht.translate.$translate#useFallbackLanguage 672 | * @methodOf pascalprecht.translate.$translate 673 | * 674 | * @description 675 | * Sets the first key of the fallback language stack to be used for translation. 676 | * Therefore all languages in the fallback array BEFORE this key will be skipped! 677 | * 678 | * @param {string=} langKey Contains the langKey the iteration shall start with. Set to false if you want to 679 | * get back to the whole stack 680 | */ 681 | U.useFallbackLanguage=function(a){if(void 0!==a&&null!==a)if(a){var b=K(g,a);b>-1&&(F=b)}else F=0},/** 682 | * @ngdoc function 683 | * @name pascalprecht.translate.$translate#proposedLanguage 684 | * @methodOf pascalprecht.translate.$translate 685 | * 686 | * @description 687 | * Returns the language key of language that is currently loaded asynchronously. 688 | * 689 | * @return {string} language key 690 | */ 691 | U.proposedLanguage=function(){return j},/** 692 | * @ngdoc function 693 | * @name pascalprecht.translate.$translate#storage 694 | * @methodOf pascalprecht.translate.$translate 695 | * 696 | * @description 697 | * Returns registered storage. 698 | * 699 | * @return {object} Storage 700 | */ 701 | U.storage=function(){return f},/** 702 | * @ngdoc function 703 | * @name pascalprecht.translate.$translate#negotiateLocale 704 | * @methodOf pascalprecht.translate.$translate 705 | * 706 | * @description 707 | * Returns a language key based on available languages and language aliases. If a 708 | * language key cannot be resolved, returns undefined. 709 | * 710 | * If no or a falsy key is given, returns undefined. 711 | * 712 | * @param {string} [key] Language key 713 | * @return {string|undefined} Language key or undefined if no language key is found. 714 | */ 715 | U.negotiateLocale=M,/** 716 | * @ngdoc function 717 | * @name pascalprecht.translate.$translate#use 718 | * @methodOf pascalprecht.translate.$translate 719 | * 720 | * @description 721 | * Tells angular-translate which language to use by given language key. This method is 722 | * used to change language at runtime. It also takes care of storing the language 723 | * key in a configured store to let your app remember the choosed language. 724 | * 725 | * When trying to 'use' a language which isn't available it tries to load it 726 | * asynchronously with registered loaders. 727 | * 728 | * Returns promise object with loaded language file data or string of the currently used language. 729 | * 730 | * If no or a falsy key is given it returns the currently used language key. 731 | * The returned string will be ```undefined``` if setting up $translate hasn't finished. 732 | * @example 733 | * $translate.use("en_US").then(function(data){ 734 | * $scope.text = $translate("HELLO"); 735 | * }); 736 | * 737 | * @param {string} [key] Language key 738 | * @return {object|string} Promise with loaded language data or the language key if a falsy param was given. 739 | */ 740 | U.use=function(a){if(!a)return i;var b=d.defer();c.$emit("$translateChangeStart",{language:a}); 741 | // Try to get the aliased language key 742 | var e=M(a); 743 | // Ensure only registered language keys will be loaded 744 | // Ensure only registered language keys will be loaded 745 | // if there isn't a translation table for the language we've requested, 746 | // we load it asynchronously 747 | // we are already loading this asynchronously 748 | // resolve our new deferred when the old langPromise is resolved 749 | return v.length>0&&!e?d.reject(a):(e&&(a=e),j=a,!A&&u[a]||!o||T[a]?T[a]?T[a].then(function(a){return j===a.key&&W(a.key),b.resolve(a.key),a},function(a){return!i&&g&&g.length>0?U.use(g[0]).then(b.resolve,b.reject):b.reject(a)}):(b.resolve(a),W(a)):(T[a]=X(a).then(function(c){return N(c.key,c.table),b.resolve(c.key),j===a&&W(c.key),c},function(a){return c.$emit("$translateChangeError",{language:a}),b.reject(a),c.$emit("$translateChangeEnd",{language:a}),d.reject(a)}),T[a]["finally"](function(){ha(a)})),b.promise)},/** 750 | * @ngdoc function 751 | * @name pascalprecht.translate.$translate#resolveClientLocale 752 | * @methodOf pascalprecht.translate.$translate 753 | * 754 | * @description 755 | * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver. 756 | * 757 | * @returns {string} the current client/browser language key 758 | */ 759 | U.resolveClientLocale=function(){return J()},/** 760 | * @ngdoc function 761 | * @name pascalprecht.translate.$translate#storageKey 762 | * @methodOf pascalprecht.translate.$translate 763 | * 764 | * @description 765 | * Returns the key for the storage. 766 | * 767 | * @return {string} storage key 768 | */ 769 | U.storageKey=function(){return R()},/** 770 | * @ngdoc function 771 | * @name pascalprecht.translate.$translate#isPostCompilingEnabled 772 | * @methodOf pascalprecht.translate.$translate 773 | * 774 | * @description 775 | * Returns whether post compiling is enabled or not 776 | * 777 | * @return {bool} storage key 778 | */ 779 | U.isPostCompilingEnabled=function(){return z},/** 780 | * @ngdoc function 781 | * @name pascalprecht.translate.$translate#isForceAsyncReloadEnabled 782 | * @methodOf pascalprecht.translate.$translate 783 | * 784 | * @description 785 | * Returns whether force async reload is enabled or not 786 | * 787 | * @return {boolean} forceAsyncReload value 788 | */ 789 | U.isForceAsyncReloadEnabled=function(){return A},/** 790 | * @ngdoc function 791 | * @name pascalprecht.translate.$translate#refresh 792 | * @methodOf pascalprecht.translate.$translate 793 | * 794 | * @description 795 | * Refreshes a translation table pointed by the given langKey. If langKey is not specified, 796 | * the module will drop all existent translation tables and load new version of those which 797 | * are currently in use. 798 | * 799 | * Refresh means that the module will drop target translation table and try to load it again. 800 | * 801 | * In case there are no loaders registered the refresh() method will throw an Error. 802 | * 803 | * If the module is able to refresh translation tables refresh() method will broadcast 804 | * $translateRefreshStart and $translateRefreshEnd events. 805 | * 806 | * @example 807 | * // this will drop all currently existent translation tables and reload those which are 808 | * // currently in use 809 | * $translate.refresh(); 810 | * // this will refresh a translation table for the en_US language 811 | * $translate.refresh('en_US'); 812 | * 813 | * @param {string} langKey A language key of the table, which has to be refreshed 814 | * 815 | * @return {promise} Promise, which will be resolved in case a translation tables refreshing 816 | * process is finished successfully, and reject if not. 817 | */ 818 | U.refresh=function(a){function b(){f.resolve(),c.$emit("$translateRefreshEnd",{language:a})}function e(){f.reject(),c.$emit("$translateRefreshEnd",{language:a})}if(!o)throw new Error("Couldn't refresh translation table, no loader registered!");var f=d.defer();if(c.$emit("$translateRefreshStart",{language:a}),a)if(u[a]){var h=function(c){N(c.key,c.table),a===i&&W(i),b()};h.displayName="refreshPostProcessor",X(a).then(h,e)}else e();else{ 819 | // if there's no language key specified we refresh ALL THE THINGS! 820 | var j=[],k={}; 821 | // reload registered fallback languages 822 | if(g&&g.length)for(var l=0,m=g.length;m>l;l++)j.push(X(g[l])),k[g[l]]=!0; 823 | // reload currently used language 824 | i&&!k[i]&&j.push(X(i));var n=function(a){u={},angular.forEach(a,function(a){N(a.key,a.table)}),i&&W(i),b()};n.displayName="refreshPostProcessor",d.all(j).then(n,e)}return f.promise},/** 825 | * @ngdoc function 826 | * @name pascalprecht.translate.$translate#instant 827 | * @methodOf pascalprecht.translate.$translate 828 | * 829 | * @description 830 | * Returns a translation instantly from the internal state of loaded translation. All rules 831 | * regarding the current language, the preferred language of even fallback languages will be 832 | * used except any promise handling. If a language was not found, an asynchronous loading 833 | * will be invoked in the background. 834 | * 835 | * @param {string|array} translationId A token which represents a translation id 836 | * This can be optionally an array of translation ids which 837 | * results that the function's promise returns an object where 838 | * each key is the translation id and the value the translation. 839 | * @param {object} interpolateParams Params 840 | * @param {string} interpolationId The id of the interpolation to use 841 | * @param {string} forceLanguage A language to be used instead of the current language 842 | * 843 | * @return {string|object} translation 844 | */ 845 | U.instant=function(a,b,c,d){ 846 | // we don't want to re-negotiate $uses 847 | var f=d&&d!==i?// we don't want to re-negotiate $uses 848 | M(d)||d:i; 849 | // Detect undefined and null values to shorten the execution and prevent exceptions 850 | if(null===a||angular.isUndefined(a))return a; 851 | // Duck detection: If the first argument is an array, a bunch of translations was requested. 852 | // The result is an object. 853 | if( 854 | // Check forceLanguage is present 855 | d&&ja(d),angular.isArray(a)){for(var h={},j=0,k=a.length;k>j;j++)h[a[j]]=U.instant(a[j],b,c,d);return h} 856 | // We discarded unacceptable values. So we just need to verify if translationId is empty String 857 | if(angular.isString(a)&&a.length<1)return a; 858 | // trim off any whitespace 859 | a&&(a=L.apply(a));var l,n=[];e&&n.push(e),f&&n.push(f),g&&g.length&&(n=n.concat(g));for(var o=0,p=n.length;p>o;o++){var s=n[o];if(u[s]&&"undefined"!=typeof u[s][a]&&(l=ga(a,b,c,f)),"undefined"!=typeof l)break} 860 | // Return translation of default interpolator if not found anything. 861 | return l||""===l||(q||r?l=V(a):(l=G.interpolate(a,b),m&&!I&&(l=aa(a,b)))),l},/** 862 | * @ngdoc function 863 | * @name pascalprecht.translate.$translate#versionInfo 864 | * @methodOf pascalprecht.translate.$translate 865 | * 866 | * @description 867 | * Returns the current version information for the angular-translate library 868 | * 869 | * @return {string} angular-translate version 870 | */ 871 | U.versionInfo=function(){return H},/** 872 | * @ngdoc function 873 | * @name pascalprecht.translate.$translate#loaderCache 874 | * @methodOf pascalprecht.translate.$translate 875 | * 876 | * @description 877 | * Returns the defined loaderCache. 878 | * 879 | * @return {boolean|string|object} current value of loaderCache 880 | */ 881 | U.loaderCache=function(){return s}, 882 | // internal purpose only 883 | U.directivePriority=function(){return D}, 884 | // internal purpose only 885 | U.statefulFilter=function(){return E},/** 886 | * @ngdoc function 887 | * @name pascalprecht.translate.$translate#isReady 888 | * @methodOf pascalprecht.translate.$translate 889 | * 890 | * @description 891 | * Returns whether the service is "ready" to translate (i.e. loading 1st language). 892 | * 893 | * See also {@link pascalprecht.translate.$translate#methods_onReady onReady()}. 894 | * 895 | * @return {boolean} current value of ready 896 | */ 897 | U.isReady=function(){return C};var ka=d.defer();ka.promise.then(function(){C=!0}),/** 898 | * @ngdoc function 899 | * @name pascalprecht.translate.$translate#onReady 900 | * @methodOf pascalprecht.translate.$translate 901 | * 902 | * @description 903 | * Returns whether the service is "ready" to translate (i.e. loading 1st language). 904 | * 905 | * See also {@link pascalprecht.translate.$translate#methods_isReady isReady()}. 906 | * 907 | * @param {Function=} fn Function to invoke when service is ready 908 | * @return {object} Promise resolved when service is ready 909 | */ 910 | U.onReady=function(a){var b=d.defer();return angular.isFunction(a)&&b.promise.then(a),C?b.resolve():ka.promise.then(b.resolve),b.promise},/** 911 | * @ngdoc function 912 | * @name pascalprecht.translate.$translate#getAvailableLanguageKeys 913 | * @methodOf pascalprecht.translate.$translate 914 | * 915 | * @description 916 | * This function simply returns the registered language keys being defined before in the config phase 917 | * With this, an application can use the array to provide a language selection dropdown or similar 918 | * without any additional effort 919 | * 920 | * @returns {object} returns the list of possibly registered language keys and mapping or null if not defined 921 | */ 922 | U.getAvailableLanguageKeys=function(){return v.length>0?v:null}; 923 | // Whenever $translateReady is being fired, this will ensure the state of $isReady 924 | var la=c.$on("$translateReady",function(){ka.resolve(),la(),// one time only 925 | la=null}),ma=c.$on("$translateChangeEnd",function(){ka.resolve(),ma(),// one time only 926 | ma=null});if(o){ 927 | // Also, if there are any fallback language registered, we start 928 | // loading them asynchronously as soon as we can. 929 | if( 930 | // If at least one async loader is defined and there are no 931 | // (default) translations available we should try to load them. 932 | angular.equals(u,{})&&U.use()&&U.use(U.use()),g&&g.length)for(var na=function(a){return N(a.key,a.table),c.$emit("$translateChangeEnd",{language:a.key}),a},oa=0,pa=g.length;pa>oa;oa++){var qa=g[oa];!A&&u[qa]||(T[qa]=X(qa).then(na))}}else c.$emit("$translateReady",{language:U.use()});return U}]}function d(a,b){"use strict";var c,d={},e="default";/** 933 | * @ngdoc function 934 | * @name pascalprecht.translate.$translateDefaultInterpolation#setLocale 935 | * @methodOf pascalprecht.translate.$translateDefaultInterpolation 936 | * 937 | * @description 938 | * Sets current locale (this is currently not use in this interpolation). 939 | * 940 | * @param {string} locale Language key or locale. 941 | */ 942 | /** 943 | * @ngdoc function 944 | * @name pascalprecht.translate.$translateDefaultInterpolation#getInterpolationIdentifier 945 | * @methodOf pascalprecht.translate.$translateDefaultInterpolation 946 | * 947 | * @description 948 | * Returns an identifier for this interpolation service. 949 | * 950 | * @returns {string} $identifier 951 | */ 952 | /** 953 | * @deprecated will be removed in 3.0 954 | * @see {@link pascalprecht.translate.$translateSanitization} 955 | */ 956 | /** 957 | * @ngdoc function 958 | * @name pascalprecht.translate.$translateDefaultInterpolation#interpolate 959 | * @methodOf pascalprecht.translate.$translateDefaultInterpolation 960 | * 961 | * @description 962 | * Interpolates given string agains given interpolate params using angulars 963 | * `$interpolate` service. 964 | * 965 | * @returns {string} interpolated string. 966 | */ 967 | return d.setLocale=function(a){c=a},d.getInterpolationIdentifier=function(){return e},d.useSanitizeValueStrategy=function(a){return b.useStrategy(a),this},d.interpolate=function(c,d){d=d||{},d=b.sanitize(d,"params");var e=a(c)(d);return e=b.sanitize(e,"text")},d}function e(a,b,c,d,e,g){"use strict";/** 968 | * @name trim 969 | * @private 970 | * 971 | * @description 972 | * trim polyfill 973 | * 974 | * @returns {string} The string stripped of whitespace from both ends 975 | */ 976 | var h=function(){return this.toString().replace(/^\s+|\s+$/g,"")};return{restrict:"AE",scope:!0,priority:a.directivePriority(),compile:function(b,i){var j=i.translateValues?i.translateValues:void 0,k=i.translateInterpolation?i.translateInterpolation:void 0,l=b[0].outerHTML.match(/translate-value-+/i),m="^(.*)("+c.startSymbol()+".*"+c.endSymbol()+")(.*)",n="^(.*)"+c.startSymbol()+"(.*)"+c.endSymbol()+"(.*)";return function(b,o,p){b.interpolateParams={},b.preText="",b.postText="",b.translateNamespace=f(b);var q={},r=function(a,c,d){ 977 | // initially fetch all attributes if existing and fill the params 978 | if( 979 | // initial setup 980 | c.translateValues&&angular.extend(a,e(c.translateValues)(b.$parent)),l)for(var f in d)if(Object.prototype.hasOwnProperty.call(c,f)&&"translateValue"===f.substr(0,14)&&"translateValues"!==f){var g=angular.lowercase(f.substr(14,1))+f.substr(15);a[g]=d[f]}},s=function(a){if( 981 | // Remove any old watcher 982 | angular.isFunction(s._unwatchOld)&&(s._unwatchOld(),s._unwatchOld=void 0),angular.equals(a,"")||!angular.isDefined(a)){var d=h.apply(o.text()),e=d.match(m); 983 | // Interpolate translation id if required 984 | if(angular.isArray(e)){b.preText=e[1],b.postText=e[3],q.translate=c(e[2])(b.$parent);var f=d.match(n);angular.isArray(f)&&f[2]&&f[2].length&&(s._unwatchOld=b.$watch(f[2],function(a){q.translate=a,y()}))}else 985 | // do not assigne the translation id if it is empty. 986 | q.translate=d?d:void 0}else q.translate=a;y()},t=function(a){p.$observe(a,function(b){q[a]=b,y()})}; 987 | // initial setup with values 988 | r(b.interpolateParams,p,i);var u=!0;p.$observe("translate",function(a){"undefined"==typeof a? 989 | // case of element "xyz" 990 | s(""): 991 | // case of regular attribute 992 | ""===a&&u||(q.translate=a,y()),u=!1});for(var v in p)p.hasOwnProperty(v)&&"translateAttr"===v.substr(0,13)&&t(v);if(p.$observe("translateDefault",function(a){b.defaultText=a,y()}),j&&p.$observe("translateValues",function(a){a&&b.$parent.$watch(function(){angular.extend(b.interpolateParams,e(a)(b.$parent))})}),l){var w=function(a){p.$observe(a,function(c){var d=angular.lowercase(a.substr(14,1))+a.substr(15);b.interpolateParams[d]=c})};for(var x in p)Object.prototype.hasOwnProperty.call(p,x)&&"translateValue"===x.substr(0,14)&&"translateValues"!==x&&w(x)} 993 | // Master update function 994 | var y=function(){for(var a in q)q.hasOwnProperty(a)&&void 0!==q[a]&&z(a,q[a],b,b.interpolateParams,b.defaultText,b.translateNamespace)},z=function(b,c,d,e,f,g){c?( 995 | // if translation id starts with '.' and translateNamespace given, prepend namespace 996 | g&&"."===c.charAt(0)&&(c=g+c),a(c,e,k,f,d.translateLanguage).then(function(a){A(a,d,!0,b)},function(a){A(a,d,!1,b)})): 997 | // as an empty string cannot be translated, we can solve this using successful=false 998 | A(c,d,!1,b)},A=function(b,c,e,f){if(e||"undefined"!=typeof c.defaultText&&(b=c.defaultText),"translate"===f){ 999 | // default translate into innerHTML 1000 | (e||!e&&"undefined"==typeof p.translateKeepContent)&&o.empty().append(c.preText+b+c.postText);var g=a.isPostCompilingEnabled(),h="undefined"!=typeof i.translateCompile,j=h&&"false"!==i.translateCompile;(g&&!h||j)&&d(o.contents())(c)}else{ 1001 | // translate attribute 1002 | var k=p.$attr[f];"data-"===k.substr(0,5)&&( 1003 | // ensure html5 data prefix is stripped 1004 | k=k.substr(5)),k=k.substr(15),o.attr(k,b)}};(j||l||p.translateDefault)&&b.$watch("interpolateParams",y,!0); 1005 | // Replaced watcher on translateLanguage with event listener 1006 | var B=b.$on("translateLanguageChanged",y),C=g.$on("$translateChangeSuccess",y); 1007 | // ensure translation will be looked up at least one 1008 | o.text().length?s(p.translate?p.translate:""):p.translate&& 1009 | // ensure attribute will be not skipped 1010 | s(p.translate),y(),b.$on("$destroy",function(){B(),C()})}}}}/** 1011 | * Returns the scope's namespace. 1012 | * @private 1013 | * @param scope 1014 | * @returns {string} 1015 | */ 1016 | function f(a){"use strict";return a.translateNamespace?a.translateNamespace:a.$parent?f(a.$parent):void 0}function g(a,b){"use strict";return{compile:function(c){var d=function(){c.addClass(a.cloakClassName())},e=function(){c.removeClass(a.cloakClassName())};return a.onReady(function(){e()}),d(),function(c,f,g){g.translateCloak&&g.translateCloak.length&&( 1017 | // Register a watcher for the defined translation allowing a fine tuned cloak 1018 | g.$observe("translateCloak",function(b){a(b).then(e,d)}), 1019 | // Register for change events as this is being another indicicator revalidating the cloak) 1020 | b.$on("$translateChangeSuccess",function(){a(g.translateCloak).then(e,d)}))}}}}function h(){"use strict";return{restrict:"A",scope:!0,compile:function(){return{pre:function(a,b,c){a.translateNamespace=f(a),a.translateNamespace&&"."===c.translateNamespace.charAt(0)?a.translateNamespace+=c.translateNamespace:a.translateNamespace=c.translateNamespace}}}}}/** 1021 | * Returns the scope's namespace. 1022 | * @private 1023 | * @param scope 1024 | * @returns {string} 1025 | */ 1026 | function f(a){"use strict";return a.translateNamespace?a.translateNamespace:a.$parent?f(a.$parent):void 0}function i(){"use strict";return{restrict:"A",scope:!0,compile:function(){return function(a,b,c){c.$observe("translateLanguage",function(b){a.translateLanguage=b}),a.$watch("translateLanguage",function(){a.$broadcast("translateLanguageChanged")})}}}}function j(a,b){"use strict";var c=function(c,d,e,f){return angular.isObject(d)||(d=a(d)(this)),b.instant(c,d,e,f)};return b.statefulFilter()&&(c.$stateful=!0),c}function k(a){"use strict";return a("translations")}/** 1027 | * @ngdoc overview 1028 | * @name pascalprecht.translate 1029 | * 1030 | * @description 1031 | * The main module which holds everything together. 1032 | */ 1033 | /** 1034 | * @ngdoc object 1035 | * @name pascalprecht.translate.$translateSanitizationProvider 1036 | * 1037 | * @description 1038 | * 1039 | * Configurations for $translateSanitization 1040 | */ 1041 | /** 1042 | * @ngdoc object 1043 | * @name pascalprecht.translate.$translateProvider 1044 | * @description 1045 | * 1046 | * $translateProvider allows developers to register translation-tables, asynchronous loaders 1047 | * and similar to configure translation behavior directly inside of a module. 1048 | * 1049 | */ 1050 | /** 1051 | * @ngdoc object 1052 | * @name pascalprecht.translate.$translateDefaultInterpolation 1053 | * @requires $interpolate 1054 | * 1055 | * @description 1056 | * Uses angular's `$interpolate` services to interpolate strings against some values. 1057 | * 1058 | * Be aware to configure a proper sanitization strategy. 1059 | * 1060 | * See also: 1061 | * * {@link pascalprecht.translate.$translateSanitization} 1062 | * 1063 | * @return {object} $translateDefaultInterpolation Interpolator service 1064 | */ 1065 | return a.$inject=["$translate"],c.$inject=["$STORAGE_KEY","$windowProvider","$translateSanitizationProvider","pascalprechtTranslateOverrider"],d.$inject=["$interpolate","$translateSanitization"],e.$inject=["$translate","$q","$interpolate","$compile","$parse","$rootScope"],g.$inject=["$translate","$rootScope"],j.$inject=["$parse","$translate"],k.$inject=["$cacheFactory"],angular.module("pascalprecht.translate",["ng"]).run(a),a.displayName="runTranslate",angular.module("pascalprecht.translate").provider("$translateSanitization",b),angular.module("pascalprecht.translate").constant("pascalprechtTranslateOverrider",{}).provider("$translate",c),c.displayName="displayName",angular.module("pascalprecht.translate").factory("$translateDefaultInterpolation",d),d.displayName="$translateDefaultInterpolation",angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").directive("translate",e),e.displayName="translateDirective",angular.module("pascalprecht.translate").directive("translateCloak",g),g.displayName="translateCloakDirective",angular.module("pascalprecht.translate").directive("translateNamespace",h),h.displayName="translateNamespaceDirective",angular.module("pascalprecht.translate").directive("translateLanguage",i),i.displayName="translateLanguageDirective",angular.module("pascalprecht.translate").filter("translate",j),j.displayName="translateFilterFactory",angular.module("pascalprecht.translate").factory("$translationCache",k),k.displayName="$translationCache","pascalprecht.translate"}); -------------------------------------------------------------------------------- /libs/angular/angular-ui-router.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * State-based routing for AngularJS 3 | * @version v0.2.15 4 | * @link http://angular-ui.github.com/ 5 | * @license MIT License, http://www.opensource.org/licenses/MIT 6 | */ 7 | "undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return N(new(N(function(){},{prototype:a})),b)}function e(a){return M(arguments,function(b){b!==a&&M(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return M(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return N({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e "));if(s[c]=d,J(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);M(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return K(a)&&a.then&&a.$$promises}if(!K(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return M(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!H(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;M(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!K(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=N({},d),u=1+q.length/3,v=!1;if(H(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),N(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return H(a.template)?this.fromString(a.template,b):H(a.templateUrl)?this.fromUrl(a.templateUrl,b):H(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return I(a)?a(b):a},this.fromUrl=function(c,d){return I(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new P.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:e=["?(",")?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),j=P.type(h||"string")||d(P.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)}),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=N({params:{}},K(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new P.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){N(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return I(a)||L(a)&&I(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){N(this,a||{})}P=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!H(a)||"string"==typeof a},pattern:/[^/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return H(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return H(a)&&(m=a),m},this.strictMode=function(a){return H(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!H(a))return q;if(a!==!0&&a!==!1&&!J(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,N(f(),b))},this.isMatcher=function(a){if(!K(a))return!1;var b=!0;return M(r.prototype,function(c,d){I(c)&&(b=b&&H(a[d])&&I(a[d]))}),b},this.type=function(a,b,c){if(!H(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(N({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},M(x,function(a,b){u[b]=new s(N({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),M(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=K(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function j(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof s?b.type:new s(b.type):"config"===d?u.any:u.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return N(b,c,d).array}function m(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!H(c)||null==c)return q;if(c===!0||J(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=L(a.replace)?a.replace:[],J(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function r(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(d.$$fn);if(null!==a&&a!==c&&!w.type.is(a))throw new Error("Default value ("+a+") for parameter '"+w.id+"' is not an instance of Type ("+w.type.name+")");return a}function t(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),H(a)?w.type.$normalize(a):r()}function v(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=j(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");var y=d.value!==c,z=m(d,y),A=p(d,x,y,z);N(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:t,dynamic:c,config:d,toString:v})},k.prototype={$$new:function(){return d(this,N(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),M(b,function(b){M(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return M(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return M(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;de;e++)if(b(j[e]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!I(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(J(a)){var b=a;a=function(){return b}}else if(!I(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=J(b);if(J(a)&&(a=d.compile(a)),!h&&!I(b)&&!L(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),N(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:J(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),N(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=J(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!J(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):J(b.parent)?b.parent:K(b.parent)&&J(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)I(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return J(a)&&!H(b)?C[a]:I(b)&&J(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return K(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return M(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(I(d.controllerProvider)||L(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,N({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=N({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!H(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!H(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,I=[];if(f.reload){if(J(f.reload)||K(f.reload)){if(K(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var L=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!L)throw new Error("No such reload state '"+(J(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==L;)G=I[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=I[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,O(y.params,n),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),p.update(),C;for(var M=e.when(G),P=D;P=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a,c){var d=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=B(g.uiSref,a.current.name),j=null,k=C(f)||a.$current,l="[object SVGAnimatedString]"===Object.prototype.toString.call(f.prop("href"))?"xlink:href":"href",m=null,n="A"===f.prop("tagName").toUpperCase(),o="FORM"===f[0].nodeName,p=o?"action":l,q=!0,r={relative:k,inherit:!0},s=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in s&&(r[a]=s[a])});var t=function(c){if(c&&(j=b.copy(c)),q){m=a.href(i.state,j,r);var d=h[1]||h[0];return d&&d.$$addStateInfo(i.state,j),null===m?(q=!1,!1):void g.$set(p,m)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a,b){a!==j&&t(a)},!0),j=b.copy(e.$eval(i.paramExpr))),t(),o||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,r)});b.preventDefault();var g=n&&!m?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function E(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(i):d.removeClass(i)}function g(){for(var a=0;ae;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;fe;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},r.prototype.parameters=function(a){return H(a)?this.params[a]||null:this.$$paramNames},r.prototype.validates=function(a){return this.params.$$validates(a)},r.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=L(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else J(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;L(r)||(r=[r]),r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return L(a)?a:H(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g0){for(var k=0;ka?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; 3 | }catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("