From a57ee7082754fa2adaccc998b6c9a8b22a763166 Mon Sep 17 00:00:00 2001 From: Aaron Turner Date: Sat, 22 Apr 2017 18:02:35 -0700 Subject: [PATCH] Added my similar project to get started --- .DS_Store | Bin 0 -> 6148 bytes README.md | 3 + conf/browsersync-dist.conf.js | 12 + conf/browsersync.conf.js | 13 + conf/gulp.conf.js | 54 + conf/karma-auto.conf.js | 55 + conf/karma.conf.js | 55 + conf/webpack-dist.conf.js | 88 + conf/webpack-test.conf.js | 46 + conf/webpack.conf.js | 78 + dist/app-52679c9d6d0c1b1d188b.js | 1 + dist/app/images/playButtonLarge.png | Bin 0 -> 680 bytes dist/app/images/playButtonSmall.png | Bin 0 -> 341 bytes ...index-a6c4e15b0340064c1d41ab0383cbf30c.css | 14 + dist/index.html | 19 + dist/vendor-52679c9d6d0c1b1d188b.js | 1 + gulp_tasks/browsersync.js | 21 + gulp_tasks/karma.js | 27 + gulp_tasks/misc.js | 25 + gulp_tasks/webpack.js | 49 + gulpfile.js | 29 + package.json | 86 + src/.DS_Store | Bin 0 -> 6148 bytes src/.eslintrc.js | 13 + src/app/.DS_Store | Bin 0 -> 8196 bytes src/app/components/.DS_Store | Bin 0 -> 6148 bytes src/app/components/entry/entry.html | 56 + src/app/components/entry/entry.js | 61 + src/app/components/entry/entry.scss | 66 + src/app/components/entry/entry.spec.js | 18 + src/app/components/main/main.html | 47 + src/app/components/main/main.js | 96 + src/app/components/main/main.scss | 117 + src/app/components/main/main.spec.js | 21 + src/app/components/page/page.html | 10 + src/app/components/page/page.js | 51 + src/app/components/page/page.spec.js | 18 + src/app/images/.DS_Store | Bin 0 -> 6148 bytes src/app/images/playButton.svg | 4 + src/app/services/entryHelper.js | 141 + src/app/services/entryHelper.spec.js | 16 + src/app/services/sayonara.js | 54 + src/app/services/sayonara.spec.js | 16 + src/index.html | 21 + src/index.js | 67 + src/index.scss | 48 + src/index.spec.js | 2 + src/modules/navbar/index.js | 11 + src/modules/navbar/navbar.html | 98 + src/modules/navbar/navbar.js | 55 + src/modules/navbar/navbar.scss | 259 ++ src/modules/navbar/navbarRoute.js | 53 + src/modules/navbar/navbarRoute.spec.js | 16 + src/routes.js | 21 + src/styles/animate.scss | 3340 +++++++++++++++++ src/styles/bem.scss | 33 + src/styles/mediaQuery.scss | 41 + src/styles/quill.scss | 367 ++ src/styles/variables.scss | 21 + 59 files changed, 5934 insertions(+) create mode 100644 .DS_Store create mode 100644 conf/browsersync-dist.conf.js create mode 100644 conf/browsersync.conf.js create mode 100644 conf/gulp.conf.js create mode 100644 conf/karma-auto.conf.js create mode 100644 conf/karma.conf.js create mode 100644 conf/webpack-dist.conf.js create mode 100644 conf/webpack-test.conf.js create mode 100644 conf/webpack.conf.js create mode 100644 dist/app-52679c9d6d0c1b1d188b.js create mode 100644 dist/app/images/playButtonLarge.png create mode 100644 dist/app/images/playButtonSmall.png create mode 100644 dist/index-a6c4e15b0340064c1d41ab0383cbf30c.css create mode 100644 dist/index.html create mode 100644 dist/vendor-52679c9d6d0c1b1d188b.js create mode 100644 gulp_tasks/browsersync.js create mode 100644 gulp_tasks/karma.js create mode 100644 gulp_tasks/misc.js create mode 100644 gulp_tasks/webpack.js create mode 100644 gulpfile.js create mode 100644 package.json create mode 100644 src/.DS_Store create mode 100644 src/.eslintrc.js create mode 100644 src/app/.DS_Store create mode 100644 src/app/components/.DS_Store create mode 100644 src/app/components/entry/entry.html create mode 100644 src/app/components/entry/entry.js create mode 100644 src/app/components/entry/entry.scss create mode 100644 src/app/components/entry/entry.spec.js create mode 100644 src/app/components/main/main.html create mode 100644 src/app/components/main/main.js create mode 100644 src/app/components/main/main.scss create mode 100644 src/app/components/main/main.spec.js create mode 100644 src/app/components/page/page.html create mode 100644 src/app/components/page/page.js create mode 100644 src/app/components/page/page.spec.js create mode 100644 src/app/images/.DS_Store create mode 100644 src/app/images/playButton.svg create mode 100644 src/app/services/entryHelper.js create mode 100644 src/app/services/entryHelper.spec.js create mode 100644 src/app/services/sayonara.js create mode 100644 src/app/services/sayonara.spec.js create mode 100644 src/index.html create mode 100644 src/index.js create mode 100644 src/index.scss create mode 100644 src/index.spec.js create mode 100644 src/modules/navbar/index.js create mode 100644 src/modules/navbar/navbar.html create mode 100644 src/modules/navbar/navbar.js create mode 100644 src/modules/navbar/navbar.scss create mode 100644 src/modules/navbar/navbarRoute.js create mode 100644 src/modules/navbar/navbarRoute.spec.js create mode 100644 src/routes.js create mode 100644 src/styles/animate.scss create mode 100644 src/styles/bem.scss create mode 100644 src/styles/mediaQuery.scss create mode 100644 src/styles/quill.scss create mode 100644 src/styles/variables.scss diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..bfe205d11997633a25a37840f9ab6a6af7005025 GIT binary patch literal 6148 zcmeHK%Wl&^6g|@z>ZCv_yNPrMQumF_WNt&9vb`(2A5Q4Jd z7l2>jNB9Lk2hNNqmF*O%D}-RKG;`*0&%M4!vd05JG$#FBpbEfdlW0}gonvxewiR2` zE1N_iW3+>)=LM0+xeRE`C}0%$yA_b{u7w>8;Ug)$zxTLz>!&hRL}lqm-yuRo7-LZ2 zd@FD)^ynAjsNg4Kf6c_U&}Y(4@MBKqC z`gw+s&y~$oV$Eap@?M}$xwzWPo5mykMgH!M0zXb_wI5=wWL>(vZkNk;`HKCza~w@O ziJMH~hC6<#W`2L*>G88D3eLu^_uL;$yVYw4QJA=XI2dQ#U%l|del%@FldvDFI8WT< zm|T^pTfIJ;-L7prd-H8)c6X1X{rx-hxovOV+`ZpEJbm|m_F?| z4s>mAJL52j!Xa0d-b*io7g0c~W^Y`?+4vX*i~|3a0`mLdut}_IT%@Qz9qiN)+Cz+X1z$oxfDIlz7r`cdh`fOb(PM)<6+aa4Y>9 [autoprefixer] + } + }) + ], + output: { + path: path.join(process.cwd(), conf.paths.dist), + filename: '[name]-[hash].js' + }, + entry: { + app: `./${conf.path.src('index')}`, + vendor: Object.keys(pkg.dependencies) + } +}; diff --git a/conf/webpack-test.conf.js b/conf/webpack-test.conf.js new file mode 100644 index 0000000..1694c2f --- /dev/null +++ b/conf/webpack-test.conf.js @@ -0,0 +1,46 @@ +const webpack = require('webpack'); + +module.exports = { + module: { + loaders: [ + { + test: /\.json$/, + loaders: [ + 'json-loader' + ] + }, + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'eslint-loader', + enforce: 'pre' + }, + { + test: /\.js$/, + exclude: /node_modules/, + loaders: [ + 'ng-annotate-loader', + 'babel-loader' + ] + }, + { + test: /\.(png|jpg|svg)$/, + exclude: /node_modules/, + loader: 'url-loader?limit=8192' + }, + { + test: /\.html$/, + loaders: [ + 'html-loader' + ] + } + ] + }, + plugins: [ + new webpack.LoaderOptionsPlugin({ + options: {}, + debug: true + }) + ], + devtool: 'source-map' +}; diff --git a/conf/webpack.conf.js b/conf/webpack.conf.js new file mode 100644 index 0000000..443a287 --- /dev/null +++ b/conf/webpack.conf.js @@ -0,0 +1,78 @@ +const webpack = require('webpack'); +const conf = require('./gulp.conf'); +const path = require('path'); + +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const FailPlugin = require('webpack-fail-plugin'); +const autoprefixer = require('autoprefixer'); + +module.exports = { + module: { + loaders: [ + { + test: /\.json$/, + loaders: [ + 'json-loader' + ] + }, + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'eslint-loader', + enforce: 'pre' + }, + { + test: /\.(css|scss)$/, + loaders: [ + 'style-loader', + 'css-loader', + 'sass-loader', + 'postcss-loader' + ] + }, + { + test: /\.js$/, + exclude: /node_modules/, + loaders: [ + 'ng-annotate-loader', + 'babel-loader' + ] + }, + { + test: /\.(png|jpg|svg)$/, + exclude: /node_modules/, + loader: 'url-loader?limit=8192' + }, + { + test: /\.html$/, + loaders: [ + 'html-loader' + ] + } + ] + }, + plugins: [ + new webpack.optimize.OccurrenceOrderPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + FailPlugin, + new webpack.DefinePlugin({ + PRODUCTION: JSON.stringify(false), + API_URL: JSON.stringify('http://localhost:8000') + }), + new HtmlWebpackPlugin({ + template: conf.path.src('index.html') + }), + new webpack.LoaderOptionsPlugin({ + options: { + postcss: () => [autoprefixer] + }, + debug: true + }) + ], + devtool: 'source-map', + output: { + path: path.join(process.cwd(), conf.paths.tmp), + filename: 'index.js' + }, + entry: `./${conf.path.src('index')}` +}; diff --git a/dist/app-52679c9d6d0c1b1d188b.js b/dist/app-52679c9d6d0c1b1d188b.js new file mode 100644 index 0000000..d614215 --- /dev/null +++ b/dist/app-52679c9d6d0c1b1d188b.js @@ -0,0 +1 @@ +webpackJsonp([0],[,,function(module,exports){},function(module,exports,__webpack_require__){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function defineProperties(target,props){for(var i=0;i0)&&(field=customField.fields[0],!0)}),!field)return field;if(field.includes("imgur"))return field;if(field.includes("youtu")){var youtubeRegExp=/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/,match=field.match(youtubeRegExp);return"https://img.youtube.com/vi/"+(!(!match||11!==match[7].length)&&match[7])+"/0.jpg"}}}]),MainController}(),main=exports.main={template:__webpack_require__(11),controller:MainController}},function(module,exports,__webpack_require__){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function defineProperties(target,props){for(var i=0;i0&&resolve(_this2.sayonaraSite),_this2.sayonaraPromise.then(function(){resolve(_this2.sayonaraSite)})})}}]),Sayonara}();exports.default=Sayonara},function(module,exports,__webpack_require__){"use strict";function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(exports,"__esModule",{value:!0}),exports.angularNavbarModule=void 0;var _angular=__webpack_require__(0),_angular2=_interopRequireDefault(_angular),_navbarRoute=__webpack_require__(15),_navbarRoute2=_interopRequireDefault(_navbarRoute),_navbar=__webpack_require__(14),angularNavbarModule=exports.angularNavbarModule="angularNav";_angular2.default.module(angularNavbarModule,[]).service("navbarRouteService",_navbarRoute2.default).component("angularNav",_navbar.Navbar)},function(module,exports,__webpack_require__){"use strict";function routesConfig($stateProvider,$urlRouterProvider,$locationProvider){$locationProvider.html5Mode(!1).hashPrefix(""),$urlRouterProvider.otherwise("/"),$stateProvider.state("app",{url:"/",component:"app"}).state("page",{url:"/page/:title",component:"page"}).state("entry",{url:"/entry/:title",component:"entry"})}routesConfig.$inject=["$stateProvider","$urlRouterProvider","$locationProvider"],Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=routesConfig},,function(module,exports){module.exports='
\n\n
\n
\n\n
\n

\n {{$ctrl.entry.title}}\n

\n
\n\n
\n
\n\n \n\n
\n
\n << Back\n
\n
\n
\n'},function(module,exports){module.exports='
\n \n Play Button\n\n \n
\n \n {{entry.title}}\n\n \n Play Button\n\n \n
\n

\n {{entry.title}}\n

\n
\n
\n
\n'},function(module,exports){module.exports='
\n

\n {{$ctrl.getPage().title}}\n

\n\n
\n
\n
\n'},function(module,exports){module.exports='
\n \n
\n \n
\n {{$ctrl.navbarRouteService.title}}\n
\n\n \n
\n {{$ctrl.navbarRouteService.title}}\n
\n\n
    \n
  • \n {{route.title}}\n
  • \n
\n
\n\n \n
\n\n \n
\n
\n
\n
\n
\n
\n
\n
\n\n \n
\n
\n\n \n
\n\n \n
\n {{$ctrl.navbarRouteService.title}}\n
\n\n \n
\n {{$ctrl.navbarRouteService.title}}\n
\n\n
    \n
  • \n {{route.title}}\n
  • \n
\n
\n
\n
\n'},function(module,exports,__webpack_require__){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function defineProperties(target,props){for(var i=0;iY`Z0kQZn%`T*LxwMf90cBR;Wna7T(s7TKmwldCA2)Y)c%LX^2N zk67Ucp&?Fq#Rwe}u+9~sBidBR(gDx-N$43(rb$E(@2(a2%?5Mi$yR5fHZ_p84Xm~AuvmRoIHD-GGt|}~{WrQoUgIa6!pUW1*7^o=8C1WJziTpBG zF_M*aJ0M3A?sKS4o-%}mX_=N?atX@U z{U^HdU;t?m#Xdy_4Qo|G4W=sJk0)uwD7D>Nlqe9;7ezpU5>?dJiaFgRVwy8T&p2g@ z4#==Z+gZHDDnoS4LzX!<7C&N%VQx%{3CdKd(V!hggBn%l$nUqFB&k{-}p35L(t+(WAr=wN(b~2xYo?l6NsLJ`B;y z&$E4h!xzT0>m9l@d3e0Zg#*2Rc;lx?cWc+8)+Zr+HCWf_Y*-nEaH^G+=fA!8RAX>g zCOM`&e`(2fne0&YrM-Urg{M}+jn3?_v{%2pOJSq1Z+0mRst~?dQymHCW|Od<2H{6d zvngDgJqTSMh?=Gs?*C`-HVli:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}blockquote,h1,h2,h3,h4,h5,h6,ol,p,pre,ul{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}ol,ul{padding-left:1.5em}ol>li,ul>li{list-style-type:none}ul>li:before{content:"\2022"}ul[data-checked=false],ul[data-checked=true]{pointer-events:none}ul[data-checked=false]>li:before,ul[data-checked=true]>li:before{color:#777;cursor:pointer;pointer-events:all}ul[data-checked=true]>li:before{content:"\2611"}ul[data-checked=false]>li:before{content:"\2610"}li:before{display:inline-block;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}li:not(.ql-direction-rtl):before{margin-left:-1.5em}ol li,ul li{padding-left:1.5em}ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-num}ol li:before{content:counter(list-num,decimal) ". "}ol li.ql-indent-1{counter-increment:list-1}ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}ol li.ql-indent-2{counter-increment:list-2}ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}ol li.ql-indent-3{counter-increment:list-3}ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}ol li.ql-indent-4{counter-increment:list-4}ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}ol li.ql-indent-5{counter-increment:list-5}ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}ol li.ql-indent-6{counter-increment:list-6}ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}ol li.ql-indent-7{counter-increment:list-7}ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}ol li.ql-indent-7{counter-reset:list-8 list-9}ol li.ql-indent-8{counter-increment:list-8}ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}ol li.ql-indent-8{counter-reset:list-9}ol li.ql-indent-9{counter-increment:list-9}ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-indent-1:not(.ql-direction-rtl){padding-left:3em}li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-indent-2:not(.ql-direction-rtl){padding-left:6em}li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-indent-3:not(.ql-direction-rtl){padding-left:9em}li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-indent-4:not(.ql-direction-rtl){padding-left:12em}li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-indent-5:not(.ql-direction-rtl){padding-left:15em}li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-indent-6:not(.ql-direction-rtl){padding-left:18em}li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-indent-7:not(.ql-direction-rtl){padding-left:21em}li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-indent-8:not(.ql-direction-rtl){padding-left:24em}li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-indent-9:not(.ql-direction-rtl){padding-left:27em}li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-video{display:block;max-width:100%}.ql-video.ql-align-center{margin:0 auto}.ql-video.ql-align-right{margin:0 0 0 auto}.ql-bg-black{background-color:#000}.ql-bg-red{background-color:#e60000}.ql-bg-orange{background-color:#f90}.ql-bg-yellow{background-color:#ff0}.ql-bg-green{background-color:#008a00}.ql-bg-blue{background-color:#06c}.ql-bg-purple{background-color:#93f}.ql-color-white{color:#fff}.ql-color-red{color:#e60000}.ql-color-orange{color:#f90}.ql-color-yellow{color:#ff0}.ql-color-green{color:#008a00}.ql-color-blue{color:#06c}.ql-color-purple{color:#93f}.ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-size-small{font-size:.75em}.ql-size-large{font-size:1.5em}.ql-size-huge{font-size:2.5em}.ql-direction-rtl{direction:rtl;text-align:inherit}.ql-align-center{text-align:center}.ql-align-justify{text-align:justify}.ql-align-right{text-align:right}.ql-blank:before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;pointer-events:none;position:absolute}.c-main{display:flex;justify-content:center;flex-wrap:wrap}.c-main__entry{width:250px;height:250px;overflow:hidden;margin:10px;border-radius:5px;position:relative;cursor:pointer}.c-main__entry__image{z-index:0;width:100%;height:auto;min-width:250px;min-height:250px;object-fit:cover}.c-main__entry__image--play-button{z-index:1;width:100%;height:auto;min-width:250px;min-height:250px;object-fit:contain}.c-main__entry__overlay{display:flex;align-items:center;justify-content:center;opacity:0;width:250px;height:250px;z-index:2;background-color:rgba(0,0,0,.5);position:absolute;top:0;left:0;transition:opacity .5s}.c-main__entry__overlay:hover{opacity:1}.c-main__entry__overlay__title{color:#fbfbfb}.c-entry__page-content{margin-bottom:20px}.c-entry__entry__title-container{display:block;margin-left:auto;margin-right:auto;text-align:center}.c-entry__entry__title-container__title{display:inline-block;color:#030303;transition:all .5s;margin-bottom:10px}.c-entry__entry__content{margin-left:auto;margin-right:auto}.c-entry__entry__date{margin-top:10px;text-align:right}.c-entry__entry__back-container{display:block;margin:10px auto 20px;text-align:left}.c-entry__entry__back-container__back{display:inline-block;color:#4a9cee;transition:all .5s}.c-entry__entry__back-container__back:hover{text-decoration:underline;color:#1b83ea;cursor:pointer}body{margin:0}html{background-color:#fbfbfb}*{font-family:Roboto,Open Sans,Source Sans Pro,Droid Sans,Ubuntu,sans-serif}img{max-width:100%}.angular-navbar,.app-container{margin-top:5px;padding-left:5px;padding-right:5px;max-width:750px;margin-left:auto;margin-right:auto}@media (max-width:768px){.always-show,.angular-navbar__desktop--always-show,.angular-navbar__mobile--always-show{display:block!important}}@media (min-width:768px){.always-show,.angular-navbar__desktop--always-show,.angular-navbar__mobile--always-show{display:block!important}}@media (max-width:768px){.always-hide,.angular-navbar__desktop--always-hide,.angular-navbar__mobile--always-hide{display:none!important}}@media (min-width:768px){.always-hide,.angular-navbar__desktop--always-hide,.angular-navbar__mobile--always-hide{display:none!important}}.angular-navbar{width:100%;background-color:#fbfbfb;color:#030303;margin-left:auto;margin-right:auto;text-align:left;min-height:55px}.angular-navbar__desktop{display:flex;justify-content:space-between}@media (max-width:768px){.angular-navbar__desktop{display:none}}.angular-navbar__desktop__title,.angular-navbar__desktop__title--route{display:inline-block;font-size:1.5em;font-family:Indie Flower,cursive}.angular-navbar__desktop__title--route{cursor:pointer}.angular-navbar__desktop__list{padding-left:0;list-style-type:none;margin-left:auto;display:inline-block}.angular-navbar__desktop__list__item{font-size:1.25em;cursor:pointer;display:inline-block;margin-left:10px;margin-right:10px;padding-left:0;text-align:right;font-family:Indie Flower,cursive}.angular-navbar__desktop__list__item:before{display:none}.angular-navbar__desktop__list__item--active{border-bottom:2px solid #030303}@media (min-width:768px){.angular-navbar__mobile{display:none}}.angular-navbar__mobile__hamburger{position:absolute;top:7px;left:10px;border:2px solid #030303;border-radius:5px;cursor:pointer;padding:5px 5px 10px}.angular-navbar__mobile__hamburger__bar{border-bottom:2px solid #030303;height:5px;width:30px}.angular-navbar__mobile__shade{visibility:hidden;position:fixed;z-index:-9999;background-color:#030303;opacity:0;transition:opacity .5s ease-in-out;min-width:110%;min-height:102%;margin-left:-5%;margin-top:-1%}.angular-navbar__mobile__shade--nav-active{visibility:visible;opacity:.5;z-index:1}.angular-navbar__mobile__sidenav{position:fixed;margin-left:-500px;transition:margin-left .5s ease-in-out;min-height:100%;min-width:275px;max-width:275px;background-color:#fbfbfb;z-index:2}.angular-navbar__mobile__sidenav--nav-active{margin-left:0}.angular-navbar__mobile__sidenav__title{font-size:1.75em;display:block;top:20px;left:10px;font-family:Indie Flower,cursive}.angular-navbar__mobile__sidenav__title--route{font-size:1.75em;cursor:pointer;font-family:Indie Flower,cursive}.angular-navbar__mobile__sidenav__list{padding-left:0;list-style-type:none;margin-top:0;padding-left:10px;padding-top:10px;padding-bottom:10px;display:block}.angular-navbar__mobile__sidenav__list__item{font-size:1.5em;cursor:pointer;display:block;padding-left:0;font-family:Indie Flower,cursive}.angular-navbar__mobile__sidenav__list__item:before{display:none}.angular-navbar__mobile__sidenav__list__item--active{display:block;text-decoration:underline} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000..0d8e32f --- /dev/null +++ b/dist/index.html @@ -0,0 +1,19 @@ + + + + + + Leah Rose Garza + + + + + + + +
+ + +
+ + diff --git a/dist/vendor-52679c9d6d0c1b1d188b.js b/dist/vendor-52679c9d6d0c1b1d188b.js new file mode 100644 index 0000000..fee656d --- /dev/null +++ b/dist/vendor-52679c9d6d0c1b1d188b.js @@ -0,0 +1 @@ +!function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}var parentJsonpFunction=window.webpackJsonp;window.webpackJsonp=function webpackJsonpCallback(chunkIds,moreModules,executeModules){for(var moduleId,chunkId,i=0,resolves=[],result;i=0&&array.splice(idx,1),array}),exports.defaults=defaults,exports.merge=merge,exports.mergeR=function(memo,item){return exports.extend(memo,item)},exports.ancestors=ancestors,exports.equalForKeys=equalForKeys,exports.pick=pick,exports.omit=omit,exports.pluck=pluck,exports.filter=filter,exports.find=find,exports.mapObj=map,exports.map=map,exports.values=function(obj){return Object.keys(obj).map(function(key){return obj[key]})},exports.allTrueR=function(memo,elem){return memo&&elem},exports.anyTrueR=function(memo,elem){return memo||elem},exports.unnestR=function(memo,elem){return memo.concat(elem)},exports.flattenR=function(memo,elem){return predicates_1.isArray(elem)?memo.concat(elem.reduce(exports.flattenR,[])):pushR(memo,elem)},exports.pushR=pushR,exports.uniqR=function(acc,token){return exports.inArray(acc,token)?acc:pushR(acc,token)},exports.unnest=function(arr){return arr.reduce(exports.unnestR,[])},exports.flatten=function(arr){return arr.reduce(exports.flattenR,[])},exports.assertPredicate=assertPredicate,exports.pairs=function(obj){return Object.keys(obj).map(function(key){return[key,obj[key]]})},exports.arrayTuples=arrayTuples,exports.applyPairs=applyPairs,exports.tail=tail,exports.silenceUncaughtInPromise=function(promise){return promise.catch(function(e){return 0})&&promise},exports.silentRejection=function(error){return exports.silenceUncaughtInPromise(coreservices_1.services.$q.reject(error))}},function(module,exports,__webpack_require__){"use strict";function isInjectable(val){if(exports.isArray(val)&&val.length){var head=val.slice(0,-1),tail=val.slice(-1);return!(head.filter(hof_1.not(exports.isString)).length||tail.filter(hof_1.not(exports.isFunction)).length)}return exports.isFunction(val)}var hof_1=__webpack_require__(5),toStr=Object.prototype.toString,tis=function(t){return function(x){return typeof x===t}};exports.isUndefined=tis("undefined"),exports.isDefined=hof_1.not(exports.isUndefined),exports.isNull=function(o){return null===o},exports.isFunction=tis("function"),exports.isNumber=tis("number"),exports.isString=tis("string"),exports.isObject=function(x){return null!==x&&"object"==typeof x},exports.isArray=Array.isArray,exports.isDate=function(x){return"[object Date]"===toStr.call(x)},exports.isRegExp=function(x){return"[object RegExp]"===toStr.call(x)},exports.isInjectable=isInjectable,exports.isPromise=hof_1.and(exports.isObject,hof_1.pipe(hof_1.prop("then"),exports.isFunction))},function(module,exports){"use strict";function curry(fn){function curried(args){return args.length>=func_args_length?fn.apply(null,args):function(){return curried(args.concat([].slice.apply(arguments)))}}var initial_args=[].slice.apply(arguments,[1]),func_args_length=fn.length;return curried(initial_args)}function compose(){var args=arguments,start=args.length-1;return function(){for(var i=start,result=args[start].apply(this,arguments);i--;)result=args[i].call(this,result);return result}}function pipe(){for(var funcs=[],_i=0;_i-1},Glob.fromString=function(text){return this.is(text)?new Glob(text):null},Glob}();exports.Glob=Glob},function(module,exports){"use strict";var Queue=function(){function Queue(_items,_limit){void 0===_items&&(_items=[]),void 0===_limit&&(_limit=null),this._items=_items,this._limit=_limit}return Queue.prototype.enqueue=function(item){var items=this._items;return items.push(item),this._limit&&items.length>this._limit&&items.shift(),item},Queue.prototype.dequeue=function(){if(this.size())return this._items.splice(0,1)[0]},Queue.prototype.clear=function(){var current=this._items;return this._items=[],current},Queue.prototype.size=function(){return this._items.length},Queue.prototype.remove=function(item){var idx=this._items.indexOf(item);return idx>-1&&this._items.splice(idx,1)[0]},Queue.prototype.peekTail=function(){return this._items[this._items.length-1]},Queue.prototype.peekHead=function(){if(this.size())return this._items[0]},Queue}();exports.Queue=Queue},function(module,exports,__webpack_require__){"use strict";function maxLength(max,str){return str.length<=max?str:str.substr(0,max-3)+"..."}function padString(length,str){for(;str.length20)return"Too many Transition redirects (20+)";return state.self.abstract?"Cannot transition to abstract state '"+state.name+"'":param_1.Param.validates(state.parameters(),this.params())?this.success===!1?this._error:void 0:"Param values not valid for state '"+state.name+"'"},Transition.prototype.toString=function(){var fromStateOrName=this.from(),toStateOrName=this.to(),avoidEmptyHash=function(params){return null!==params["#"]&&void 0!==params["#"]?params:common_1.omit(params,"#")};return"Transition#"+this.$id+"( '"+(predicates_1.isObject(fromStateOrName)?fromStateOrName.name:fromStateOrName)+"'"+common_1.toJson(avoidEmptyHash(this._treeChanges.from.map(hof_1.prop("paramValues")).reduce(common_1.mergeR,{})))+" -> "+(this.valid()?"":"(X) ")+"'"+(predicates_1.isObject(toStateOrName)?toStateOrName.name:toStateOrName)+"'"+common_1.toJson(avoidEmptyHash(this.params()))+" )"},Transition.diToken=Transition,Transition}();exports.Transition=Transition},function(module,exports,__webpack_require__){"use strict";function uiViewString(viewData){return viewData?"[ui-view#"+viewData.id+" tag in template from '"+(viewData.creationContext&&viewData.creationContext.name||"(root)")+"' state]: fqn: '"+viewData.fqn+"', name: '"+viewData.name+"@"+viewData.creationContext+"')":"ui-view (defunct)"}function normalizedCat(input){return predicates_1.isNumber(input)?Category[input]:Category[Category[input]]}var hof_1=__webpack_require__(5),predicates_1=__webpack_require__(4),strings_1=__webpack_require__(9),viewConfigString=function(viewConfig){return"[ViewConfig#"+viewConfig.$id+" from '"+(viewConfig.viewDecl.$context.name||"(root)")+"' state]: target ui-view: '"+viewConfig.viewDecl.$uiViewName+"@"+viewConfig.viewDecl.$uiViewContextAnchor+"'"};!function(Category){Category[Category.RESOLVE=0]="RESOLVE",Category[Category.TRANSITION=1]="TRANSITION",Category[Category.HOOK=2]="HOOK",Category[Category.UIVIEW=3]="UIVIEW",Category[Category.VIEWCONFIG=4]="VIEWCONFIG"}(exports.Category||(exports.Category={}));var Category=exports.Category,Trace=function(){function Trace(){this._enabled={},this.approximateDigests=0}return Trace.prototype._set=function(enabled,categories){var _this=this;categories.length||(categories=Object.keys(Category).map(function(k){return parseInt(k,10)}).filter(function(k){return!isNaN(k)}).map(function(key){return Category[key]})),categories.map(normalizedCat).forEach(function(category){return _this._enabled[category]=enabled})},Trace.prototype.enable=function(){for(var categories=[],_i=0;_i "+transitionStr)}},Trace.prototype.traceTransitionIgnored=function(trans){if(this.enabled(Category.TRANSITION)){var tid=trans&&trans.$id,digest=this.approximateDigests,transitionStr=strings_1.stringify(trans);console.log("Transition #"+tid+" Digest #"+digest+": Ignored <> "+transitionStr)}},Trace.prototype.traceHookInvocation=function(step,options){if(this.enabled(Category.HOOK)){var tid=hof_1.parse("transition.$id")(options),digest=this.approximateDigests,event=hof_1.parse("traceData.hookType")(options)||"internal",context=hof_1.parse("traceData.context.state.name")(options)||hof_1.parse("traceData.context")(options)||"unknown",name=strings_1.functionToString(step.eventHook.callback);console.log("Transition #"+tid+" Digest #"+digest+": Hook -> "+event+" context: "+context+", "+strings_1.maxLength(200,name))}},Trace.prototype.traceHookResult=function(hookResult,transitionOptions){if(this.enabled(Category.HOOK)){var tid=hof_1.parse("transition.$id")(transitionOptions),digest=this.approximateDigests,hookResultStr=strings_1.stringify(hookResult);console.log("Transition #"+tid+" Digest #"+digest+": <- Hook returned: "+strings_1.maxLength(200,hookResultStr))}},Trace.prototype.traceResolvePath=function(path,when,trans){if(this.enabled(Category.RESOLVE)){var tid=trans&&trans.$id,digest=this.approximateDigests,pathStr=path&&path.toString();console.log("Transition #"+tid+" Digest #"+digest+": Resolving "+pathStr+" ("+when+")")}},Trace.prototype.traceResolvableResolved=function(resolvable,trans){if(this.enabled(Category.RESOLVE)){var tid=trans&&trans.$id,digest=this.approximateDigests,resolvableStr=resolvable&&resolvable.toString(),result=strings_1.stringify(resolvable.data);console.log("Transition #"+tid+" Digest #"+digest+": <- Resolved "+resolvableStr+" to: "+strings_1.maxLength(200,result))}},Trace.prototype.traceError=function(reason,trans){if(this.enabled(Category.TRANSITION)){var tid=trans&&trans.$id,digest=this.approximateDigests,transitionStr=strings_1.stringify(trans);console.log("Transition #"+tid+" Digest #"+digest+": <- Rejected "+transitionStr+", reason: "+reason)}},Trace.prototype.traceSuccess=function(finalState,trans){if(this.enabled(Category.TRANSITION)){var tid=trans&&trans.$id,digest=this.approximateDigests,state=finalState.name,transitionStr=strings_1.stringify(trans);console.log("Transition #"+tid+" Digest #"+digest+": <- Success "+transitionStr+", final state: "+state)}},Trace.prototype.traceUIViewEvent=function(event,viewData,extra){void 0===extra&&(extra=""),this.enabled(Category.UIVIEW)&&console.log("ui-view: "+strings_1.padString(30,event)+" "+uiViewString(viewData)+extra)},Trace.prototype.traceUIViewConfigUpdated=function(viewData,context){this.enabled(Category.UIVIEW)&&this.traceUIViewEvent("Updating",viewData," with ViewConfig from context='"+context+"'")},Trace.prototype.traceUIViewFill=function(viewData,html){this.enabled(Category.UIVIEW)&&this.traceUIViewEvent("Fill",viewData," with: "+strings_1.maxLength(200,html))},Trace.prototype.traceViewServiceEvent=function(event,viewConfig){this.enabled(Category.VIEWCONFIG)&&console.log("VIEWCONFIG: "+event+" "+viewConfigString(viewConfig))},Trace.prototype.traceViewServiceUIViewEvent=function(event,viewData){this.enabled(Category.VIEWCONFIG)&&console.log("VIEWCONFIG: "+event+" "+uiViewString(viewData))},Trace}();exports.Trace=Trace;var trace=new Trace;exports.trace=trace},function(module,exports,__webpack_require__){"use strict";var common_1=__webpack_require__(3),strings_1=__webpack_require__(9),predicates_1=__webpack_require__(4),hof_1=__webpack_require__(5),trace_1=__webpack_require__(12),coreservices_1=__webpack_require__(6),rejectFactory_1=__webpack_require__(10),targetState_1=__webpack_require__(14),defaultOptions={async:!0,rejectIfSuperseded:!0,current:common_1.noop,transition:null,traceData:{},bind:null},TransitionHook=function(){function TransitionHook(transition,stateContext,eventHook,options){var _this=this;this.transition=transition,this.stateContext=stateContext,this.eventHook=eventHook,this.options=options,this.isSuperseded=function(){return _this.options.current()!==_this.options.transition},this.options=common_1.defaults(options,defaultOptions)}return TransitionHook.prototype.invokeHook=function(){var _a=this,options=_a.options,eventHook=_a.eventHook;if(trace_1.trace.traceHookInvocation(this,options),options.rejectIfSuperseded&&this.isSuperseded())return rejectFactory_1.Rejection.superseded(options.current()).toPromise();var synchronousHookResult=eventHook._deregistered?void 0:eventHook.callback.call(options.bind,this.transition,this.stateContext);return this.handleHookResult(synchronousHookResult)},TransitionHook.prototype.handleHookResult=function(result){return this.isSuperseded()?rejectFactory_1.Rejection.superseded(this.options.current()).toPromise():predicates_1.isPromise(result)?result.then(this.handleHookResult.bind(this)):(trace_1.trace.traceHookResult(result,this.options),result===!1?rejectFactory_1.Rejection.aborted("Hook aborted transition").toPromise():hof_1.is(targetState_1.TargetState)(result)?rejectFactory_1.Rejection.redirected(result).toPromise():void 0)},TransitionHook.prototype.toString=function(){var _a=this,options=_a.options,eventHook=_a.eventHook,event=hof_1.parse("traceData.hookType")(options)||"internal",context=hof_1.parse("traceData.context.state.name")(options)||hof_1.parse("traceData.context")(options)||"unknown",name=strings_1.fnToString(eventHook.callback);return event+" context: "+context+", "+strings_1.maxLength(200,name)},TransitionHook.runSynchronousHooks=function(hooks,swallowExceptions){void 0===swallowExceptions&&(swallowExceptions=!1);for(var results=[],i=0;i=0));)checkParamErrors(p.id),this._params.push(param_1.Param.fromPath(p.id,p.type,this.config.paramMap(p.cfg,!1),paramTypes)),this._segments.push(p.segment),patterns.push([p.segment,common_1.tail(this._params)]),last=placeholder.lastIndex;segment=pattern.substring(last);var i=segment.indexOf("?");if(i>=0){var search=segment.substring(i);if(segment=segment.substring(0,i),search.length>0)for(last=0;m=searchPlaceholder.exec(search);)p=matchDetails(m,!0),checkParamErrors(p.id),this._params.push(param_1.Param.fromSearch(p.id,p.type,this.config.paramMap(p.cfg,!0),paramTypes)),last=placeholder.lastIndex}this._segments.push(segment),common_1.extend(this,{_compiled:patterns.map(function(pattern){return quoteRegExp.apply(null,pattern)}).concat(quoteRegExp(segment)),prefix:this._segments[0]}),Object.freeze(this)}return UrlMatcher.prototype.append=function(url){return this._children.push(url),common_1.forEach(url._cache,function(val,key){return url._cache[key]=predicates_1.isArray(val)?[]:null}),url._cache.path=this._cache.path.concat(this),url},UrlMatcher.prototype.isRoot=function(){return 0===this._cache.path.length},UrlMatcher.prototype.toString=function(){return this.pattern},UrlMatcher.prototype.exec=function(path,search,hash,options){function decodePathArray(string){var reverseString=function(str){return str.split("").reverse().join("")},unquoteDashes=function(str){return str.replace(/\\-/g,"-")},split=reverseString(string).split(/-(?!\\)/),allReversed=common_1.map(split,reverseString);return common_1.map(allReversed,unquoteDashes).reverse()}var _this=this;void 0===search&&(search={}),void 0===options&&(options={});var match=memoizeTo(this._cache,"pattern",function(){return new RegExp(["^",common_1.unnest(_this._cache.path.concat(_this).map(hof_1.prop("_compiled"))).join(""),_this.config.strict===!1?"/?":"","$"].join(""),_this.config.caseInsensitive?"i":void 0)}).exec(path);if(!match)return null;var allParams=this.parameters(),pathParams=allParams.filter(function(param){return!param.isSearch()}),searchParams=allParams.filter(function(param){return param.isSearch()}),nPathSegments=this._cache.path.concat(this).map(function(urlm){return urlm._segments.length-1}).reduce(function(a,x){return a+x}),values={};if(nPathSegments!==match.length-1)throw new Error("Unbalanced capture group in route '"+this.pattern+"'");for(var i=0;i1&&matchingConfigs.sort(depthCompare(viewConfigDepth,-1)),[uiView,matchingConfigs[0]]},configureUIView=function(_a){var uiView=_a[0],viewConfig=_a[1];_this.uiViews.indexOf(uiView)!==-1&&uiView.configUpdated(viewConfig)};_this.uiViews.sort(depthCompare(uiViewDepth,1)).map(matchingConfigPair).forEach(configureUIView)}}return ViewService.prototype.rootContext=function(context){return this._rootContext=context||this._rootContext},ViewService.prototype.viewConfigFactory=function(viewType,factory){this._viewConfigFactories[viewType]=factory},ViewService.prototype.createViewConfig=function(path,decl){var cfgFactory=this._viewConfigFactories[decl.$type];if(!cfgFactory)throw new Error("ViewService: No view config factory registered for type "+decl.$type);var cfgs=cfgFactory(path,decl);return predicates_1.isArray(cfgs)?cfgs:[cfgs]},ViewService.prototype.deactivateViewConfig=function(viewConfig){trace_1.trace.traceViewServiceEvent("<- Removing",viewConfig),common_1.removeFrom(this.viewConfigs,viewConfig)},ViewService.prototype.activateViewConfig=function(viewConfig){trace_1.trace.traceViewServiceEvent("-> Registering",viewConfig),this.viewConfigs.push(viewConfig)},ViewService.prototype.registerUIView=function(uiView){trace_1.trace.traceViewServiceUIViewEvent("-> Registering",uiView);var uiViews=this.uiViews,fqnMatches=function(uiv){return uiv.fqn===uiView.fqn};return uiViews.filter(fqnMatches).length&&trace_1.trace.traceViewServiceUIViewEvent("!!!! duplicate uiView named:",uiView),uiViews.push(uiView),this.sync(),function(){if(uiViews.indexOf(uiView)===-1)return void trace_1.trace.traceViewServiceUIViewEvent("Tried removing non-registered uiView",uiView);trace_1.trace.traceViewServiceUIViewEvent("<- Deregistering",uiView),common_1.removeFrom(uiViews)(uiView)}},ViewService.prototype.available=function(){return this.uiViews.map(hof_1.prop("fqn"))},ViewService.prototype.active=function(){return this.uiViews.filter(hof_1.prop("$config")).map(hof_1.prop("name"))},ViewService.normalizeUIViewTarget=function(context,rawViewName){void 0===rawViewName&&(rawViewName="");var viewAtContext=rawViewName.split("@"),uiViewName=viewAtContext[0]||"$default",uiViewContextAnchor=predicates_1.isString(viewAtContext[1])?viewAtContext[1]:"^",relativeViewNameSugar=/^(\^(?:\.\^)*)\.(.*$)/.exec(uiViewName);relativeViewNameSugar&&(uiViewContextAnchor=relativeViewNameSugar[1],uiViewName=relativeViewNameSugar[2]),"!"===uiViewName.charAt(0)&&(uiViewName=uiViewName.substr(1),uiViewContextAnchor=""),/^(\^(?:\.\^)*)$/.exec(uiViewContextAnchor)&&(uiViewContextAnchor=uiViewContextAnchor.split(".").reduce(function(anchor,x){return anchor.parent},context).name);return{uiViewName:uiViewName,uiViewContextAnchor:uiViewContextAnchor}},ViewService}();exports.ViewService=ViewService},function(module,exports,__webpack_require__){"use strict";var stateMatcher_1=__webpack_require__(39),stateBuilder_1=__webpack_require__(40),stateQueueManager_1=__webpack_require__(41),common_1=__webpack_require__(3),StateRegistry=function(){function StateRegistry(urlMatcherFactory,urlRouterProvider){this.urlRouterProvider=urlRouterProvider,this.states={},this.listeners=[],this.matcher=new stateMatcher_1.StateMatcher(this.states),this.builder=new stateBuilder_1.StateBuilder(this.matcher,urlMatcherFactory),this.stateQueue=new stateQueueManager_1.StateQueueManager(this.states,this.builder,urlRouterProvider,this.listeners);var rootStateDef={name:"",url:"^",views:null,params:{"#":{value:null,type:"hash",dynamic:!0}},abstract:!0};(this._root=this.stateQueue.register(rootStateDef)).navigable=null}return StateRegistry.prototype.onStatesChanged=function(listener){return this.listeners.push(listener),function deregisterListener(){common_1.removeFrom(this.listeners)(listener)}.bind(this)},StateRegistry.prototype.root=function(){return this._root},StateRegistry.prototype.register=function(stateDefinition){return this.stateQueue.register(stateDefinition)},StateRegistry.prototype._deregisterTree=function(state){var _this=this,all=this.get().map(function(s){return s.$$state()}),getChildren=function(states){var children=all.filter(function(s){return states.indexOf(s.parent)!==-1});return 0===children.length?children:children.concat(getChildren(children))},children=getChildren([state]),deregistered=[state].concat(children).reverse();return deregistered.forEach(function(state){_this.urlRouterProvider.removeRule(state._urlRule),delete _this.states[state.name]}),deregistered},StateRegistry.prototype.deregister=function(stateOrName){var _state=this.get(stateOrName);if(!_state)throw new Error("Can't deregister state; not found: "+stateOrName);var deregisteredStates=this._deregisterTree(_state.$$state());return this.listeners.forEach(function(listener){return listener("deregistered",deregisteredStates.map(function(s){return s.self}))}),deregisteredStates},StateRegistry.prototype.get=function(stateOrName,base){var _this=this;if(0===arguments.length)return Object.keys(this.states).map(function(name){return _this.states[name].self});var found=this.matcher.find(stateOrName,base);return found&&found.self||null},StateRegistry.prototype.decorator=function(name,func){return this.builder.builder(name,func)},StateRegistry}();exports.StateRegistry=StateRegistry},function(module,exports,__webpack_require__){"use strict";var predicates_1=__webpack_require__(4),glob_1=__webpack_require__(7),common_1=__webpack_require__(3),StateMatcher=function(){function StateMatcher(_states){this._states=_states}return StateMatcher.prototype.isRelative=function(stateName){return stateName=stateName||"",0===stateName.indexOf(".")||0===stateName.indexOf("^")},StateMatcher.prototype.find=function(stateOrName,base){if(stateOrName||""===stateOrName){var isStr=predicates_1.isString(stateOrName),name=isStr?stateOrName:stateOrName.name;this.isRelative(name)&&(name=this.resolvePath(name,base));var state=this._states[name];if(state&&(isStr||!(isStr||state!==stateOrName&&state.self!==stateOrName)))return state;if(isStr){var matches=common_1.values(this._states).filter(function(state){return new glob_1.Glob(state.name).matches(name)});return matches.length>1&&console.log("stateMatcher.find: Found multiple matches for "+name+" using glob: ",matches.map(function(match){return match.name})),matches[0]}}},StateMatcher.prototype.resolvePath=function(name,base){if(!base)throw new Error("No reference point given for path '"+name+"'");for(var baseState=this.find(base),splitName=name.split("."),i=0,pathLength=splitName.length,current=baseState;i1?array:array[0]:predicates_1.isString(name)&&predicates_1.isFunction(fn)?(builders[name]=array,builders[name].push(fn),function(){return builders[name].splice(builders[name].indexOf(fn,1))&&null}):void 0},StateBuilder.prototype.build=function(state){var _a=this,matcher=_a.matcher,builders=_a.builders,parent=this.parentName(state);if(parent&&!matcher.find(parent))return null;for(var key in builders)if(builders.hasOwnProperty(key)){var chain=builders[key].reduce(function(parentFn,step){return function(_state){return step(_state,parentFn)}},common_1.noop);state[key]=chain(state)}return state},StateBuilder.prototype.parentName=function(state){var name=state.name||"",segments=name.split(".");if(segments.length>1){if(state.parent)throw new Error("States that specify the 'parent:' property should not have a '.' in their name ("+name+")");return"**"===segments.pop()&&segments.pop(),segments.join(".")}return state.parent?predicates_1.isString(state.parent)?state.parent:state.parent.name:""},StateBuilder.prototype.name=function(state){var name=state.name;if(name.indexOf(".")!==-1||!state.parent)return name;var parentName=predicates_1.isString(state.parent)?state.parent:state.parent.name;return parentName?parentName+"."+name:name},StateBuilder}();exports.StateBuilder=StateBuilder},function(module,exports,__webpack_require__){"use strict";var common_1=__webpack_require__(3),predicates_1=__webpack_require__(4),stateObject_1=__webpack_require__(42),StateQueueManager=function(){function StateQueueManager(states,builder,$urlRouterProvider,listeners){this.states=states,this.builder=builder,this.$urlRouterProvider=$urlRouterProvider,this.listeners=listeners,this.queue=[]}return StateQueueManager.prototype.register=function(config){var _a=this,states=_a.states,queue=_a.queue,$state=_a.$state,state=common_1.inherit(new stateObject_1.State,common_1.extend({},config,{self:config,resolve:config.resolve||[],toString:function(){return config.name}}));if(!predicates_1.isString(state.name))throw new Error("State must have a valid name");if(states.hasOwnProperty(state.name)||common_1.pluck(queue,"name").indexOf(state.name)!==-1)throw new Error("State '"+state.name+"' is already defined");return queue.push(state),this.$state&&this.flush($state),state},StateQueueManager.prototype.flush=function($state){for(var _a=this,queue=_a.queue,states=_a.states,builder=_a.builder,registered=[],orphans=[],previousQueueLength={};queue.length>0;){var state=queue.shift(),result=builder.build(state),orphanIdx=orphans.indexOf(state);if(result){if(states.hasOwnProperty(state.name))throw new Error("State '"+name+"' is already defined");states[state.name]=state,this.attachRoute($state,state),orphanIdx>=0&&orphans.splice(orphanIdx,1),registered.push(state)}else{var prev=previousQueueLength[state.name];if(previousQueueLength[state.name]=queue.length,orphanIdx>=0&&prev===queue.length)return queue.push(state),states;orphanIdx<0&&orphans.push(state),queue.push(state)}}return registered.length&&this.listeners.forEach(function(listener){return listener("registered",registered.map(function(s){return s.self}))}),states},StateQueueManager.prototype.autoFlush=function($state){this.$state=$state,this.flush($state)},StateQueueManager.prototype.attachRoute=function($state,state){var $urlRouterProvider=this.$urlRouterProvider;!state.abstract&&state.url&&$urlRouterProvider.when(state.url,["$match","$stateParams",function($match,$stateParams){$state.$current.navigable===state&&common_1.equalForKeys($match,$stateParams)||$state.transitionTo(state,$match,{inherit:!0,source:"url"})}],function(rule){return state._urlRule=rule})},StateQueueManager}();exports.StateQueueManager=StateQueueManager},function(module,exports,__webpack_require__){"use strict";var common_1=__webpack_require__(3),hof_1=__webpack_require__(5),State=function(){function State(config){common_1.extend(this,config)}return State.prototype.is=function(ref){return this===ref||this.self===ref||this.fqn()===ref},State.prototype.fqn=function(){if(!(this.parent&&this.parent instanceof this.constructor))return this.name;var name=this.parent.fqn();return name?name+"."+this.name:this.name},State.prototype.root=function(){return this.parent&&this.parent.root()||this},State.prototype.parameters=function(opts){return opts=common_1.defaults(opts,{inherit:!0}),(opts.inherit&&this.parent&&this.parent.parameters()||[]).concat(common_1.values(this.params))},State.prototype.parameter=function(id,opts){return void 0===opts&&(opts={}),this.url&&this.url.parameter(id,opts)||common_1.find(common_1.values(this.params),hof_1.propEq("id",id))||opts.inherit&&this.parent&&this.parent.parameter(id)},State.prototype.toString=function(){return this.fqn()},State}();exports.State=State},function(module,exports,__webpack_require__){"use strict";var common_1=__webpack_require__(3),predicates_1=__webpack_require__(4),queue_1=__webpack_require__(8),coreservices_1=__webpack_require__(6),pathFactory_1=__webpack_require__(20),node_1=__webpack_require__(21),transitionService_1=__webpack_require__(30),rejectFactory_1=__webpack_require__(10),targetState_1=__webpack_require__(14),param_1=__webpack_require__(22),glob_1=__webpack_require__(7),common_2=__webpack_require__(3),common_3=__webpack_require__(3),resolveContext_1=__webpack_require__(17),StateService=function(){function StateService(router){this.router=router,this.invalidCallbacks=[],this._defaultErrorHandler=function $defaultErrorHandler($error$){$error$ instanceof Error&&$error$.stack?(console.error($error$),console.error($error$.stack)):$error$ instanceof rejectFactory_1.Rejection?(console.error($error$.toString()),$error$.detail&&$error$.detail.stack&&console.error($error$.detail.stack)):console.error($error$)};var getters=["current","$current","params","transition"],boundFns=Object.keys(StateService.prototype).filter(function(key){return getters.indexOf(key)===-1});common_3.bindFunctions(StateService.prototype,this,this,boundFns)}return Object.defineProperty(StateService.prototype,"transition",{get:function(){return this.router.globals.transition},enumerable:!0,configurable:!0}),Object.defineProperty(StateService.prototype,"params",{get:function(){return this.router.globals.params},enumerable:!0,configurable:!0}),Object.defineProperty(StateService.prototype,"current",{get:function(){return this.router.globals.current},enumerable:!0,configurable:!0}),Object.defineProperty(StateService.prototype,"$current",{get:function(){return this.router.globals.$current},enumerable:!0,configurable:!0}),StateService.prototype._handleInvalidTargetState=function(fromPath,toState){function invokeNextCallback(){var nextCallback=callbackQueue.dequeue();return void 0===nextCallback?rejectFactory_1.Rejection.invalid(toState.error()).toPromise():coreservices_1.services.$q.when(nextCallback(toState,fromState,injector)).then(checkForRedirect).then(function(result){return result||invokeNextCallback()})}var _this=this,fromState=pathFactory_1.PathFactory.makeTargetState(fromPath),globals=this.router.globals,latestThing=function(){return globals.transitionHistory.peekTail()},latest=latestThing(),callbackQueue=new queue_1.Queue(this.invalidCallbacks.slice()),injector=new resolveContext_1.ResolveContext(fromPath).injector(),checkForRedirect=function(result){if(result instanceof targetState_1.TargetState){var target=result;return target=_this.target(target.identifier(),target.params(),target.options()),target.valid()?latestThing()!==latest?rejectFactory_1.Rejection.superseded().toPromise():_this.transitionTo(target.identifier(),target.params(),target.options()):rejectFactory_1.Rejection.invalid(target.error()).toPromise()}};return invokeNextCallback()},StateService.prototype.onInvalid=function(callback){return this.invalidCallbacks.push(callback),function deregisterListener(){common_1.removeFrom(this.invalidCallbacks)(callback)}.bind(this)},StateService.prototype.reload=function(reloadState){return this.transitionTo(this.current,this.params,{reload:!predicates_1.isDefined(reloadState)||reloadState,inherit:!1,notify:!1})},StateService.prototype.go=function(to,params,options){var defautGoOpts={relative:this.$current,inherit:!0},transOpts=common_1.defaults(options,defautGoOpts,transitionService_1.defaultTransOpts);return this.transitionTo(to,params,transOpts)},StateService.prototype.target=function(identifier,params,options){if(void 0===options&&(options={}),predicates_1.isObject(options.reload)&&!options.reload.name)throw new Error("Invalid reload state object");var reg=this.router.stateRegistry;if(options.reloadState=options.reload===!0?reg.root():reg.matcher.find(options.reload,options.relative),options.reload&&!options.reloadState)throw new Error("No such reload state '"+(predicates_1.isString(options.reload)?options.reload:options.reload.name)+"'");var stateDefinition=reg.matcher.find(identifier,options.relative);return new targetState_1.TargetState(identifier,stateDefinition,params,options)},StateService.prototype.transitionTo=function(to,toParams,options){var _this=this;void 0===toParams&&(toParams={}),void 0===options&&(options={});var router=this.router,globals=router.globals,transHistory=globals.transitionHistory;options=common_1.defaults(options,transitionService_1.defaultTransOpts),options=common_1.extend(options,{current:transHistory.peekTail.bind(transHistory)});var ref=this.target(to,toParams,options),latestSuccess=globals.successfulTransitions.peekTail(),rootPath=function(){return[new node_1.PathNode(_this.router.stateRegistry.root())]},currentPath=latestSuccess?latestSuccess.treeChanges().to:rootPath();if(!ref.exists())return this._handleInvalidTargetState(currentPath,ref);if(!ref.valid())return common_1.silentRejection(ref.error());var rejectedTransitionHandler=function(transition){return function(error){if(error instanceof rejectFactory_1.Rejection){if(error.type===rejectFactory_1.RejectType.IGNORED)return router.urlRouter.update(),coreservices_1.services.$q.when(globals.current);var detail=error.detail;if(error.type===rejectFactory_1.RejectType.SUPERSEDED&&error.redirected&&detail instanceof targetState_1.TargetState){var redirect=transition.redirect(detail);return redirect.run().catch(rejectedTransitionHandler(redirect))}error.type===rejectFactory_1.RejectType.ABORTED&&router.urlRouter.update()}return _this.defaultErrorHandler()(error),coreservices_1.services.$q.reject(error)}},transition=this.router.transitionService.create(currentPath,ref),transitionToPromise=transition.run().catch(rejectedTransitionHandler(transition));return common_1.silenceUncaughtInPromise(transitionToPromise),common_1.extend(transitionToPromise,{transition:transition})},StateService.prototype.is=function(stateOrName,params,options){options=common_1.defaults(options,{relative:this.$current});var state=this.router.stateRegistry.matcher.find(stateOrName,options.relative);if(predicates_1.isDefined(state))return this.$current===state&&(!predicates_1.isDefined(params)||null===params||param_1.Param.equals(state.parameters(),this.params,params))},StateService.prototype.includes=function(stateOrName,params,options){options=common_1.defaults(options,{relative:this.$current});var glob=predicates_1.isString(stateOrName)&&glob_1.Glob.fromString(stateOrName);if(glob){if(!glob.matches(this.$current.name))return!1;stateOrName=this.$current.name}var state=this.router.stateRegistry.matcher.find(stateOrName,options.relative),include=this.$current.includes;if(predicates_1.isDefined(state))return!!predicates_1.isDefined(include[state.name])&&(!params||common_2.equalForKeys(param_1.Param.values(state.parameters(),params),this.params,Object.keys(params)))},StateService.prototype.href=function(stateOrName,params,options){var defaultHrefOpts={lossy:!0,inherit:!0,absolute:!1,relative:this.$current};options=common_1.defaults(options,defaultHrefOpts),params=params||{};var state=this.router.stateRegistry.matcher.find(stateOrName,options.relative);if(!predicates_1.isDefined(state))return null;options.inherit&&(params=this.params.$inherit(params,this.$current,state));var nav=state&&options.lossy?state.navigable:state;return nav&&void 0!==nav.url&&null!==nav.url?this.router.urlRouter.href(nav.url,param_1.Param.values(state.parameters(),params),{absolute:options.absolute}):null},StateService.prototype.defaultErrorHandler=function(handler){return this._defaultErrorHandler=handler||this._defaultErrorHandler},StateService.prototype.get=function(stateOrName,base){var reg=this.router.stateRegistry;return 0===arguments.length?reg.get():reg.get(stateOrName,base||this.$current)},StateService}();exports.StateService=StateService},function(module,exports,__webpack_require__){"use strict";var stateParams_1=__webpack_require__(45),queue_1=__webpack_require__(8),common_1=__webpack_require__(3),Globals=function(){function Globals(transitionService){var _this=this;this.params=new stateParams_1.StateParams,this.transitionHistory=new queue_1.Queue([],1),this.successfulTransitions=new queue_1.Queue([],1);var beforeNewTransition=function($transition$){_this.transition=$transition$,_this.transitionHistory.enqueue($transition$);var updateGlobalState=function(){_this.successfulTransitions.enqueue($transition$),_this.$current=$transition$.$to(),_this.current=_this.$current.self,common_1.copy($transition$.params(),_this.params)};$transition$.onSuccess({},updateGlobalState,{priority:1e4});var clearCurrentTransition=function(){_this.transition===$transition$&&(_this.transition=null)};$transition$.promise.then(clearCurrentTransition,clearCurrentTransition)};transitionService.onBefore({},beforeNewTransition)}return Globals}();exports.Globals=Globals},function(module,exports,__webpack_require__){"use strict";var common_1=__webpack_require__(3),StateParams=function(){function StateParams(params){void 0===params&&(params={}),common_1.extend(this,params)}return StateParams.prototype.$inherit=function(newParams,$current,$to){var parents=common_1.ancestors($current,$to),parentParams,inherited={},inheritList=[];for(var i in parents)if(parents[i]&&parents[i].params&&(parentParams=Object.keys(parents[i].params),parentParams.length))for(var j in parentParams)inheritList.indexOf(parentParams[j])>=0||(inheritList.push(parentParams[j]),inherited[parentParams[j]]=this[parentParams[j]]);return common_1.extend({},inherited,newParams)},StateParams}();exports.StateParams=StateParams},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(22)),__export(__webpack_require__(28)),__export(__webpack_require__(45)),__export(__webpack_require__(24))},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(21)),__export(__webpack_require__(20))},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(18)),__export(__webpack_require__(19)),__export(__webpack_require__(17))},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(40)),__export(__webpack_require__(42)),__export(__webpack_require__(39)),__export(__webpack_require__(41)),__export(__webpack_require__(38)),__export(__webpack_require__(43)),__export(__webpack_require__(14))},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(16)),__export(__webpack_require__(15)),__export(__webpack_require__(10)),__export(__webpack_require__(11)),__export(__webpack_require__(13)),__export(__webpack_require__(30))},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(27)),__export(__webpack_require__(23)),__export(__webpack_require__(26)),__export(__webpack_require__(29))},function(module,exports,__webpack_require__){"use strict";function __export(m){for(var p in m)exports.hasOwnProperty(p)||(exports[p]=m[p])}__export(__webpack_require__(37))},function(module,exports,__webpack_require__){"use strict";function annotateController(controllerExpression){var $injector=coreservices_1.services.$injector,$controller=$injector.get("$controller"),oldInstantiate=$injector.instantiate;try{var deps_1;return $injector.instantiate=function fakeInstantiate(constructorFunction){$injector.instantiate=oldInstantiate,deps_1=$injector.annotate(constructorFunction)},$controller(controllerExpression,{$scope:{}}),deps_1}finally{$injector.instantiate=oldInstantiate}}function $uiRouter($locationProvider){function $get($location,$browser,$sniffer,$rootScope,$http,$templateCache){return $rootScope.$on("$locationChangeSuccess",function(evt){return urlListeners.forEach(function(fn){return fn(evt)})}),coreservices_1.services.locationConfig.html5Mode=function(){var html5Mode=$locationProvider.html5Mode();return(html5Mode=predicates_1.isObject(html5Mode)?html5Mode.enabled:html5Mode)&&$sniffer.history},coreservices_1.services.location.setUrl=function(newUrl,replace){void 0===replace&&(replace=!1),$location.url(newUrl),replace&&$location.replace()},coreservices_1.services.template.get=function(url){return $http.get(url,{cache:$templateCache,headers:{Accept:"text/html"}}).then(hof_1.prop("data"))},common_1.bindFunctions($location,coreservices_1.services.location,$location,["replace","url","path","search","hash"]),common_1.bindFunctions($location,coreservices_1.services.locationConfig,$location,["port","protocol","host"]),common_1.bindFunctions($browser,coreservices_1.services.locationConfig,$browser,["baseHref"]),router}router=new router_1.UIRouter,router.stateProvider=new stateProvider_1.StateProvider(router.stateRegistry,router.stateService),router.stateRegistry.decorator("views",views_1.ng1ViewsBuilder),router.stateRegistry.decorator("onExit",onEnterExitRetain_1.getStateHookBuilder("onExit")),router.stateRegistry.decorator("onRetain",onEnterExitRetain_1.getStateHookBuilder("onRetain")),router.stateRegistry.decorator("onEnter",onEnterExitRetain_1.getStateHookBuilder("onEnter")),router.viewService.viewConfigFactory("ng1",views_1.ng1ViewConfigFactory),common_1.bindFunctions($locationProvider,coreservices_1.services.locationConfig,$locationProvider,["hashPrefix"]);var urlListeners=[];coreservices_1.services.location.onChange=function(callback){return urlListeners.push(callback),function(){return common_1.removeFrom(urlListeners)(callback)}},this.$get=$get,$get.$inject=["$location","$browser","$sniffer","$rootScope","$http","$templateCache"]}function runBlock($injector,$q){coreservices_1.services.$injector=$injector,coreservices_1.services.$q=$q}function getUrlRouterProvider(){return router.urlRouterProvider.$get=function(){return router.urlRouter.update(!0),this.interceptDeferred||router.urlRouter.listen(),router.urlRouter},router.urlRouterProvider}function getStateProvider(){return router.stateProvider.$get=function(){return router.stateRegistry.stateQueue.autoFlush(router.stateService),router.stateService},router.stateProvider}function getTransitionsProvider(){return router.transitionService.$get=function(){return router.transitionService},router.transitionService}function watchDigests($rootScope){$rootScope.$watch(function(){trace_1.trace.approximateDigests++})}var router_1=__webpack_require__(25),coreservices_1=__webpack_require__(6),common_1=__webpack_require__(3),hof_1=__webpack_require__(5),predicates_1=__webpack_require__(4),resolveService_1=__webpack_require__(54),trace_1=__webpack_require__(12),views_1=__webpack_require__(55),templateFactory_1=__webpack_require__(56),stateProvider_1=__webpack_require__(58),onEnterExitRetain_1=__webpack_require__(59),angular=__webpack_require__(57),app=angular.module("ui.router.angular1",[]);angular.module("ui.router.util",["ng","ui.router.init"]),angular.module("ui.router.router",["ui.router.util"]),angular.module("ui.router.state",["ui.router.router","ui.router.util","ui.router.angular1"]),angular.module("ui.router",["ui.router.init","ui.router.state","ui.router.angular1"]),angular.module("ui.router.compat",["ui.router"]),exports.annotateController=annotateController;var router=null;$uiRouter.$inject=["$locationProvider"],angular.module("ui.router.init",[]).provider("$uiRouter",$uiRouter),runBlock.$inject=["$injector","$q"],angular.module("ui.router.init").run(runBlock),angular.module("ui.router.init").run(["$uiRouter",function($uiRouter){}]),angular.module("ui.router.util").provider("$urlMatcherFactory",["$uiRouterProvider",function(){return router.urlMatcherFactory}]),angular.module("ui.router.util").run(["$urlMatcherFactory",function($urlMatcherFactory){}]),angular.module("ui.router.router").provider("$urlRouter",["$uiRouterProvider",getUrlRouterProvider]),angular.module("ui.router.router").run(["$urlRouter",function($urlRouter){}]),angular.module("ui.router.state").provider("$state",["$uiRouterProvider",getStateProvider]),angular.module("ui.router.state").run(["$state",function($state){}]),angular.module("ui.router.state").factory("$stateParams",["$uiRouter",function($uiRouter){return $uiRouter.globals.params}]),angular.module("ui.router.state").provider("$transitions",["$uiRouterProvider",getTransitionsProvider]),angular.module("ui.router.util").factory("$templateFactory",["$uiRouter",function(){return new templateFactory_1.TemplateFactory}]),angular.module("ui.router").factory("$view",function(){return router.viewService}),angular.module("ui.router").factory("$resolve",resolveService_1.resolveFactory),angular.module("ui.router").service("$trace",function(){return trace_1.trace}),watchDigests.$inject=["$rootScope"],exports.watchDigests=watchDigests,angular.module("ui.router").run(watchDigests),exports.getLocals=function(ctx){return ctx.getTokens().filter(predicates_1.isString).map(function(key){return[key,ctx.getResolvable(key).data]}).reduce(common_1.applyPairs,{})};var $stateParams,$transitions,$transitionsProvider,$state,$stateProvider,$urlRouterProvider,$urlRouter,$urlMatcherFactory,$urlMatcherFactoryProvider},function(module,exports,__webpack_require__){"use strict";var stateObject_1=__webpack_require__(42),node_1=__webpack_require__(21),resolveContext_1=__webpack_require__(17),common_1=__webpack_require__(3),stateBuilder_1=__webpack_require__(40),$resolve={resolve:function(invocables,locals,parent){void 0===locals&&(locals={});var parentNode=new node_1.PathNode(new stateObject_1.State({params:{},resolvables:[]})),node=new node_1.PathNode(new stateObject_1.State({params:{},resolvables:[]})),context=new resolveContext_1.ResolveContext([parentNode,node]);context.addResolvables(stateBuilder_1.resolvablesBuilder({resolve:invocables}),node.state);var resolveData=function(parentLocals){var rewrap=function(_locals){return stateBuilder_1.resolvablesBuilder({resolve:common_1.mapObj(_locals,function(local){return function(){return local}})})};context.addResolvables(rewrap(parentLocals),parentNode.state),context.addResolvables(rewrap(locals),node.state);var tuples2ObjR=function(acc,tuple){return acc[tuple.token]=tuple.value,acc};return context.resolvePath().then(function(results){return results.reduce(tuples2ObjR,{})})};return parent?parent.then(resolveData):resolveData({})}};exports.resolveFactory=function(){return $resolve}},function(module,exports,__webpack_require__){"use strict";function ng1ViewsBuilder(state){var tplKeys=["templateProvider","templateUrl","template","notify","async"],ctrlKeys=["controller","controllerProvider","controllerAs","resolveAs"],compKeys=["component","bindings"],nonCompKeys=tplKeys.concat(ctrlKeys),allKeys=compKeys.concat(nonCompKeys),views={},viewsObject=state.views||{$default:common_1.pick(state,allKeys)};return common_1.forEach(viewsObject,function(config,name){if(name=name||"$default",predicates_1.isString(config)&&(config={component:config}),Object.keys(config).length){if(config.component){if(nonCompKeys.map(function(key){return predicates_1.isDefined(config[key])}).reduce(common_1.anyTrueR,!1))throw new Error("Cannot combine: "+compKeys.join("|")+" with: "+nonCompKeys.join("|")+" in stateview: 'name@"+state.name+"'");config.templateProvider=["$injector",function($injector){var resolveFor=function(key){return config.bindings&&config.bindings[key]||key},prefix=angular.version.minor>=3?"::":"",attributeTpl=function(input){var attrName=strings_1.kebobString(input.name),resolveName=resolveFor(input.name);return"@"===input.type?attrName+"='{{"+prefix+"$resolve."+resolveName+"}}'":attrName+"='"+prefix+"$resolve."+resolveName+"'"},attrs=getComponentInputs($injector,config.component).map(attributeTpl).join(" "),kebobName=strings_1.kebobString(config.component);return"<"+kebobName+" "+attrs+">"}]}config.resolveAs=config.resolveAs||"$resolve",config.$type="ng1",config.$context=state,config.$name=name;var normalized=view_1.ViewService.normalizeUIViewTarget(config.$context,config.$name);config.$uiViewName=normalized.uiViewName,config.$uiViewContextAnchor=normalized.uiViewContextAnchor,views[name]=config}}),views}function getComponentInputs($injector,name){var cmpDefs=$injector.get(name+"Directive");if(!cmpDefs||!cmpDefs.length)throw new Error("Unable to find component named '"+name+"'");return cmpDefs.map(getBindings).reduce(common_1.unnestR,[])}var common_1=__webpack_require__(3),strings_1=__webpack_require__(9),view_1=__webpack_require__(37),predicates_1=__webpack_require__(4),coreservices_1=__webpack_require__(6),trace_1=__webpack_require__(12),templateFactory_1=__webpack_require__(56),resolveContext_1=__webpack_require__(17),resolvable_1=__webpack_require__(19),angular=__webpack_require__(57);exports.ng1ViewConfigFactory=function(path,view){return[new Ng1ViewConfig(path,view)]},exports.ng1ViewsBuilder=ng1ViewsBuilder;var scopeBindings=function(bindingsObj){return Object.keys(bindingsObj||{}).map(function(key){return[key,/^([=<@])[?]?(.*)/.exec(bindingsObj[key])]}).filter(function(tuple){return predicates_1.isDefined(tuple)&&predicates_1.isDefined(tuple[1])}).map(function(tuple){return{name:tuple[1][2]||tuple[0],type:tuple[1][1]}})},getBindings=function(def){return scopeBindings(predicates_1.isObject(def.bindToController)?def.bindToController:def.scope)},id=0,Ng1ViewConfig=function(){function Ng1ViewConfig(path,viewDecl){this.path=path,this.viewDecl=viewDecl,this.$id=id++,this.loaded=!1}return Ng1ViewConfig.prototype.load=function(){var _this=this,$q=coreservices_1.services.$q;if(!this.hasTemplate())throw new Error("No template configuration specified for '"+this.viewDecl.$uiViewName+"@"+this.viewDecl.$uiViewContextAnchor+"'");var context=new resolveContext_1.ResolveContext(this.path),params=this.path.reduce(function(acc,node){return common_1.extend(acc,node.paramValues)},{}),promises={template:$q.when(this.getTemplate(params,new templateFactory_1.TemplateFactory,context)),controller:$q.when(this.getController(context))};return $q.all(promises).then(function(results){return trace_1.trace.traceViewServiceEvent("Loaded",_this),_this.controller=results.controller,_this.template=results.template,_this})},Ng1ViewConfig.prototype.hasTemplate=function(){return!!(this.viewDecl.template||this.viewDecl.templateUrl||this.viewDecl.templateProvider)},Ng1ViewConfig.prototype.getTemplate=function(params,$factory,context){return $factory.fromConfig(this.viewDecl,params,context)},Ng1ViewConfig.prototype.getController=function(context){var provider=this.viewDecl.controllerProvider;if(!predicates_1.isInjectable(provider))return this.viewDecl.controller;var deps=coreservices_1.services.$injector.annotate(provider),providerFn=predicates_1.isArray(provider)?common_1.tail(provider):provider;return new resolvable_1.Resolvable("",providerFn,deps).get(context)},Ng1ViewConfig}();exports.Ng1ViewConfig=Ng1ViewConfig},function(module,exports,__webpack_require__){"use strict";var predicates_1=__webpack_require__(4),coreservices_1=__webpack_require__(6),common_1=__webpack_require__(3),resolvable_1=__webpack_require__(19),TemplateFactory=function(){function TemplateFactory(){}return TemplateFactory.prototype.fromConfig=function(config,params,context){return predicates_1.isDefined(config.template)?this.fromString(config.template,params):predicates_1.isDefined(config.templateUrl)?this.fromUrl(config.templateUrl,params):predicates_1.isDefined(config.templateProvider)?this.fromProvider(config.templateProvider,params,context):null},TemplateFactory.prototype.fromString=function(template,params){return predicates_1.isFunction(template)?template(params):template},TemplateFactory.prototype.fromUrl=function(url,params){return predicates_1.isFunction(url)&&(url=url(params)),null==url?null:coreservices_1.services.template.get(url)},TemplateFactory.prototype.fromProvider=function(provider,params,context){var deps=coreservices_1.services.$injector.annotate(provider),providerFn=predicates_1.isArray(provider)?common_1.tail(provider):provider;return new resolvable_1.Resolvable("",providerFn,deps).get(context)},TemplateFactory}();exports.TemplateFactory=TemplateFactory},function(module,exports){module.exports=__WEBPACK_EXTERNAL_MODULE_57__},function(module,exports,__webpack_require__){"use strict";var predicates_1=__webpack_require__(4),common_1=__webpack_require__(3),StateProvider=function(){function StateProvider(stateRegistry,stateService){this.stateRegistry=stateRegistry,this.stateService=stateService,common_1.bindFunctions(StateProvider.prototype,this,this)}return StateProvider.prototype.decorator=function(name,func){return this.stateRegistry.decorator(name,func)||this},StateProvider.prototype.state=function(name,definition){return predicates_1.isObject(name)?definition=name:definition.name=name,this.stateRegistry.register(definition),this},StateProvider.prototype.onInvalid=function(callback){return this.stateService.onInvalid(callback)},StateProvider}();exports.StateProvider=StateProvider},function(module,exports,__webpack_require__){"use strict";var coreservices_1=__webpack_require__(6),services_1=__webpack_require__(53),resolveContext_1=__webpack_require__(17),common_1=__webpack_require__(3);exports.getStateHookBuilder=function(hookName){return function stateHookBuilder(state,parentFn){function decoratedNg1Hook(trans,state){var resolveContext=new resolveContext_1.ResolveContext(trans.treeChanges().to);return coreservices_1.services.$injector.invoke(hook,this,common_1.extend({$state$:state},services_1.getLocals(resolveContext)))}var hook=state[hookName];return hook?decoratedNg1Hook:void 0}}},function(module,exports,__webpack_require__){"use strict";function parseStateRef(ref,current){var preparsed=ref.match(/^\s*({[^}]*})\s*$/),parsed;if(preparsed&&(ref=current+"("+preparsed[1]+")"),!(parsed=ref.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/))||4!==parsed.length)throw new Error("Invalid state ref '"+ref+"'");return{state:parsed[1],paramExpr:parsed[3]||null}}function stateContext(el){var $uiView=el.parent().inheritedData("$uiView"),path=hof_1.parse("$cfg.path")($uiView);return path?common_1.tail(path).state.name:void 0}function getTypeInfo(el){var isSvg="[object SVGAnimatedString]"===Object.prototype.toString.call(el.prop("href")),isForm="FORM"===el[0].nodeName;return{attr:isForm?"action":isSvg?"xlink:href":"href",isAnchor:"A"===el.prop("tagName").toUpperCase(),clickable:!isForm}}function clickHook(el,$state,$timeout,type,current){return function(e){var button=e.which||e.button,target=current();if(!(button>1||e.ctrlKey||e.metaKey||e.shiftKey||el.attr("target"))){var transition=$timeout(function(){$state.go(target.state,target.params,target.options)});e.preventDefault();var ignorePreventDefaultCount=type.isAnchor&&!target.href?1:0;e.preventDefault=function(){ignorePreventDefaultCount--<=0&&$timeout.cancel(transition)}}}}function defaultOpts(el,$state){return{relative:stateContext(el)||$state.$current,inherit:!0,source:"sref"}}var angular=__webpack_require__(57),common_1=__webpack_require__(3),predicates_1=__webpack_require__(4),hof_1=__webpack_require__(5),uiSref=["$state","$timeout",function $StateRefDirective($state,$timeout){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(scope,element,attrs,uiSrefActive){var ref=parseStateRef(attrs.uiSref,$state.current.name),def={state:ref.state,href:null,params:null,options:null},type=getTypeInfo(element),active=uiSrefActive[1]||uiSrefActive[0],unlinkInfoFn=null,hookFn;def.options=common_1.extend(defaultOpts(element,$state),attrs.uiSrefOpts?scope.$eval(attrs.uiSrefOpts):{});var update=function(val){val&&(def.params=angular.copy(val)),def.href=$state.href(ref.state,def.params,def.options),unlinkInfoFn&&unlinkInfoFn(),active&&(unlinkInfoFn=active.$$addStateInfo(ref.state,def.params)),null!==def.href&&attrs.$set(type.attr,def.href)};ref.paramExpr&&(scope.$watch(ref.paramExpr,function(val){val!==def.params&&update(val)},!0),def.params=angular.copy(scope.$eval(ref.paramExpr))),update(),type.clickable&&(hookFn=clickHook(element,$state,$timeout,type,function(){return def}),element.on("click",hookFn),scope.$on("$destroy",function(){element.off("click",hookFn)}))}}}],uiState=["$state","$timeout",function $StateRefDynamicDirective($state,$timeout){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(scope,element,attrs,uiSrefActive){function runStateRefLink(group){def.state=group[0],def.params=group[1],def.options=group[2],def.href=$state.href(def.state,def.params,def.options),unlinkInfoFn&&unlinkInfoFn(),active&&(unlinkInfoFn=active.$$addStateInfo(def.state,def.params)),def.href&&attrs.$set(type.attr,def.href)}var type=getTypeInfo(element),active=uiSrefActive[1]||uiSrefActive[0],group=[attrs.uiState,attrs.uiStateParams||null,attrs.uiStateOpts||null],watch="["+group.map(function(val){return val||"null"}).join(", ")+"]",def={state:null,params:null,options:null,href:null},unlinkInfoFn=null,hookFn;scope.$watch(watch,runStateRefLink,!0),runStateRefLink(scope.$eval(watch)),type.clickable&&(hookFn=clickHook(element,$state,$timeout,type,function(){return def}),element.on("click",hookFn),scope.$on("$destroy",function(){element.off("click",hookFn)}))}}}],uiSrefActive=["$state","$stateParams","$interpolate","$transitions","$uiRouter",function $StateRefActiveDirective($state,$stateParams,$interpolate,$transitions,$uiRouter){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function($scope,$element,$attrs,$timeout){function updateAfterTransition(trans){trans.promise.then(update)}function addState(stateName,stateParams,activeClass){var state=$state.get(stateName,stateContext($element)),stateHash=createStateHash(stateName,stateParams),stateInfo={state:state||{name:stateName},params:stateParams,hash:stateHash};return states.push(stateInfo),activeClasses[stateHash]=activeClass,function removeState(){var idx=states.indexOf(stateInfo);idx!==-1&&states.splice(idx,1)}}function createStateHash(state,params){if(!predicates_1.isString(state))throw new Error("state should be a string");return predicates_1.isObject(params)?state+common_1.toJson(params):(params=$scope.$eval(params),predicates_1.isObject(params)?state+common_1.toJson(params):state)}function update(){for(var i=0;i0)){var deregister=addState(newState,newParams,uiSrefActive);return update(),deregister}},$scope.$on("$stateChangeSuccess",update),$scope.$on("$destroy",$transitions.onStart({},updateAfterTransition)),$uiRouter.globals.transition&&updateAfterTransition($uiRouter.globals.transition),update()}]}}];angular.module("ui.router.state").directive("uiSref",uiSref).directive("uiSrefActive",uiSrefActive).directive("uiSrefActiveEq",uiSrefActive).directive("uiState",uiState)},function(module,exports,__webpack_require__){"use strict";function $IsStateFilter($state){var isFilter=function(state,params,options){return $state.is(state,params,options)};return isFilter.$stateful=!0,isFilter}function $IncludedByStateFilter($state){var includesFilter=function(state,params,options){return $state.includes(state,params,options)};return includesFilter.$stateful=!0,includesFilter}var angular=__webpack_require__(57);$IsStateFilter.$inject=["$state"],exports.$IsStateFilter=$IsStateFilter,$IncludedByStateFilter.$inject=["$state"],exports.$IncludedByStateFilter=$IncludedByStateFilter,angular.module("ui.router.state").filter("isState",$IsStateFilter).filter("includedByState",$IncludedByStateFilter)},function(module,exports,__webpack_require__){"use strict";function $ViewDirectiveFill($compile,$controller,$transitions,$view,$timeout){var getControllerAs=hof_1.parse("viewDecl.controllerAs"),getResolveAs=hof_1.parse("viewDecl.resolveAs");return{restrict:"ECA",priority:-400,compile:function(tElement){var initial=tElement.html();return function(scope,$element){var data=$element.data("$uiView");if(data){var cfg=data.$cfg||{viewDecl:{}};$element.html(cfg.template||initial),trace_1.trace.traceUIViewFill(data.$uiView,$element.html());var link=$compile($element.contents()),controller=cfg.controller,controllerAs=getControllerAs(cfg),resolveAs=getResolveAs(cfg),resolveCtx=cfg.path&&new resolveContext_1.ResolveContext(cfg.path),locals=resolveCtx&&services_1.getLocals(resolveCtx);if(scope[resolveAs]=locals,controller){var controllerInstance=$controller(controller,common_1.extend({},locals,{$scope:scope,$element:$element}));controllerAs&&(scope[controllerAs]=controllerInstance,scope[controllerAs][resolveAs]=locals),$element.data("$ngControllerController",controllerInstance),$element.children().data("$ngControllerController",controllerInstance),registerControllerCallbacks($transitions,controllerInstance,scope,cfg)}if(predicates_1.isString(cfg.viewDecl.component))var cmp_1=cfg.viewDecl.component,kebobName_1=strings_1.kebobString(cmp_1),getComponentController=function(){var directiveEl=[].slice.call($element[0].children).filter(function(el){return el&&el.tagName&&el.tagName.toLowerCase()===kebobName_1});return directiveEl&&angular.element(directiveEl).data("$"+cmp_1+"Controller")},deregisterWatch_1=scope.$watch(getComponentController,function(ctrlInstance){ctrlInstance&&(registerControllerCallbacks($transitions,ctrlInstance,scope,cfg),deregisterWatch_1())});link(scope)}}}}}function registerControllerCallbacks($transitions,controllerInstance,$scope,cfg){!predicates_1.isFunction(controllerInstance.$onInit)||cfg.viewDecl.component&&hasComponentImpl||controllerInstance.$onInit();var viewState=common_1.tail(cfg.path).state.self,hookOptions={bind:controllerInstance};if(predicates_1.isFunction(controllerInstance.uiOnParamsChanged)){var resolveContext=new resolveContext_1.ResolveContext(cfg.path),viewCreationTrans_1=resolveContext.getResolvable("$transition$").data,paramsUpdated=function($transition$){if($transition$!==viewCreationTrans_1&&$transition$.exiting().indexOf(viewState)===-1){var toParams=$transition$.params("to"),fromParams=$transition$.params("from"),toSchema=$transition$.treeChanges().to.map(function(node){return node.paramSchema}).reduce(common_1.unnestR,[]),fromSchema=$transition$.treeChanges().from.map(function(node){return node.paramSchema}).reduce(common_1.unnestR,[]),changedToParams=toSchema.filter(function(param){var idx=fromSchema.indexOf(param);return idx===-1||!fromSchema[idx].type.equals(toParams[param.id],fromParams[param.id])});if(changedToParams.length){var changedKeys_1=changedToParams.map(function(x){return x.id});controllerInstance.uiOnParamsChanged(common_1.filter(toParams,function(val,key){return changedKeys_1.indexOf(key)!==-1}),$transition$)}}};$scope.$on("$destroy",$transitions.onSuccess({},paramsUpdated,hookOptions))}if(predicates_1.isFunction(controllerInstance.uiCanExit)){var criteria={exiting:viewState.name};$scope.$on("$destroy",$transitions.onBefore(criteria,controllerInstance.uiCanExit,hookOptions))}}var common_1=__webpack_require__(3),predicates_1=__webpack_require__(4),trace_1=__webpack_require__(12),views_1=__webpack_require__(55),hof_1=__webpack_require__(5),resolveContext_1=__webpack_require__(17),strings_1=__webpack_require__(9),services_1=__webpack_require__(53),angular=__webpack_require__(57),uiView=["$view","$animate","$uiViewScroll","$interpolate","$q",function $ViewDirective($view,$animate,$uiViewScroll,$interpolate,$q){function getRenderer(attrs,scope){return{enter:function(element,target,cb){angular.version.minor>2?$animate.enter(element,null,target).then(cb):$animate.enter(element,null,target,cb)},leave:function(element,cb){angular.version.minor>2?$animate.leave(element).then(cb):$animate.leave(element,cb)}}}function configsEqual(config1,config2){return config1===config2}var rootData={$cfg:{viewDecl:{$context:$view.rootContext()}},$uiView:{}},directive={count:0,restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(tElement,tAttrs,$transclude){return function(scope,$element,attrs){function configUpdatedCallback(config){(!config||config instanceof views_1.Ng1ViewConfig)&&(configsEqual(viewConfig,config)||(trace_1.trace.traceUIViewConfigUpdated(activeUIView,config&&config.viewDecl&&config.viewDecl.$context),viewConfig=config,updateView(config)))}function cleanupLastView(){if(previousEl&&(trace_1.trace.traceUIViewEvent("Removing (previous) el",previousEl.data("$uiView")),previousEl.remove(),previousEl=null),currentScope&&(trace_1.trace.traceUIViewEvent("Destroying scope",activeUIView),currentScope.$destroy(),currentScope=null),currentEl){var _viewData_1=currentEl.data("$uiViewAnim");trace_1.trace.traceUIViewEvent("Animate out",_viewData_1),renderer.leave(currentEl,function(){_viewData_1.$$animLeave.resolve(),previousEl=null}),previousEl=currentEl,currentEl=null}}function updateView(config){var newScope=scope.$new(),animEnter=$q.defer(),animLeave=$q.defer(),$uiViewData={$cfg:config,$uiView:activeUIView},$uiViewAnim={$animEnter:animEnter.promise,$animLeave:animLeave.promise,$$animLeave:animLeave};currentEl=$transclude(newScope,function(clone){clone.data("$uiViewAnim",$uiViewAnim),clone.data("$uiView",$uiViewData),renderer.enter(clone,$element,function onUIViewEnter(){animEnter.resolve(),currentScope&¤tScope.$emit("$viewContentAnimationEnded"),(predicates_1.isDefined(autoScrollExp)&&!autoScrollExp||scope.$eval(autoScrollExp))&&$uiViewScroll(clone)}),cleanupLastView()}),currentScope=newScope,currentScope.$emit("$viewContentLoaded",config||viewConfig),currentScope.$eval(onloadExp)}var previousEl,currentEl,currentScope,unregister,onloadExp=attrs.onload||"",autoScrollExp=attrs.autoscroll,renderer=getRenderer(attrs,scope),viewConfig=void 0,inherited=$element.inheritedData("$uiView")||rootData,name=$interpolate(attrs.uiView||attrs.name||"")(scope)||"$default",activeUIView={$type:"ng1",id:directive.count++,name:name,fqn:inherited.$uiView.fqn?inherited.$uiView.fqn+"."+name:name,config:null,configUpdated:configUpdatedCallback,get creationContext(){return hof_1.parse("$cfg.viewDecl.$context")(inherited)}};trace_1.trace.traceUIViewEvent("Linking",activeUIView),$element.data("$uiView",{$uiView:activeUIView}),updateView(),unregister=$view.registerUIView(activeUIView),scope.$on("$destroy",function(){trace_1.trace.traceUIViewEvent("Destroying/Unregistering",activeUIView),unregister()})}}};return directive}];$ViewDirectiveFill.$inject=["$compile","$controller","$transitions","$view","$timeout"];var hasComponentImpl="function"==typeof angular.module("ui.router").component;angular.module("ui.router.state").directive("uiView",uiView),angular.module("ui.router.state").directive("uiView",$ViewDirectiveFill)},function(module,exports,__webpack_require__){"use strict";function $ViewScrollProvider(){var useAnchorScroll=!1;this.useAnchorScroll=function(){useAnchorScroll=!0},this.$get=["$anchorScroll","$timeout",function($anchorScroll,$timeout){return useAnchorScroll?$anchorScroll:function($element){return $timeout(function(){$element[0].scrollIntoView()},0,!1)}}]}__webpack_require__(57).module("ui.router.state").provider("$uiViewScroll",$ViewScrollProvider)}])})},17:function(module,exports,__webpack_require__){__webpack_require__(0),module.exports=__webpack_require__(1)},9:function(module,exports){!function(window){"use strict";function minErr(module,ErrorConstructor){return ErrorConstructor=ErrorConstructor||Error,function(){var SKIP_INDEXES=2,templateArgs=arguments,code=templateArgs[0],message="["+(module?module+":":"")+code+"] ",template=templateArgs[1],paramPrefix,i;for(message+=template.replace(/\{\d+\}/g,function(match){var index=+match.slice(1,-1),shiftedIndex=index+SKIP_INDEXES;return shiftedIndex=0&&(length-1 in obj||obj instanceof Array)||"function"==typeof obj.item)}function forEach(obj,iterator,context){var key,length;if(obj)if(isFunction(obj))for(key in obj)"prototype"!==key&&"length"!==key&&"name"!==key&&obj.hasOwnProperty(key)&&iterator.call(context,obj[key],key,obj);else if(isArray(obj)||isArrayLike(obj)){var isPrimitive="object"!=typeof obj;for(key=0,length=obj.length;key=0&&array.splice(index,1),index}function copy(source,destination){function copyRecurse(source,destination){var h=destination.$$hashKey,key;if(isArray(source))for(var i=0,ii=source.length;i2?sliceArgs(arguments,2):[];return!isFunction(fn)||fn instanceof RegExp?fn:curryArgs.length?function(){return arguments.length?fn.apply(self,concat(curryArgs,arguments,0)):fn.apply(self,curryArgs)}:function(){return arguments.length?fn.apply(self,arguments):fn.call(self)}}function toJsonReplacer(key,value){var val=value;return"string"==typeof key&&"$"===key.charAt(0)&&"$"===key.charAt(1)?val=void 0:isWindow(value)?val="$WINDOW":value&&window.document===value?val="$DOCUMENT":isScope(value)&&(val="$SCOPE"),val}function toJson(obj,pretty){if(!isUndefined(obj))return isNumber(pretty)||(pretty=pretty?2:null),JSON.stringify(obj,toJsonReplacer,pretty)}function fromJson(json){return isString(json)?JSON.parse(json):json}function timezoneToOffset(timezone,fallback){timezone=timezone.replace(ALL_COLONS,"");var requestedTimezoneOffset=Date.parse("Jan 01, 1970 00:00:00 "+timezone)/6e4;return isNumberNaN(requestedTimezoneOffset)?fallback:requestedTimezoneOffset}function addDateMinutes(date,minutes){return date=new Date(date.getTime()),date.setMinutes(date.getMinutes()+minutes),date}function convertTimezoneToLocal(date,timezone,reverse){reverse=reverse?-1:1;var dateTimezoneOffset=date.getTimezoneOffset();return addDateMinutes(date,reverse*(timezoneToOffset(timezone,dateTimezoneOffset)-dateTimezoneOffset))}function startingTag(element){element=jqLite(element).clone();try{element.empty()}catch(e){}var elemHtml=jqLite("
").append(element).html();try{return element[0].nodeType===NODE_TYPE_TEXT?lowercase(elemHtml):elemHtml.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(match,nodeName){return"<"+lowercase(nodeName)})}catch(e){return lowercase(elemHtml)}}function tryDecodeURIComponent(value){try{return decodeURIComponent(value)}catch(e){}}function parseKeyValue(keyValue){var obj={};return forEach((keyValue||"").split("&"),function(keyValue){var splitPoint,key,val;keyValue&&(key=keyValue=keyValue.replace(/\+/g,"%20"),splitPoint=keyValue.indexOf("="),splitPoint!==-1&&(key=keyValue.substring(0,splitPoint),val=keyValue.substring(splitPoint+1)),key=tryDecodeURIComponent(key),isDefined(key)&&(val=!isDefined(val)||tryDecodeURIComponent(val),hasOwnProperty.call(obj,key)?isArray(obj[key])?obj[key].push(val):obj[key]=[obj[key],val]:obj[key]=val))}),obj}function toKeyValue(obj){var parts=[];return forEach(obj,function(value,key){isArray(value)?forEach(value,function(arrayValue){parts.push(encodeUriQuery(key,!0)+(arrayValue===!0?"":"="+encodeUriQuery(arrayValue,!0)))}):parts.push(encodeUriQuery(key,!0)+(value===!0?"":"="+encodeUriQuery(value,!0)))}),parts.length?parts.join("&"):""}function encodeUriSegment(val){return encodeUriQuery(val,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function encodeUriQuery(val,pctEncodeSpaces){return encodeURIComponent(val).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,pctEncodeSpaces?"%20":"+")}function getNgAttribute(element,ngAttr){var attr,i,ii=ngAttrPrefixes.length;for(i=0;i protocol indicates an extension, document.location.href does not match.");config.strictDi=null!==getNgAttribute(appElement,"strict-di"),bootstrap(appElement,module?[module]:[],config)}}function bootstrap(element,modules,config){isObject(config)||(config={}),config=extend({strictDi:!1},config);var doBootstrap=function(){if(element=jqLite(element),element.injector()){throw ngMinErr("btstrpd","App already bootstrapped with this element '{0}'",(element[0]===window.document?"document":startingTag(element)).replace(//,">"))}modules=modules||[],modules.unshift(["$provide",function($provide){$provide.value("$rootElement",element)}]),config.debugInfoEnabled&&modules.push(["$compileProvider",function($compileProvider){$compileProvider.debugInfoEnabled(!0)}]),modules.unshift("ng");var injector=createInjector(modules,config.strictDi);return injector.invoke(["$rootScope","$rootElement","$compile","$injector",function bootstrapApply(scope,element,compile,injector){scope.$apply(function(){element.data("$injector",injector),compile(element)(scope)})}]),injector},NG_ENABLE_DEBUG_INFO=/^NG_ENABLE_DEBUG_INFO!/,NG_DEFER_BOOTSTRAP=/^NG_DEFER_BOOTSTRAP!/;if(window&&NG_ENABLE_DEBUG_INFO.test(window.name)&&(config.debugInfoEnabled=!0,window.name=window.name.replace(NG_ENABLE_DEBUG_INFO,"")),window&&!NG_DEFER_BOOTSTRAP.test(window.name))return doBootstrap();window.name=window.name.replace(NG_DEFER_BOOTSTRAP,""),angular.resumeBootstrap=function(extraModules){return forEach(extraModules,function(module){modules.push(module)}),doBootstrap()},isFunction(angular.resumeDeferredBootstrap)&&angular.resumeDeferredBootstrap()}function reloadWithDebugInfo(){window.name="NG_ENABLE_DEBUG_INFO!"+window.name,window.location.reload()}function getTestability(rootElement){var injector=angular.element(rootElement).injector();if(!injector)throw ngMinErr("test","no injector found for element argument to getTestability");return injector.get("$$testability")}function snake_case(name,separator){return separator=separator||"_",name.replace(SNAKE_CASE_REGEXP,function(letter,pos){return(pos?separator:"")+letter.toLowerCase()})}function bindJQuery(){var originalCleanData;if(!bindJQueryFired){var jqName=jq();jQuery=isUndefined(jqName)?window.jQuery:jqName?window[jqName]:void 0,jQuery&&jQuery.fn.on?(jqLite=jQuery,extend(jQuery.fn,{scope:JQLitePrototype.scope,isolateScope:JQLitePrototype.isolateScope,controller:JQLitePrototype.controller,injector:JQLitePrototype.injector,inheritedData:JQLitePrototype.inheritedData}),originalCleanData=jQuery.cleanData,jQuery.cleanData=function(elems){for(var events,i=0,elem;null!=(elem=elems[i]);i++)(events=jQuery._data(elem,"events"))&&events.$destroy&&jQuery(elem).triggerHandler("$destroy");originalCleanData(elems)}):jqLite=JQLite,angular.element=jqLite,bindJQueryFired=!0}}function assertArg(arg,name,reason){if(!arg)throw ngMinErr("areq","Argument '{0}' is {1}",name||"?",reason||"required");return arg}function assertArgFn(arg,name,acceptArrayAnnotation){return acceptArrayAnnotation&&isArray(arg)&&(arg=arg[arg.length-1]),assertArg(isFunction(arg),name,"not a function, got "+(arg&&"object"==typeof arg?arg.constructor.name||"Object":typeof arg)),arg}function assertNotHasOwnProperty(name,context){if("hasOwnProperty"===name)throw ngMinErr("badname","hasOwnProperty is not a valid {0} name",context)}function getter(obj,path,bindFnToScope){if(!path)return obj;for(var keys=path.split("."),key,lastInstance=obj,len=keys.length,i=0;i=0)return"...";seen.push(val)}return val})}function toDebugString(obj){return"function"==typeof obj?obj.toString().replace(/ \{[\s\S]*$/,""):isUndefined(obj)?"undefined":"string"!=typeof obj?serializeObject(obj):obj}function publishExternalAPI(angular){extend(angular,{bootstrap:bootstrap,copy:copy,extend:extend,merge:merge,equals:equals,element:jqLite,forEach:forEach,injector:createInjector,noop:noop,bind:bind,toJson:toJson,fromJson:fromJson,identity:identity,isUndefined:isUndefined,isDefined:isDefined,isString:isString,isFunction:isFunction,isObject:isObject,isNumber:isNumber,isElement:isElement,isArray:isArray,version:version,isDate:isDate,lowercase:lowercase,uppercase:uppercase,callbacks:{$$counter:0},getTestability:getTestability,reloadWithDebugInfo:reloadWithDebugInfo,$$minErr:minErr,$$csp:csp,$$encodeUriSegment:encodeUriSegment,$$encodeUriQuery:encodeUriQuery,$$stringify:stringify}),(angularModule=setupModuleLoader(window))("ng",["ngLocale"],["$provide",function ngModule($provide){$provide.provider({$$sanitizeUri:$$SanitizeUriProvider}),$provide.provider("$compile",$CompileProvider).directive({a:htmlAnchorDirective,input:inputDirective,textarea:inputDirective,form:formDirective,script:scriptDirective,select:selectDirective,option:optionDirective,ngBind:ngBindDirective,ngBindHtml:ngBindHtmlDirective,ngBindTemplate:ngBindTemplateDirective,ngClass:ngClassDirective,ngClassEven:ngClassEvenDirective,ngClassOdd:ngClassOddDirective,ngCloak:ngCloakDirective,ngController:ngControllerDirective,ngForm:ngFormDirective,ngHide:ngHideDirective,ngIf:ngIfDirective,ngInclude:ngIncludeDirective,ngInit:ngInitDirective,ngNonBindable:ngNonBindableDirective,ngPluralize:ngPluralizeDirective,ngRepeat:ngRepeatDirective,ngShow:ngShowDirective,ngStyle:ngStyleDirective,ngSwitch:ngSwitchDirective,ngSwitchWhen:ngSwitchWhenDirective,ngSwitchDefault:ngSwitchDefaultDirective,ngOptions:ngOptionsDirective,ngTransclude:ngTranscludeDirective,ngModel:ngModelDirective,ngList:ngListDirective,ngChange:ngChangeDirective,pattern:patternDirective,ngPattern:patternDirective,required:requiredDirective,ngRequired:requiredDirective,minlength:minlengthDirective,ngMinlength:minlengthDirective,maxlength:maxlengthDirective,ngMaxlength:maxlengthDirective,ngValue:ngValueDirective,ngModelOptions:ngModelOptionsDirective}).directive({ngInclude:ngIncludeFillContentDirective}).directive(ngAttributeAliasDirectives).directive(ngEventDirectives),$provide.provider({$anchorScroll:$AnchorScrollProvider,$animate:$AnimateProvider,$animateCss:$CoreAnimateCssProvider,$$animateJs:$$CoreAnimateJsProvider,$$animateQueue:$$CoreAnimateQueueProvider,$$AnimateRunner:$$AnimateRunnerFactoryProvider,$$animateAsyncRun:$$AnimateAsyncRunFactoryProvider,$browser:$BrowserProvider,$cacheFactory:$CacheFactoryProvider,$controller:$ControllerProvider,$document:$DocumentProvider,$$isDocumentHidden:$$IsDocumentHiddenProvider,$exceptionHandler:$ExceptionHandlerProvider,$filter:$FilterProvider,$$forceReflow:$$ForceReflowProvider,$interpolate:$InterpolateProvider,$interval:$IntervalProvider,$http:$HttpProvider,$httpParamSerializer:$HttpParamSerializerProvider,$httpParamSerializerJQLike:$HttpParamSerializerJQLikeProvider,$httpBackend:$HttpBackendProvider,$xhrFactory:$xhrFactoryProvider,$jsonpCallbacks:$jsonpCallbacksProvider,$location:$LocationProvider,$log:$LogProvider,$parse:$ParseProvider,$rootScope:$RootScopeProvider,$q:$QProvider,$$q:$$QProvider,$sce:$SceProvider,$sceDelegate:$SceDelegateProvider,$sniffer:$SnifferProvider,$templateCache:$TemplateCacheProvider,$templateRequest:$TemplateRequestProvider,$$testability:$$TestabilityProvider,$timeout:$TimeoutProvider,$window:$WindowProvider,$$rAF:$$RAFProvider,$$jqLite:$$jqLiteProvider,$$Map:$$MapProvider,$$cookieReader:$$CookieReaderProvider})}])}function jqNextId(){return++jqId}function cssKebabToCamel(name){return kebabToCamel(name.replace(MS_HACK_REGEXP,"ms-"))}function fnCamelCaseReplace(all,letter){return letter.toUpperCase()}function kebabToCamel(name){return name.replace(DASH_LOWERCASE_REGEXP,fnCamelCaseReplace)}function jqLiteIsTextNode(html){return!HTML_REGEXP.test(html)}function jqLiteAcceptsData(node){var nodeType=node.nodeType;return nodeType===NODE_TYPE_ELEMENT||!nodeType||nodeType===NODE_TYPE_DOCUMENT}function jqLiteHasData(node){for(var key in jqCache[node.ng339])return!0;return!1}function jqLiteCleanData(nodes){for(var i=0,ii=nodes.length;i")+wrap[2],i=wrap[0];i--;)tmp=tmp.lastChild;nodes=concat(nodes,tmp.childNodes),tmp=fragment.firstChild,tmp.textContent=""}return fragment.textContent="",fragment.innerHTML="",forEach(nodes,function(node){fragment.appendChild(node)}),fragment}function jqLiteParseHTML(html,context){context=context||window.document;var parsed;return(parsed=SINGLE_TAG_REGEXP.exec(html))?[context.createElement(parsed[1])]:(parsed=jqLiteBuildFragment(html,context))?parsed.childNodes:[]}function jqLiteWrapNode(node,wrapper){var parent=node.parentNode;parent&&parent.replaceChild(wrapper,node),wrapper.appendChild(node)}function JQLite(element){if(element instanceof JQLite)return element;var argIsString;if(isString(element)&&(element=trim(element),argIsString=!0),!(this instanceof JQLite)){if(argIsString&&"<"!==element.charAt(0))throw jqLiteMinErr("nosel","Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");return new JQLite(element)}argIsString?jqLiteAddNodes(this,jqLiteParseHTML(element)):isFunction(element)?jqLiteReady(element):jqLiteAddNodes(this,element)}function jqLiteClone(element){return element.cloneNode(!0)}function jqLiteDealoc(element,onlyDescendants){if(onlyDescendants||jqLiteRemoveData(element),element.querySelectorAll)for(var descendants=element.querySelectorAll("*"),i=0,l=descendants.length;i0||(element.removeEventListener(type,handle),delete events[type])};forEach(type.split(" "),function(type){removeHandler(type),MOUSE_EVENT_MAP[type]&&removeHandler(MOUSE_EVENT_MAP[type])})}else for(type in events)"$destroy"!==type&&element.removeEventListener(type,handle),delete events[type]}function jqLiteRemoveData(element,name){var expandoId=element.ng339,expandoStore=expandoId&&jqCache[expandoId];if(expandoStore){if(name)return void delete expandoStore.data[name];expandoStore.handle&&(expandoStore.events.$destroy&&expandoStore.handle({},"$destroy"),jqLiteOff(element)),delete jqCache[expandoId],element.ng339=void 0}}function jqLiteExpandoStore(element,createIfNecessary){var expandoId=element.ng339,expandoStore=expandoId&&jqCache[expandoId];return createIfNecessary&&!expandoStore&&(element.ng339=expandoId=jqNextId(),expandoStore=jqCache[expandoId]={events:{},data:{},handle:void 0}),expandoStore}function jqLiteData(element,key,value){if(jqLiteAcceptsData(element)){var prop,isSimpleSetter=isDefined(value),isSimpleGetter=!isSimpleSetter&&key&&!isObject(key),massGetter=!key,expandoStore=jqLiteExpandoStore(element,!isSimpleGetter),data=expandoStore&&expandoStore.data;if(isSimpleSetter)data[kebabToCamel(key)]=value;else{if(massGetter)return data;if(isSimpleGetter)return data&&data[kebabToCamel(key)];for(prop in key)data[kebabToCamel(prop)]=key[prop]}}}function jqLiteHasClass(element,selector){return!!element.getAttribute&&(" "+(element.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+selector+" ")>-1}function jqLiteRemoveClass(element,cssClasses){cssClasses&&element.setAttribute&&forEach(cssClasses.split(" "),function(cssClass){element.setAttribute("class",trim((" "+(element.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+trim(cssClass)+" "," ")))})}function jqLiteAddClass(element,cssClasses){if(cssClasses&&element.setAttribute){var existingClasses=(" "+(element.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");forEach(cssClasses.split(" "),function(cssClass){cssClass=trim(cssClass),existingClasses.indexOf(" "+cssClass+" ")===-1&&(existingClasses+=cssClass+" ")}),element.setAttribute("class",trim(existingClasses))}}function jqLiteAddNodes(root,elements){if(elements)if(elements.nodeType)root[root.length++]=elements;else{var length=elements.length;if("number"==typeof length&&elements.window!==elements){if(length)for(var i=0;i1&&(eventFns=shallowCopy(eventFns));for(var i=0;icapacity&&this.remove(staleEnd.key),value}},get:function(key){if(capacity";var attributes=specialAttrHolder.firstChild.attributes,attribute=attributes[0];attributes.removeNamedItem(attribute.name),attribute.value=value,element.attributes.setNamedItem(attribute)}function safeAddClass($element,className){try{$element.addClass(className)}catch(e){}}function compile($compileNodes,transcludeFn,maxPriority,ignoreDirective,previousCompileContext){$compileNodes instanceof jqLite||($compileNodes=jqLite($compileNodes));var compositeLinkFn=compileNodes($compileNodes,transcludeFn,$compileNodes,maxPriority,ignoreDirective,previousCompileContext);compile.$$addScopeClass($compileNodes);var namespace=null;return function publicLinkFn(scope,cloneConnectFn,options){if(!$compileNodes)throw $compileMinErr("multilink","This element has already been linked.");assertArg(scope,"scope"),previousCompileContext&&previousCompileContext.needsNewScope&&(scope=scope.$parent.$new()),options=options||{};var parentBoundTranscludeFn=options.parentBoundTranscludeFn,transcludeControllers=options.transcludeControllers,futureParentElement=options.futureParentElement;parentBoundTranscludeFn&&parentBoundTranscludeFn.$$boundTransclude&&(parentBoundTranscludeFn=parentBoundTranscludeFn.$$boundTransclude),namespace||(namespace=detectNamespaceForChildElements(futureParentElement));var $linkNode;if($linkNode="html"!==namespace?jqLite(wrapTemplate(namespace,jqLite("
").append($compileNodes).html())):cloneConnectFn?JQLitePrototype.clone.call($compileNodes):$compileNodes,transcludeControllers)for(var controllerName in transcludeControllers)$linkNode.data("$"+controllerName+"Controller",transcludeControllers[controllerName].instance);return compile.$$addScopeInfo($linkNode,scope),cloneConnectFn&&cloneConnectFn($linkNode,scope),compositeLinkFn&&compositeLinkFn(scope,$linkNode,$linkNode,parentBoundTranscludeFn),cloneConnectFn||($compileNodes=compositeLinkFn=null),$linkNode}}function detectNamespaceForChildElements(parentElement){var node=parentElement&&parentElement[0];return node&&"foreignobject"!==nodeName_(node)&&toString.call(node).match(/SVG/)?"svg":"html"}function compileNodes(nodeList,transcludeFn,$rootElement,maxPriority,ignoreDirective,previousCompileContext){function compositeLinkFn(scope,nodeList,$rootElement,parentBoundTranscludeFn){var nodeLinkFn,childLinkFn,node,childScope,i,ii,idx,childBoundTranscludeFn,stableNodeList;if(nodeLinkFnFound){var nodeListLength=nodeList.length;for(stableNodeList=new Array(nodeListLength),i=0;i0)else nodes.push(node);return jqLite(nodes)}function groupElementsLinkFnWrapper(linkFn,attrStart,attrEnd){return function groupedElementsLink(scope,element,attrs,controllers,transcludeFn){return element=groupScan(element[0],attrStart,attrEnd),linkFn(scope,element,attrs,controllers,transcludeFn)}}function compilationGenerator(eager,$compileNodes,transcludeFn,maxPriority,ignoreDirective,previousCompileContext){var compiled;return eager?compile($compileNodes,transcludeFn,maxPriority,ignoreDirective,previousCompileContext):function lazyCompilation(){return compiled||(compiled=compile($compileNodes,transcludeFn,maxPriority,ignoreDirective,previousCompileContext),$compileNodes=transcludeFn=previousCompileContext=null),compiled.apply(this,arguments)}}function applyDirectivesToNode(directives,compileNode,templateAttrs,transcludeFn,jqCollection,originalReplaceDirective,preLinkFns,postLinkFns,previousCompileContext){function addLinkFns(pre,post,attrStart,attrEnd){pre&&(attrStart&&(pre=groupElementsLinkFnWrapper(pre,attrStart,attrEnd)),pre.require=directive.require,pre.directiveName=directiveName,(newIsolateScopeDirective===directive||directive.$$isolateScope)&&(pre=cloneAndAnnotateFn(pre,{isolateScope:!0})),preLinkFns.push(pre)),post&&(attrStart&&(post=groupElementsLinkFnWrapper(post,attrStart,attrEnd)),post.require=directive.require,post.directiveName=directiveName,(newIsolateScopeDirective===directive||directive.$$isolateScope)&&(post=cloneAndAnnotateFn(post,{isolateScope:!0})),postLinkFns.push(post))}function nodeLinkFn(childLinkFn,scope,linkNode,$rootElement,boundTranscludeFn){function controllersBoundTransclude(scope,cloneAttachFn,futureParentElement,slotName){var transcludeControllers;if(isScope(scope)||(slotName=futureParentElement,futureParentElement=cloneAttachFn,cloneAttachFn=scope,scope=void 0),hasElementTranscludeDirective&&(transcludeControllers=elementControllers),futureParentElement||(futureParentElement=hasElementTranscludeDirective?$element.parent():$element),!slotName)return boundTranscludeFn(scope,cloneAttachFn,transcludeControllers,futureParentElement,scopeToChild);var slotTranscludeFn=boundTranscludeFn.$$slots[slotName];if(slotTranscludeFn)return slotTranscludeFn(scope,cloneAttachFn,transcludeControllers,futureParentElement,scopeToChild);if(isUndefined(slotTranscludeFn))throw $compileMinErr("noslot",'No parent directive that requires a transclusion with slot name "{0}". Element: {1}',slotName,startingTag($element))}var i,ii,linkFn,isolateScope,controllerScope,elementControllers,transcludeFn,$element,attrs,scopeBindingInfo;compileNode===linkNode?(attrs=templateAttrs,$element=templateAttrs.$$element):($element=jqLite(linkNode),attrs=new Attributes($element,templateAttrs)),controllerScope=scope,newIsolateScopeDirective?isolateScope=scope.$new(!0):newScopeDirective&&(controllerScope=scope.$parent),boundTranscludeFn&&(transcludeFn=controllersBoundTransclude,transcludeFn.$$boundTransclude=boundTranscludeFn,transcludeFn.isSlotFilled=function(slotName){return!!boundTranscludeFn.$$slots[slotName]}),controllerDirectives&&(elementControllers=setupControllers($element,attrs,transcludeFn,controllerDirectives,isolateScope,scope,newIsolateScopeDirective)),newIsolateScopeDirective&&(compile.$$addScopeInfo($element,isolateScope,!0,!(templateDirective&&(templateDirective===newIsolateScopeDirective||templateDirective===newIsolateScopeDirective.$$originalDirective))),compile.$$addScopeClass($element,!0),isolateScope.$$isolateBindings=newIsolateScopeDirective.$$isolateBindings,scopeBindingInfo=initializeDirectiveBindings(scope,attrs,isolateScope,isolateScope.$$isolateBindings,newIsolateScopeDirective),scopeBindingInfo.removeWatches&&isolateScope.$on("$destroy",scopeBindingInfo.removeWatches));for(var name in elementControllers){var controllerDirective=controllerDirectives[name],controller=elementControllers[name],bindings=controllerDirective.$$bindings.bindToController;if(preAssignBindingsEnabled){controller.bindingInfo=bindings?initializeDirectiveBindings(controllerScope,attrs,controller.instance,bindings,controllerDirective):{};var controllerResult=controller();controllerResult!==controller.instance&&(controller.instance=controllerResult,$element.data("$"+controllerDirective.name+"Controller",controllerResult),controller.bindingInfo.removeWatches&&controller.bindingInfo.removeWatches(),controller.bindingInfo=initializeDirectiveBindings(controllerScope,attrs,controller.instance,bindings,controllerDirective))}else controller.instance=controller(),$element.data("$"+controllerDirective.name+"Controller",controller.instance),controller.bindingInfo=initializeDirectiveBindings(controllerScope,attrs,controller.instance,bindings,controllerDirective)}for(forEach(controllerDirectives,function(controllerDirective,name){var require=controllerDirective.require;controllerDirective.bindToController&&!isArray(require)&&isObject(require)&&extend(elementControllers[name].instance,getControllers(name,require,$element,elementControllers))}),forEach(elementControllers,function(controller){var controllerInstance=controller.instance;if(isFunction(controllerInstance.$onChanges))try{controllerInstance.$onChanges(controller.bindingInfo.initialChanges)}catch(e){$exceptionHandler(e)}if(isFunction(controllerInstance.$onInit))try{controllerInstance.$onInit()}catch(e){$exceptionHandler(e)}isFunction(controllerInstance.$doCheck)&&(controllerScope.$watch(function(){controllerInstance.$doCheck()}),controllerInstance.$doCheck()),isFunction(controllerInstance.$onDestroy)&&controllerScope.$on("$destroy",function callOnDestroyHook(){controllerInstance.$onDestroy()})}),i=0,ii=preLinkFns.length;i=0;i--)linkFn=postLinkFns[i],invokeLinkFn(linkFn,linkFn.isolateScope?isolateScope:scope,$element,attrs,linkFn.require&&getControllers(linkFn.directiveName,linkFn.require,$element,elementControllers),transcludeFn);forEach(elementControllers,function(controller){var controllerInstance=controller.instance;isFunction(controllerInstance.$postLink)&&controllerInstance.$postLink()})}previousCompileContext=previousCompileContext||{};for(var terminalPriority=-Number.MAX_VALUE,newScopeDirective=previousCompileContext.newScopeDirective,controllerDirectives=previousCompileContext.controllerDirectives,newIsolateScopeDirective=previousCompileContext.newIsolateScopeDirective,templateDirective=previousCompileContext.templateDirective,nonTlbTranscludeDirective=previousCompileContext.nonTlbTranscludeDirective,hasTranscludeDirective=!1,hasTemplate=!1,hasElementTranscludeDirective=previousCompileContext.hasElementTranscludeDirective,$compileNode=templateAttrs.$$element=jqLite(compileNode),directive,directiveName,$template,replaceDirective=originalReplaceDirective,childTranscludeFn=transcludeFn,linkFn,didScanForMultipleTransclusion=!1,mightHaveMultipleTransclusionError=!1,directiveValue,i=0,ii=directives.length;idirective.priority)break;if(directiveValue=directive.scope,directiveValue&&(directive.templateUrl||(isObject(directiveValue)?(assertNoDuplicate("new/isolated scope",newIsolateScopeDirective||newScopeDirective,directive,$compileNode),newIsolateScopeDirective=directive):assertNoDuplicate("new/isolated scope",newIsolateScopeDirective,directive,$compileNode)),newScopeDirective=newScopeDirective||directive),directiveName=directive.name,!didScanForMultipleTransclusion&&(directive.replace&&(directive.templateUrl||directive.template)||directive.transclude&&!directive.$$tlb)){for(var candidateDirective,scanningIndex=i+1;candidateDirective=directives[scanningIndex++];)if(candidateDirective.transclude&&!candidateDirective.$$tlb||candidateDirective.replace&&(candidateDirective.templateUrl||candidateDirective.template)){mightHaveMultipleTransclusionError=!0;break}didScanForMultipleTransclusion=!0}if(!directive.templateUrl&&directive.controller&&(controllerDirectives=controllerDirectives||createMap(),assertNoDuplicate("'"+directiveName+"' controller",controllerDirectives[directiveName],directive,$compileNode),controllerDirectives[directiveName]=directive),directiveValue=directive.transclude)if(hasTranscludeDirective=!0,directive.$$tlb||(assertNoDuplicate("transclusion",nonTlbTranscludeDirective,directive,$compileNode),nonTlbTranscludeDirective=directive),"element"===directiveValue)hasElementTranscludeDirective=!0,terminalPriority=directive.priority,$template=$compileNode,$compileNode=templateAttrs.$$element=jqLite(compile.$$createComment(directiveName,templateAttrs[directiveName])),compileNode=$compileNode[0],replaceWith(jqCollection,sliceArgs($template),compileNode),$template[0].$$parentNode=$template[0].parentNode,childTranscludeFn=compilationGenerator(mightHaveMultipleTransclusionError,$template,transcludeFn,terminalPriority,replaceDirective&&replaceDirective.name,{nonTlbTranscludeDirective:nonTlbTranscludeDirective});else{var slots=createMap();if(isObject(directiveValue)){$template=[];var slotMap=createMap(),filledSlots=createMap();forEach(directiveValue,function(elementSelector,slotName){var optional="?"===elementSelector.charAt(0);elementSelector=optional?elementSelector.substring(1):elementSelector,slotMap[elementSelector]=slotName,slots[slotName]=null,filledSlots[slotName]=optional}),forEach($compileNode.contents(),function(node){var slotName=slotMap[directiveNormalize(nodeName_(node))];slotName?(filledSlots[slotName]=!0,slots[slotName]=slots[slotName]||[],slots[slotName].push(node)):$template.push(node)}),forEach(filledSlots,function(filled,slotName){if(!filled)throw $compileMinErr("reqslot","Required transclusion slot `{0}` was not filled.",slotName)});for(var slotName in slots)slots[slotName]&&(slots[slotName]=compilationGenerator(mightHaveMultipleTransclusionError,slots[slotName],transcludeFn))}else $template=jqLite(jqLiteClone(compileNode)).contents();$compileNode.empty(),childTranscludeFn=compilationGenerator(mightHaveMultipleTransclusionError,$template,transcludeFn,void 0,void 0,{needsNewScope:directive.$$isolateScope||directive.$$newScope}),childTranscludeFn.$$slots=slots}if(directive.template)if(hasTemplate=!0,assertNoDuplicate("template",templateDirective,directive,$compileNode),templateDirective=directive,directiveValue=isFunction(directive.template)?directive.template($compileNode,templateAttrs):directive.template,directiveValue=denormalizeTemplate(directiveValue),directive.replace){if(replaceDirective=directive,$template=jqLiteIsTextNode(directiveValue)?[]:removeComments(wrapTemplate(directive.templateNamespace,trim(directiveValue))),compileNode=$template[0],1!==$template.length||compileNode.nodeType!==NODE_TYPE_ELEMENT)throw $compileMinErr("tplrt","Template for directive '{0}' must have exactly one root element. {1}",directiveName,"");replaceWith(jqCollection,$compileNode,compileNode);var newTemplateAttrs={$attr:{}},templateDirectives=collectDirectives(compileNode,[],newTemplateAttrs),unprocessedDirectives=directives.splice(i+1,directives.length-(i+1));(newIsolateScopeDirective||newScopeDirective)&&markDirectiveScope(templateDirectives,newIsolateScopeDirective,newScopeDirective),directives=directives.concat(templateDirectives).concat(unprocessedDirectives),mergeTemplateAttributes(templateAttrs,newTemplateAttrs),ii=directives.length}else $compileNode.html(directiveValue);if(directive.templateUrl)hasTemplate=!0,assertNoDuplicate("template",templateDirective,directive,$compileNode),templateDirective=directive,directive.replace&&(replaceDirective=directive),nodeLinkFn=compileTemplateUrl(directives.splice(i,directives.length-i),$compileNode,templateAttrs,jqCollection,hasTranscludeDirective&&childTranscludeFn,preLinkFns,postLinkFns,{controllerDirectives:controllerDirectives,newScopeDirective:newScopeDirective!==directive&&newScopeDirective,newIsolateScopeDirective:newIsolateScopeDirective,templateDirective:templateDirective,nonTlbTranscludeDirective:nonTlbTranscludeDirective}),ii=directives.length;else if(directive.compile)try{linkFn=directive.compile($compileNode,templateAttrs,childTranscludeFn);var context=directive.$$originalDirective||directive;isFunction(linkFn)?addLinkFns(null,bind(context,linkFn),attrStart,attrEnd):linkFn&&addLinkFns(bind(context,linkFn.pre),bind(context,linkFn.post),attrStart,attrEnd)}catch(e){$exceptionHandler(e,startingTag($compileNode))}directive.terminal&&(nodeLinkFn.terminal=!0,terminalPriority=Math.max(terminalPriority,directive.priority))}return nodeLinkFn.scope=newScopeDirective&&newScopeDirective.scope===!0,nodeLinkFn.transcludeOnThisElement=hasTranscludeDirective,nodeLinkFn.templateOnThisElement=hasTemplate,nodeLinkFn.transclude=childTranscludeFn,previousCompileContext.hasElementTranscludeDirective=hasElementTranscludeDirective,nodeLinkFn}function getControllers(directiveName,require,$element,elementControllers){var value;if(isString(require)){var match=require.match(REQUIRE_PREFIX_REGEXP),name=require.substring(match[0].length),inheritType=match[1]||match[3],optional="?"===match[2];if("^^"===inheritType?$element=$element.parent():(value=elementControllers&&elementControllers[name],value=value&&value.instance),!value){var dataName="$"+name+"Controller";value=inheritType?$element.inheritedData(dataName):$element.data(dataName)}if(!value&&!optional)throw $compileMinErr("ctreq","Controller '{0}', required by directive '{1}', can't be found!",name,directiveName)}else if(isArray(require)){value=[];for(var i=0,ii=require.length;idirective.priority)&&directive.restrict.indexOf(location)!==-1){if(startAttrName&&(directive=inherit(directive,{$$start:startAttrName,$$end:endAttrName})),!directive.$$bindings){var bindings=directive.$$bindings=parseDirectiveBindings(directive,directive.name);isObject(bindings.isolateScope)&&(directive.$$isolateBindings=bindings.isolateScope)}tDirectives.push(directive),match=directive}return match}function directiveIsMultiElement(name){if(hasDirectives.hasOwnProperty(name))for(var directive,directives=$injector.get(name+Suffix),i=0,ii=directives.length;i"+template+"",wrapper.childNodes[0].childNodes;default:return template}}function getTrustedContext(node,attrNormalizedName){if("srcdoc"===attrNormalizedName)return $sce.HTML;var tag=nodeName_(node);if("src"===attrNormalizedName||"ngSrc"===attrNormalizedName){if(["img","video","audio","source","track"].indexOf(tag)===-1)return $sce.RESOURCE_URL}else if("xlinkHref"===attrNormalizedName||"form"===tag&&"action"===attrNormalizedName||"link"===tag&&"href"===attrNormalizedName)return $sce.RESOURCE_URL}function addAttrInterpolateDirective(node,directives,value,name,isNgAttr){var trustedContext=getTrustedContext(node,name),mustHaveExpression=!isNgAttr,allOrNothing=ALL_OR_NOTHING_ATTRS[name]||isNgAttr,interpolateFn=$interpolate(value,mustHaveExpression,trustedContext,allOrNothing);if(interpolateFn){if("multiple"===name&&"select"===nodeName_(node))throw $compileMinErr("selmulti","Binding to the 'multiple' attribute is not supported. Element: {0}",startingTag(node));if(EVENT_HANDLER_ATTR_REGEXP.test(name))throw $compileMinErr("nodomevents","Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead.");directives.push({priority:100,compile:function(){return{pre:function attrInterpolatePreLinkFn(scope,element,attr){var $$observers=attr.$$observers||(attr.$$observers=createMap()),newValue=attr[name];newValue!==value&&(interpolateFn=newValue&&$interpolate(newValue,!0,trustedContext,allOrNothing),value=newValue),interpolateFn&&(attr[name]=interpolateFn(scope),($$observers[name]||($$observers[name]=[])).$$inter=!0,(attr.$$observers&&attr.$$observers[name].$$scope||scope).$watch(interpolateFn,function interpolateFnWatchAction(newValue,oldValue){"class"===name&&newValue!==oldValue?attr.$updateClass(newValue,oldValue):attr.$set(name,newValue)}))}}}})}}function replaceWith($rootElement,elementsToRemove,newNode){var firstElementToRemove=elementsToRemove[0],removeCount=elementsToRemove.length,parent=firstElementToRemove.parentNode,i,ii;if($rootElement)for(i=0,ii=$rootElement.length;i0&&$animate.addClass(this.$$element,classVal)},$removeClass:function(classVal){classVal&&classVal.length>0&&$animate.removeClass(this.$$element,classVal)},$updateClass:function(newClasses,oldClasses){var toAdd=tokenDifference(newClasses,oldClasses);toAdd&&toAdd.length&&$animate.addClass(this.$$element,toAdd);var toRemove=tokenDifference(oldClasses,newClasses);toRemove&&toRemove.length&&$animate.removeClass(this.$$element,toRemove)},$set:function(key,value,writeAttr,attrName){var node=this.$$element[0],booleanKey=getBooleanAttrName(node,key),aliasedKey=getAliasedAttrName(key),observer=key,nodeName;if(booleanKey?(this.$$element.prop(key,value),attrName=booleanKey):aliasedKey&&(this[aliasedKey]=value,observer=aliasedKey),this[key]=value,attrName?this.$attr[key]=attrName:(attrName=this.$attr[key])||(this.$attr[key]=attrName=snake_case(key,"-")),"a"===(nodeName=nodeName_(this.$$element))&&("href"===key||"xlinkHref"===key)||"img"===nodeName&&"src"===key)this[key]=value=$$sanitizeUri(value,"src"===key);else if("img"===nodeName&&"srcset"===key&&isDefined(value)){for(var result="",trimmedSrcset=trim(value),srcPattern=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,pattern=/\s/.test(trimmedSrcset)?srcPattern:/(,)/,rawUris=trimmedSrcset.split(pattern),nbrUrisWith2parts=Math.floor(rawUris.length/2),i=0;i0?" ":"")+token}return values}function removeComments(jqNodes){jqNodes=jqLite(jqNodes);var i=jqNodes.length;if(i<=1)return jqNodes;for(;i--;){var node=jqNodes[i];(node.nodeType===NODE_TYPE_COMMENT||node.nodeType===NODE_TYPE_TEXT&&""===node.nodeValue.trim())&&splice.call(jqNodes,i,1)}return jqNodes}function identifierForController(controller,ident){if(ident&&isString(ident))return ident;if(isString(controller)){var match=CNTRL_REG.exec(controller);if(match)return match[3]}}function $ControllerProvider(){var controllers={},globals=!1;this.has=function(name){return controllers.hasOwnProperty(name)},this.register=function(name,constructor){assertNotHasOwnProperty(name,"controller"),isObject(name)?extend(controllers,name):controllers[name]=constructor},this.allowGlobals=function(){globals=!0},this.$get=["$injector","$window",function($injector,$window){function addIdentifier(locals,identifier,instance,name){if(!locals||!isObject(locals.$scope))throw minErr("$controller")("noscp","Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",name,identifier);locals.$scope[identifier]=instance}return function $controller(expression,locals,later,ident){var instance,match,constructor,identifier;if(later=later===!0,ident&&isString(ident)&&(identifier=ident),isString(expression)){if(!(match=expression.match(CNTRL_REG)))throw $controllerMinErr("ctrlfmt","Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.",expression);if(constructor=match[1],identifier=identifier||match[3],!(expression=controllers.hasOwnProperty(constructor)?controllers[constructor]:getter(locals.$scope,constructor,!0)||(globals?getter($window,constructor,!0):void 0)))throw $controllerMinErr("ctrlreg","The controller with the name '{0}' is not registered.",constructor);assertArgFn(expression,constructor,!0)}if(later){var controllerPrototype=(isArray(expression)?expression[expression.length-1]:expression).prototype;return instance=Object.create(controllerPrototype||null),identifier&&addIdentifier(locals,identifier,instance,constructor||expression.name),extend(function $controllerInit(){var result=$injector.invoke(expression,instance,locals,constructor);return result!==instance&&(isObject(result)||isFunction(result))&&(instance=result,identifier&&addIdentifier(locals,identifier,instance,constructor||expression.name)),instance},{instance:instance,identifier:identifier})}return instance=$injector.instantiate(expression,locals,constructor),identifier&&addIdentifier(locals,identifier,instance,constructor||expression.name),instance}}]}function $DocumentProvider(){this.$get=["$window",function(window){return jqLite(window.document)}]}function $$IsDocumentHiddenProvider(){this.$get=["$document","$rootScope",function($document,$rootScope){function changeListener(){hidden=doc.hidden}var doc=$document[0],hidden=doc&&doc.hidden;return $document.on("visibilitychange",changeListener),$rootScope.$on("$destroy",function(){$document.off("visibilitychange",changeListener)}),function(){return hidden}}]}function $ExceptionHandlerProvider(){this.$get=["$log",function($log){return function(exception,cause){$log.error.apply($log,arguments)}}]}function serializeValue(v){return isObject(v)?isDate(v)?v.toISOString():toJson(v):v}function $HttpParamSerializerProvider(){this.$get=function(){return function ngParamSerializer(params){if(!params)return"";var parts=[];return forEachSorted(params,function(value,key){null===value||isUndefined(value)||(isArray(value)?forEach(value,function(v){parts.push(encodeUriQuery(key)+"="+encodeUriQuery(serializeValue(v)))}):parts.push(encodeUriQuery(key)+"="+encodeUriQuery(serializeValue(value))))}),parts.join("&")}}}function $HttpParamSerializerJQLikeProvider(){this.$get=function(){return function jQueryLikeParamSerializer(params){function serialize(toSerialize,prefix,topLevel){null===toSerialize||isUndefined(toSerialize)||(isArray(toSerialize)?forEach(toSerialize,function(value,index){serialize(value,prefix+"["+(isObject(value)?index:"")+"]")}):isObject(toSerialize)&&!isDate(toSerialize)?forEachSorted(toSerialize,function(value,key){serialize(value,prefix+(topLevel?"":"[")+key+(topLevel?"":"]"))}):parts.push(encodeUriQuery(prefix)+"="+encodeUriQuery(serializeValue(toSerialize))))}if(!params)return"";var parts=[];return serialize(params,"",!0),parts.join("&")}}}function defaultHttpResponseTransform(data,headers){if(isString(data)){var tempData=data.replace(JSON_PROTECTION_PREFIX,"").trim();if(tempData){var contentType=headers("Content-Type");(contentType&&0===contentType.indexOf(APPLICATION_JSON)||isJsonLike(tempData))&&(data=fromJson(tempData))}}return data}function isJsonLike(str){var jsonStart=str.match(JSON_START);return jsonStart&&JSON_ENDS[jsonStart[0]].test(str)}function parseHeaders(headers){function fillInParsed(key,val){key&&(parsed[key]=parsed[key]?parsed[key]+", "+val:val)}var parsed=createMap(),i;return isString(headers)?forEach(headers.split("\n"),function(line){i=line.indexOf(":"),fillInParsed(lowercase(trim(line.substr(0,i))),trim(line.substr(i+1)))}):isObject(headers)&&forEach(headers,function(headerVal,headerKey){fillInParsed(lowercase(headerKey),trim(headerVal))}),parsed}function headersGetter(headers){var headersObj;return function(name){if(headersObj||(headersObj=parseHeaders(headers)),name){var value=headersObj[lowercase(name)];return void 0===value&&(value=null),value}return headersObj}}function transformData(data,headers,status,fns){return isFunction(fns)?fns(data,headers,status):(forEach(fns,function(fn){data=fn(data,headers,status)}),data)}function isSuccess(status){return 200<=status&&status<300}function $HttpProvider(){var defaults=this.defaults={transformResponse:[defaultHttpResponseTransform],transformRequest:[function(d){return!isObject(d)||isFile(d)||isBlob(d)||isFormData(d)?d:toJson(d)}],headers:{common:{Accept:"application/json, text/plain, */*"},post:shallowCopy(CONTENT_TYPE_APPLICATION_JSON),put:shallowCopy(CONTENT_TYPE_APPLICATION_JSON),patch:shallowCopy(CONTENT_TYPE_APPLICATION_JSON)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},useApplyAsync=!1;this.useApplyAsync=function(value){return isDefined(value)?(useApplyAsync=!!value,this):useApplyAsync};var interceptorFactories=this.interceptors=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function($browser,$httpBackend,$$cookieReader,$cacheFactory,$rootScope,$q,$injector,$sce){function $http(requestConfig){function chainInterceptors(promise,interceptors){for(var i=0,ii=interceptors.length;i=-1?status:0,(isSuccess(status)?deferred.resolve:deferred.reject)({data:response,status:status,headers:headersGetter(headers),config:config,statusText:statusText})}function resolvePromiseWithResult(result){resolvePromise(result.data,result.status,shallowCopy(result.headers()),result.statusText)}function removePendingReq(){var idx=$http.pendingRequests.indexOf(config);idx!==-1&&$http.pendingRequests.splice(idx,1)}var deferred=$q.defer(),promise=deferred.promise,cache,cachedResp,reqHeaders=config.headers,isJsonp="jsonp"===lowercase(config.method),url=config.url;if(isJsonp?url=$sce.getTrustedResourceUrl(url):isString(url)||(url=$sce.valueOf(url)),url=buildUrl(url,config.paramSerializer(config.params)),isJsonp&&(url=sanitizeJsonpCallbackParam(url,config.jsonpCallbackParam)),$http.pendingRequests.push(config),promise.then(removePendingReq,removePendingReq),!config.cache&&!defaults.cache||config.cache===!1||"GET"!==config.method&&"JSONP"!==config.method||(cache=isObject(config.cache)?config.cache:isObject(defaults.cache)?defaults.cache:defaultCache),cache&&(cachedResp=cache.get(url),isDefined(cachedResp)?isPromiseLike(cachedResp)?cachedResp.then(resolvePromiseWithResult,resolvePromiseWithResult):isArray(cachedResp)?resolvePromise(cachedResp[1],cachedResp[0],shallowCopy(cachedResp[2]),cachedResp[3]):resolvePromise(cachedResp,200,{},"OK"):cache.put(url,promise)),isUndefined(cachedResp)){var xsrfValue=urlIsSameOrigin(config.url)?$$cookieReader()[config.xsrfCookieName||defaults.xsrfCookieName]:void 0;xsrfValue&&(reqHeaders[config.xsrfHeaderName||defaults.xsrfHeaderName]=xsrfValue),$httpBackend(config.method,url,reqData,done,reqHeaders,config.timeout,config.withCredentials,config.responseType,createApplyHandlers(config.eventHandlers),createApplyHandlers(config.uploadEventHandlers))}return promise}function buildUrl(url,serializedParams){return serializedParams.length>0&&(url+=(url.indexOf("?")===-1?"?":"&")+serializedParams),url}function sanitizeJsonpCallbackParam(url,key){if(/[&?][^=]+=JSON_CALLBACK/.test(url))throw $httpMinErr("badjsonp",'Illegal use of JSON_CALLBACK in url, "{0}"',url);if(new RegExp("[&?]"+key+"=").test(url))throw $httpMinErr("badjsonp",'Illegal use of callback param, "{0}", in url, "{1}"',key,url);return url+=(url.indexOf("?")===-1?"?":"&")+key+"=JSON_CALLBACK"}var defaultCache=$cacheFactory("$http");defaults.paramSerializer=isString(defaults.paramSerializer)?$injector.get(defaults.paramSerializer):defaults.paramSerializer;var reversedInterceptors=[];return forEach(interceptorFactories,function(interceptorFactory){reversedInterceptors.unshift(isString(interceptorFactory)?$injector.get(interceptorFactory):$injector.invoke(interceptorFactory))}),$http.pendingRequests=[],createShortMethods("get","delete","head","jsonp"),createShortMethodsWithData("post","put","patch"),$http.defaults=defaults,$http}]}function $xhrFactoryProvider(){this.$get=function(){return function createXhr(){return new window.XMLHttpRequest}}}function $HttpBackendProvider(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function($browser,$jsonpCallbacks,$document,$xhrFactory){return createHttpBackend($browser,$xhrFactory,$browser.defer,$jsonpCallbacks,$document[0])}]}function createHttpBackend($browser,createXhr,$browserDefer,callbacks,rawDocument){function jsonpReq(url,callbackPath,done){url=url.replace("JSON_CALLBACK",callbackPath);var script=rawDocument.createElement("script"),callback=null;return script.type="text/javascript",script.src=url,script.async=!0,callback=function(event){script.removeEventListener("load",callback),script.removeEventListener("error",callback),rawDocument.body.removeChild(script),script=null;var status=-1,text="unknown";event&&("load"!==event.type||callbacks.wasCalled(callbackPath)||(event={type:"error"}),text=event.type,status="error"===event.type?404:200),done&&done(status,text)},script.addEventListener("load",callback),script.addEventListener("error",callback),rawDocument.body.appendChild(script),callback}return function(method,url,post,callback,headers,timeout,withCredentials,responseType,eventHandlers,uploadEventHandlers){function timeoutRequest(){jsonpDone&&jsonpDone(),xhr&&xhr.abort()}function completeRequest(callback,status,response,headersString,statusText){isDefined(timeoutId)&&$browserDefer.cancel(timeoutId),jsonpDone=xhr=null,callback(status,response,headersString,statusText)}if(url=url||$browser.url(),"jsonp"===lowercase(method))var callbackPath=callbacks.createCallback(url),jsonpDone=jsonpReq(url,callbackPath,function(status,text){completeRequest(callback,status,200===status&&callbacks.getResponse(callbackPath),"",text),callbacks.removeCallback(callbackPath)});else{var xhr=createXhr(method,url);xhr.open(method,url,!0),forEach(headers,function(value,key){isDefined(value)&&xhr.setRequestHeader(key,value)}),xhr.onload=function requestLoaded(){var statusText=xhr.statusText||"",response="response"in xhr?xhr.response:xhr.responseText,status=1223===xhr.status?204:xhr.status;0===status&&(status=response?200:"file"===urlResolve(url).protocol?404:0),completeRequest(callback,status,response,xhr.getAllResponseHeaders(),statusText)};var requestError=function(){completeRequest(callback,-1,null,null,"")};if(xhr.onerror=requestError,xhr.onabort=requestError,xhr.ontimeout=requestError,forEach(eventHandlers,function(value,key){xhr.addEventListener(key,value)}),forEach(uploadEventHandlers,function(value,key){xhr.upload.addEventListener(key,value)}),withCredentials&&(xhr.withCredentials=!0),responseType)try{xhr.responseType=responseType}catch(e){if("json"!==responseType)throw e}xhr.send(isUndefined(post)?null:post)}if(timeout>0)var timeoutId=$browserDefer(timeoutRequest,timeout);else isPromiseLike(timeout)&&timeout.then(timeoutRequest)}}function $InterpolateProvider(){var startSymbol="{{",endSymbol="}}";this.startSymbol=function(value){return value?(startSymbol=value,this):startSymbol},this.endSymbol=function(value){return value?(endSymbol=value,this):endSymbol},this.$get=["$parse","$exceptionHandler","$sce",function($parse,$exceptionHandler,$sce){function escape(ch){return"\\\\\\"+ch}function unescapeText(text){return text.replace(escapedStartRegexp,startSymbol).replace(escapedEndRegexp,endSymbol)}function constantWatchDelegate(scope,listener,objectEquality,constantInterp){var unwatch=scope.$watch(function constantInterpolateWatch(scope){return unwatch(),constantInterp(scope)},listener,objectEquality);return unwatch}function $interpolate(text,mustHaveExpression,trustedContext,allOrNothing){function parseStringifyInterceptor(value){try{return value=getValue(value),allOrNothing&&!isDefined(value)?value:stringify(value)}catch(err){$exceptionHandler($interpolateMinErr.interr(text,err))}}if(!text.length||text.indexOf(startSymbol)===-1){var constantInterp;if(!mustHaveExpression){constantInterp=valueFn(unescapeText(text)),constantInterp.exp=text,constantInterp.expressions=[],constantInterp.$$watchDelegate=constantWatchDelegate}return constantInterp}allOrNothing=!!allOrNothing;for(var startIndex,endIndex,index=0,expressions=[],parseFns=[],textLength=text.length,exp,concat=[],expressionPositions=[];index1&&$interpolateMinErr.throwNoconcat(text),!mustHaveExpression||expressions.length){var compute=function(values){for(var i=0,ii=expressions.length;i4,args=hasParams?sliceArgs(arguments,4):[],setInterval=$window.setInterval,clearInterval=$window.clearInterval,iteration=0,skipApply=isDefined(invokeApply)&&!invokeApply,deferred=(skipApply?$$q:$q).defer(),promise=deferred.promise;return count=isDefined(count)?count:0,promise.$$intervalId=setInterval(function tick(){skipApply?$browser.defer(callback):$rootScope.$evalAsync(callback),deferred.notify(iteration++),count>0&&iteration>=count&&(deferred.resolve(iteration),clearInterval(promise.$$intervalId),delete intervals[promise.$$intervalId]),skipApply||$rootScope.$apply()},delay),intervals[promise.$$intervalId]=deferred,promise}var intervals={};return interval.cancel=function(promise){return!!(promise&&promise.$$intervalId in intervals)&&(intervals[promise.$$intervalId].promise.catch(noop),intervals[promise.$$intervalId].reject("canceled"),$window.clearInterval(promise.$$intervalId),delete intervals[promise.$$intervalId],!0)},interval}]}function encodePath(path){for(var segments=path.split("/"),i=segments.length;i--;)segments[i]=encodeUriSegment(segments[i]);return segments.join("/")}function parseAbsoluteUrl(absoluteUrl,locationObj){var parsedUrl=urlResolve(absoluteUrl);locationObj.$$protocol=parsedUrl.protocol,locationObj.$$host=parsedUrl.hostname,locationObj.$$port=toInt(parsedUrl.port)||DEFAULT_PORTS[parsedUrl.protocol]||null}function parseAppUrl(url,locationObj){if(DOUBLE_SLASH_REGEX.test(url))throw $locationMinErr("badpath",'Invalid url "{0}".',url);var prefixed="/"!==url.charAt(0);prefixed&&(url="/"+url);var match=urlResolve(url);locationObj.$$path=decodeURIComponent(prefixed&&"/"===match.pathname.charAt(0)?match.pathname.substring(1):match.pathname),locationObj.$$search=parseKeyValue(match.search),locationObj.$$hash=decodeURIComponent(match.hash),locationObj.$$path&&"/"!==locationObj.$$path.charAt(0)&&(locationObj.$$path="/"+locationObj.$$path)}function startsWith(str,search){return str.slice(0,search.length)===search}function stripBaseUrl(base,url){if(startsWith(url,base))return url.substr(base.length)}function stripHash(url){var index=url.indexOf("#");return index===-1?url:url.substr(0,index)}function trimEmptyHash(url){return url.replace(/(#.+)|#$/,"$1")}function stripFile(url){return url.substr(0,stripHash(url).lastIndexOf("/")+1)}function serverBase(url){return url.substring(0,url.indexOf("/",url.indexOf("//")+2))}function LocationHtml5Url(appBase,appBaseNoFile,basePrefix){this.$$html5=!0,basePrefix=basePrefix||"",parseAbsoluteUrl(appBase,this),this.$$parse=function(url){var pathUrl=stripBaseUrl(appBaseNoFile,url);if(!isString(pathUrl))throw $locationMinErr("ipthprfx",'Invalid url "{0}", missing path prefix "{1}".',url,appBaseNoFile);parseAppUrl(pathUrl,this),this.$$path||(this.$$path="/"),this.$$compose()},this.$$compose=function(){var search=toKeyValue(this.$$search),hash=this.$$hash?"#"+encodeUriSegment(this.$$hash):"";this.$$url=encodePath(this.$$path)+(search?"?"+search:"")+hash,this.$$absUrl=appBaseNoFile+this.$$url.substr(1),this.$$urlUpdatedByLocation=!0},this.$$parseLinkUrl=function(url,relHref){if(relHref&&"#"===relHref[0])return this.hash(relHref.slice(1)),!0;var appUrl,prevAppUrl,rewrittenUrl;return isDefined(appUrl=stripBaseUrl(appBase,url))?(prevAppUrl=appUrl,rewrittenUrl=basePrefix&&isDefined(appUrl=stripBaseUrl(basePrefix,appUrl))?appBaseNoFile+(stripBaseUrl("/",appUrl)||appUrl):appBase+prevAppUrl):isDefined(appUrl=stripBaseUrl(appBaseNoFile,url))?rewrittenUrl=appBaseNoFile+appUrl:appBaseNoFile===url+"/"&&(rewrittenUrl=appBaseNoFile),rewrittenUrl&&this.$$parse(rewrittenUrl),!!rewrittenUrl}}function LocationHashbangUrl(appBase,appBaseNoFile,hashPrefix){parseAbsoluteUrl(appBase,this),this.$$parse=function(url){function removeWindowsDriveName(path,url,base){var windowsFilePathExp=/^\/[A-Z]:(\/.*)/,firstPathSegmentMatch;return startsWith(url,base)&&(url=url.replace(base,"")),windowsFilePathExp.exec(url)?path:(firstPathSegmentMatch=windowsFilePathExp.exec(path),firstPathSegmentMatch?firstPathSegmentMatch[1]:path)}var withoutBaseUrl=stripBaseUrl(appBase,url)||stripBaseUrl(appBaseNoFile,url),withoutHashUrl;isUndefined(withoutBaseUrl)||"#"!==withoutBaseUrl.charAt(0)?this.$$html5?withoutHashUrl=withoutBaseUrl:(withoutHashUrl="",isUndefined(withoutBaseUrl)&&(appBase=url,this.replace())):(withoutHashUrl=stripBaseUrl(hashPrefix,withoutBaseUrl),isUndefined(withoutHashUrl)&&(withoutHashUrl=withoutBaseUrl)),parseAppUrl(withoutHashUrl,this),this.$$path=removeWindowsDriveName(this.$$path,withoutHashUrl,appBase),this.$$compose()},this.$$compose=function(){var search=toKeyValue(this.$$search),hash=this.$$hash?"#"+encodeUriSegment(this.$$hash):"";this.$$url=encodePath(this.$$path)+(search?"?"+search:"")+hash,this.$$absUrl=appBase+(this.$$url?hashPrefix+this.$$url:""),this.$$urlUpdatedByLocation=!0},this.$$parseLinkUrl=function(url,relHref){return stripHash(appBase)===stripHash(url)&&(this.$$parse(url),!0)}}function LocationHashbangInHtml5Url(appBase,appBaseNoFile,hashPrefix){this.$$html5=!0,LocationHashbangUrl.apply(this,arguments),this.$$parseLinkUrl=function(url,relHref){if(relHref&&"#"===relHref[0])return this.hash(relHref.slice(1)),!0;var rewrittenUrl,appUrl;return appBase===stripHash(url)?rewrittenUrl=url:(appUrl=stripBaseUrl(appBaseNoFile,url))?rewrittenUrl=appBase+hashPrefix+appUrl:appBaseNoFile===url+"/"&&(rewrittenUrl=appBaseNoFile),rewrittenUrl&&this.$$parse(rewrittenUrl),!!rewrittenUrl},this.$$compose=function(){var search=toKeyValue(this.$$search),hash=this.$$hash?"#"+encodeUriSegment(this.$$hash):"";this.$$url=encodePath(this.$$path)+(search?"?"+search:"")+hash,this.$$absUrl=appBase+hashPrefix+this.$$url,this.$$urlUpdatedByLocation=!0}}function locationGetter(property){return function(){return this[property]}}function locationGetterSetter(property,preprocess){return function(value){return isUndefined(value)?this[property]:(this[property]=preprocess(value),this.$$compose(),this)}}function $LocationProvider(){var hashPrefix="!",html5Mode={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(prefix){return isDefined(prefix)?(hashPrefix=prefix,this):hashPrefix},this.html5Mode=function(mode){return isBoolean(mode)?(html5Mode.enabled=mode,this):isObject(mode)?(isBoolean(mode.enabled)&&(html5Mode.enabled=mode.enabled),isBoolean(mode.requireBase)&&(html5Mode.requireBase=mode.requireBase),(isBoolean(mode.rewriteLinks)||isString(mode.rewriteLinks))&&(html5Mode.rewriteLinks=mode.rewriteLinks),this):html5Mode},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function($rootScope,$browser,$sniffer,$rootElement,$window){function setBrowserUrlWithFallback(url,replace,state){var oldUrl=$location.url(),oldState=$location.$$state;try{$browser.url(url,replace,state),$location.$$state=$browser.state()}catch(e){throw $location.url(oldUrl),$location.$$state=oldState,e}}function afterLocationChange(oldUrl,oldState){$rootScope.$broadcast("$locationChangeSuccess",$location.absUrl(),oldUrl,$location.$$state,oldState)}var $location,LocationMode,baseHref=$browser.baseHref(),initialUrl=$browser.url(),appBase;if(html5Mode.enabled){if(!baseHref&&html5Mode.requireBase)throw $locationMinErr("nobase","$location in HTML5 mode requires a tag to be present!");appBase=serverBase(initialUrl)+(baseHref||"/"),LocationMode=$sniffer.history?LocationHtml5Url:LocationHashbangInHtml5Url}else appBase=stripHash(initialUrl),LocationMode=LocationHashbangUrl;var appBaseNoFile=stripFile(appBase);$location=new LocationMode(appBase,appBaseNoFile,"#"+hashPrefix),$location.$$parseLinkUrl(initialUrl,initialUrl),$location.$$state=$browser.state();var IGNORE_URI_REGEXP=/^\s*(javascript|mailto):/i;$rootElement.on("click",function(event){var rewriteLinks=html5Mode.rewriteLinks;if(rewriteLinks&&!event.ctrlKey&&!event.metaKey&&!event.shiftKey&&2!==event.which&&2!==event.button){for(var elm=jqLite(event.target);"a"!==nodeName_(elm[0]);)if(elm[0]===$rootElement[0]||!(elm=elm.parent())[0])return;if(!isString(rewriteLinks)||!isUndefined(elm.attr(rewriteLinks))){var absHref=elm.prop("href"),relHref=elm.attr("href")||elm.attr("xlink:href");isObject(absHref)&&"[object SVGAnimatedString]"===absHref.toString()&&(absHref=urlResolve(absHref.animVal).href),IGNORE_URI_REGEXP.test(absHref)||!absHref||elm.attr("target")||event.isDefaultPrevented()||$location.$$parseLinkUrl(absHref,relHref)&&(event.preventDefault(),$location.absUrl()!==$browser.url()&&($rootScope.$apply(),$window.angular["ff-684208-preventDefault"]=!0))}}}),trimEmptyHash($location.absUrl())!==trimEmptyHash(initialUrl)&&$browser.url($location.absUrl(),!0);var initializing=!0;return $browser.onUrlChange(function(newUrl,newState){if(!startsWith(newUrl,appBaseNoFile))return void($window.location.href=newUrl);$rootScope.$evalAsync(function(){var oldUrl=$location.absUrl(),oldState=$location.$$state,defaultPrevented;newUrl=trimEmptyHash(newUrl),$location.$$parse(newUrl),$location.$$state=newState,defaultPrevented=$rootScope.$broadcast("$locationChangeStart",newUrl,oldUrl,newState,oldState).defaultPrevented,$location.absUrl()===newUrl&&(defaultPrevented?($location.$$parse(oldUrl),$location.$$state=oldState,setBrowserUrlWithFallback(oldUrl,!1,oldState)):(initializing=!1,afterLocationChange(oldUrl,oldState)))}),$rootScope.$$phase||$rootScope.$digest()}),$rootScope.$watch(function $locationWatch(){if(initializing||$location.$$urlUpdatedByLocation){$location.$$urlUpdatedByLocation=!1;var oldUrl=trimEmptyHash($browser.url()),newUrl=trimEmptyHash($location.absUrl()),oldState=$browser.state(),currentReplace=$location.$$replace,urlOrStateChanged=oldUrl!==newUrl||$location.$$html5&&$sniffer.history&&oldState!==$location.$$state;(initializing||urlOrStateChanged)&&(initializing=!1,$rootScope.$evalAsync(function(){var newUrl=$location.absUrl(),defaultPrevented=$rootScope.$broadcast("$locationChangeStart",newUrl,oldUrl,$location.$$state,oldState).defaultPrevented;$location.absUrl()===newUrl&&(defaultPrevented?($location.$$parse(oldUrl),$location.$$state=oldState):(urlOrStateChanged&&setBrowserUrlWithFallback(newUrl,currentReplace,oldState===$location.$$state?null:$location.$$state),afterLocationChange(oldUrl,oldState)))}))}$location.$$replace=!1}),$location}]}function $LogProvider(){var debug=!0,self=this;this.debugEnabled=function(flag){return isDefined(flag)?(debug=flag,this):debug},this.$get=["$window",function($window){function formatError(arg){return arg instanceof Error&&(arg.stack?arg=arg.message&&arg.stack.indexOf(arg.message)===-1?"Error: "+arg.message+"\n"+arg.stack:arg.stack:arg.sourceURL&&(arg=arg.message+"\n"+arg.sourceURL+":"+arg.line)),arg}function consoleLog(type){var console=$window.console||{},logFn=console[type]||console.log||noop,hasApply=!1;try{hasApply=!!logFn.apply}catch(e){}return hasApply?function(){var args=[];return forEach(arguments,function(arg){args.push(formatError(arg))}),logFn.apply(console,args)}:function(arg1,arg2){logFn(arg1,null==arg2?"":arg2)}}return{log:consoleLog("log"),info:consoleLog("info"),warn:consoleLog("warn"),error:consoleLog("error"),debug:function(){var fn=consoleLog("debug");return function(){debug&&fn.apply(self,arguments)}}()}}]}function getStringValue(name){return name+""}function ifDefined(v,d){return void 0!==v?v:d}function plusFn(l,r){return void 0===l?r:void 0===r?l:l+r}function isStateless($filter,filterName){return!$filter(filterName).$stateful}function findConstantAndWatchExpressions(ast,$filter){var allConstants,argsToWatch,isStatelessFilter;switch(ast.type){case AST.Program:allConstants=!0,forEach(ast.body,function(expr){findConstantAndWatchExpressions(expr.expression,$filter),allConstants=allConstants&&expr.expression.constant}),ast.constant=allConstants;break;case AST.Literal:ast.constant=!0,ast.toWatch=[];break;case AST.UnaryExpression:findConstantAndWatchExpressions(ast.argument,$filter),ast.constant=ast.argument.constant,ast.toWatch=ast.argument.toWatch;break;case AST.BinaryExpression:findConstantAndWatchExpressions(ast.left,$filter),findConstantAndWatchExpressions(ast.right,$filter),ast.constant=ast.left.constant&&ast.right.constant,ast.toWatch=ast.left.toWatch.concat(ast.right.toWatch);break;case AST.LogicalExpression:findConstantAndWatchExpressions(ast.left,$filter),findConstantAndWatchExpressions(ast.right,$filter),ast.constant=ast.left.constant&&ast.right.constant,ast.toWatch=ast.constant?[]:[ast];break;case AST.ConditionalExpression:findConstantAndWatchExpressions(ast.test,$filter),findConstantAndWatchExpressions(ast.alternate,$filter),findConstantAndWatchExpressions(ast.consequent,$filter),ast.constant=ast.test.constant&&ast.alternate.constant&&ast.consequent.constant,ast.toWatch=ast.constant?[]:[ast];break;case AST.Identifier:ast.constant=!1,ast.toWatch=[ast];break;case AST.MemberExpression:findConstantAndWatchExpressions(ast.object,$filter),ast.computed&&findConstantAndWatchExpressions(ast.property,$filter),ast.constant=ast.object.constant&&(!ast.computed||ast.property.constant),ast.toWatch=[ast];break;case AST.CallExpression:isStatelessFilter=!!ast.filter&&isStateless($filter,ast.callee.name),allConstants=isStatelessFilter,argsToWatch=[],forEach(ast.arguments,function(expr){findConstantAndWatchExpressions(expr,$filter),allConstants=allConstants&&expr.constant,expr.constant||argsToWatch.push.apply(argsToWatch,expr.toWatch)}),ast.constant=allConstants,ast.toWatch=isStatelessFilter?argsToWatch:[ast];break;case AST.AssignmentExpression:findConstantAndWatchExpressions(ast.left,$filter),findConstantAndWatchExpressions(ast.right,$filter),ast.constant=ast.left.constant&&ast.right.constant,ast.toWatch=[ast];break;case AST.ArrayExpression:allConstants=!0,argsToWatch=[],forEach(ast.elements,function(expr){findConstantAndWatchExpressions(expr,$filter),allConstants=allConstants&&expr.constant,expr.constant||argsToWatch.push.apply(argsToWatch,expr.toWatch)}),ast.constant=allConstants,ast.toWatch=argsToWatch;break;case AST.ObjectExpression:allConstants=!0,argsToWatch=[],forEach(ast.properties,function(property){findConstantAndWatchExpressions(property.value,$filter),allConstants=allConstants&&property.value.constant&&!property.computed,property.value.constant||argsToWatch.push.apply(argsToWatch,property.value.toWatch),property.computed&&(findConstantAndWatchExpressions(property.key,$filter),property.key.constant||argsToWatch.push.apply(argsToWatch,property.key.toWatch))}),ast.constant=allConstants,ast.toWatch=argsToWatch;break;case AST.ThisExpression:ast.constant=!1,ast.toWatch=[];break;case AST.LocalsExpression:ast.constant=!1,ast.toWatch=[]}}function getInputs(body){if(1===body.length){var lastExpression=body[0].expression,candidate=lastExpression.toWatch;return 1!==candidate.length?candidate:candidate[0]!==lastExpression?candidate:void 0}}function isAssignable(ast){return ast.type===AST.Identifier||ast.type===AST.MemberExpression}function assignableAST(ast){if(1===ast.body.length&&isAssignable(ast.body[0].expression))return{type:AST.AssignmentExpression,left:ast.body[0].expression,right:{type:AST.NGValueParameter},operator:"="}}function isLiteral(ast){return 0===ast.body.length||1===ast.body.length&&(ast.body[0].expression.type===AST.Literal||ast.body[0].expression.type===AST.ArrayExpression||ast.body[0].expression.type===AST.ObjectExpression)}function isConstant(ast){return ast.constant}function ASTCompiler(astBuilder,$filter){this.astBuilder=astBuilder,this.$filter=$filter}function ASTInterpreter(astBuilder,$filter){this.astBuilder=astBuilder,this.$filter=$filter}function getValueOf(value){return isFunction(value.valueOf)?value.valueOf():objectValueOf.call(value)}function $ParseProvider(){var cache=createMap(),literals={true:!0,false:!1,null:null,undefined:void 0},identStart,identContinue;this.addLiteral=function(literalName,literalValue){literals[literalName]=literalValue},this.setIdentifierFns=function(identifierStart,identifierContinue){return identStart=identifierStart,identContinue=identifierContinue,this},this.$get=["$filter",function($filter){function $parse(exp,interceptorFn){var parsedExpression,oneTime,cacheKey;switch(typeof exp){case"string":if(exp=exp.trim(),cacheKey=exp,!(parsedExpression=cache[cacheKey])){":"===exp.charAt(0)&&":"===exp.charAt(1)&&(oneTime=!0,exp=exp.substring(2));parsedExpression=new Parser(new Lexer($parseOptions),$filter,$parseOptions).parse(exp),parsedExpression.constant?parsedExpression.$$watchDelegate=constantWatchDelegate:oneTime?parsedExpression.$$watchDelegate=parsedExpression.literal?oneTimeLiteralWatchDelegate:oneTimeWatchDelegate:parsedExpression.inputs&&(parsedExpression.$$watchDelegate=inputsWatchDelegate),cache[cacheKey]=parsedExpression}return addInterceptor(parsedExpression,interceptorFn);case"function":return addInterceptor(exp,interceptorFn);default:return addInterceptor(noop,interceptorFn)}}function expressionInputDirtyCheck(newValue,oldValueOfValue,compareObjectIdentity){return null==newValue||null==oldValueOfValue?newValue===oldValueOfValue:!("object"==typeof newValue&&!compareObjectIdentity&&"object"==typeof(newValue=getValueOf(newValue)))&&(newValue===oldValueOfValue||newValue!==newValue&&oldValueOfValue!==oldValueOfValue)}function inputsWatchDelegate(scope,listener,objectEquality,parsedExpression,prettyPrintExpression){var inputExpressions=parsedExpression.inputs,lastResult;if(1===inputExpressions.length){var oldInputValueOf=expressionInputDirtyCheck;return inputExpressions=inputExpressions[0],scope.$watch(function expressionInputWatch(scope){var newInputValue=inputExpressions(scope);return expressionInputDirtyCheck(newInputValue,oldInputValueOf,parsedExpression.literal)||(lastResult=parsedExpression(scope,void 0,void 0,[newInputValue]),oldInputValueOf=newInputValue&&getValueOf(newInputValue)),lastResult},listener,objectEquality,prettyPrintExpression)}for(var oldInputValueOfValues=[],oldInputValues=[],i=0,ii=inputExpressions.length;i0&&scheduleProcessQueue(this.$$state),result},catch:function(callback){return this.then(null,callback)},finally:function(callback,progressBack){return this.then(function(value){return handleCallback(value,resolve,callback)},function(error){return handleCallback(error,reject,callback)},progressBack)}});var resolve=when;return $Q.prototype=Promise.prototype,$Q.defer=defer,$Q.reject=reject,$Q.when=when,$Q.resolve=resolve,$Q.all=all,$Q.race=race,$Q}function $$RAFProvider(){this.$get=["$window","$timeout",function($window,$timeout){var requestAnimationFrame=$window.requestAnimationFrame||$window.webkitRequestAnimationFrame,cancelAnimationFrame=$window.cancelAnimationFrame||$window.webkitCancelAnimationFrame||$window.webkitCancelRequestAnimationFrame,rafSupported=!!requestAnimationFrame,raf=rafSupported?function(fn){var id=requestAnimationFrame(fn);return function(){cancelAnimationFrame(id)}}:function(fn){var timer=$timeout(fn,16.66,!1);return function(){$timeout.cancel(timer)}};return raf.supported=rafSupported,raf}]}function $RootScopeProvider(){function createChildScopeClass(parent){function ChildScope(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$id=nextUid(),this.$$ChildScope=null}return ChildScope.prototype=parent,ChildScope}var TTL=10,$rootScopeMinErr=minErr("$rootScope"),lastDirtyWatch=null,applyAsyncId=null;this.digestTtl=function(value){return arguments.length&&(TTL=value),TTL},this.$get=["$exceptionHandler","$parse","$browser",function($exceptionHandler,$parse,$browser){function destroyChildScope($event){$event.currentScope.$$destroyed=!0}function cleanUpScope($scope){9===msie&&($scope.$$childHead&&cleanUpScope($scope.$$childHead),$scope.$$nextSibling&&cleanUpScope($scope.$$nextSibling)),$scope.$parent=$scope.$$nextSibling=$scope.$$prevSibling=$scope.$$childHead=$scope.$$childTail=$scope.$root=$scope.$$watchers=null}function Scope(){this.$id=nextUid(),this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null,this.$root=this,this.$$destroyed=!1,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$$isolateBindings=null}function beginPhase(phase){if($rootScope.$$phase)throw $rootScopeMinErr("inprog","{0} already in progress",$rootScope.$$phase);$rootScope.$$phase=phase}function clearPhase(){$rootScope.$$phase=null}function incrementWatchersCount(current,count){do current.$$watchersCount+=count;while(current=current.$parent)}function decrementListenerCount(current,count,name){do current.$$listenerCount[name]-=count,0===current.$$listenerCount[name]&&delete current.$$listenerCount[name];while(current=current.$parent)}function initWatchVal(){}function flushApplyAsync(){for(;applyAsyncQueue.length;)try{applyAsyncQueue.shift()()}catch(e){$exceptionHandler(e)}applyAsyncId=null}function scheduleApplyAsync(){null===applyAsyncId&&(applyAsyncId=$browser.defer(function(){$rootScope.$apply(flushApplyAsync)}))}Scope.prototype={constructor:Scope,$new:function(isolate,parent){var child;return parent=parent||this,isolate?(child=new Scope,child.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=createChildScopeClass(this)),child=new this.$$ChildScope),child.$parent=parent,child.$$prevSibling=parent.$$childTail,parent.$$childHead?(parent.$$childTail.$$nextSibling=child,parent.$$childTail=child):parent.$$childHead=parent.$$childTail=child,(isolate||parent!==this)&&child.$on("$destroy",destroyChildScope),child},$watch:function(watchExp,listener,objectEquality,prettyPrintExpression){var get=$parse(watchExp);if(get.$$watchDelegate)return get.$$watchDelegate(this,listener,objectEquality,get,watchExp);var scope=this,array=scope.$$watchers,watcher={fn:listener,last:initWatchVal,get:get,exp:prettyPrintExpression||watchExp,eq:!!objectEquality};return lastDirtyWatch=null,isFunction(listener)||(watcher.fn=noop),array||(array=scope.$$watchers=[],array.$$digestWatchIndex=-1),array.unshift(watcher),array.$$digestWatchIndex++,incrementWatchersCount(this,1),function deregisterWatch(){var index=arrayRemove(array,watcher);index>=0&&(incrementWatchersCount(scope,-1),indexnewLength){changeDetected++;for(key in oldValue)hasOwnProperty.call(newValue,key)||(oldLength--,delete oldValue[key])}}else oldValue!==newValue&&(oldValue=newValue,changeDetected++);return changeDetected}}function $watchCollectionAction(){if(initRun?(initRun=!1,listener(newValue,newValue,self)):listener(newValue,veryOldValue,self),trackVeryOldValue)if(isObject(newValue))if(isArrayLike(newValue)){veryOldValue=new Array(newValue.length);for(var i=0;i1,changeDetected=0,changeDetector=$parse(obj,$watchCollectionInterceptor),internalArray=[],internalObject={},initRun=!0,oldLength=0;return this.$watch(changeDetector,$watchCollectionAction)},$digest:function(){var watch,value,last,fn,get,watchers,dirty,ttl=TTL,next,current,target=this,watchLog=[],logIdx,asyncTask;beginPhase("$digest"),$browser.$$checkUrlChange(),this===$rootScope&&null!==applyAsyncId&&($browser.defer.cancel(applyAsyncId),flushApplyAsync()),lastDirtyWatch=null;do{dirty=!1,current=target;for(var asyncQueuePosition=0;asyncQueuePosition-1)throw $sceMinErr("iwcard","Illegal sequence *** in string matcher. String: {0}",matcher);return matcher=escapeForRegexp(matcher).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*"),new RegExp("^"+matcher+"$")}if(isRegExp(matcher))return new RegExp("^"+matcher.source+"$");throw $sceMinErr("imatcher",'Matchers may only be "self", string patterns or RegExp objects')}function adjustMatchers(matchers){var adjustedMatchers=[];return isDefined(matchers)&&forEach(matchers,function(matcher){adjustedMatchers.push(adjustMatcher(matcher))}),adjustedMatchers}function $SceDelegateProvider(){this.SCE_CONTEXTS=SCE_CONTEXTS;var resourceUrlWhitelist=["self"],resourceUrlBlacklist=[];this.resourceUrlWhitelist=function(value){return arguments.length&&(resourceUrlWhitelist=adjustMatchers(value)),resourceUrlWhitelist},this.resourceUrlBlacklist=function(value){return arguments.length&&(resourceUrlBlacklist=adjustMatchers(value)),resourceUrlBlacklist},this.$get=["$injector",function($injector){function matchUrl(matcher,parsedUrl){return"self"===matcher?urlIsSameOrigin(parsedUrl):!!matcher.exec(parsedUrl.href)}function isResourceUrlAllowedByPolicy(url){var parsedUrl=urlResolve(url.toString()),i,n,allowed=!1;for(i=0,n=resourceUrlWhitelist.length;i to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.");var sce=shallowCopy(SCE_CONTEXTS);sce.isEnabled=function(){return enabled},sce.trustAs=$sceDelegate.trustAs,sce.getTrusted=$sceDelegate.getTrusted,sce.valueOf=$sceDelegate.valueOf,enabled||(sce.trustAs=sce.getTrusted=function(type,value){return value},sce.valueOf=identity),sce.parseAs=function sceParseAs(type,expr){var parsed=$parse(expr);return parsed.literal&&parsed.constant?parsed:$parse(expr,function(value){return sce.getTrusted(type,value)})};var parse=sce.parseAs,getTrusted=sce.getTrusted,trustAs=sce.trustAs;return forEach(SCE_CONTEXTS,function(enumValue,name){var lName=lowercase(name);sce[snakeToCamel("parse_as_"+lName)]=function(expr){return parse(enumValue,expr)},sce[snakeToCamel("get_trusted_"+lName)]=function(value){return getTrusted(enumValue,value)},sce[snakeToCamel("trust_as_"+lName)]=function(value){return trustAs(enumValue,value)}}),sce}]}function $SnifferProvider(){this.$get=["$window","$document",function($window,$document){var eventSupport={},isNw=$window.nw&&$window.nw.process,isChromePackagedApp=!isNw&&$window.chrome&&($window.chrome.app&&$window.chrome.app.runtime||!$window.chrome.app&&$window.chrome.runtime&&$window.chrome.runtime.id),hasHistoryPushState=!isChromePackagedApp&&$window.history&&$window.history.pushState,android=toInt((/android (\d+)/.exec(lowercase(($window.navigator||{}).userAgent))||[])[1]),boxee=/Boxee/i.test(($window.navigator||{}).userAgent),document=$document[0]||{},bodyStyle=document.body&&document.body.style,transitions=!1,animations=!1;return bodyStyle&&(transitions=!!("transition"in bodyStyle||"webkitTransition"in bodyStyle),animations=!!("animation"in bodyStyle||"webkitAnimation"in bodyStyle)),{history:!(!hasHistoryPushState||android<4||boxee),hasEvent:function(event){if("input"===event&&msie)return!1;if(isUndefined(eventSupport[event])){var divElm=document.createElement("div");eventSupport[event]="on"+event in divElm}return eventSupport[event]},csp:csp(),transitions:transitions,animations:animations,android:android}}]}function $TemplateRequestProvider(){var httpOptions;this.httpOptions=function(val){return val?(httpOptions=val,this):httpOptions},this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function($exceptionHandler,$templateCache,$http,$q,$sce){function handleRequestFn(tpl,ignoreRequestError){function handleError(resp){return ignoreRequestError||(resp=$templateRequestMinErr("tpload","Failed to load template: {0} (HTTP status: {1} {2})",tpl,resp.status,resp.statusText),$exceptionHandler(resp)),$q.reject(resp)}handleRequestFn.totalPendingRequests++,isString(tpl)&&!isUndefined($templateCache.get(tpl))||(tpl=$sce.getTrustedResourceUrl(tpl));var transformResponse=$http.defaults&&$http.defaults.transformResponse;return isArray(transformResponse)?transformResponse=transformResponse.filter(function(transformer){return transformer!==defaultHttpResponseTransform}):transformResponse===defaultHttpResponseTransform&&(transformResponse=null),$http.get(tpl,extend({cache:$templateCache,transformResponse:transformResponse},httpOptions)).finally(function(){handleRequestFn.totalPendingRequests--}).then(function(response){return $templateCache.put(tpl,response.data),response.data},handleError)}return handleRequestFn.totalPendingRequests=0,handleRequestFn}]}function $$TestabilityProvider(){this.$get=["$rootScope","$browser","$location",function($rootScope,$browser,$location){var testability={};return testability.findBindings=function(element,expression,opt_exactMatch){var bindings=element.getElementsByClassName("ng-binding"),matches=[];return forEach(bindings,function(binding){var dataBinding=angular.element(binding).data("$binding");dataBinding&&forEach(dataBinding,function(bindingName){if(opt_exactMatch){new RegExp("(^|\\s)"+escapeForRegexp(expression)+"(\\s|\\||$)").test(bindingName)&&matches.push(binding)}else bindingName.indexOf(expression)!==-1&&matches.push(binding)})}),matches},testability.findModels=function(element,expression,opt_exactMatch){for(var prefixes=["ng-","data-ng-","ng\\:"],p=0;p0&&(name=safeDecodeURIComponent(cookie.substring(0,index)),isUndefined(lastCookies[name])&&(lastCookies[name]=safeDecodeURIComponent(cookie.substring(index+1))));return lastCookies}}function $$CookieReaderProvider(){this.$get=$$CookieReader}function $FilterProvider($provide){function register(name,factory){if(isObject(name)){var filters={};return forEach(name,function(filter,key){filters[key]=register(key,filter)}),filters}return $provide.factory(name+suffix,factory)}var suffix="Filter";this.register=register,this.$get=["$injector",function($injector){return function(name){return $injector.get(name+suffix)}}],register("currency",currencyFilter),register("date",dateFilter),register("filter",filterFilter),register("json",jsonFilter),register("limitTo",limitToFilter),register("lowercase",lowercaseFilter),register("number",numberFilter),register("orderBy",orderByFilter),register("uppercase",uppercaseFilter)}function filterFilter(){return function(array,expression,comparator,anyPropertyKey){if(!isArrayLike(array)){if(null==array)return array;throw minErr("filter")("notarray","Expected array but received: {0}",array)}anyPropertyKey=anyPropertyKey||"$";var expressionType=getTypeForFilter(expression),predicateFn,matchAgainstAnyProp;switch(expressionType){case"function":predicateFn=expression;break;case"boolean":case"null":case"number":case"string":matchAgainstAnyProp=!0;case"object":predicateFn=createPredicateFn(expression,comparator,anyPropertyKey,matchAgainstAnyProp);break;default:return array}return Array.prototype.filter.call(array,predicateFn)}}function createPredicateFn(expression,comparator,anyPropertyKey,matchAgainstAnyProp){var shouldMatchPrimitives=isObject(expression)&&anyPropertyKey in expression,predicateFn;return comparator===!0?comparator=equals:isFunction(comparator)||(comparator=function(actual,expected){return!isUndefined(actual)&&(null===actual||null===expected?actual===expected:!(isObject(expected)||isObject(actual)&&!hasCustomToString(actual))&&(actual=lowercase(""+actual),expected=lowercase(""+expected),actual.indexOf(expected)!==-1))}),predicateFn=function(item){return shouldMatchPrimitives&&!isObject(item)?deepCompare(item,expression[anyPropertyKey],comparator,anyPropertyKey,!1):deepCompare(item,expression,comparator,anyPropertyKey,matchAgainstAnyProp)}}function deepCompare(actual,expected,comparator,anyPropertyKey,matchAgainstAnyProp,dontMatchWholeObject){var actualType=getTypeForFilter(actual),expectedType=getTypeForFilter(expected);if("string"===expectedType&&"!"===expected.charAt(0))return!deepCompare(actual,expected.substring(1),comparator,anyPropertyKey,matchAgainstAnyProp);if(isArray(actual))return actual.some(function(item){return deepCompare(item,expected,comparator,anyPropertyKey,matchAgainstAnyProp)});switch(actualType){case"object":var key;if(matchAgainstAnyProp){for(key in actual)if("$"!==key.charAt(0)&&deepCompare(actual[key],expected,comparator,anyPropertyKey,!0))return!0;return!dontMatchWholeObject&&deepCompare(actual,expected,comparator,anyPropertyKey,!1)}if("object"===expectedType){for(key in expected){var expectedVal=expected[key];if(!isFunction(expectedVal)&&!isUndefined(expectedVal)){var matchAnyProperty=key===anyPropertyKey;if(!deepCompare(matchAnyProperty?actual:actual[key],expectedVal,comparator,anyPropertyKey,matchAnyProperty,matchAnyProperty))return!1}}return!0}return comparator(actual,expected);case"function":return!1;default:return comparator(actual,expected)}}function getTypeForFilter(val){return null===val?"null":typeof val}function currencyFilter($locale){var formats=$locale.NUMBER_FORMATS;return function(amount,currencySymbol,fractionSize){return isUndefined(currencySymbol)&&(currencySymbol=formats.CURRENCY_SYM),isUndefined(fractionSize)&&(fractionSize=formats.PATTERNS[1].maxFrac),null==amount?amount:formatNumber(amount,formats.PATTERNS[1],formats.GROUP_SEP,formats.DECIMAL_SEP,fractionSize).replace(/\u00A4/g,currencySymbol)}}function numberFilter($locale){var formats=$locale.NUMBER_FORMATS;return function(number,fractionSize){return null==number?number:formatNumber(number,formats.PATTERNS[0],formats.GROUP_SEP,formats.DECIMAL_SEP,fractionSize)}}function parse(numStr){var exponent=0,digits,numberOfIntegerDigits,i,j,zeros;for((numberOfIntegerDigits=numStr.indexOf(DECIMAL_SEP))>-1&&(numStr=numStr.replace(DECIMAL_SEP,"")),(i=numStr.search(/e/i))>0?(numberOfIntegerDigits<0&&(numberOfIntegerDigits=i),numberOfIntegerDigits+=+numStr.slice(i+1),numStr=numStr.substring(0,i)):numberOfIntegerDigits<0&&(numberOfIntegerDigits=numStr.length),i=0;numStr.charAt(i)===ZERO_CHAR;i++);if(i===(zeros=numStr.length))digits=[0],numberOfIntegerDigits=1;else{for(zeros--;numStr.charAt(zeros)===ZERO_CHAR;)zeros--;for(numberOfIntegerDigits-=i,digits=[],j=0;i<=zeros;i++,j++)digits[j]=+numStr.charAt(i)}return numberOfIntegerDigits>MAX_DIGITS&&(digits=digits.splice(0,MAX_DIGITS-1),exponent=numberOfIntegerDigits-1,numberOfIntegerDigits=1),{d:digits,e:exponent,i:numberOfIntegerDigits}}function roundNumber(parsedNumber,fractionSize,minFrac,maxFrac){var digits=parsedNumber.d,fractionLen=digits.length-parsedNumber.i;fractionSize=isUndefined(fractionSize)?Math.min(Math.max(minFrac,fractionLen),maxFrac):+fractionSize;var roundAt=fractionSize+parsedNumber.i,digit=digits[roundAt];if(roundAt>0){digits.splice(Math.max(parsedNumber.i,roundAt));for(var j=roundAt;j=5)if(roundAt-1<0){for(var k=0;k>roundAt;k--)digits.unshift(0),parsedNumber.i++;digits.unshift(1),parsedNumber.i++}else digits[roundAt-1]++;for(;fractionLen0?decimals=digits.splice(integerLen,digits.length):(decimals=digits,digits=[0]);var groups=[];for(digits.length>=pattern.lgSize&&groups.unshift(digits.splice(-pattern.lgSize,digits.length).join(""));digits.length>pattern.gSize;)groups.unshift(digits.splice(-pattern.gSize,digits.length).join(""));digits.length&&groups.unshift(digits.join("")),formattedText=groups.join(groupSep),decimals.length&&(formattedText+=decimalSep+decimals.join("")),exponent&&(formattedText+="e+"+exponent)}return number<0&&!isZero?pattern.negPre+formattedText+pattern.negSuf:pattern.posPre+formattedText+pattern.posSuf}function padNumber(num,digits,trim,negWrap){var neg="";for((num<0||negWrap&&num<=0)&&(negWrap?num=1-num:(num=-num,neg="-")),num=""+num;num.length0||value>-offset)&&(value+=offset),0===value&&offset===-12&&(value=12),padNumber(value,size,trim,negWrap)}}function dateStrGetter(name,shortForm,standAlone){return function(date,formats){var value=date["get"+name]();return formats[uppercase((standAlone?"STANDALONE":"")+(shortForm?"SHORT":"")+name)][value]}}function timeZoneGetter(date,formats,offset){var zone=-1*offset,paddedZone=zone>=0?"+":"";return paddedZone+=padNumber(Math[zone>0?"floor":"ceil"](zone/60),2)+padNumber(Math.abs(zone%60),2)}function getFirstThursdayOfYear(year){var dayOfWeekOnFirst=new Date(year,0,1).getDay();return new Date(year,0,(dayOfWeekOnFirst<=4?5:12)-dayOfWeekOnFirst)}function getThursdayThisWeek(datetime){return new Date(datetime.getFullYear(),datetime.getMonth(),datetime.getDate()+(4-datetime.getDay()))}function weekGetter(size){return function(date){var firstThurs=getFirstThursdayOfYear(date.getFullYear()),thisThurs=getThursdayThisWeek(date),diff=+thisThurs-+firstThurs;return padNumber(1+Math.round(diff/6048e5),size)}}function ampmGetter(date,formats){return date.getHours()<12?formats.AMPMS[0]:formats.AMPMS[1]}function eraGetter(date,formats){return date.getFullYear()<=0?formats.ERAS[0]:formats.ERAS[1]}function longEraGetter(date,formats){return date.getFullYear()<=0?formats.ERANAMES[0]:formats.ERANAMES[1]}function dateFilter($locale){function jsonStringToDate(string){var match;if(match=string.match(R_ISO8601_STR)){var date=new Date(0),tzHour=0,tzMin=0,dateSetter=match[8]?date.setUTCFullYear:date.setFullYear,timeSetter=match[8]?date.setUTCHours:date.setHours;match[9]&&(tzHour=toInt(match[9]+match[10]),tzMin=toInt(match[9]+match[11])),dateSetter.call(date,toInt(match[1]),toInt(match[2])-1,toInt(match[3]));var h=toInt(match[4]||0)-tzHour,m=toInt(match[5]||0)-tzMin,s=toInt(match[6]||0),ms=Math.round(1e3*parseFloat("0."+(match[7]||0)));return timeSetter.call(date,h,m,s,ms),date}return string}var R_ISO8601_STR=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(date,format,timezone){var text="",parts=[],fn,match;if(format=format||"mediumDate",format=$locale.DATETIME_FORMATS[format]||format,isString(date)&&(date=NUMBER_STRING.test(date)?toInt(date):jsonStringToDate(date)),isNumber(date)&&(date=new Date(date)),!isDate(date)||!isFinite(date.getTime()))return date;for(;format;)match=DATE_FORMATS_SPLIT.exec(format),match?(parts=concat(parts,match,1),format=parts.pop()):(parts.push(format),format=null);var dateTimezoneOffset=date.getTimezoneOffset();return timezone&&(dateTimezoneOffset=timezoneToOffset(timezone,dateTimezoneOffset),date=convertTimezoneToLocal(date,timezone,!0)),forEach(parts,function(value){fn=DATE_FORMATS[value],text+=fn?fn(date,$locale.DATETIME_FORMATS,dateTimezoneOffset):"''"===value?"'":value.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),text}}function jsonFilter(){return function(object,spacing){return isUndefined(spacing)&&(spacing=2),toJson(object,spacing)}}function limitToFilter(){return function(input,limit,begin){return limit=Math.abs(Number(limit))===1/0?Number(limit):toInt(limit),isNumberNaN(limit)?input:(isNumber(input)&&(input=input.toString()),isArrayLike(input)?(begin=!begin||isNaN(begin)?0:toInt(begin),begin=begin<0?Math.max(0,input.length+begin):begin,limit>=0?sliceFn(input,begin,begin+limit):0===begin?sliceFn(input,limit,input.length):sliceFn(input,Math.max(0,begin+limit),begin)):input)}}function sliceFn(input,begin,end){return isString(input)?input.slice(begin,end):slice.call(input,begin,end)}function orderByFilter($parse){function processPredicates(sortPredicates){return sortPredicates.map(function(predicate){var descending=1,get=identity;if(isFunction(predicate))get=predicate;else if(isString(predicate)&&("+"!==predicate.charAt(0)&&"-"!==predicate.charAt(0)||(descending="-"===predicate.charAt(0)?-1:1,predicate=predicate.substring(1)),""!==predicate&&(get=$parse(predicate),get.constant))){var key=get();get=function(value){return value[key]}}return{get:get,descending:descending}})}function isPrimitive(value){switch(typeof value){case"number":case"boolean":case"string":return!0;default:return!1}}function objectValue(value){return isFunction(value.valueOf)&&(value=value.valueOf(),isPrimitive(value))?value:(hasCustomToString(value)&&(value=value.toString(),isPrimitive(value)),value)}function getPredicateValue(value,index){var type=typeof value;return null===value?(type="string",value="null"):"object"===type&&(value=objectValue(value)),{value:value,type:type,index:index}}function defaultCompare(v1,v2){var result=0,type1=v1.type,type2=v2.type;if(type1===type2){var value1=v1.value,value2=v2.value;"string"===type1?(value1=value1.toLowerCase(),value2=value2.toLowerCase()):"object"===type1&&(isObject(value1)&&(value1=v1.index),isObject(value2)&&(value2=v2.index)),value1!==value2&&(result=value1=minVal},attr.$observe("min",function(val){minVal=parseObservedDateValue(val),ctrl.$validate()})}if(isDefined(attr.max)||attr.ngMax){var maxVal;ctrl.$validators.max=function(value){return!isValidDate(value)||isUndefined(maxVal)||parseDate(value)<=maxVal},attr.$observe("max",function(val){maxVal=parseObservedDateValue(val),ctrl.$validate()})}}}function badInputChecker(scope,element,attr,ctrl){var node=element[0];(ctrl.$$hasNativeValidators=isObject(node.validity))&&ctrl.$parsers.push(function(value){var validity=element.prop(VALIDITY_STATE_PROPERTY)||{};return validity.badInput||validity.typeMismatch?void 0:value})}function numberFormatterParser(ctrl){ctrl.$$parserName="number",ctrl.$parsers.push(function(value){return ctrl.$isEmpty(value)?null:NUMBER_REGEXP.test(value)?parseFloat(value):void 0}),ctrl.$formatters.push(function(value){if(!ctrl.$isEmpty(value)){if(!isNumber(value))throw ngModelMinErr("numfmt","Expected `{0}` to be a number",value);value=value.toString()}return value})}function parseNumberAttrVal(val){return isDefined(val)&&!isNumber(val)&&(val=parseFloat(val)),isNumberNaN(val)?void 0:val}function isNumberInteger(num){return(0|num)===num}function countDecimals(num){var numString=num.toString(),decimalSymbolIndex=numString.indexOf(".");if(decimalSymbolIndex===-1){if(-1=minVal},attr.$observe("min",function(val){minVal=parseNumberAttrVal(val),ctrl.$validate()})),(isDefined(attr.max)||attr.ngMax)&&(ctrl.$validators.max=function(value){return ctrl.$isEmpty(value)||isUndefined(maxVal)||value<=maxVal},attr.$observe("max",function(val){maxVal=parseNumberAttrVal(val),ctrl.$validate()})),isDefined(attr.step)||attr.ngStep){var stepVal;ctrl.$validators.step=function(modelValue,viewValue){return ctrl.$isEmpty(viewValue)||isUndefined(stepVal)||isValidForStep(viewValue,minVal||0,stepVal)},attr.$observe("step",function(val){stepVal=parseNumberAttrVal(val),ctrl.$validate()})}}function rangeInputType(scope,element,attr,ctrl,$sniffer,$browser){function setInitialValueAndObserver(htmlAttrName,changeFn){element.attr(htmlAttrName,attr[htmlAttrName]),attr.$observe(htmlAttrName,changeFn)}function minChange(val){if(minVal=parseNumberAttrVal(val),!isNumberNaN(ctrl.$modelValue))if(supportsRange){var elVal=element.val();minVal>elVal&&(elVal=minVal,element.val(elVal)),ctrl.$setViewValue(elVal)}else ctrl.$validate()}function maxChange(val){if(maxVal=parseNumberAttrVal(val),!isNumberNaN(ctrl.$modelValue))if(supportsRange){var elVal=element.val();maxVal=minVal},setInitialValueAndObserver("min",minChange)),hasMaxAttr&&(ctrl.$validators.max=supportsRange?function noopMaxValidator(){return!0}:function maxValidator(modelValue,viewValue){return ctrl.$isEmpty(viewValue)||isUndefined(maxVal)||viewValue<=maxVal},setInitialValueAndObserver("max",maxChange)),hasStepAttr&&(ctrl.$validators.step=supportsRange?function nativeStepValidator(){return!validity.stepMismatch}:function stepValidator(modelValue,viewValue){return ctrl.$isEmpty(viewValue)||isUndefined(stepVal)||isValidForStep(viewValue,minVal||0,stepVal)},setInitialValueAndObserver("step",stepChange))}function urlInputType(scope,element,attr,ctrl,$sniffer,$browser){baseInputType(scope,element,attr,ctrl,$sniffer,$browser),stringBasedInputType(ctrl),ctrl.$$parserName="url",ctrl.$validators.url=function(modelValue,viewValue){var value=modelValue||viewValue;return ctrl.$isEmpty(value)||URL_REGEXP.test(value)}}function emailInputType(scope,element,attr,ctrl,$sniffer,$browser){baseInputType(scope,element,attr,ctrl,$sniffer,$browser),stringBasedInputType(ctrl),ctrl.$$parserName="email",ctrl.$validators.email=function(modelValue,viewValue){var value=modelValue||viewValue;return ctrl.$isEmpty(value)||EMAIL_REGEXP.test(value)}}function radioInputType(scope,element,attr,ctrl){var doTrim=!attr.ngTrim||"false"!==trim(attr.ngTrim);isUndefined(attr.name)&&element.attr("name",nextUid());var listener=function(ev){var value;element[0].checked&&(value=attr.value,doTrim&&(value=trim(value)),ctrl.$setViewValue(value,ev&&ev.type))};element.on("click",listener),ctrl.$render=function(){var value=attr.value;doTrim&&(value=trim(value)),element[0].checked=value===ctrl.$viewValue},attr.$observe("value",ctrl.$render)}function parseConstantExpr($parse,context,name,expression,fallback){var parseFn;if(isDefined(expression)){if(parseFn=$parse(expression),!parseFn.constant)throw ngModelMinErr("constexpr","Expected constant expression for `{0}`, but saw `{1}`.",name,expression);return parseFn(context)}return fallback}function checkboxInputType(scope,element,attr,ctrl,$sniffer,$browser,$filter,$parse){var trueValue=parseConstantExpr($parse,scope,"ngTrueValue",attr.ngTrueValue,!0),falseValue=parseConstantExpr($parse,scope,"ngFalseValue",attr.ngFalseValue,!1),listener=function(ev){ctrl.$setViewValue(element[0].checked,ev&&ev.type)};element.on("click",listener),ctrl.$render=function(){element[0].checked=ctrl.$viewValue},ctrl.$isEmpty=function(value){return value===!1},ctrl.$formatters.push(function(value){return equals(value,trueValue)}),ctrl.$parsers.push(function(value){return value?trueValue:falseValue})}function classDirective(name,selector){function arrayDifference(tokens1,tokens2){if(!tokens1||!tokens1.length)return[];if(!tokens2||!tokens2.length)return tokens1;var values=[];outer:for(var i=0;i0||classCounts[className])&&(classCounts[className]=(classCounts[className]||0)+count,classCounts[className]===+(count>0)&&classesToUpdate.push(className))}),classesToUpdate.join(" ")}function ngClassIndexWatchAction(newModulo){newModulo===selector?addClasses(oldClassString):removeClasses(oldClassString),oldModulo=newModulo}function ngClassOneTimeWatchAction(newClassValue){var newClassString=toClassString(newClassValue);newClassString!==oldClassString&&ngClassWatchAction(newClassString)}function ngClassWatchAction(newClassString){oldModulo===selector&&updateClasses(oldClassString,newClassString),oldClassString=newClassString}var expression=attr[name].trim(),isOneTime=":"===expression.charAt(0)&&":"===expression.charAt(1),watchInterceptor=isOneTime?toFlatValue:toClassString,watchExpression=$parse(expression,watchInterceptor),watchAction=isOneTime?ngClassOneTimeWatchAction:ngClassWatchAction,classCounts=element.data("$classCounts"),oldModulo=!0,oldClassString;classCounts||(classCounts=createMap(),element.data("$classCounts",classCounts)),"ngClass"!==name&&(indexWatchExpression||(indexWatchExpression=$parse("$index",function moduloTwo($index){return 1&$index})),scope.$watch(indexWatchExpression,ngClassIndexWatchAction)),scope.$watch(watchExpression,watchAction,isOneTime)}}}]}function NgModelController($scope,$exceptionHandler,$attr,$element,$parse,$animate,$timeout,$q,$interpolate){this.$viewValue=Number.NaN,this.$modelValue=Number.NaN,this.$$rawModelValue=void 0,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$$success={},this.$pending=void 0,this.$name=$interpolate($attr.name||"",!1)($scope),this.$$parentForm=nullFormCtrl,this.$options=defaultModelOptions,this.$$parsedNgModel=$parse($attr.ngModel),this.$$parsedNgModelAssign=this.$$parsedNgModel.assign,this.$$ngModelGet=this.$$parsedNgModel,this.$$ngModelSet=this.$$parsedNgModelAssign,this.$$pendingDebounce=null,this.$$parserValid=void 0,this.$$currentValidationRunId=0,this.$$scope=$scope,this.$$attr=$attr,this.$$element=$element,this.$$animate=$animate,this.$$timeout=$timeout,this.$$parse=$parse,this.$$q=$q,this.$$exceptionHandler=$exceptionHandler,setupValidity(this),setupModelWatcher(this)}function setupModelWatcher(ctrl){ctrl.$$scope.$watch(function ngModelWatch(){var modelValue=ctrl.$$ngModelGet(ctrl.$$scope);if(modelValue!==ctrl.$modelValue&&(ctrl.$modelValue===ctrl.$modelValue||modelValue===modelValue)){ctrl.$modelValue=ctrl.$$rawModelValue=modelValue,ctrl.$$parserValid=void 0;for(var formatters=ctrl.$formatters,idx=formatters.length,viewValue=modelValue;idx--;)viewValue=formatters[idx](viewValue);ctrl.$viewValue!==viewValue&&(ctrl.$$updateEmptyClasses(viewValue),ctrl.$viewValue=ctrl.$$lastCommittedViewValue=viewValue,ctrl.$render(),ctrl.$$runValidators(ctrl.$modelValue,ctrl.$viewValue,noop))}return modelValue})}function ModelOptions(options){this.$$options=options}function defaults(dst,src){forEach(src,function(value,key){isDefined(dst[key])||(dst[key]=value)})}var REGEX_STRING_REGEXP=/^\/(.+)\/([a-z]*)$/,VALIDITY_STATE_PROPERTY="validity",hasOwnProperty=Object.prototype.hasOwnProperty,lowercase=function(string){return isString(string)?string.toLowerCase():string},uppercase=function(string){return isString(string)?string.toUpperCase():string},manualLowercase=function(s){return isString(s)?s.replace(/[A-Z]/g,function(ch){return String.fromCharCode(32|ch.charCodeAt(0))}):s},manualUppercase=function(s){return isString(s)?s.replace(/[a-z]/g,function(ch){return String.fromCharCode(ch.charCodeAt(0)&-33)}):s};"i"!=="I".toLowerCase()&&(lowercase=manualLowercase,uppercase=manualUppercase);var msie,jqLite,jQuery,slice=[].slice,splice=[].splice,push=[].push,toString=Object.prototype.toString,getPrototypeOf=Object.getPrototypeOf,ngMinErr=minErr("ng"),angular=window.angular||(window.angular={}),angularModule,uid=0;msie=window.document.documentMode;var isNumberNaN=Number.isNaN||function isNumberNaN(num){return num!==num};noop.$inject=[],identity.$inject=[];var isArray=Array.isArray,TYPED_ARRAY_REGEXP=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,trim=function(value){return isString(value)?value.trim():value},escapeForRegexp=function(s){return s.replace(/([-()[\]{}+?*.$^|,:#(?:<\/\1>|)$/,HTML_REGEXP=/<|&#?\w+;/,TAG_NAME_REGEXP=/<([\w:-]+)/,XHTML_TAG_REGEXP=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wrapMap={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};wrapMap.optgroup=wrapMap.option,wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead,wrapMap.th=wrapMap.td;var jqLiteContains=window.Node.prototype.contains||function(arg){return!!(16&this.compareDocumentPosition(arg))},JQLitePrototype=JQLite.prototype={ready:jqLiteReady,toString:function(){var value=[];return forEach(this,function(e){value.push(""+e)}),"["+value.join(", ")+"]"},eq:function(index){return jqLite(index>=0?this[index]:this[this.length+index])},length:0,push:push,sort:[].sort,splice:[].splice},BOOLEAN_ATTR={};forEach("multiple,selected,checked,disabled,readOnly,required,open".split(","),function(value){BOOLEAN_ATTR[lowercase(value)]=value});var BOOLEAN_ELEMENTS={};forEach("input,select,option,textarea,button,form,details".split(","),function(value){BOOLEAN_ELEMENTS[value]=!0});var ALIASED_ATTR={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};forEach({data:jqLiteData,removeData:jqLiteRemoveData,hasData:jqLiteHasData,cleanData:jqLiteCleanData},function(fn,name){JQLite[name]=fn}),forEach({data:jqLiteData,inheritedData:jqLiteInheritedData,scope:function(element){return jqLite.data(element,"$scope")||jqLiteInheritedData(element.parentNode||element,["$isolateScope","$scope"])},isolateScope:function(element){return jqLite.data(element,"$isolateScope")||jqLite.data(element,"$isolateScopeNoTemplate")},controller:jqLiteController,injector:function(element){return jqLiteInheritedData(element,"$injector")},removeAttr:function(element,name){element.removeAttribute(name)},hasClass:jqLiteHasClass,css:function(element,name,value){if(name=cssKebabToCamel(name),!isDefined(value))return element.style[name];element.style[name]=value},attr:function(element,name,value){var ret,nodeType=element.nodeType;if(nodeType!==NODE_TYPE_TEXT&&nodeType!==NODE_TYPE_ATTRIBUTE&&nodeType!==NODE_TYPE_COMMENT&&element.getAttribute){var lowercasedName=lowercase(name),isBooleanAttr=BOOLEAN_ATTR[lowercasedName];if(!isDefined(value))return ret=element.getAttribute(name),isBooleanAttr&&null!==ret&&(ret=lowercasedName),null===ret?void 0:ret;null===value||value===!1&&isBooleanAttr?element.removeAttribute(name):element.setAttribute(name,isBooleanAttr?lowercasedName:value)}},prop:function(element,name,value){if(!isDefined(value))return element[name];element[name]=value},text:function(){function getText(element,value){if(isUndefined(value)){var nodeType=element.nodeType;return nodeType===NODE_TYPE_ELEMENT||nodeType===NODE_TYPE_TEXT?element.textContent:""}element.textContent=value}return getText.$dv="",getText}(),val:function(element,value){if(isUndefined(value)){if(element.multiple&&"select"===nodeName_(element)){var result=[];return forEach(element.options,function(option){option.selected&&result.push(option.value||option.text)}),result}return element.value}element.value=value},html:function(element,value){if(isUndefined(value))return element.innerHTML;jqLiteDealoc(element,!0),element.innerHTML=value},empty:jqLiteEmpty},function(fn,name){JQLite.prototype[name]=function(arg1,arg2){var i,key,nodeCount=this.length;if(fn!==jqLiteEmpty&&isUndefined(2===fn.length&&fn!==jqLiteHasClass&&fn!==jqLiteController?arg1:arg2)){if(isObject(arg1)){for(i=0;i=0?type.split(" "):[type],i=types.length,addHandler=function(type,specialHandlerWrapper,noEventListener){var eventFns=events[type];eventFns||(eventFns=events[type]=[],eventFns.specialHandlerWrapper=specialHandlerWrapper,"$destroy"===type||noEventListener||element.addEventListener(type,handle)),eventFns.push(fn)};i--;)type=types[i],MOUSE_EVENT_MAP[type]?(addHandler(MOUSE_EVENT_MAP[type],specialMouseHandlerWrapper),addHandler(type,void 0,!0)):addHandler(type)}},off:jqLiteOff,one:function(element,type,fn){element=jqLite(element),element.on(type,function onFn(){element.off(type,fn),element.off(type,onFn)}),element.on(type,fn)},replaceWith:function(element,replaceNode){var index,parent=element.parentNode;jqLiteDealoc(element),forEach(new JQLite(replaceNode),function(node){index?parent.insertBefore(node,index.nextSibling):parent.replaceChild(node,element),index=node})},children:function(element){var children=[];return forEach(element.childNodes,function(element){element.nodeType===NODE_TYPE_ELEMENT&&children.push(element)}),children},contents:function(element){return element.contentDocument||element.childNodes||[]},append:function(element,node){var nodeType=element.nodeType;if(nodeType===NODE_TYPE_ELEMENT||nodeType===NODE_TYPE_DOCUMENT_FRAGMENT){node=new JQLite(node);for(var i=0,ii=node.length;i/,FN_ARGS=/^[^(]*\(\s*([^)]*)\)/m,FN_ARG_SPLIT=/,/,FN_ARG=/^\s*(_?)(\S+?)\1\s*$/,STRIP_COMMENTS=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,$injectorMinErr=minErr("$injector");createInjector.$$annotate=annotate;var $animateMinErr=minErr("$animate"),ELEMENT_NODE=1,NG_ANIMATE_CLASSNAME="ng-animate",$$CoreAnimateJsProvider=function(){this.$get=noop},$$CoreAnimateQueueProvider=function(){var postDigestQueue=new NgMap,postDigestElements=[];this.$get=["$$AnimateRunner","$rootScope",function($$AnimateRunner,$rootScope){function updateData(data,classes,value){var changed=!1;return classes&&(classes=isString(classes)?classes.split(" "):isArray(classes)?classes:[],forEach(classes,function(className){className&&(changed=!0,data[className]=value)})),changed}function handleCSSClassChanges(){forEach(postDigestElements,function(element){var data=postDigestQueue.get(element);if(data){var existing=splitClasses(element.attr("class")),toAdd="",toRemove="";forEach(data,function(status,className){status!==!!existing[className]&&(status?toAdd+=(toAdd.length?" ":"")+className:toRemove+=(toRemove.length?" ":"")+className)}),forEach(element,function(elm){toAdd&&jqLiteAddClass(elm,toAdd),toRemove&&jqLiteRemoveClass(elm,toRemove)}),postDigestQueue.delete(element)}}),postDigestElements.length=0}function addRemoveClassesPostDigest(element,add,remove){var data=postDigestQueue.get(element)||{},classesAdded=updateData(data,add,!0),classesRemoved=updateData(data,remove,!1);(classesAdded||classesRemoved)&&(postDigestQueue.set(element,data),postDigestElements.push(element),1===postDigestElements.length&&$rootScope.$$postDigest(handleCSSClassChanges))}return{enabled:noop,on:noop,off:noop,pin:noop,push:function(element,event,options,domOperation){domOperation&&domOperation(),options=options||{},options.from&&element.css(options.from),options.to&&element.css(options.to),(options.addClass||options.removeClass)&&addRemoveClassesPostDigest(element,options.addClass,options.removeClass);var runner=new $$AnimateRunner;return runner.complete(),runner}}}]},$AnimateProvider=["$provide",function($provide){var provider=this;this.$$registeredAnimations=Object.create(null),this.register=function(name,factory){if(name&&"."!==name.charAt(0))throw $animateMinErr("notcsel","Expecting class selector starting with '.' got '{0}'.",name);var key=name+"-animation";provider.$$registeredAnimations[name.substr(1)]=key,$provide.factory(key,factory)},this.classNameFilter=function(expression){if(1===arguments.length&&(this.$$classNameFilter=expression instanceof RegExp?expression:null,this.$$classNameFilter)){if(new RegExp("(\\s+|\\/)"+NG_ANIMATE_CLASSNAME+"(\\s+|\\/)").test(this.$$classNameFilter.toString()))throw $animateMinErr("nongcls",'$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.',NG_ANIMATE_CLASSNAME)}return this.$$classNameFilter},this.$get=["$$animateQueue",function($$animateQueue){function domInsert(element,parentElement,afterElement){if(afterElement){var afterNode=extractElementNode(afterElement);!afterNode||afterNode.parentNode||afterNode.previousElementSibling||(afterElement=null)}afterElement?afterElement.after(element):parentElement.prepend(element)}return{on:$$animateQueue.on,off:$$animateQueue.off,pin:$$animateQueue.pin,enabled:$$animateQueue.enabled,cancel:function(runner){runner.end&&runner.end()},enter:function(element,parent,after,options){return parent=parent&&jqLite(parent),after=after&&jqLite(after),parent=parent||after.parent(),domInsert(element,parent,after),$$animateQueue.push(element,"enter",prepareAnimateOptions(options))},move:function(element,parent,after,options){return parent=parent&&jqLite(parent),after=after&&jqLite(after),parent=parent||after.parent(),domInsert(element,parent,after),$$animateQueue.push(element,"move",prepareAnimateOptions(options))},leave:function(element,options){return $$animateQueue.push(element,"leave",prepareAnimateOptions(options),function(){element.remove()})},addClass:function(element,className,options){return options=prepareAnimateOptions(options),options.addClass=mergeClasses(options.addclass,className),$$animateQueue.push(element,"addClass",options)},removeClass:function(element,className,options){return options=prepareAnimateOptions(options),options.removeClass=mergeClasses(options.removeClass,className),$$animateQueue.push(element,"removeClass",options)},setClass:function(element,add,remove,options){return options=prepareAnimateOptions(options),options.addClass=mergeClasses(options.addClass,add),options.removeClass=mergeClasses(options.removeClass,remove),$$animateQueue.push(element,"setClass",options)},animate:function(element,from,to,className,options){return options=prepareAnimateOptions(options),options.from=options.from?extend(options.from,from):from,options.to=options.to?extend(options.to,to):to,className=className||"ng-inline-animate",options.tempClasses=mergeClasses(options.tempClasses,className),$$animateQueue.push(element,"animate",options)}}}]}],$$AnimateAsyncRunFactoryProvider=function(){this.$get=["$$rAF",function($$rAF){function waitForTick(fn){waitQueue.push(fn),waitQueue.length>1||$$rAF(function(){for(var i=0;i <= >= && || ! = |".split(" "),function(operator){OPERATORS[operator]=!0});var ESCAPE={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Lexer=function Lexer(options){this.options=options};Lexer.prototype={constructor:Lexer,lex:function(text){for(this.text=text,this.index=0,this.tokens=[];this.index=55296&&cp1<=56319&&cp2>=56320&&cp2<=57343?ch+peek:ch},isExpOperator:function(ch){return"-"===ch||"+"===ch||this.isNumber(ch)},throwError:function(error,start,end){throw end=end||this.index,$parseMinErr("lexerr","Lexer Error: {0} at column{1} in expression [{2}].",error,isDefined(start)?"s "+start+"-"+this.index+" ["+this.text.substring(start,end)+"]":" "+end,this.text)},readNumber:function(){for(var number="",start=this.index;this.index0&&!this.peek("}",")",";","]")&&body.push(this.expressionStatement()),!this.expect(";"))return{type:AST.Program,body:body}},expressionStatement:function(){return{type:AST.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var left=this.expression();this.expect("|");)left=this.filter(left);return left},expression:function(){return this.assignment()},assignment:function(){var result=this.ternary();if(this.expect("=")){if(!isAssignable(result))throw $parseMinErr("lval","Trying to assign a value to a non l-value");result={type:AST.AssignmentExpression,left:result,right:this.assignment(),operator:"="}}return result},ternary:function(){var test=this.logicalOR(),alternate,consequent;return this.expect("?")&&(alternate=this.expression(),this.consume(":"))?(consequent=this.expression(),{type:AST.ConditionalExpression,test:test,alternate:alternate,consequent:consequent}):test},logicalOR:function(){for(var left=this.logicalAND();this.expect("||");)left={type:AST.LogicalExpression,operator:"||",left:left,right:this.logicalAND()};return left},logicalAND:function(){for(var left=this.equality();this.expect("&&");)left={type:AST.LogicalExpression,operator:"&&",left:left,right:this.equality()};return left},equality:function(){for(var left=this.relational(),token;token=this.expect("==","!=","===","!==");)left={type:AST.BinaryExpression,operator:token.text,left:left,right:this.relational()};return left},relational:function(){for(var left=this.additive(),token;token=this.expect("<",">","<=",">=");)left={type:AST.BinaryExpression,operator:token.text,left:left,right:this.additive()};return left},additive:function(){for(var left=this.multiplicative(),token;token=this.expect("+","-");)left={type:AST.BinaryExpression,operator:token.text,left:left,right:this.multiplicative()};return left},multiplicative:function(){for(var left=this.unary(),token;token=this.expect("*","/","%");)left={type:AST.BinaryExpression,operator:token.text,left:left,right:this.unary()};return left},unary:function(){var token;return(token=this.expect("+","-","!"))?{type:AST.UnaryExpression,operator:token.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var primary;this.expect("(")?(primary=this.filterChain(),this.consume(")")):this.expect("[")?primary=this.arrayDeclaration():this.expect("{")?primary=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?primary=copy(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?primary={type:AST.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?primary=this.identifier():this.peek().constant?primary=this.constant():this.throwError("not a primary expression",this.peek());for(var next;next=this.expect("(","[",".");)"("===next.text?(primary={type:AST.CallExpression,callee:primary,arguments:this.parseArguments()},this.consume(")")):"["===next.text?(primary={type:AST.MemberExpression,object:primary,property:this.expression(),computed:!0},this.consume("]")):"."===next.text?primary={type:AST.MemberExpression,object:primary,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return primary},filter:function(baseExpression){for(var args=[baseExpression],result={type:AST.CallExpression,callee:this.identifier(),arguments:args,filter:!0};this.expect(":");)args.push(this.expression());return result},parseArguments:function(){var args=[];if(")"!==this.peekToken().text)do args.push(this.filterChain());while(this.expect(","))return args},identifier:function(){var token=this.consume();return token.identifier||this.throwError("is not a valid identifier",token),{type:AST.Identifier,name:token.text}},constant:function(){return{type:AST.Literal,value:this.consume().value}},arrayDeclaration:function(){var elements=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;elements.push(this.expression())}while(this.expect(","))return this.consume("]"),{type:AST.ArrayExpression,elements:elements}},object:function(){var properties=[],property;if("}"!==this.peekToken().text)do{if(this.peek("}"))break;property={type:AST.Property,kind:"init"},this.peek().constant?(property.key=this.constant(),property.computed=!1,this.consume(":"),property.value=this.expression()):this.peek().identifier?(property.key=this.identifier(),property.computed=!1,this.peek(":")?(this.consume(":"),property.value=this.expression()):property.value=property.key):this.peek("[")?(this.consume("["),property.key=this.expression(),this.consume("]"),property.computed=!0,this.consume(":"),property.value=this.expression()):this.throwError("invalid key",this.peek()),properties.push(property)}while(this.expect(","))return this.consume("}"),{type:AST.ObjectExpression,properties:properties}},throwError:function(msg,token){throw $parseMinErr("syntax","Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].",token.text,msg,token.index+1,this.text,this.text.substring(token.index))},consume:function(e1){if(0===this.tokens.length)throw $parseMinErr("ueoe","Unexpected end of expression: {0}",this.text);var token=this.expect(e1);return token||this.throwError("is unexpected, expecting ["+e1+"]",this.peek()),token},peekToken:function(){if(0===this.tokens.length)throw $parseMinErr("ueoe","Unexpected end of expression: {0}",this.text);return this.tokens[0]},peek:function(e1,e2,e3,e4){return this.peekAhead(0,e1,e2,e3,e4)},peekAhead:function(i,e1,e2,e3,e4){if(this.tokens.length>i){var token=this.tokens[i],t=token.text;if(t===e1||t===e2||t===e3||t===e4||!e1&&!e2&&!e3&&!e4)return token}return!1},expect:function(e1,e2,e3,e4){var token=this.peek(e1,e2,e3,e4);return!!token&&(this.tokens.shift(),token)},selfReferential:{this:{type:AST.ThisExpression},$locals:{type:AST.LocalsExpression}}},ASTCompiler.prototype={compile:function(expression){var self=this,ast=this.astBuilder.ast(expression);this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},findConstantAndWatchExpressions(ast,self.$filter);var extra="",assignable;if(this.stage="assign",assignable=assignableAST(ast)){this.state.computing="assign";var result=this.nextId();this.recurse(assignable,result),this.return_(result),extra="fn.assign="+this.generateFunction("assign","s,v,l")}var toWatch=getInputs(ast.body);self.stage="inputs",forEach(toWatch,function(watch,key){var fnKey="fn"+key;self.state[fnKey]={vars:[],body:[],own:{}},self.state.computing=fnKey;var intoId=self.nextId();self.recurse(watch,intoId),self.return_(intoId),self.state.inputs.push(fnKey),watch.watchId=key}),this.state.computing="fn",this.stage="main",this.recurse(ast);var fnString='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+extra+this.watchFns()+"return fn;",fn=new Function("$filter","getStringValue","ifDefined","plus",fnString)(this.$filter,getStringValue,ifDefined,plusFn);return this.state=this.stage=void 0,fn.literal=isLiteral(ast),fn.constant=isConstant(ast),fn},USE:"use",STRICT:"strict",watchFns:function(){var result=[],fns=this.state.inputs,self=this;return forEach(fns,function(name){result.push("var "+name+"="+self.generateFunction(name,"s"))}),fns.length&&result.push("fn.inputs=["+fns.join(",")+"];"),result.join("")},generateFunction:function(name,params){return"function("+params+"){"+this.varsPrefix(name)+this.body(name)+"};"},filterPrefix:function(){var parts=[],self=this;return forEach(this.state.filters,function(id,filter){parts.push(id+"=$filter("+self.escape(filter)+")")}),parts.length?"var "+parts.join(",")+";":""},varsPrefix:function(section){return this.state[section].vars.length?"var "+this.state[section].vars.join(",")+";":""},body:function(section){return this.state[section].body.join("")},recurse:function(ast,intoId,nameId,recursionFn,create,skipWatchIdCheck){var left,right,self=this,args,expression,computed;if(recursionFn=recursionFn||noop,!skipWatchIdCheck&&isDefined(ast.watchId))return intoId=intoId||this.nextId(),void this.if_("i",this.lazyAssign(intoId,this.computedMember("i",ast.watchId)),this.lazyRecurse(ast,intoId,nameId,recursionFn,create,!0));switch(ast.type){case AST.Program:forEach(ast.body,function(expression,pos){self.recurse(expression.expression,void 0,void 0,function(expr){right=expr}),pos!==ast.body.length-1?self.current().body.push(right,";"):self.return_(right)});break;case AST.Literal:expression=this.escape(ast.value),this.assign(intoId,expression),recursionFn(intoId||expression);break;case AST.UnaryExpression:this.recurse(ast.argument,void 0,void 0,function(expr){right=expr}),expression=ast.operator+"("+this.ifDefined(right,0)+")",this.assign(intoId,expression),recursionFn(expression);break;case AST.BinaryExpression:this.recurse(ast.left,void 0,void 0,function(expr){left=expr}),this.recurse(ast.right,void 0,void 0,function(expr){right=expr}),expression="+"===ast.operator?this.plus(left,right):"-"===ast.operator?this.ifDefined(left,0)+ast.operator+this.ifDefined(right,0):"("+left+")"+ast.operator+"("+right+")",this.assign(intoId,expression),recursionFn(expression);break;case AST.LogicalExpression:intoId=intoId||this.nextId(),self.recurse(ast.left,intoId),self.if_("&&"===ast.operator?intoId:self.not(intoId),self.lazyRecurse(ast.right,intoId)),recursionFn(intoId);break;case AST.ConditionalExpression:intoId=intoId||this.nextId(),self.recurse(ast.test,intoId),self.if_(intoId,self.lazyRecurse(ast.alternate,intoId),self.lazyRecurse(ast.consequent,intoId)),recursionFn(intoId);break;case AST.Identifier:intoId=intoId||this.nextId(),nameId&&(nameId.context="inputs"===self.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",ast.name)+"?l:s"),nameId.computed=!1,nameId.name=ast.name),self.if_("inputs"===self.stage||self.not(self.getHasOwnProperty("l",ast.name)),function(){self.if_("inputs"===self.stage||"s",function(){create&&1!==create&&self.if_(self.isNull(self.nonComputedMember("s",ast.name)),self.lazyAssign(self.nonComputedMember("s",ast.name),"{}")),self.assign(intoId,self.nonComputedMember("s",ast.name))})},intoId&&self.lazyAssign(intoId,self.nonComputedMember("l",ast.name))),recursionFn(intoId);break;case AST.MemberExpression:left=nameId&&(nameId.context=this.nextId())||this.nextId(),intoId=intoId||this.nextId(),self.recurse(ast.object,left,void 0,function(){self.if_(self.notNull(left),function(){ast.computed?(right=self.nextId(),self.recurse(ast.property,right),self.getStringValue(right),create&&1!==create&&self.if_(self.not(self.computedMember(left,right)),self.lazyAssign(self.computedMember(left,right),"{}")),expression=self.computedMember(left,right),self.assign(intoId,expression),nameId&&(nameId.computed=!0,nameId.name=right)):(create&&1!==create&&self.if_(self.isNull(self.nonComputedMember(left,ast.property.name)),self.lazyAssign(self.nonComputedMember(left,ast.property.name),"{}")),expression=self.nonComputedMember(left,ast.property.name),self.assign(intoId,expression),nameId&&(nameId.computed=!1,nameId.name=ast.property.name))},function(){self.assign(intoId,"undefined")}),recursionFn(intoId)},!!create);break;case AST.CallExpression:intoId=intoId||this.nextId(),ast.filter?(right=self.filter(ast.callee.name),args=[],forEach(ast.arguments,function(expr){var argument=self.nextId();self.recurse(expr,argument),args.push(argument)}),expression=right+"("+args.join(",")+")",self.assign(intoId,expression),recursionFn(intoId)):(right=self.nextId(),left={},args=[],self.recurse(ast.callee,right,left,function(){self.if_(self.notNull(right),function(){forEach(ast.arguments,function(expr){self.recurse(expr,ast.constant?void 0:self.nextId(),void 0,function(argument){args.push(argument)})}),expression=left.name?self.member(left.context,left.name,left.computed)+"("+args.join(",")+")":right+"("+args.join(",")+")",self.assign(intoId,expression)},function(){self.assign(intoId,"undefined")}),recursionFn(intoId)}));break;case AST.AssignmentExpression:right=this.nextId(),left={},this.recurse(ast.left,void 0,left,function(){self.if_(self.notNull(left.context),function(){self.recurse(ast.right,right),expression=self.member(left.context,left.name,left.computed)+ast.operator+right,self.assign(intoId,expression),recursionFn(intoId||expression)})},1);break;case AST.ArrayExpression:args=[],forEach(ast.elements,function(expr){self.recurse(expr,ast.constant?void 0:self.nextId(),void 0,function(argument){args.push(argument)})}),expression="["+args.join(",")+"]",this.assign(intoId,expression),recursionFn(intoId||expression);break;case AST.ObjectExpression:args=[],computed=!1,forEach(ast.properties,function(property){property.computed&&(computed=!0)}),computed?(intoId=intoId||this.nextId(),this.assign(intoId,"{}"),forEach(ast.properties,function(property){property.computed?(left=self.nextId(),self.recurse(property.key,left)):left=property.key.type===AST.Identifier?property.key.name:""+property.key.value,right=self.nextId(),self.recurse(property.value,right),self.assign(self.member(intoId,left,property.computed),right)})):(forEach(ast.properties,function(property){self.recurse(property.value,ast.constant?void 0:self.nextId(),void 0,function(expr){args.push(self.escape(property.key.type===AST.Identifier?property.key.name:""+property.key.value)+":"+expr)})}),expression="{"+args.join(",")+"}",this.assign(intoId,expression)),recursionFn(intoId||expression);break;case AST.ThisExpression:this.assign(intoId,"s"),recursionFn(intoId||"s");break;case AST.LocalsExpression:this.assign(intoId,"l"),recursionFn(intoId||"l");break;case AST.NGValueParameter:this.assign(intoId,"v"),recursionFn(intoId||"v")}},getHasOwnProperty:function(element,property){var key=element+"."+property,own=this.current().own;return own.hasOwnProperty(key)||(own[key]=this.nextId(!1,element+"&&("+this.escape(property)+" in "+element+")")),own[key]},assign:function(id,value){if(id)return this.current().body.push(id,"=",value,";"),id},filter:function(filterName){return this.state.filters.hasOwnProperty(filterName)||(this.state.filters[filterName]=this.nextId(!0)),this.state.filters[filterName]},ifDefined:function(id,defaultValue){return"ifDefined("+id+","+this.escape(defaultValue)+")"},plus:function(left,right){return"plus("+left+","+right+")"},return_:function(id){this.current().body.push("return ",id,";")},if_:function(test,alternate,consequent){if(test===!0)alternate();else{var body=this.current().body;body.push("if(",test,"){"),alternate(),body.push("}"),consequent&&(body.push("else{"),consequent(),body.push("}"))}},not:function(expression){return"!("+expression+")"},isNull:function(expression){return expression+"==null"},notNull:function(expression){return expression+"!=null"},nonComputedMember:function(left,right){var SAFE_IDENTIFIER=/^[$_a-zA-Z][$_a-zA-Z0-9]*$/,UNSAFE_CHARACTERS=/[^$_a-zA-Z0-9]/g;return SAFE_IDENTIFIER.test(right)?left+"."+right:left+'["'+right.replace(UNSAFE_CHARACTERS,this.stringEscapeFn)+'"]'},computedMember:function(left,right){return left+"["+right+"]"},member:function(left,right,computed){return computed?this.computedMember(left,right):this.nonComputedMember(left,right)},getStringValue:function(item){this.assign(item,"getStringValue("+item+")")},lazyRecurse:function(ast,intoId,nameId,recursionFn,create,skipWatchIdCheck){var self=this;return function(){self.recurse(ast,intoId,nameId,recursionFn,create,skipWatchIdCheck)}},lazyAssign:function(id,value){var self=this;return function(){self.assign(id,value)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(c){return"\\u"+("0000"+c.charCodeAt(0).toString(16)).slice(-4)},escape:function(value){if(isString(value))return"'"+value.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(isNumber(value))return value.toString();if(value===!0)return"true";if(value===!1)return"false";if(null===value)return"null";if(void 0===value)return"undefined";throw $parseMinErr("esc","IMPOSSIBLE")},nextId:function(skip,init){var id="v"+this.state.nextId++;return skip||this.current().vars.push(id+(init?"="+init:"")),id},current:function(){return this.state[this.state.computing]}},ASTInterpreter.prototype={compile:function(expression){var self=this,ast=this.astBuilder.ast(expression);findConstantAndWatchExpressions(ast,self.$filter);var assignable,assign;(assignable=assignableAST(ast))&&(assign=this.recurse(assignable));var toWatch=getInputs(ast.body),inputs;toWatch&&(inputs=[],forEach(toWatch,function(watch,key){var input=self.recurse(watch);watch.input=input,inputs.push(input),watch.watchId=key}));var expressions=[];forEach(ast.body,function(expression){expressions.push(self.recurse(expression.expression))});var fn=0===ast.body.length?noop:1===ast.body.length?expressions[0]:function(scope,locals){var lastValue;return forEach(expressions,function(exp){lastValue=exp(scope,locals)}),lastValue};return assign&&(fn.assign=function(scope,value,locals){return assign(scope,locals,value)}),inputs&&(fn.inputs=inputs),fn.literal=isLiteral(ast),fn.constant=isConstant(ast),fn},recurse:function(ast,context,create){var left,right,self=this,args;if(ast.input)return this.inputs(ast.input,ast.watchId);switch(ast.type){case AST.Literal:return this.value(ast.value,context);case AST.UnaryExpression:return right=this.recurse(ast.argument),this["unary"+ast.operator](right,context);case AST.BinaryExpression:return left=this.recurse(ast.left),right=this.recurse(ast.right),this["binary"+ast.operator](left,right,context);case AST.LogicalExpression:return left=this.recurse(ast.left),right=this.recurse(ast.right),this["binary"+ast.operator](left,right,context);case AST.ConditionalExpression:return this["ternary?:"](this.recurse(ast.test),this.recurse(ast.alternate),this.recurse(ast.consequent),context);case AST.Identifier:return self.identifier(ast.name,context,create);case AST.MemberExpression:return left=this.recurse(ast.object,!1,!!create),ast.computed||(right=ast.property.name),ast.computed&&(right=this.recurse(ast.property)),ast.computed?this.computedMember(left,right,context,create):this.nonComputedMember(left,right,context,create);case AST.CallExpression:return args=[],forEach(ast.arguments,function(expr){args.push(self.recurse(expr))}),ast.filter&&(right=this.$filter(ast.callee.name)),ast.filter||(right=this.recurse(ast.callee,!0)),ast.filter?function(scope,locals,assign,inputs){for(var values=[],i=0;i":function(left,right,context){return function(scope,locals,assign,inputs){var arg=left(scope,locals,assign,inputs)>right(scope,locals,assign,inputs);return context?{value:arg}:arg}},"binary<=":function(left,right,context){return function(scope,locals,assign,inputs){var arg=left(scope,locals,assign,inputs)<=right(scope,locals,assign,inputs);return context?{value:arg}:arg}},"binary>=":function(left,right,context){return function(scope,locals,assign,inputs){var arg=left(scope,locals,assign,inputs)>=right(scope,locals,assign,inputs);return context?{value:arg}:arg}},"binary&&":function(left,right,context){return function(scope,locals,assign,inputs){var arg=left(scope,locals,assign,inputs)&&right(scope,locals,assign,inputs);return context?{value:arg}:arg}},"binary||":function(left,right,context){return function(scope,locals,assign,inputs){var arg=left(scope,locals,assign,inputs)||right(scope,locals,assign,inputs);return context?{value:arg}:arg}},"ternary?:":function(test,alternate,consequent,context){return function(scope,locals,assign,inputs){var arg=test(scope,locals,assign,inputs)?alternate(scope,locals,assign,inputs):consequent(scope,locals,assign,inputs);return context?{value:arg}:arg}},value:function(value,context){return function(){return context?{context:void 0,name:void 0,value:value}:value}},identifier:function(name,context,create){return function(scope,locals,assign,inputs){var base=locals&&name in locals?locals:scope;create&&1!==create&&base&&null==base[name]&&(base[name]={});var value=base?base[name]:void 0;return context?{context:base,name:name,value:value}:value}},computedMember:function(left,right,context,create){return function(scope,locals,assign,inputs){var lhs=left(scope,locals,assign,inputs),rhs,value;return null!=lhs&&(rhs=right(scope,locals,assign,inputs),rhs=getStringValue(rhs),create&&1!==create&&lhs&&!lhs[rhs]&&(lhs[rhs]={}),value=lhs[rhs]),context?{context:lhs,name:rhs,value:value}:value}},nonComputedMember:function(left,right,context,create){return function(scope,locals,assign,inputs){var lhs=left(scope,locals,assign,inputs);create&&1!==create&&lhs&&null==lhs[right]&&(lhs[right]={});var value=null!=lhs?lhs[right]:void 0;return context?{context:lhs,name:right,value:value}:value}},inputs:function(input,watchId){return function(scope,value,locals,inputs){return inputs?inputs[watchId]:input(scope,value,locals)}}};var Parser=function Parser(lexer,$filter,options){this.lexer=lexer,this.$filter=$filter,this.options=options,this.ast=new AST(lexer,options),this.astCompiler=options.csp?new ASTInterpreter(this.ast,$filter):new ASTCompiler(this.ast,$filter)};Parser.prototype={constructor:Parser,parse:function(text){return this.astCompiler.compile(text)}};var $sceMinErr=minErr("$sce"),SCE_CONTEXTS={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},UNDERSCORE_LOWERCASE_REGEXP=/_([a-z])/g,$templateRequestMinErr=minErr("$compile"),urlParsingNode=window.document.createElement("a"),originUrl=urlResolve(window.location.href);$$CookieReader.$inject=["$document"],$FilterProvider.$inject=["$provide"];var MAX_DIGITS=22,DECIMAL_SEP=".",ZERO_CHAR="0";currencyFilter.$inject=["$locale"],numberFilter.$inject=["$locale"];var DATE_FORMATS={yyyy:dateGetter("FullYear",4,0,!1,!0),yy:dateGetter("FullYear",2,0,!0,!0),y:dateGetter("FullYear",1,0,!1,!0),MMMM:dateStrGetter("Month"),MMM:dateStrGetter("Month",!0),MM:dateGetter("Month",2,1),M:dateGetter("Month",1,1),LLLL:dateStrGetter("Month",!1,!0),dd:dateGetter("Date",2),d:dateGetter("Date",1),HH:dateGetter("Hours",2),H:dateGetter("Hours",1),hh:dateGetter("Hours",2,-12),h:dateGetter("Hours",1,-12),mm:dateGetter("Minutes",2),m:dateGetter("Minutes",1),ss:dateGetter("Seconds",2),s:dateGetter("Seconds",1),sss:dateGetter("Milliseconds",3),EEEE:dateStrGetter("Day"),EEE:dateStrGetter("Day",!0),a:ampmGetter,Z:timeZoneGetter,ww:weekGetter(2),w:weekGetter(1),G:eraGetter,GG:eraGetter,GGG:eraGetter,GGGG:longEraGetter},DATE_FORMATS_SPLIT=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,NUMBER_STRING=/^-?\d+$/;dateFilter.$inject=["$locale"];var lowercaseFilter=valueFn(lowercase),uppercaseFilter=valueFn(uppercase);orderByFilter.$inject=["$parse"];var htmlAnchorDirective=valueFn({restrict:"E",compile:function(element,attr){if(!attr.href&&!attr.xlinkHref)return function(scope,element){if("a"===element[0].nodeName.toLowerCase()){var href="[object SVGAnimatedString]"===toString.call(element.prop("href"))?"xlink:href":"href";element.on("click",function(event){element.attr(href)||event.preventDefault()})}}}}),ngAttributeAliasDirectives={};forEach(BOOLEAN_ATTR,function(propName,attrName){function defaultLinkFn(scope,element,attr){scope.$watch(attr[normalized],function ngBooleanAttrWatchAction(value){attr.$set(attrName,!!value)})}if("multiple"!==propName){var normalized=directiveNormalize("ng-"+attrName),linkFn=defaultLinkFn;"checked"===propName&&(linkFn=function(scope,element,attr){attr.ngModel!==attr[normalized]&&defaultLinkFn(scope,element,attr)}),ngAttributeAliasDirectives[normalized]=function(){return{restrict:"A",priority:100,link:linkFn}}}}),forEach(ALIASED_ATTR,function(htmlAttr,ngAttr){ngAttributeAliasDirectives[ngAttr]=function(){return{priority:100,link:function(scope,element,attr){if("ngPattern"===ngAttr&&"/"===attr.ngPattern.charAt(0)){var match=attr.ngPattern.match(REGEX_STRING_REGEXP);if(match)return void attr.$set("ngPattern",new RegExp(match[1],match[2]))}scope.$watch(attr[ngAttr],function ngAttrAliasWatchAction(value){attr.$set(ngAttr,value)})}}}}),forEach(["src","srcset","href"],function(attrName){var normalized=directiveNormalize("ng-"+attrName);ngAttributeAliasDirectives[normalized]=function(){return{priority:99,link:function(scope,element,attr){var propName=attrName,name=attrName;"href"===attrName&&"[object SVGAnimatedString]"===toString.call(element.prop("href"))&&(name="xlinkHref",attr.$attr[name]="xlink:href",propName=null),attr.$observe(normalized,function(value){if(!value)return void("href"===attrName&&attr.$set(name,null));attr.$set(name,value),msie&&propName&&element.prop(propName,attr[name])})}}}});var nullFormCtrl={$addControl:noop,$$renameControl:nullFormRenameControl,$removeControl:noop,$setValidity:noop,$setDirty:noop,$setPristine:noop,$setSubmitted:noop},PENDING_CLASS="ng-pending",SUBMITTED_CLASS="ng-submitted";FormController.$inject=["$element","$attrs","$scope","$animate","$interpolate"],FormController.prototype={$rollbackViewValue:function(){forEach(this.$$controls,function(control){control.$rollbackViewValue()})},$commitViewValue:function(){forEach(this.$$controls,function(control){control.$commitViewValue()})},$addControl:function(control){assertNotHasOwnProperty(control.$name,"input"),this.$$controls.push(control),control.$name&&(this[control.$name]=control),control.$$parentForm=this},$$renameControl:function(control,newName){var oldName=control.$name;this[oldName]===control&&delete this[oldName],this[newName]=control,control.$name=newName},$removeControl:function(control){control.$name&&this[control.$name]===control&&delete this[control.$name],forEach(this.$pending,function(value,name){this.$setValidity(name,null,control)},this),forEach(this.$error,function(value,name){this.$setValidity(name,null,control)},this),forEach(this.$$success,function(value,name){this.$setValidity(name,null,control)},this),arrayRemove(this.$$controls,control),control.$$parentForm=nullFormCtrl},$setDirty:function(){this.$$animate.removeClass(this.$$element,PRISTINE_CLASS),this.$$animate.addClass(this.$$element,DIRTY_CLASS),this.$dirty=!0,this.$pristine=!1,this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,PRISTINE_CLASS,DIRTY_CLASS+" "+SUBMITTED_CLASS),this.$dirty=!1,this.$pristine=!0,this.$submitted=!1,forEach(this.$$controls,function(control){control.$setPristine()})},$setUntouched:function(){forEach(this.$$controls,function(control){control.$setUntouched()})},$setSubmitted:function(){this.$$animate.addClass(this.$$element,SUBMITTED_CLASS),this.$submitted=!0,this.$$parentForm.$setSubmitted()}},addSetValidityMethod({clazz:FormController,set:function(object,property,controller){var list=object[property];if(list){list.indexOf(controller)===-1&&list.push(controller)}else object[property]=[controller]},unset:function(object,property,controller){var list=object[property];list&&(arrayRemove(list,controller),0===list.length&&delete object[property])}});var formDirectiveFactory=function(isNgForm){return["$timeout","$parse",function($timeout,$parse){function getSetter(expression){return""===expression?$parse('this[""]').assign:$parse(expression).assign||noop}return{name:"form",restrict:isNgForm?"EAC":"E",require:["form","^^?form"],controller:FormController,compile:function ngFormCompile(formElement,attr){formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);var nameAttr=attr.name?"name":!(!isNgForm||!attr.ngForm)&&"ngForm";return{pre:function ngFormPreLink(scope,formElement,attr,ctrls){var controller=ctrls[0];if(!("action"in attr)){var handleFormSubmission=function(event){scope.$apply(function(){controller.$commitViewValue(),controller.$setSubmitted()}),event.preventDefault()};formElement[0].addEventListener("submit",handleFormSubmission),formElement.on("$destroy",function(){$timeout(function(){formElement[0].removeEventListener("submit",handleFormSubmission)},0,!1)})}(ctrls[1]||controller.$$parentForm).$addControl(controller);var setter=nameAttr?getSetter(controller.$name):noop;nameAttr&&(setter(scope,controller),attr.$observe(nameAttr,function(newValue){controller.$name!==newValue&&(setter(scope,void 0),controller.$$parentForm.$$renameControl(controller,newValue),(setter=getSetter(controller.$name))(scope,controller))})),formElement.on("$destroy",function(){controller.$$parentForm.$removeControl(controller),setter(scope,void 0),extend(controller,nullFormCtrl)})}}}}}]},formDirective=formDirectiveFactory(),ngFormDirective=formDirectiveFactory(!0),ISO_DATE_REGEXP=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,URL_REGEXP=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:\/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,EMAIL_REGEXP=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,NUMBER_REGEXP=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,DATE_REGEXP=/^(\d{4,})-(\d{2})-(\d{2})$/,DATETIMELOCAL_REGEXP=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,WEEK_REGEXP=/^(\d{4,})-W(\d\d)$/,MONTH_REGEXP=/^(\d{4,})-(\d\d)$/,TIME_REGEXP=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,PARTIAL_VALIDATION_EVENTS="keydown wheel mousedown",PARTIAL_VALIDATION_TYPES=createMap();forEach("date,datetime-local,month,time,week".split(","),function(type){PARTIAL_VALIDATION_TYPES[type]=!0});var inputType={text:textInputType,date:createDateInputType("date",DATE_REGEXP,createDateParser(DATE_REGEXP,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":createDateInputType("datetimelocal",DATETIMELOCAL_REGEXP,createDateParser(DATETIMELOCAL_REGEXP,["yyyy","MM","dd","HH","mm","ss","sss"]),"yyyy-MM-ddTHH:mm:ss.sss"),time:createDateInputType("time",TIME_REGEXP,createDateParser(TIME_REGEXP,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:createDateInputType("week",WEEK_REGEXP,weekParser,"yyyy-Www"),month:createDateInputType("month",MONTH_REGEXP,createDateParser(MONTH_REGEXP,["yyyy","MM"]),"yyyy-MM"),number:numberInputType,url:urlInputType,email:emailInputType,radio:radioInputType,range:rangeInputType,checkbox:checkboxInputType,hidden:noop,button:noop,submit:noop,reset:noop,file:noop},inputDirective=["$browser","$sniffer","$filter","$parse",function($browser,$sniffer,$filter,$parse){return{restrict:"E",require:["?ngModel"],link:{pre:function(scope,element,attr,ctrls){ctrls[0]&&(inputType[lowercase(attr.type)]||inputType.text)(scope,element,attr,ctrls[0],$sniffer,$browser,$filter,$parse)}}}}],CONSTANT_VALUE_REGEXP=/^(true|false|\d+)$/,ngValueDirective=function(){function updateElementValue(element,attr,value){var propValue=isDefined(value)?value:9===msie?"":null;element.prop("value",propValue),attr.$set("value",value)}return{restrict:"A",priority:100,compile:function(tpl,tplAttr){return CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)?function ngValueConstantLink(scope,elm,attr){updateElementValue(elm,attr,scope.$eval(attr.ngValue))}:function ngValueLink(scope,elm,attr){scope.$watch(attr.ngValue,function valueWatchAction(value){updateElementValue(elm,attr,value)})}}}},ngBindDirective=["$compile",function($compile){return{restrict:"AC",compile:function ngBindCompile(templateElement){return $compile.$$addBindingClass(templateElement),function ngBindLink(scope,element,attr){$compile.$$addBindingInfo(element,attr.ngBind),element=element[0],scope.$watch(attr.ngBind,function ngBindWatchAction(value){element.textContent=stringify(value)})}}}}],ngBindTemplateDirective=["$interpolate","$compile",function($interpolate,$compile){return{compile:function ngBindTemplateCompile(templateElement){return $compile.$$addBindingClass(templateElement),function ngBindTemplateLink(scope,element,attr){var interpolateFn=$interpolate(element.attr(attr.$attr.ngBindTemplate));$compile.$$addBindingInfo(element,interpolateFn.expressions),element=element[0],attr.$observe("ngBindTemplate",function(value){element.textContent=isUndefined(value)?"":value})}}}}],ngBindHtmlDirective=["$sce","$parse","$compile",function($sce,$parse,$compile){return{restrict:"A",compile:function ngBindHtmlCompile(tElement,tAttrs){var ngBindHtmlGetter=$parse(tAttrs.ngBindHtml),ngBindHtmlWatch=$parse(tAttrs.ngBindHtml,function sceValueOf(val){return $sce.valueOf(val)});return $compile.$$addBindingClass(tElement),function ngBindHtmlLink(scope,element,attr){$compile.$$addBindingInfo(element,attr.ngBindHtml),scope.$watch(ngBindHtmlWatch,function ngBindHtmlWatchAction(){var value=ngBindHtmlGetter(scope);element.html($sce.getTrustedHtml(value)||"")})}}}}],ngChangeDirective=valueFn({restrict:"A",require:"ngModel",link:function(scope,element,attr,ctrl){ctrl.$viewChangeListeners.push(function(){scope.$eval(attr.ngChange)})}}),ngClassDirective=classDirective("",!0),ngClassOddDirective=classDirective("Odd",0),ngClassEvenDirective=classDirective("Even",1),ngCloakDirective=ngDirective({compile:function(element,attr){attr.$set("ngCloak",void 0),element.removeClass("ng-cloak")}}),ngControllerDirective=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],ngEventDirectives={},forceAsyncEvents={blur:!0,focus:!0};forEach("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(eventName){var directiveName=directiveNormalize("ng-"+eventName);ngEventDirectives[directiveName]=["$parse","$rootScope",function($parse,$rootScope){return{restrict:"A",compile:function($element,attr){var fn=$parse(attr[directiveName]);return function ngEventHandler(scope,element){element.on(eventName,function(event){var callback=function(){fn(scope,{$event:event})};forceAsyncEvents[eventName]&&$rootScope.$$phase?scope.$evalAsync(callback):scope.$apply(callback)})}}}}]});var ngIfDirective=["$animate","$compile",function($animate,$compile){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function($scope,$element,$attr,ctrl,$transclude){var block,childScope,previousElements;$scope.$watch($attr.ngIf,function ngIfWatchAction(value){value?childScope||$transclude(function(clone,newScope){childScope=newScope,clone[clone.length++]=$compile.$$createComment("end ngIf",$attr.ngIf),block={clone:clone},$animate.enter(clone,$element.parent(),$element)}):(previousElements&&(previousElements.remove(),previousElements=null),childScope&&(childScope.$destroy(),childScope=null),block&&(previousElements=getBlockNodes(block.clone),$animate.leave(previousElements).done(function(response){response!==!1&&(previousElements=null)}),block=null))})}}}],ngIncludeDirective=["$templateRequest","$anchorScroll","$animate",function($templateRequest,$anchorScroll,$animate){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:angular.noop,compile:function(element,attr){var srcExp=attr.ngInclude||attr.src,onloadExp=attr.onload||"",autoScrollExp=attr.autoscroll;return function(scope,$element,$attr,ctrl,$transclude){var changeCounter=0,currentScope,previousElement,currentElement,cleanupLastIncludeContent=function(){previousElement&&(previousElement.remove(),previousElement=null),currentScope&&(currentScope.$destroy(),currentScope=null),currentElement&&($animate.leave(currentElement).done(function(response){response!==!1&&(previousElement=null)}),previousElement=currentElement,currentElement=null)};scope.$watch(srcExp,function ngIncludeWatchAction(src){var afterAnimation=function(response){response===!1||!isDefined(autoScrollExp)||autoScrollExp&&!scope.$eval(autoScrollExp)||$anchorScroll()},thisChangeId=++changeCounter;src?($templateRequest(src,!0).then(function(response){if(!scope.$$destroyed&&thisChangeId===changeCounter){var newScope=scope.$new();ctrl.template=response;var clone=$transclude(newScope,function(clone){cleanupLastIncludeContent(),$animate.enter(clone,null,$element).done(afterAnimation)});currentScope=newScope,currentElement=clone,currentScope.$emit("$includeContentLoaded",src),scope.$eval(onloadExp)}},function(){scope.$$destroyed||thisChangeId===changeCounter&&(cleanupLastIncludeContent(),scope.$emit("$includeContentError",src))}),scope.$emit("$includeContentRequested",src)):(cleanupLastIncludeContent(),ctrl.template=null)})}}}}],ngIncludeFillContentDirective=["$compile",function($compile){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(scope,$element,$attr,ctrl){if(toString.call($element[0]).match(/SVG/))return $element.empty(),void $compile(jqLiteBuildFragment(ctrl.template,window.document).childNodes)(scope,function namespaceAdaptedClone(clone){$element.append(clone)},{futureParentElement:$element});$element.html(ctrl.template),$compile($element.contents())(scope)}}}],ngInitDirective=ngDirective({priority:450,compile:function(){return{pre:function(scope,element,attrs){scope.$eval(attrs.ngInit)}}}}),ngListDirective=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(scope,element,attr,ctrl){var ngList=attr.ngList||", ",trimValues="false"!==attr.ngTrim,separator=trimValues?trim(ngList):ngList,parse=function(viewValue){if(!isUndefined(viewValue)){var list=[];return viewValue&&forEach(viewValue.split(separator),function(value){value&&list.push(trimValues?trim(value):value)}),list}};ctrl.$parsers.push(parse),ctrl.$formatters.push(function(value){if(isArray(value))return value.join(ngList)}),ctrl.$isEmpty=function(value){return!value||!value.length}}}},VALID_CLASS="ng-valid",INVALID_CLASS="ng-invalid",PRISTINE_CLASS="ng-pristine",DIRTY_CLASS="ng-dirty",UNTOUCHED_CLASS="ng-untouched",TOUCHED_CLASS="ng-touched",EMPTY_CLASS="ng-empty",NOT_EMPTY_CLASS="ng-not-empty",ngModelMinErr=minErr("ngModel");NgModelController.$inject=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$q","$interpolate"],NgModelController.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var invokeModelGetter=this.$$parse(this.$$attr.ngModel+"()"),invokeModelSetter=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function($scope){var modelValue=this.$$parsedNgModel($scope);return isFunction(modelValue)&&(modelValue=invokeModelGetter($scope)),modelValue},this.$$ngModelSet=function($scope,newValue){isFunction(this.$$parsedNgModel($scope))?invokeModelSetter($scope,{$$$p:newValue}):this.$$parsedNgModelAssign($scope,newValue)}}else if(!this.$$parsedNgModel.assign)throw ngModelMinErr("nonassign","Expression '{0}' is non-assignable. Element: {1}",this.$$attr.ngModel,startingTag(this.$$element))},$render:noop,$isEmpty:function(value){return isUndefined(value)||""===value||null===value||value!==value},$$updateEmptyClasses:function(value){this.$isEmpty(value)?(this.$$animate.removeClass(this.$$element,NOT_EMPTY_CLASS),this.$$animate.addClass(this.$$element,EMPTY_CLASS)):(this.$$animate.removeClass(this.$$element,EMPTY_CLASS),this.$$animate.addClass(this.$$element,NOT_EMPTY_CLASS))},$setPristine:function(){this.$dirty=!1,this.$pristine=!0,this.$$animate.removeClass(this.$$element,DIRTY_CLASS),this.$$animate.addClass(this.$$element,PRISTINE_CLASS)},$setDirty:function(){this.$dirty=!0,this.$pristine=!1,this.$$animate.removeClass(this.$$element,PRISTINE_CLASS),this.$$animate.addClass(this.$$element,DIRTY_CLASS),this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1,this.$untouched=!0,this.$$animate.setClass(this.$$element,UNTOUCHED_CLASS,TOUCHED_CLASS)},$setTouched:function(){this.$touched=!0,this.$untouched=!1,this.$$animate.setClass(this.$$element,TOUCHED_CLASS,UNTOUCHED_CLASS)},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce),this.$viewValue=this.$$lastCommittedViewValue,this.$render()},$validate:function(){if(!isNumberNaN(this.$modelValue)){var viewValue=this.$$lastCommittedViewValue,modelValue=this.$$rawModelValue,prevValid=this.$valid,prevModelValue=this.$modelValue,allowInvalid=this.$options.getOption("allowInvalid"),that=this;this.$$runValidators(modelValue,viewValue,function(allValid){allowInvalid||prevValid===allValid||(that.$modelValue=allValid?modelValue:void 0,that.$modelValue!==prevModelValue&&that.$$writeModelToScope())})}},$$runValidators:function(modelValue,viewValue,doneCallback){function processParseErrors(){var errorKey=that.$$parserName||"parse";return isUndefined(that.$$parserValid)?(setValidity(errorKey,null),!0):(that.$$parserValid||(forEach(that.$validators,function(v,name){setValidity(name,null)}),forEach(that.$asyncValidators,function(v,name){setValidity(name,null)})),setValidity(errorKey,that.$$parserValid),that.$$parserValid)}function processSyncValidators(){var syncValidatorsValid=!0;return forEach(that.$validators,function(validator,name){var result=Boolean(validator(modelValue,viewValue));syncValidatorsValid=syncValidatorsValid&&result,setValidity(name,result)}),!!syncValidatorsValid||(forEach(that.$asyncValidators,function(v,name){setValidity(name,null)}),!1)}function processAsyncValidators(){var validatorPromises=[],allValid=!0;forEach(that.$asyncValidators,function(validator,name){var promise=validator(modelValue,viewValue);if(!isPromiseLike(promise))throw ngModelMinErr("nopromise","Expected asynchronous validator to return a promise but got '{0}' instead.",promise);setValidity(name,void 0),validatorPromises.push(promise.then(function(){setValidity(name,!0)},function(){allValid=!1,setValidity(name,!1)}))}),validatorPromises.length?that.$$q.all(validatorPromises).then(function(){validationDone(allValid)},noop):validationDone(!0)}function setValidity(name,isValid){localValidationRunId===that.$$currentValidationRunId&&that.$setValidity(name,isValid)}function validationDone(allValid){localValidationRunId===that.$$currentValidationRunId&&doneCallback(allValid)}this.$$currentValidationRunId++;var localValidationRunId=this.$$currentValidationRunId,that=this;return processParseErrors()&&processSyncValidators()?void processAsyncValidators():void validationDone(!1)},$commitViewValue:function(){var viewValue=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce),(this.$$lastCommittedViewValue!==viewValue||""===viewValue&&this.$$hasNativeValidators)&&(this.$$updateEmptyClasses(viewValue),this.$$lastCommittedViewValue=viewValue,this.$pristine&&this.$setDirty(),this.$$parseAndValidate())},$$parseAndValidate:function(){function writeToModelIfNeeded(){that.$modelValue!==prevModelValue&&that.$$writeModelToScope()}var viewValue=this.$$lastCommittedViewValue,modelValue=viewValue,that=this;if(this.$$parserValid=!isUndefined(modelValue)||void 0,this.$$parserValid)for(var i=0;i0?this.$$pendingDebounce=this.$$timeout(function(){that.$commitViewValue()},debounceDelay):this.$$scope.$root.$$phase?this.$commitViewValue():this.$$scope.$apply(function(){that.$commitViewValue()})},$overrideModelOptions:function(options){this.$options=this.$options.createChild(options)}},addSetValidityMethod({clazz:NgModelController,set:function(object,property){object[property]=!0},unset:function(object,property){delete object[property]}});var ngModelDirective=["$rootScope",function($rootScope){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:NgModelController,priority:1,compile:function ngModelCompile(element){return element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS),{pre:function ngModelPreLink(scope,element,attr,ctrls){var modelCtrl=ctrls[0],formCtrl=ctrls[1]||modelCtrl.$$parentForm,optionsCtrl=ctrls[2];optionsCtrl&&(modelCtrl.$options=optionsCtrl.$options),modelCtrl.$$initGetterSetters(),formCtrl.$addControl(modelCtrl),attr.$observe("name",function(newValue){modelCtrl.$name!==newValue&&modelCtrl.$$parentForm.$$renameControl(modelCtrl,newValue)}),scope.$on("$destroy",function(){modelCtrl.$$parentForm.$removeControl(modelCtrl)})},post:function ngModelPostLink(scope,element,attr,ctrls){function setTouched(){modelCtrl.$setTouched()}var modelCtrl=ctrls[0];modelCtrl.$options.getOption("updateOn")&&element.on(modelCtrl.$options.getOption("updateOn"),function(ev){modelCtrl.$$debounceViewValueCommit(ev&&ev.type)}),element.on("blur",function(){modelCtrl.$touched||($rootScope.$$phase?scope.$evalAsync(setTouched):scope.$apply(setTouched))})}}}}}],defaultModelOptions,DEFAULT_REGEXP=/(\s+|^)default(\s+|$)/;ModelOptions.prototype={getOption:function(name){return this.$$options[name]},createChild:function(options){var inheritAll=!1;return options=extend({},options),forEach(options,function(option,key){"$inherit"===option?"*"===key?inheritAll=!0:(options[key]=this.$$options[key],"updateOn"===key&&(options.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===key&&(options.updateOnDefault=!1,options[key]=trim(option.replace(DEFAULT_REGEXP,function(){return options.updateOnDefault=!0," "})))},this),inheritAll&&(delete options["*"],defaults(options,this.$$options)),defaults(options,defaultModelOptions.$$options),new ModelOptions(options)}},defaultModelOptions=new ModelOptions({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var ngModelOptionsDirective=function(){function NgModelOptionsController($attrs,$scope){this.$$attrs=$attrs,this.$$scope=$scope}return NgModelOptionsController.$inject=["$attrs","$scope"],NgModelOptionsController.prototype={$onInit:function(){var parentOptions=this.parentCtrl?this.parentCtrl.$options:defaultModelOptions,modelOptionsDefinition=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=parentOptions.createChild(modelOptionsDefinition)}},{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:NgModelOptionsController}},ngNonBindableDirective=ngDirective({terminal:!0,priority:1e3}),ngOptionsMinErr=minErr("ngOptions"),NG_OPTIONS_REGEXP=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,ngOptionsDirective=["$compile","$document","$parse",function($compile,$document,$parse){function parseOptionsExpression(optionsExp,selectElement,scope){function Option(selectValue,viewValue,label,group,disabled){this.selectValue=selectValue,this.viewValue=viewValue,this.label=label,this.group=group,this.disabled=disabled}function getOptionValuesKeys(optionValues){var optionValuesKeys;if(!keyName&&isArrayLike(optionValues))optionValuesKeys=optionValues;else{optionValuesKeys=[];for(var itemKey in optionValues)optionValues.hasOwnProperty(itemKey)&&"$"!==itemKey.charAt(0)&&optionValuesKeys.push(itemKey)}return optionValuesKeys}var match=optionsExp.match(NG_OPTIONS_REGEXP);if(!match)throw ngOptionsMinErr("iexp","Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}",optionsExp,startingTag(selectElement));var valueName=match[5]||match[7],keyName=match[6],selectAs=/ as /.test(match[0])&&match[1],trackBy=match[9],valueFn=$parse(match[2]?match[1]:valueName),selectAsFn=selectAs&&$parse(selectAs),viewValueFn=selectAsFn||valueFn,trackByFn=trackBy&&$parse(trackBy),getTrackByValueFn=trackBy?function(value,locals){return trackByFn(scope,locals)}:function getHashOfValue(value){return hashKey(value)},getTrackByValue=function(value,key){return getTrackByValueFn(value,getLocals(value,key))},displayFn=$parse(match[2]||match[1]),groupByFn=$parse(match[3]||""),disableWhenFn=$parse(match[4]||""),valuesFn=$parse(match[8]),locals={},getLocals=keyName?function(value,key){return locals[keyName]=key,locals[valueName]=value,locals}:function(value){return locals[valueName]=value,locals};return{trackBy:trackBy,getTrackByValue:getTrackByValue,getWatchables:$parse(valuesFn,function(optionValues){var watchedArray=[];optionValues=optionValues||[];for(var optionValuesKeys=getOptionValuesKeys(optionValues),optionValuesLength=optionValuesKeys.length,index=0;index=0;i--){var option=options.items[i];jqLiteRemove(isDefined(option.group)?option.element.parentNode:option.element)}options=ngOptions.getOptions();var groupElementMap={};if(providedEmptyOption&&selectElement.prepend(selectCtrl.emptyOption),options.items.forEach(function addOption(option){var groupElement;isDefined(option.group)?(groupElement=groupElementMap[option.group],groupElement||(groupElement=optGroupTemplate.cloneNode(!1),listFragment.appendChild(groupElement),groupElement.label=null===option.group?"null":option.group,groupElementMap[option.group]=groupElement),addOptionElement(option,groupElement)):addOptionElement(option,listFragment)}),selectElement[0].appendChild(listFragment),ngModelCtrl.$render(),!ngModelCtrl.$isEmpty(previousValue)){var nextValue=selectCtrl.readValue();(ngOptions.trackBy||multiple?equals(previousValue,nextValue):previousValue===nextValue)||(ngModelCtrl.$setViewValue(nextValue),ngModelCtrl.$render())}}for(var selectCtrl=ctrls[0],ngModelCtrl=ctrls[1],multiple=attr.multiple,i=0,children=selectElement.children(),ii=children.length;i0&&(regex=new RegExp("^"+regex+"$")),regex&&!regex.test)throw minErr("ngPattern")("noregexp","Expected {0} to be a RegExp but was {1}. Element: {2}",patternExp,regex,startingTag(elm));regexp=regex||void 0,ctrl.$validate()}),ctrl.$validators.pattern=function(modelValue,viewValue){return ctrl.$isEmpty(viewValue)||isUndefined(regexp)||regexp.test(viewValue)}}}}},maxlengthDirective=function(){return{restrict:"A",require:"?ngModel",link:function(scope,elm,attr,ctrl){if(ctrl){var maxlength=-1;attr.$observe("maxlength",function(value){var intVal=toInt(value);maxlength=isNumberNaN(intVal)?-1:intVal,ctrl.$validate()}),ctrl.$validators.maxlength=function(modelValue,viewValue){return maxlength<0||ctrl.$isEmpty(viewValue)||viewValue.length<=maxlength}}}}},minlengthDirective=function(){return{restrict:"A",require:"?ngModel",link:function(scope,elm,attr,ctrl){if(ctrl){var minlength=0;attr.$observe("minlength",function(value){minlength=toInt(value)||0,ctrl.$validate()}),ctrl.$validators.minlength=function(modelValue,viewValue){return ctrl.$isEmpty(viewValue)||viewValue.length>=minlength}}}}};if(window.angular.bootstrap)return void(window.console&&console.log("WARNING: Tried to load angular more than once."));bindJQuery(),publishExternalAPI(angular),angular.module("ngLocale",[],["$provide",function($provide){function getDecimals(n){n+="";var i=n.indexOf(".");return i==-1?0:n.length-i-1}function getVF(n,opt_precision){var v=opt_precision;void 0===v&&(v=Math.min(getDecimals(n),3));var base=Math.pow(10,v);return{v:v,f:(n*base|0)%base}}var PLURAL_CATEGORY={ZERO:"zero",ONE:"one",TWO:"two",FEW:"few",MANY:"many",OTHER:"other"};$provide.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],STANDALONEMONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a",short:"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(n,opt_precision){var i=0|n,vf=getVF(n,opt_precision);return 1==i&&0==vf.v?PLURAL_CATEGORY.ONE:PLURAL_CATEGORY.OTHER}})}]),jqLite(function(){angularInit(window.document,bootstrap)})}(window),!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('')}}); \ No newline at end of file diff --git a/gulp_tasks/browsersync.js b/gulp_tasks/browsersync.js new file mode 100644 index 0000000..945a88d --- /dev/null +++ b/gulp_tasks/browsersync.js @@ -0,0 +1,21 @@ +const gulp = require('gulp'); +const browserSync = require('browser-sync'); +const spa = require('browser-sync-spa'); + +const browserSyncConf = require('../conf/browsersync.conf'); +const browserSyncDistConf = require('../conf/browsersync-dist.conf'); + +browserSync.use(spa()); + +gulp.task('browsersync', browserSyncServe); +gulp.task('browsersync:dist', browserSyncDist); + +function browserSyncServe(done) { + browserSync.init(browserSyncConf()); + done(); +} + +function browserSyncDist(done) { + browserSync.init(browserSyncDistConf()); + done(); +} diff --git a/gulp_tasks/karma.js b/gulp_tasks/karma.js new file mode 100644 index 0000000..98aaf1d --- /dev/null +++ b/gulp_tasks/karma.js @@ -0,0 +1,27 @@ +process.env.NODE_ENV = 'test'; + +const path = require('path'); + +const gulp = require('gulp'); +const karma = require('karma'); + +gulp.task('karma:single-run', karmaSingleRun); +gulp.task('karma:auto-run', karmaAutoRun); + +function karmaFinishHandler(done) { + return failCount => { + done(failCount ? new Error(`Failed ${failCount} tests.`) : null); + }; +} + +function karmaSingleRun(done) { + const configFile = path.join(process.cwd(), 'conf', 'karma.conf.js'); + const karmaServer = new karma.Server({configFile}, karmaFinishHandler(done)); + karmaServer.start(); +} + +function karmaAutoRun(done) { + const configFile = path.join(process.cwd(), 'conf', 'karma-auto.conf.js'); + const karmaServer = new karma.Server({configFile}, karmaFinishHandler(done)); + karmaServer.start(); +} diff --git a/gulp_tasks/misc.js b/gulp_tasks/misc.js new file mode 100644 index 0000000..f6ba8d0 --- /dev/null +++ b/gulp_tasks/misc.js @@ -0,0 +1,25 @@ +const path = require('path'); + +const gulp = require('gulp'); +const del = require('del'); +const filter = require('gulp-filter'); + +const conf = require('../conf/gulp.conf'); + +gulp.task('clean', clean); +gulp.task('other', other); + +function clean() { + return del([conf.paths.dist, conf.paths.tmp]); +} + +function other() { + const fileFilter = filter(file => file.stat.isFile()); + + return gulp.src([ + path.join(conf.paths.src, '/**/*'), + path.join(`!${conf.paths.src}`, '/**/*.{scss,js,html}') + ]) + .pipe(fileFilter) + .pipe(gulp.dest(conf.paths.dist)); +} diff --git a/gulp_tasks/webpack.js b/gulp_tasks/webpack.js new file mode 100644 index 0000000..ec8e8b1 --- /dev/null +++ b/gulp_tasks/webpack.js @@ -0,0 +1,49 @@ +const gulp = require('gulp'); +const gutil = require('gulp-util'); + +const webpack = require('webpack'); +const webpackConf = require('../conf/webpack.conf'); +const webpackDistConf = require('../conf/webpack-dist.conf'); +const gulpConf = require('../conf/gulp.conf'); +const browsersync = require('browser-sync'); + +gulp.task('webpack:dev', done => { + webpackWrapper(false, webpackConf, done); +}); + +gulp.task('webpack:watch', done => { + webpackWrapper(true, webpackConf, done); +}); + +gulp.task('webpack:dist', done => { + process.env.NODE_ENV = 'production'; + webpackWrapper(false, webpackDistConf, done); +}); + +function webpackWrapper(watch, conf, done) { + const webpackBundler = webpack(conf); + + const webpackChangeHandler = (err, stats) => { + if (err) { + gulpConf.errorHandler('Webpack')(err); + } + gutil.log(stats.toString({ + colors: true, + chunks: false, + hash: false, + version: false + })); + if (done) { + done(); + done = null; + } else { + browsersync.reload(); + } + }; + + if (watch) { + webpackBundler.watch(200, webpackChangeHandler); + } else { + webpackBundler.run(webpackChangeHandler); + } +} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..541d6e4 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,29 @@ +const gulp = require('gulp'); +const HubRegistry = require('gulp-hub'); +const browserSync = require('browser-sync'); + +const conf = require('./conf/gulp.conf'); + +// Load some files into the registry +const hub = new HubRegistry([conf.path.tasks('*.js')]); + +// Tell gulp to use the tasks just loaded +gulp.registry(hub); + +gulp.task('build', gulp.series(gulp.parallel('other', 'webpack:dist'))); +gulp.task('test', gulp.series('karma:single-run')); +gulp.task('test:auto', gulp.series('karma:auto-run')); +gulp.task('serve', gulp.series('webpack:watch', 'watch', 'browsersync')); +gulp.task('serve:dist', gulp.series('default', 'browsersync:dist')); +gulp.task('default', gulp.series('clean', 'build')); +gulp.task('watch', watch); + +function reloadBrowserSync(cb) { + browserSync.reload(); + cb(); +} + +function watch(done) { + gulp.watch(conf.path.tmp('index.html'), reloadBrowserSync); + done(); +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..be2dcfe --- /dev/null +++ b/package.json @@ -0,0 +1,86 @@ +{ + "dependencies": { + "angular": "^1.6.2", + "angular-ui-router": "1.0.0-beta.3" + }, + "devDependencies": { + "@types/angular": "^1.6.6", + "@types/angular-mocks": "^1.5.9", + "@types/angular-ui-router": "^1.1.36", + "@types/jquery": "^2.0.40", + "angular-mocks": "^1.6.2", + "autoprefixer": "^6.7.3", + "babel-core": "^6.23.1", + "babel-eslint": "^7.1.1", + "babel-loader": "^6.3.2", + "babel-plugin-istanbul": "^4.0.0", + "babel-polyfill": "^6.23.0", + "babel-preset-es2015": "^6.22.0", + "browser-sync": "^2.18.8", + "browser-sync-spa": "^1.0.3", + "css-loader": "^0.26.1", + "del": "^2.2.2", + "es6-shim": "^0.35.3", + "eslint": "^3.15.0", + "eslint-config-angular": "^0.5.0", + "eslint-config-xo-space": "^0.15.0", + "eslint-loader": "^1.6.1", + "eslint-plugin-angular": "^1.6.1", + "eslint-plugin-babel": "^4.0.1", + "extract-text-webpack-plugin": "^2.0.0-rc.3", + "file-loader": "^0.11.1", + "gulp": "gulpjs/gulp#4ed9a4a3275559c73a396eff7e1fde3824951ebb", + "gulp-angular-filesort": "^1.1.1", + "gulp-angular-templatecache": "^2.0.0", + "gulp-filter": "^5.0.0", + "gulp-htmlmin": "^3.0.0", + "gulp-hub": "frankwallis/gulp-hub#d461b9c700df9010d0a8694e4af1fb96d9f38bf4", + "gulp-insert": "^0.5.0", + "gulp-ng-annotate": "^2.0.0", + "gulp-sass": "^3.1.0", + "gulp-util": "^3.0.8", + "html-loader": "^0.4.4", + "html-webpack-plugin": "^2.28.0", + "jasmine": "^2.5.3", + "json-loader": "^0.5.4", + "karma": "^1.4.1", + "karma-angular-filesort": "^1.0.2", + "karma-coverage": "^1.1.1", + "karma-jasmine": "^1.1.0", + "karma-junit-reporter": "^1.2.0", + "karma-ng-html2js-preprocessor": "^1.0.0", + "karma-phantomjs-launcher": "^1.0.2", + "karma-phantomjs-shim": "^1.4.0", + "karma-webpack": "^2.0.2", + "ng-annotate-loader": "^0.2.0", + "node-sass": "^4.5.0", + "phantomjs-prebuilt": "^2.1.14", + "postcss-loader": "^1.3.1", + "sass-loader": "^6.0.1", + "style-loader": "^0.13.1", + "url-loader": "^0.5.8", + "webpack": "^2.2.1", + "webpack-fail-plugin": "^1.0.5" + }, + "scripts": { + "build": "gulp", + "serve": "gulp serve", + "serve:dist": "gulp serve:dist", + "test": "gulp test", + "test:auto": "gulp test:auto" + }, + "eslintConfig": { + "globals": { + "expect": true + }, + "root": true, + "env": { + "browser": true, + "jasmine": true + }, + "parser": "babel-eslint", + "extends": [ + "xo-space/esnext" + ] + } +} diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fbb0f32bab2f600fc6c7ff4665bfeda89e9c77e4 GIT binary patch literal 6148 zcmeHK!EVz)5S?v8>l7k#pejdSkT{eo6%{?8N>(U`-jIUe0I0QVix|1yD0WCoNaYK^ z0Q>?!!Y}YS@OE}Vc5H4HLeY-2`^M{;+05JVZkC9|U>fcb^@zwpQ`p`_*C6V>YBgCi zBVC~27%`=k(}d1ww`OezECZH-|BV6l?cT!I8c{|GmA~J2lpQDXEJ$Pk8?`|^M!Wx$ z1sYL{d>Yeu$?99PRWQrOCf4_0oWxn)@Ba{Mt@e%e4X4v_I$h_@a3p8L+|Q@kz@NP0 zr#OrPqd%82`J?;6i#VE{^zJ;7Y3|2qG%14Jn>DW2*V1}*D|2L6yNGw{ z+H9oOuKX`PB^73Dz+h|sP;?JCR_Luhx5yT;BlSZLJlB+TVQn3;vSp$MKG@m)42;c2wJWxz5}WuT=W zd+Pju`uF>P)yY0t1}p4%c Z?_8w-J%fctj6m!k0j9xrmVtlDz%PAz32*=a literal 0 HcmV?d00001 diff --git a/src/.eslintrc.js b/src/.eslintrc.js new file mode 100644 index 0000000..53acc9e --- /dev/null +++ b/src/.eslintrc.js @@ -0,0 +1,13 @@ +module.exports = { + extends: [ + 'angular' + ], + rules: { + 'angular/no-service-method': 0, + 'max-params': 'off' + }, + globals: { + PRODUCTION: true, + API_URL: true + } +} diff --git a/src/app/.DS_Store b/src/app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1eb4e00e75d9d9bebb253daf0311d40cf9dcf4d6 GIT binary patch literal 8196 zcmeHLPfrs;6n_I1w;;0oDSx7ejg1Kjm_Q_QFoaq#S~*ZD(GtM2ZHKaPyVLA$TcOtU z6L{3b4`AZii(f#$f{7QufCo=r_07x{N=uK5(Rs?yCcQ|Y)F*hKx8{hqK{ zE^D(a+WD5cjcxj;5Y)QFWUF2&i20N)*_P+e&3z_4y`c+z7qxI$3lD0$sRLF``KDj? z;-|@=`KC);vqmQjH$2Tp9x-ITIk1Z$9s&Q6!@}8I{Y5E5kD-vb& zNUe5bZq`_+&l8tBSnVgWWJ;s}a52oN-=PBHLD8TbX29XqKtItlU!sFvgXdcD10uD8p9G=Fo5Yd@8hY-A^| zvcG;xa)oyBX=cmst?LsfPkRRHMXD565^3 zUJY!H9xfWihsKw`ix;)8BY!cvXmw1V3Zw#k1z7vSro8_b_{$6y`9?{X3Zw%6RRQhh zH}e^G7kBHyK6%#`v|BV9d5s+y`n^X0e()SQw@IHb?1NVWn + +
+

+ {{$ctrl.entry.title}} +

+
+ + +
+ + + {{$ctrl.entry.title}} + +
+ + +
+ +
+ + +
+
+ + + + + +
diff --git a/src/app/components/entry/entry.js b/src/app/components/entry/entry.js new file mode 100644 index 0000000..6f93417 --- /dev/null +++ b/src/app/components/entry/entry.js @@ -0,0 +1,61 @@ +import EntryHelper from '../../services/entryHelper'; + +class EntryController { + /** @ngInject */ + constructor($log, $timeout, $state, $stateParams, $sce, sayonaraService) { + this.$log = $log; + this.$timeout = $timeout; + this.$state = $state; + this.$stateParams = $stateParams; + this.$sce = $sce; + this.sayonaraService = sayonaraService; + + this.entryHelper = EntryHelper; + + // Initialize our entry + this.sayonaraSite = {}; + this.entry = {}; + } + + $onInit() { + // Get the entry + this.sayonaraService.getSite().then(siteJson => { + // Go to our entry array + this.sayonaraSite = siteJson; + const entries = siteJson.pages[0].entryTypes[0].entries; + + // Find the entry we are looking for + const foundEntry = entries.some(entry => { + if (entry.title === this.$stateParams.title) { + this.entry = entry; + return true; + } + return false; + }); + + if (!foundEntry) { + this.entry = { + title: 'Entry not found..' + }; + } + }); + } + + goBackHome() { + this.$state.go('app'); + } + + /** + * Funciton to get the emebed source, + * trust with $sce, and return + */ + getTrustedEmbed() { + const embedUrl = this.entryHelper.getEmbed(this.entry); + return this.$sce.trustAsResourceUrl(embedUrl); + } +} + +export const entry = { + template: require('./entry.html'), + controller: EntryController +}; diff --git a/src/app/components/entry/entry.scss b/src/app/components/entry/entry.scss new file mode 100644 index 0000000..f7986e6 --- /dev/null +++ b/src/app/components/entry/entry.scss @@ -0,0 +1,66 @@ +.c-entry { + + @include element('page-content') { + margin-bottom: 20px; + } + + + @include element('entry') { + + @include element('title-container') { + display: block; + margin-left: auto; + margin-right: auto; + text-align: center; + + @include element('title') { + display: inline-block; + color: $standard; + transition: all 0.5s; + margin-bottom: 10px; + } + } + + @include element('image-container') { + margin-left: auto; + margin-right: auto; + text-align: center; + margin-top: 10px; + margin-bottom: 10px; + + @include element('image') { + max-width: 100%; + } + } + + @include element('iframe-container') { + margin-left: auto; + margin-right: auto; + text-align: center; + margin-top: 10px; + margin-bottom: 10px; + + @include element('iframe') { + max-width: 100%; + } + } + + @include element('content') { + margin-left: auto; + margin-right: auto; + } + + @include element('date') { + margin-top: 10px; + text-align: right; + } + + @include element('category-container') { + margin-top: 25px; + margin-bottom: -10px; + margin-left: auto; + margin-right: auto; + text-align: center; + } + } +} diff --git a/src/app/components/entry/entry.spec.js b/src/app/components/entry/entry.spec.js new file mode 100644 index 0000000..af9ec38 --- /dev/null +++ b/src/app/components/entry/entry.spec.js @@ -0,0 +1,18 @@ +import angular from 'angular'; +import 'angular-mocks'; +import {entry} from './entry'; + +describe('entry component', () => { + beforeEach(() => { + angular + .module('entry', ['app/components/entry/entry.html']) + .component('entry', entry); + angular.mock.module('entry'); + }); + + it('should...', angular.mock.inject(($rootScope, $compile) => { + const element = $compile('')($rootScope); + $rootScope.$digest(); + expect(element).not.toBeNull(); + })); +}); diff --git a/src/app/components/main/main.html b/src/app/components/main/main.html new file mode 100644 index 0000000..e6c4ae7 --- /dev/null +++ b/src/app/components/main/main.html @@ -0,0 +1,47 @@ +
+ + +

+ Filter by category: +

+
+ +
+ {{category}} +
+
+ + + + +
+
+ + {{entry.title}} + + + Play Button + + +
+

+ {{entry.title}} +

+
+
+
+
diff --git a/src/app/components/main/main.js b/src/app/components/main/main.js new file mode 100644 index 0000000..076338d --- /dev/null +++ b/src/app/components/main/main.js @@ -0,0 +1,96 @@ +import playButtonImg from '../../images/playButton.svg'; +import EntryHelper from '../../services/entryHelper'; + +class MainController { + /** @ngInject */ + constructor($log, $timeout, $sce, $location, sayonaraService) { + this.$log = $log; + this.$timeout = $timeout; + this.$sce = $sce; + this.$location = $location; + this.sayonaraService = sayonaraService; + + this.playButtonImage = playButtonImg; + this.entryHelper = EntryHelper; + + this.sayonaraSite = {}; + + this.totalCategories = []; + this.currentCategory = false; + } + + $onInit() { + this.sayonaraService.getSite().then(siteJson => { + // Using timeout to propogate controller changes + this.$timeout(() => { + this.sayonaraSite = siteJson; + + // Get our entry categories + this.sayonaraSite.pages[0].entryTypes[0].entries.forEach(entry => { + entry.categories.forEach(category => { + if (!this.totalCategories.includes(category.title)) { + this.totalCategories.push(category.title); + } + }); + }); + }, 0); + }); + } + + /** + * Ng-click to navigate to entry + */ + goToEntry(entry) { + this.$location.path('/entry/' + entry.title); + } + + /** + * Funciton to act as our category filter + */ + entryCategoryFilter(entry) { + // Check if we have no current category + if (!this.currentCategory) { + return true; + } + // Check if we have no categories + if (!entry || + !entry.categories || + entry.categories.length <= 0) { + return false; + } + // Look through our entry categories + let response = false; + entry.categories.some(category => { + if (category.title === this.currentCategory) { + response = true; + return true; + } + return false; + }); + return response; + } + + /** + * function called whenever a category is clicked + */ + categoryClick(category) { + // First check if we a rediabling a category + if (this.currentCategory && + this.currentCategory === category) { + this.currentCategory = false; + return; + } + + // If not, Clear all items, timeout, + // and assign the category + this.currentCategory = 'TIMEOUTTIMEOUTTIMEOUT'; + this.$timeout(() => { + this.currentCategory = category; + }, 50); + } +} + +export const main = { + template: require('./main.html'), + controller: MainController +}; diff --git a/src/app/components/main/main.scss b/src/app/components/main/main.scss new file mode 100644 index 0000000..3258b5d --- /dev/null +++ b/src/app/components/main/main.scss @@ -0,0 +1,117 @@ +.c-main { + + @include element('categories-title') { + margin-left: auto; + margin-right: auto; + text-align: center; + font-family: 'Indie Flower', 'Roboto', sans-serif; + } + + @include element('categories-flex') { + display: flex; + justify-content: center; + flex-wrap: wrap; + margin-top: 10px; + margin-bottom: 10px; + + @include element('category') { + background-color: $category; + border-radius: 5px; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 10px; + padding-right: 10px; + margin-left: 10px; + margin-right: 10px; + cursor: pointer; + transition: background-color 0.5s; + + &:hover { + background-color: $category--hover; + } + + @include modifier('current') { + background-color: $category--current; + } + + @include modifier('no-hover') { + border-radius: 5px; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 10px; + padding-right: 10px; + margin-left: 10px; + margin-right: 10px; + background-color: $category; + + &:hover { + background-color: $category; + } + } + } + } + + @include element('entry-flex') { + display: flex; + justify-content: center; + flex-wrap: wrap; + margin-top: 10px; + } + + @include element('entry') { + width: 250px; + height: 250px; + overflow: hidden; + margin: 10px; + border-radius: 5px; + position: relative; + cursor: pointer; + + @include element('image') { + z-index: 0; + width: 100%; + height: auto; + min-width: 250px; + min-height: 250px; + object-fit: cover; + + @include modifier('play-button') { + position: absolute; + top: 0; + left: 0; + opacity: .5; + + z-index: 1; + width: 100%; + height: auto; + min-width: 250px; + min-height: 250px; + object-fit: contain; + } + } + + @include element('overlay') { + display: flex; + align-items: center; + justify-content: center; + z-index: 2; + opacity: 0; + width: 250px; + height: 250px; + background-color: $transparent-50; + position: absolute; + top: 0; + left: 0; + transition: opacity 0.5s; + + &:hover { + opacity: 1; + } + + @include element('title') { + color: $inverse; + font-family: 'Indie Flower', 'Roboto', sans-serif; + } + } + } +} diff --git a/src/app/components/main/main.spec.js b/src/app/components/main/main.spec.js new file mode 100644 index 0000000..80a0db2 --- /dev/null +++ b/src/app/components/main/main.spec.js @@ -0,0 +1,21 @@ +import angular from 'angular'; +import 'angular-mocks'; +import {main} from './main'; + +describe('main component', () => { + beforeEach(() => { + angular + .module('app', ['app/main.html']) + .component('app', main); + angular.mock.module('app'); + }); + + it('should render the header, title, techs and footer', angular.mock.inject(($rootScope, $compile) => { + const element = $compile('Loading...')($rootScope); + $rootScope.$digest(); + expect(element.find('fountain-header').length).toEqual(1); + expect(element.find('fountain-title').length).toEqual(1); + expect(element.find('fountain-techs').length).toEqual(1); + expect(element.find('fountain-footer').length).toEqual(1); + })); +}); diff --git a/src/app/components/page/page.html b/src/app/components/page/page.html new file mode 100644 index 0000000..302de56 --- /dev/null +++ b/src/app/components/page/page.html @@ -0,0 +1,10 @@ +
+

+ {{$ctrl.getPage().title}} +

+ +
+
+
diff --git a/src/app/components/page/page.js b/src/app/components/page/page.js new file mode 100644 index 0000000..6ab74e6 --- /dev/null +++ b/src/app/components/page/page.js @@ -0,0 +1,51 @@ +class PageController { + constructor($log, $timeout, $sce, $stateParams, sayonaraService) { + this.$log = $log; + this.$timeout = $timeout; + this.$sce = $sce; + this.$stateParams = $stateParams; + this.sayonaraService = sayonaraService; + + this.sayonaraSite = {}; + this.currentPage = {}; + } + + $onInit() { + this.sayonaraService.getSite().then(siteJson => { + // Using timeout to propogate controller changes + this.$timeout(() => { + this.sayonaraSite = siteJson; + }, 0); + }); + } + + // Get page by it's title + getPage() { + if (!this.sayonaraSite || Object.keys(this.sayonaraSite).length < 1) { + return false; + } + + // Check the cache before iterating + if (this.$stateParams.title === this.currentPage.title) { + return this.currentPage; + } + + // Find the page by its title + let foundPage = false; + this.sayonaraSite.pages.some(page => { + if (page.title === this.$stateParams.title) { + foundPage = page; + return true; + } + return false; + }); + // cache the result + this.currentPage = foundPage; + return foundPage; + } +} + +export const page = { + template: require('./page.html'), + controller: PageController +}; diff --git a/src/app/components/page/page.spec.js b/src/app/components/page/page.spec.js new file mode 100644 index 0000000..ea0f383 --- /dev/null +++ b/src/app/components/page/page.spec.js @@ -0,0 +1,18 @@ +import angular from 'angular'; +import 'angular-mocks'; +import {page} from './page'; + +describe('page component', () => { + beforeEach(() => { + angular + .module('page', ['app/components/page/page.html']) + .component('page', page); + angular.mock.module('page'); + }); + + it('should...', angular.mock.inject(($rootScope, $compile) => { + const element = $compile('')($rootScope); + $rootScope.$digest(); + expect(element).not.toBeNull(); + })); +}); diff --git a/src/app/images/.DS_Store b/src/app/images/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4a7728b16dca1354e1feec40d83de4251681e7a4 GIT binary patch literal 6148 zcmeH~F-yci5QX396$gS`r{$Jbg8yI%XJPFh&{MDpMmSHfOXttlH#4gka#~u*n=t!j zCo{X`6`3pm>vs1SzzV>U?!=o9bMxo!GdpMzBk5eD!w%2920YHP_XoW87*FVNi`Pm0 zIktGg!&N`rZTexuJZ@ko44V=_J+9O4K-E*K8ueVir8;sLTYj!8ynmZfBtT03G`mNQ;jUTqwcSq_VxxlY^J z+6l#Ccg9Pk!)j8a6p#W_1rBq%^8SBG|Ka>UEz(R1NP&N)fGyV7>yEF~dh6`vyw?`` s4gJ%Y8|fUP6_e45Iq_C}`Yo^cJ)hUcF&X8IM>(k<0oO$)1^z;T4=olPc>n+a literal 0 HcmV?d00001 diff --git a/src/app/images/playButton.svg b/src/app/images/playButton.svg new file mode 100644 index 0000000..0a60f6b --- /dev/null +++ b/src/app/images/playButton.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/app/services/entryHelper.js b/src/app/services/entryHelper.js new file mode 100644 index 0000000..c83091b --- /dev/null +++ b/src/app/services/entryHelper.js @@ -0,0 +1,141 @@ +/** + * Static service to keep Entry logic DRY + */ +class EntryHelper { + + /** + * Function to find the correct image for our main gallery + */ + static getEntryImageSource(entry) { + // Get the first custom field if there is one + if (!entry || + !entry.customFields || + entry.customFields.length <= 0) { + return false; + } + + // Find the first field in any filled custom field + const field = this.getEntryField(entry); + + if (!field) { + return field; + } + + // Check if it contains imgur + if (field.includes('imgur')) { + // If not a gif, return a small thumbnail + if (!field.includes('.gif')) { + // Parse out the file extensions + let smallImgur = field.split(/\.(jpg|jpeg|tiff|png)$/i); + // Add the imgur size extension to the link + smallImgur = smallImgur[0] + 'l.' + smallImgur[1]; + return smallImgur; + } + // If it is a gif, return the direct gif + return field; + } + + // Check if it contains youtube + if (field.includes('youtu')) { + // Return the small image as the background style + // https://img.youtube.com/vi/tjYUGPZtAOA/0.jpg + + // Extract the youtube video id + // https://stackoverflow.com/questions/3452546/javascript-regex-how-do-i-get-the-youtube-video-id-from-a-url + const youtubeRegExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; // eslint-disable-line + const match = field.match(youtubeRegExp); + const videoId = (match && match[7].length === 11) ? match[7] : false; + return 'https://img.youtube.com/vi/' + videoId + '/0.jpg'; + } + } + + /** + * Function to return the embeddable source + */ + static getEmbed(entry) { + // Get the first custom field if there is one + if (!entry || + !entry.customFields || + entry.customFields.length <= 0) { + return false; + } + + // Find the first field in any filled custom field + const field = this.getEntryField(entry); + + if (!field) { + return field; + } + + // Check if it contains imgur + if (field.includes('imgur')) { + // Return the full image + return field; + } + + // Check if it contains youtube + if (field.includes('youtu')) { + // Return the small image as the background style + // https://img.youtube.com/vi/tjYUGPZtAOA/0.jpg + + // Extract the youtube video id + // https://stackoverflow.com/questions/3452546/javascript-regex-how-do-i-get-the-youtube-video-id-from-a-url + const youtubeRegExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; // eslint-disable-line + const match = field.match(youtubeRegExp); + const videoId = (match && match[7].length === 11) ? match[7] : false; + return 'https://youtube.com/embed/' + videoId; + } + } + + /** + * Function to return if an entry is a image + */ + static isImage(entry) { + // Find the first field in any filled custom field + const field = this.getEntryField(entry); + + if (!field) { + return field; + } + + return field.includes('imgur'); + } + + /** + * Function to return if an entry is a video + */ + static isVideo(entry) { + // Find the first field in any filled custom field + const field = this.getEntryField(entry); + + if (!field) { + return field; + } + + return field.includes('youtu'); + } + + /** + * Function to grab the first filed of an entry + */ + static getEntryField(entry) { + // Find the first field in any filled custom field + let field = false; + if (!entry || + !entry.customFields || + entry.customFields.length < 1) { + return field; + } + entry.customFields.some(customField => { + if (customField.fields && customField.fields[0].length > 0) { + field = customField.fields[0]; + return true; + } + return false; + }); + + return field; + } +} + +export default EntryHelper; diff --git a/src/app/services/entryHelper.spec.js b/src/app/services/entryHelper.spec.js new file mode 100644 index 0000000..d310e9a --- /dev/null +++ b/src/app/services/entryHelper.spec.js @@ -0,0 +1,16 @@ +import angular from 'angular'; +import 'angular-mocks'; +import EntryHelper from './entryHelper'; + +describe('EntryHelper service', () => { + beforeEach(() => { + angular + .module('EntryHelper', []) + .service('EntryHelper', EntryHelper); + angular.mock.module('EntryHelper'); + }); + + it('should', angular.mock.inject(EntryHelper => { + expect(EntryHelper.getData()).toEqual(3); + })); +}); diff --git a/src/app/services/sayonara.js b/src/app/services/sayonara.js new file mode 100644 index 0000000..5a5aa0f --- /dev/null +++ b/src/app/services/sayonara.js @@ -0,0 +1,54 @@ +class Sayonara { + + /** @ngInject */ + constructor($log, $location, $http) { + this.$log = $log; + this.$location = $location; + this.$http = $http; + + // Promise of getting blog json + this.sayonaraPromise = {}; + this.sayonaraSite = {}; + + // Make a request to get the site + const sayonaraUrlPath = '/api/public'; + let sayonaraUrlHost = ''; + // Production and API URL from webpack config + if (PRODUCTION) { + // Point to prod sayonara + sayonaraUrlHost = '//' + this.$location.host(); + } else { + // Point to Dev sayonara + sayonaraUrlHost = API_URL; + } + + this.sayonaraPromise = this.$http({ + method: 'GET', + url: sayonaraUrlHost + sayonaraUrlPath + }).then(response => { + // this callback will be called asynchronously + // when the response is available + // this.$log.debug('Sayonara Response: ', response.data); + this.sayonaraSite = response.data; + }, response => { + // called asynchronously if an error occurs + // or server returns response with an error status. + this.$log.error('Sayonara Error: ', response); + }); + } + + getSite() { + return new Promise(resolve => { + if (Object.keys(this.sayonaraSite) > 0) { + resolve(this.sayonaraSite); + } + + // Promise still grabbing + this.sayonaraPromise.then(() => { + resolve(this.sayonaraSite); + }); + }); + } +} + +export default Sayonara; diff --git a/src/app/services/sayonara.spec.js b/src/app/services/sayonara.spec.js new file mode 100644 index 0000000..43b3d78 --- /dev/null +++ b/src/app/services/sayonara.spec.js @@ -0,0 +1,16 @@ +import angular from 'angular'; +import 'angular-mocks'; +import Sayonara from './sayonara'; + +describe('Sayonara service', () => { + beforeEach(() => { + angular + .module('Sayonara', []) + .service('Sayonara', Sayonara); + angular.mock.module('Sayonara'); + }); + + it('should', angular.mock.inject(Sayonara => { + expect(Sayonara.getData()).toEqual(3); + })); +}); diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..dd99880 --- /dev/null +++ b/src/index.html @@ -0,0 +1,21 @@ + + + + + + Leah Rose Garza + + + + + + + +
+
+ + +
+
+ + diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..67857e7 --- /dev/null +++ b/src/index.js @@ -0,0 +1,67 @@ +import angular from 'angular'; + +// Import our modules +import {angularNavbarModule} from './modules/navbar/index'; +import 'angular-ui-router'; + +// Import our configs +import routesConfig from './routes'; + +// Import our services +import Sayonara from './app/services/sayonara'; + +// Import our components +import {main} from './app/components/main/main'; +import {entry} from './app/components/entry/entry'; +import {page} from './app/components/page/page'; + +import './index.scss'; + +angular + .module('app', [angularNavbarModule, 'ui.router']) + .config(routesConfig) + .service('sayonaraService', Sayonara) + .run(($log, $timeout, sayonaraService, navbarRouteService) => { + /** @ngInject */ + + // Start polling for the site + sayonaraService.getSite().then(response => { + $timeout(() => { + navbarRouteService.setTitle(response.siteName, { + title: 'Home', + state: 'app', + url: '/' + }); + + // Create our routes from our pages + const navbarRoutes = []; + response.pages.forEach((page, index) => { + if (index === 0) { + navbarRoutes.push({ + title: page.title, + state: 'app', + url: '/' + }); + } else { + navbarRoutes.push({ + title: page.title, + state: 'page', + stateParams: { + title: page.title + }, + url: '/page/' + page.title + }); + } + }); + + // Set the routes + navbarRouteService.setRoutes(navbarRoutes); + }, 0); + }); + + // Set up our nav + // navbarRouteService.enableAlwaysDesktop(); + }) + .component('app', main) + .component('entry', entry) + .component('page', page); diff --git a/src/index.scss b/src/index.scss new file mode 100644 index 0000000..1cb1056 --- /dev/null +++ b/src/index.scss @@ -0,0 +1,48 @@ +/* Import our fonts (from google Fonts) */ +@import url('https://fonts.googleapis.com/css?family=Indie+Flower|Roboto:300'); + +/* Import global styles */ +@import 'styles/variables'; +@import 'styles/mediaQuery'; +@import 'styles/bem'; +@import 'styles/animate'; +@import 'styles/quill'; + +/* Import module styles */ +@import 'app/components/main/main'; +@import 'app/components/entry/entry'; + +/* Global general styles */ +body { + margin: 0px; +} + +html { + background-color: $inverse; +} + +* { + font-family: 'Roboto', sans-serif; +} + +img { + max-width: 100%; +} + +.app-page-content { + +} + +.app-container { + margin-top: 5px; + padding-left: 5px; + padding-right: 5px; + + max-width: 750px; + margin-left: auto; + margin-right: auto; + position: relative; +} + +/* Import Nav bar, to allow extending the container */ +@import 'modules/navbar/navbar'; diff --git a/src/index.spec.js b/src/index.spec.js new file mode 100644 index 0000000..d56de87 --- /dev/null +++ b/src/index.spec.js @@ -0,0 +1,2 @@ +const context = require.context('./app', true, /\.(js|ts|tsx)$/); +context.keys().forEach(context); diff --git a/src/modules/navbar/index.js b/src/modules/navbar/index.js new file mode 100644 index 0000000..98dbc62 --- /dev/null +++ b/src/modules/navbar/index.js @@ -0,0 +1,11 @@ +import angular from 'angular'; + +import NavbarRouteService from './navbarRoute'; +import {Navbar} from './navbar'; + +export const angularNavbarModule = 'angularNav'; + +angular + .module(angularNavbarModule, []) + .service('navbarRouteService', NavbarRouteService) + .component('angularNav', Navbar); diff --git a/src/modules/navbar/navbar.html b/src/modules/navbar/navbar.html new file mode 100644 index 0000000..3cc7711 --- /dev/null +++ b/src/modules/navbar/navbar.html @@ -0,0 +1,98 @@ +
+ +
+ +
+ {{$ctrl.navbarRouteService.title}} +
+ + +
+ {{$ctrl.navbarRouteService.title}} +
+ +
    +
  • + {{route.title}} +
  • +
+
+ + +
+ + +
+
+
+
+
+
+
+
+ + +
+ {{$ctrl.navbarRouteService.title}} +
+ + +
+ {{$ctrl.navbarRouteService.title}} +
+ + +
+
+ + +
+ + +
+ {{$ctrl.navbarRouteService.title}} +
+ + +
+ {{$ctrl.navbarRouteService.title}} +
+ +
    +
  • + {{route.title}} +
  • +
+
+
+
diff --git a/src/modules/navbar/navbar.js b/src/modules/navbar/navbar.js new file mode 100644 index 0000000..acd61bf --- /dev/null +++ b/src/modules/navbar/navbar.js @@ -0,0 +1,55 @@ +class NavbarController { + /** @ngInject */ + constructor($log, $state, $stateParams, $location, navbarRouteService) { + this.$log = $log; + this.$state = $state; + this.$stateParams = $stateParams; + this.$location = $location; + this.navbarRouteService = navbarRouteService; + this.showNav = false; + } + + // Check if a route is active + isActive(route) { + if (route.state) { + if (route.stateParams) { + // Check and make sure all params are the same + let paramsValid = true; + Object.keys(route.stateParams).some(param => { + if (this.$stateParams[param] !== route.stateParams[param]) { + paramsValid = false; + return true; + } + return false; + }); + return paramsValid && this.$state.includes(route.state); + } + return this.$state.includes(route.state); + } else if (route.url) { + return this.$location.path().includes(route.url); + } + this.$log.err('Angular Navbar: Route object must contain a \'state\' or \'url\' key'); + return false; + } + + // Go to a State + goToState(route) { + if (route.state) { + // Pass params if we have them + if (route.stateParams) { + this.$state.go(route.state, route.stateParams); + } else { + this.$state.go(route.state); + } + } else if (route.url) { + this.$location.path(route.url); + } + this.showNav = false; + } +} + +// Return the component +export const Navbar = { + template: require('./navbar.html'), + controller: NavbarController +}; diff --git a/src/modules/navbar/navbar.scss b/src/modules/navbar/navbar.scss new file mode 100644 index 0000000..f32f52c --- /dev/null +++ b/src/modules/navbar/navbar.scss @@ -0,0 +1,259 @@ +.always-show { + @include all-mobile() { + display: block !important; + } + + @include not-mobile() { + display: block !important; + } +} + +.always-hide { + @include all-mobile() { + display: none !important; + } + + @include not-mobile() { + display: none !important; + } +} + +.angular-navbar { + width: 100%; + background-color: $navbar; + color: $standard; + margin-left: auto; + margin-right: auto; + text-align: left; + min-height: 55px; + z-index: 10; + + @extend .app-container; + + //Desktop Top Nav + + @include element('desktop') { + display: flex; + justify-content: space-between; + + //Hide on mobile + @include all-mobile() { + display: none; + } + + //If always show + @include modifier('always-show') { + @extend .always-show; + } + + //If Always hide + @include modifier('always-hide') { + @extend .always-hide; + } + + @include element('title') { + display: inline-block; + font-size: 1.5em; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + + @include modifier('route') { + display: inline-block; + font-size: 1.5em; + cursor: pointer; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + top: 0px; + transition: top 0.45s; + + &:hover { + position: relative; + top: -3px; + } + } + } + + @include element('list') { + + padding-left: 0px; + /* Remove Bullets */ + list-style-type: none; + margin-left: auto; + display: inline-block; + + @include element('item') { + font-size: 1.25em; + cursor: pointer; + display: inline-block; + margin-left: 10px; + margin-right: 10px; + padding-left: 0px; + text-align: right; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + top: 0px; + transition: top 0.25s; + + &::before { + display: none; + } + + &:hover { + position: relative; + top: -2px; + } + + + //Underline when the route is active + @include modifier('active') { + border-bottom: solid 2px $standard; + } + } + } + } + + //Mobile Sidenav + @include element('mobile') { + + //Hide on desktop + @include not-mobile() { + display: none; + } + + //If always show + @include modifier('always-show') { + @extend .always-show; + } + + //If Always hide + @include modifier('always-hide') { + @extend .always-hide; + } + + //Hamburger menu + @include element('hamburger') { + position: absolute; + top: 7px; + left: 10px; + border: solid 2px $standard; + border-radius: 5px; + cursor: pointer; + + padding-top: 5px; + padding-left: 5px; + padding-right: 5px; + padding-bottom: 10px; + + @include element('bar') { + border-bottom: solid 2px $standard; + height: 5px; + width: 30px; + } + + @include modifier('nav-active') { + + } + } + + @include element('title') { + position: absolute; + top: 12px; + left: 65px; + display: inline-block; + font-size: 1.5em; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + + @include modifier('route') { + position: absolute; + top: 12px; + left: 65px; + display: inline-block; + font-size: 1.5em; + cursor: pointer; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + } + } + + //Semi Transparent overlay behind sidenav + @include element('shade') { + visibility: hidden; + position: fixed; + z-index: -9999; + background-color: $standard; + opacity: 0; + transition: opacity 0.5s ease-in-out; + + //Cover the entire screen + min-width: 110%; + min-height: 102%; + margin-left: -5%; + margin-top: -1%; + + @include modifier('nav-active') { + visibility: visible; + opacity: 0.5; + z-index: 10; + } + } + + @include element('sidenav') { + + position: fixed; + top: 0px; + left: 0px; + margin-left: -500px; + transition: margin-left 0.5s ease-in-out; + min-height: 100%; + min-width: 275px; + max-width: 275px; + background-color: $navbar; + padding: 10px; + z-index: 12; + + //Show the navbar + @include modifier('nav-active') { + margin-left: 0px; + } + + @include element('title') { + font-size: 1.75em; + display: block; + top: 20px; + left: 10px; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + + @include modifier('route') { + font-size: 1.75em; + cursor: pointer; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + } + } + + @include element('list') { + + padding-left: 0px; + /* Remove Bullets */ + list-style-type: none; + margin-top: 0px; + padding-left: 10px; + padding-top: 10px; + padding-bottom: 10px; + display: block; + + @include element('item') { + font-size: 1.5em; + cursor: pointer; + display: block; + padding-left: 0px; + font-family: 'Indie Flower', cursive, Arial, Helvetica, sans-serif; + &::before { + display: none; + } + + //Underline when the route is active + @include modifier('active') { + display: block; + text-decoration: underline; + } + } + } + } + } +} diff --git a/src/modules/navbar/navbarRoute.js b/src/modules/navbar/navbarRoute.js new file mode 100644 index 0000000..5eea692 --- /dev/null +++ b/src/modules/navbar/navbarRoute.js @@ -0,0 +1,53 @@ +class NavbarRouteService { + constructor() { + this.title = ''; + this.titleRoute = {}; + this.routes = {}; + this.activeRoute = ''; + + // Always show + this.alwaysDesktop = false; + this.alwaysMobile = false; + } + + /** + * Json should follow the following format + [{ + title: "Home", + state: "home", + url: "/home" + }, + { + title: "About", + state: "about" + url: "/about" + }] + */ + setRoutes(routes) { + this.routes = routes; + } + + setTitle(title, route) { + this.title = title; + + if (route) { + this.titleRoute = route; + } + } + + getRoutes() { + return this.routes; + } + + enableAlwaysDesktop() { + this.alwaysDesktop = true; + this.alwaysMobile = false; + } + + enableAlwaysMobile() { + this.alwaysDesktop = false; + this.alwaysMobile = true; + } +} + +export default NavbarRouteService; diff --git a/src/modules/navbar/navbarRoute.spec.js b/src/modules/navbar/navbarRoute.spec.js new file mode 100644 index 0000000..939ae6b --- /dev/null +++ b/src/modules/navbar/navbarRoute.spec.js @@ -0,0 +1,16 @@ +import angular from 'angular'; +import 'angular-mocks'; +import NavbarRoute from './navbarRoute'; + +describe('NavbarRoute service', () => { + beforeEach(() => { + angular + .module('NavbarRoute', []) + .service('NavbarRoute', NavbarRoute); + angular.mock.module('NavbarRoute'); + }); + + it('should', angular.mock.inject(NavbarRoute => { + expect(NavbarRoute.getData()).toEqual(3); + })); +}); diff --git a/src/routes.js b/src/routes.js new file mode 100644 index 0000000..b6e5ada --- /dev/null +++ b/src/routes.js @@ -0,0 +1,21 @@ +export default routesConfig; + +/** @ngInject */ +function routesConfig($stateProvider, $urlRouterProvider, $locationProvider) { + $locationProvider.html5Mode(false).hashPrefix(''); + $urlRouterProvider.otherwise('/'); + + $stateProvider + .state('app', { + url: '/', + component: 'app' + }) + .state('page', { + url: '/page/:title', + component: 'page' + }) + .state('entry', { + url: '/entry/:title', + component: 'entry' + }); +} diff --git a/src/styles/animate.scss b/src/styles/animate.scss new file mode 100644 index 0000000..7148b57 --- /dev/null +++ b/src/styles/animate.scss @@ -0,0 +1,3340 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.1 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2016 Daniel Eden + */ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animated.flipOutX, +.animated.flipOutY, +.animated.bounceIn, +.animated.bounceOut { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.headShake { + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-name: headShake; + animation-name: headShake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, 11.1%, to { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + transform-origin: center; +} + +@-webkit-keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInDown { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInRight { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: none; + transform: none; + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, 60%, 75%, 90%, to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} diff --git a/src/styles/bem.scss b/src/styles/bem.scss new file mode 100644 index 0000000..942e6d1 --- /dev/null +++ b/src/styles/bem.scss @@ -0,0 +1,33 @@ +//BEM Styling mixins +//From: https://css-tricks.com/snippets/sass/bem-mixins/ + +/// @access public +/// @param {String} $element - Element's name +@mixin element($element) { + &__#{$element} { + @content; + } +} + +/// Block Modifier +/// @access public +/// @param {String} $modifier - Modifier's name +@mixin modifier($modifier) { + &--#{$modifier} { + @content; + } +} + +/// @alias element +@mixin e($element) { + @include element($element) { + @content; + } +} + +/// @alias modifier +@mixin m($modifier) { + @include modifier($modifier) { + @content; + } +} diff --git a/src/styles/mediaQuery.scss b/src/styles/mediaQuery.scss new file mode 100644 index 0000000..6a9db9f --- /dev/null +++ b/src/styles/mediaQuery.scss @@ -0,0 +1,41 @@ +//Inspired by: https://davidwalsh.name/write-media-queries-sass + +$mobile-width: 320px; +$tablet-width: 768px; +$desktop-width: 1024px; +$large-desktop-width: 1440px; + +//Specific to mobile devices +@mixin mobile { + @media (min-width: #{$mobile-width}) and (max-width: #{$tablet-width - 1px}) { + @content; + } +} + +//Specific to tablet devices +@mixin tablet { + @media (min-width: #{$tablet-width}) and (max-width: #{$desktop-width - 1px}) { + @content; + } +} + +//Specific to desktop devices +@mixin desktop { + @media (min-width: #{$desktop-width}) { + @content; + } +} + +//All Mobile Devices including tablets +@mixin all-mobile { + @media (max-width: #{$tablet-width}) { + @content; + } +} + +//No Mobile devices, include tablets +@mixin not-mobile { + @media (min-width: #{$tablet-width}) { + @content; + } +} diff --git a/src/styles/quill.scss b/src/styles/quill.scss new file mode 100644 index 0000000..2372025 --- /dev/null +++ b/src/styles/quill.scss @@ -0,0 +1,367 @@ +/*! + * Quill Editor v1.2.2 + * https://quilljs.com/ + * Copyright (c) 2014, Jason Chen + * Copyright (c) 2013, salesforce.com + */ +.ql-container { + box-sizing: border-box; + font-family: Helvetica, Arial, sans-serif; + font-size: 13px; + height: 100%; + margin: 0px; + position: relative; +} +.ql-container.ql-disabled .ql-tooltip { + visibility: hidden; +} +.ql-container.ql-disabled ul[data-checked] > li::before { + pointer-events: none; +} +.ql-clipboard { + left: -100000px; + height: 1px; + overflow-y: hidden; + position: absolute; + top: 50%; +} +.ql-clipboard p { + margin: 0; + padding: 0; +} + p, + ol, + ul, + pre, + blockquote, + h1, + h2, + h3, + h4, + h5, + h6 { + margin: 0; + padding: 0; + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} + ol, + ul { + padding-left: 1.5em; +} + ol > li, + ul > li { + list-style-type: none; +} + ul > li::before { + content: '\2022'; +} + ul[data-checked=true], + ul[data-checked=false] { + pointer-events: none; +} + ul[data-checked=true] > li::before, + ul[data-checked=false] > li::before { + color: #777; + cursor: pointer; + pointer-events: all; +} + ul[data-checked=true] > li::before { + content: '\2611'; +} + ul[data-checked=false] > li::before { + content: '\2610'; +} + li::before { + display: inline-block; + margin-right: 0.3em; + text-align: right; + white-space: nowrap; + width: 1.2em; +} + li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; +} + ol li, + ul li { + padding-left: 1.5em; +} + ol li { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + counter-increment: list-num; +} + ol li:before { + content: counter(list-num, decimal) '. '; +} + ol li.ql-indent-1 { + counter-increment: list-1; +} + ol li.ql-indent-1:before { + content: counter(list-1, lower-alpha) '. '; +} + ol li.ql-indent-1 { + counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} + ol li.ql-indent-2 { + counter-increment: list-2; +} + ol li.ql-indent-2:before { + content: counter(list-2, lower-roman) '. '; +} + ol li.ql-indent-2 { + counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} + ol li.ql-indent-3 { + counter-increment: list-3; +} + ol li.ql-indent-3:before { + content: counter(list-3, decimal) '. '; +} + ol li.ql-indent-3 { + counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; +} + ol li.ql-indent-4 { + counter-increment: list-4; +} + ol li.ql-indent-4:before { + content: counter(list-4, lower-alpha) '. '; +} + ol li.ql-indent-4 { + counter-reset: list-5 list-6 list-7 list-8 list-9; +} + ol li.ql-indent-5 { + counter-increment: list-5; +} + ol li.ql-indent-5:before { + content: counter(list-5, lower-roman) '. '; +} + ol li.ql-indent-5 { + counter-reset: list-6 list-7 list-8 list-9; +} + ol li.ql-indent-6 { + counter-increment: list-6; +} + ol li.ql-indent-6:before { + content: counter(list-6, decimal) '. '; +} + ol li.ql-indent-6 { + counter-reset: list-7 list-8 list-9; +} + ol li.ql-indent-7 { + counter-increment: list-7; +} + ol li.ql-indent-7:before { + content: counter(list-7, lower-alpha) '. '; +} + ol li.ql-indent-7 { + counter-reset: list-8 list-9; +} + ol li.ql-indent-8 { + counter-increment: list-8; +} + ol li.ql-indent-8:before { + content: counter(list-8, lower-roman) '. '; +} + ol li.ql-indent-8 { + counter-reset: list-9; +} + ol li.ql-indent-9 { + counter-increment: list-9; +} + ol li.ql-indent-9:before { + content: counter(list-9, decimal) '. '; +} + .ql-indent-1:not(.ql-direction-rtl) { + padding-left: 3em; +} + li.ql-indent-1:not(.ql-direction-rtl) { + padding-left: 4.5em; +} + .ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 3em; +} + li.ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 4.5em; +} + .ql-indent-2:not(.ql-direction-rtl) { + padding-left: 6em; +} + li.ql-indent-2:not(.ql-direction-rtl) { + padding-left: 7.5em; +} + .ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 6em; +} + li.ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 7.5em; +} + .ql-indent-3:not(.ql-direction-rtl) { + padding-left: 9em; +} + li.ql-indent-3:not(.ql-direction-rtl) { + padding-left: 10.5em; +} + .ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 9em; +} + li.ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 10.5em; +} + .ql-indent-4:not(.ql-direction-rtl) { + padding-left: 12em; +} + li.ql-indent-4:not(.ql-direction-rtl) { + padding-left: 13.5em; +} + .ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 12em; +} + li.ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 13.5em; +} + .ql-indent-5:not(.ql-direction-rtl) { + padding-left: 15em; +} + li.ql-indent-5:not(.ql-direction-rtl) { + padding-left: 16.5em; +} + .ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 15em; +} + li.ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 16.5em; +} + .ql-indent-6:not(.ql-direction-rtl) { + padding-left: 18em; +} + li.ql-indent-6:not(.ql-direction-rtl) { + padding-left: 19.5em; +} + .ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 18em; +} + li.ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 19.5em; +} + .ql-indent-7:not(.ql-direction-rtl) { + padding-left: 21em; +} + li.ql-indent-7:not(.ql-direction-rtl) { + padding-left: 22.5em; +} + .ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 21em; +} + li.ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 22.5em; +} + .ql-indent-8:not(.ql-direction-rtl) { + padding-left: 24em; +} + li.ql-indent-8:not(.ql-direction-rtl) { + padding-left: 25.5em; +} + .ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 24em; +} + li.ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 25.5em; +} + .ql-indent-9:not(.ql-direction-rtl) { + padding-left: 27em; +} + li.ql-indent-9:not(.ql-direction-rtl) { + padding-left: 28.5em; +} + .ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 27em; +} + li.ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 28.5em; +} + .ql-video { + display: block; + max-width: 100%; +} + .ql-video.ql-align-center { + margin: 0 auto; +} + .ql-video.ql-align-right { + margin: 0 0 0 auto; +} + .ql-bg-black { + background-color: #000; +} + .ql-bg-red { + background-color: #e60000; +} + .ql-bg-orange { + background-color: #f90; +} + .ql-bg-yellow { + background-color: #ff0; +} + .ql-bg-green { + background-color: #008a00; +} + .ql-bg-blue { + background-color: #06c; +} + .ql-bg-purple { + background-color: #93f; +} + .ql-color-white { + color: #fff; +} + .ql-color-red { + color: #e60000; +} + .ql-color-orange { + color: #f90; +} + .ql-color-yellow { + color: #ff0; +} + .ql-color-green { + color: #008a00; +} + .ql-color-blue { + color: #06c; +} + .ql-color-purple { + color: #93f; +} + .ql-font-serif { + font-family: Georgia, Times New Roman, serif; +} + .ql-font-monospace { + font-family: Monaco, Courier New, monospace; +} + .ql-size-small { + font-size: 0.75em; +} + .ql-size-large { + font-size: 1.5em; +} + .ql-size-huge { + font-size: 2.5em; +} + .ql-direction-rtl { + direction: rtl; + text-align: inherit; +} + .ql-align-center { + text-align: center; +} + .ql-align-justify { + text-align: justify; +} + .ql-align-right { + text-align: right; +} +.ql-blank::before { + color: rgba(0,0,0,0.6); + content: attr(data-placeholder); + font-style: italic; + pointer-events: none; + position: absolute; +} diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..654ff16 --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,21 @@ +$standard: #030303; +$inverse: #FBFBFB; + +$navbar: $inverse; +$category: #EAEAEA; +$category--current: #CBCBCB; +$category--hover: #BEBEBE; + +$links: #4a9cee; + +//Dark transparent +$transparent: rgba(0, 0, 0, 0); +$transparent-25: rgba(0, 0, 0, 0.25); +$transparent-50: rgba(0, 0, 0, 0.5); +$transparent-75: rgba(0, 0, 0, 0.75); + +//light transparent +$transparent-light: rgba(255, 255, 255, 0); +$transparent-light-25: rgba(255, 255, 255, 0.25); +$transparent-light-50: rgba(255, 255, 255, 0.5); +$transparent-light-75: rgba(255, 255, 255, 0.75);