diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..e4b1f54 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,100 @@ +{ + "extends": "eslint:recommended", // eslint推荐规范,避免代码错误和潜在风险 + "parser": "babel-eslint", + "plugins": [ + "react" + ], + "env": { //指定环境,browser、node、commonjs、shared-node-browser…… + "es6": true, // 支持es6全局变量 + "browser": true, // browser 全局变量。 + "node": true //Node.js 全局变量和 Node.js 作用域。 + }, + //+开发人员根据项目自定义 + "globals": { //使用 globals 指出你要使用的全局变量 + "var1": true, //允许变量被重写 + "var2": false //不允许被重写 + }, + "rules": { + //v1.0规则 + "unicode-bom":0,// 要求或禁止 Unicode BOM + "indent": [1, 4, { "SwitchCase": 1 }],//缩进风格,4个空格 + "linebreak-style": [0, "windows"],//关闭换行风格 + "eol-last": ["error", "always"],// 文件末尾强制换行 + "max-len": [1, 120], //长度1-120 + "semi": [2, "always"],// 要求或禁止使用分号而不是 ASI(这个才是控制行尾部分号的,) + "curly": [2, "all"],// 强制所有控制语句使用一致的括号风格 + "no-use-before-define": ["error", { "functions": false, "classes": true }],// 不允许在变量定义之前使用它们 + "no-loop-func": "error",// 禁止在循环中出现 function 声明和表达式 + "radix": "error",// 强制在parseInt()使用基数参数 + "quotes": [1, "single", "avoid-escape"],// 强制使用一致的反勾号、双引号或单引号 + "no-multi-str": "error",// 禁止使用多行字符串,在 JavaScript 中,可以在新行之前使用斜线创建多行字符串 + "no-new-wrappers":2,// 禁止对 String,Number 和 Boolean 使用 new 操作符 + "no-new-object": "error",// 禁止使用 Object 的构造函数 + "no-new-func": 1,// 禁止对 Function 对象使用 new 操作符 + "no-array-constructor":2,// 禁止使用 Array 构造函数 + "guard-for-in": 1,// 要求 for-in 循环中有一个 if 语句 + "no-prototype-builtins":2,// 禁止直接使用 Object.prototypes 的内置属性 + "no-extend-native": 2,// 禁止扩展原生类型 + "no-proto":2,// 禁用 __proto__ 属性 + "no-eval":2,// 禁用 eval() + "no-with":2,// 禁用 with 语句 + //+overwrite eslint:recommended + "no-useless-escape": "off", //覆盖eslint:recommended中的规则,避免过多的不合理检查结果 + //+refine + "comma-dangle": "error", //要求对象或数组成员的最后不能添加逗号 + //+new code style + "space-infix-ops": ["error", {"int32Hint": true}], //中间的运算符左右要添加空格 + "space-before-function-paren": ["error", "always"], //方法括号前统一加空格,增加代码可读性 + "block-spacing": ["error", "always"], //单行内间距一致,增加代码可读性 + "space-before-blocks": ["error", "always"], //不是单独一行的{}前添加空格,增加代码可读性 + "keyword-spacing": ["error", {"before": true, "after": true }], //关键字左右添加空格,增加代码可读性 + "spaced-comment": ["error", "always"], //注释符号和注释内容直接添加一个空格 + "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }], //文档中连续空行不得超过2行,文件开头不能有空行,文件结尾最多一个空行 + "operator-linebreak": ["error", "before"], //运算符在换行时放在下一行的开始 + "padded-blocks": ["error", "never"], //在代码块内开始和结束无需添加空格,使代码更简洁 + "jsx-quotes": ["error", "prefer-single"], //jsx属性推荐使用单引号,与全局规则统一 + //+es6 + "arrow-spacing": ["error", { "before": true, "after": true }], //箭头符号前后要有空格,增加代码可读性 + "no-confusing-arrow": ["error", {"allowParens": true}], //箭头函数不能与条件表达式混用,容易造成代码意图不明确,不便于维护 + "no-useless-constructor": "error", //不需要编写无用的构造方法 + "generator-star-spacing": ["error", "both"], //使用构造器函数时,* 号左右添加空格,增强代码可读性 + "no-duplicate-imports": ["error", { "includeExports": true }], //避免模块重复引入和导出 + "no-useless-computed-key": "error", //避免使用无必要的计算属性key + "no-useless-rename": "error", //避免无必要的重命名 + "no-var": "warn", //建议逐渐使用let和const替代var声明变量和常量 + "object-shorthand": "warn", //object属性声明尽量简洁明了,能简化的代码推荐使用简写 + "prefer-arrow-callback": "warn", //建议回调函数尽量使用箭头函数声明 + "prefer-const": "warn", //声明后不做改变的变量尽量使用const声明为常量 + "prefer-spread": "warn", //建议使用Spread特性替换只为传递数组参数时调用apply + "prefer-template": "warn", //建议使用template替代字符串拼接 + "rest-spread-spacing": "error", //rest和spread符号后不要添加空格 + "symbol-description": "error", //方在创建Symbol类型时要添加描述 + "template-curly-spacing": ["error", "never"], //template摸板中${符号后和}符号前不添加空格 + "yield-star-spacing": ["error", "both"], //yield表达式 * 号左右添加空格 + //…………… + //配置定义在插件中的一个规则的时候,你必须使用 插件名/规则ID 的形式 + //+react + "react/display-name":["warn", { "ignoreTranspilerName": true }],//要求定义React组件时设置displayName属性 + "react/jsx-key":"error",//如果元素是被数组渲染,则需要元素上需要携带key值 + "react/jsx-no-comment-textnodes":"error",//禁止注释作为文本节点被插入 + "react/jsx-no-target-blank":"error",//禁止使用不安全的 target='_blank' + "react/jsx-no-duplicate-props":"error",//防止重复的属性 + "react/jsx-no-undef": ["error", { "allowGlobals": true }],//防止未声明的变量使用 + "react/jsx-uses-react": "warn",//防止引入react后未使用 + "react/jsx-uses-vars": "error",//防止在JSX中引入的变量未被使用 + "react/no-children-prop":"error",//禁止通过属性传递子元素 + "react/no-danger-with-children":"error",//禁止Children和dangerouslySetInnerHTML属性同时使用 + "react/no-deprecated":"error",//禁止使用废弃的方法 + "react/no-direct-mutation-state":"error",//禁止组件状态this.state直接变更,使用setState(),唯一可以使用的是在es6组件的构造函数中 + "react/no-find-dom-node": 0,//禁止使用findDOMNode + "react/no-is-mounted":"error",//禁止使用isMounted + "react/no-render-return-value":"error",//禁止使用React.render的返回值 + "react/no-string-refs":"warn",//防止使用字符串引用 + "react/no-unescaped-entities":"error",//禁止无效字符出现在标记中 ,必要的特殊字符需要进行转义 + "react/no-unknown-property":"error",//禁止使用未知属性 + "react/prop-types":["warn", { "ignore": ["className","children","dispatch"]}],//校验组件属性合法性 + "react/react-in-jsx-scope":"warn",//防止遗漏引入React当使用JSX的时候 + "react/require-render-return":"error", + "no-console": 0 + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84858cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +#######项目文件############ +/.idea/ +/node_modules/ +/20180110_fusion_dev2/ +/fusion_beijing_20180709_certification/ +/fusion_zhejiang_20180709_1.7.1/ +/fontsFile/ +/testFile/ \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..49b97cd --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,21 @@ +/** + * Created by hqer on 2015/4/6. + */ +module.exports = function(grunt) { + 'use strict'; + grunt.initConfig({ + pkg: '', + sprite:{ + options:{ + banner:'/*<%=pkg.name %> <%=grunt.template.today("yyyy-mm-dd")%>*/\n' + }, + all:{ + src:"sprite/*.png", + dest:"dataSeparation/img/sprite.png", + destCss:"dataSeparation/css/sprite.css" + } + } + }); + grunt.loadNpmTasks("grunt-spritesmith"); + grunt.registerTask('default', ['sprite']); +}; diff --git a/dataSeparation/app.js b/dataSeparation/app.js new file mode 100644 index 0000000..3bc3f92 --- /dev/null +++ b/dataSeparation/app.js @@ -0,0 +1,193 @@ +/** + * Created by hqer on 2017/12/4. + */ +require ('./less/main.less'); +const React = require('react'); +const ReactDOM = require('react-dom'); +const hashHistory = require('react-router').hashHistory; +const Router = require('react-router').Router; +const Route = require('react-router').Route; +const IndexRedirect = require('react-router').IndexRedirect; + +const App = require('./module/App'); +const Header = require('./module/Header'); +const HeaderLogin = require('./module/HeaderLogin'); +const Footer = require('./module/Footer'); + + +const checkUserInfo = (nextState, replace, callback) => { + if (!sessionStorage.devPortalUid) { + replace('/login'); + } + callback(); +}; + +ReactDOM.render(( + + + + { + require.ensure([],(require) => { + callback(null, {header:HeaderLogin,footer:Footer,middle: require('./module/Login')}); + },'login'); + } + }/> + { + require.ensure([],(require) => { + callback(null, {header:Header,footer:Footer, middle: require('./module/Index')}); + },'index'); + } + }/> + { + require.ensure([],(require) => { + callback(null, {header:Header,footer:Footer, middle: require('./module/About')}); + },'about'); + } + }/> + { + require.ensure([],(require) => { + callback(null, {header:Header,footer:Footer, middle: require('./module/WorkBench')}); + },'workBench'); + } + }> + + { + require.ensure([],(require) => { + callback(null, require('./module/myServer')); + },'myServer'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/myApps')); + },'myApps'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/testPhone')); + },'testPhone'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/smsSignature')); + },'smsSignature'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/smsTemplate')); + },'smsTemplate'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/voiceTemplate')); + },'voiceTemplate'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/phoneNum')); + },'phoneNum'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/statistics')); + },'statistics'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/myAccount')); + },'myAccount'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/flowRecord')); + },'flowRecord'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/recharge')); + },'recharge'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/orderManage')); + },'orderManage'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/accountManage')); + },'accountManage'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/changePwd')); + },'changePwd'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/emailList')); + },'emailList'); + } + }/> + { + require.ensure([],(require) => { + callback(null, require('./module/auth')); + },'auth'); + } + }/> + + + +), document.getElementById('app')); diff --git a/dataSeparation/componentUI/js/CheckBox.js b/dataSeparation/componentUI/js/CheckBox.js new file mode 100644 index 0000000..9d2bd96 --- /dev/null +++ b/dataSeparation/componentUI/js/CheckBox.js @@ -0,0 +1,64 @@ +/** + * Created by hqer on 2017/5/17. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +import {Glyphicon } from 'react-bootstrap'; +class CheckBox extends React.Component { + constructor (props) { + super(props); + this.state = { + s: this.props.s + }; + this.handleClick = this.handleClick.bind(this); + } + componentWillReceiveProps (newProps) { + if (newProps.s != this.state.s) { + this.setState({s:newProps.s}); + } + } + handleClick () { + if (typeof this.props.onClick === 'function') { + this.props.onClick(); + } else { + if (this.state.s) { + this.setState({s:false}); + } else { + this.setState({s:true}); + } + } + } + render () { + const other = Object.assign({},this.props); + delete other.v; + delete other.s; + delete other.style; + return ( +
+ +
+ ); + } +} + +CheckBox.propTypes = { + s:PropTypes.bool.isRequired, + v:PropTypes.string.isRequired +}; +CheckBox.defaultProps = { + s:false, + v:'' + +}; +module.exports = CheckBox; diff --git a/dataSeparation/componentUI/js/DropDown.js b/dataSeparation/componentUI/js/DropDown.js new file mode 100644 index 0000000..cdfa51d --- /dev/null +++ b/dataSeparation/componentUI/js/DropDown.js @@ -0,0 +1,97 @@ +/** + * Created by hqer on 2017/5/16. + */ +import React from 'react'; +import $ from 'jquery'; +import {findDOMNode } from 'react-dom'; +import {Glyphicon } from 'react-bootstrap'; +import PropTypes from 'prop-types'; + + +class DropDown extends React.Component { + constructor (props) { + super(props); + this.state = { + v: this.props.v, + isReturn: false + }; + this.selectItem = this.selectItem.bind(this); + this._clickAway = this._clickAway.bind(this); + this.toggle = this.toggle.bind(this); + } + componentWillReceiveProps (newProps) { + if (newProps.v != this.state.v) { + this.setState({v:newProps.v,isShowList:false}); + } + } + componentDidUpdate (prevProps, prevState) { + if (this.state.isReturn && !prevState.isReturn && typeof this.props.returnValue === 'function') { + this.setState({isReturn:false}); + this.props.returnValue(this); + } + } + componentWillUnmount () { + $(document).off('click'); + } + selectItem (_v) { + this.setState({isShowList:false,v:_v,isReturn:true}); + } + _clickAway () { + $(document).off('click').on('click',(event) => { + const _el = findDOMNode(this); + if ($(_el).hasClass('showUl')) { + const _eventTarget = event.srcElement ? event.srcElement : event.target; + if (_eventTarget !== _el && $(_el).find(_eventTarget).length == 0) { + this.setState({isShowList:false}); + } + } + }); + } + toggle (event) { + const _el = findDOMNode(this); + $(_el).find('input').focus(); + if (this.state.isShowList) { + this.setState({isShowList:false}); + } else { + this.setState({isShowList:true}); + } + } + render () { + return ( +
+ (n.v === this.state.v ? n.t : '')).toString().replace(/\,/g,'')} + onClick={this.toggle} + /> +
+ +
+ { + this.state.isShowList ? ( +
+
    + {this.props.a.map((n,i) => ( +
  • {n.t}
  • + ))} +
+
+ ) : '' + } +
+ ); + } +} + +DropDown.propTypes = { + a: PropTypes.array.isRequired +}; +DropDown.defaultProps = { + className:'', + v:'', + a:[] +}; +module.exports = DropDown; diff --git a/dataSeparation/componentUI/js/Input.js b/dataSeparation/componentUI/js/Input.js new file mode 100644 index 0000000..395c652 --- /dev/null +++ b/dataSeparation/componentUI/js/Input.js @@ -0,0 +1,172 @@ +/** + * Created by hqer on 2016/12/21. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +class Input extends React.Component { + constructor (props) { + super(props); + this.state = { + v: this.props.v, + isReturn:false + }; + this.handleChange = this.handleChange.bind(this); + this.handleBlur = this.handleBlur.bind(this); + this.handleKeyUp = this.handleKeyUp.bind(this); + this.handleFocus = this.handleFocus.bind(this); + this._setPositiveInt = this._setPositiveInt.bind(this); + this._setNaturalNum = this._setNaturalNum.bind(this); + this._setMoney = this._setMoney.bind(this); + this._setNum = this._setNum.bind(this); + } + componentWillReceiveProps (newProps) { + if (newProps.v != this.state.v) { + this.setState({v:newProps.v}); + } + } + componentDidUpdate (prevProps, prevState) { + if (this.state.isReturn && !prevState.isReturn && typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + this.setState({isReturn:false}); + } + } + _setPositiveInt (_val) { + if (/^[1-9]\d*$/.test(_val)) { + this.setState({v:_val * 1}); + } + } + _setNaturalNum (_val) { + if (/^\d*$/.test(_val)) { + this.setState({v:_val * 1}); + } + } + _setMoney (_val) { + if (/^(\-)?(\d)*(\.)?(\d{0,2})$/.test(_val)) { + let f = ''; + let _v = _val; + if (_val.indexOf('-') == 0) { + f = _val.slice(0,1); + _v = _val.substring(1); + } + const re = /\d{1,3}(?=(\d{3})+$)/g; + const n1 = _v.replace(/^(\d+)((\.\d+)?)$/,(s,s1,s2) => { return s1.replace(re,'$&,') + s2; }); + this.setState({v:f + n1}); + } + } + _setNum (_val) { + if (/^(\-)?(\d)*(\.)?\d*$/.test(_val)) { + this.setState({v:_val}); + } + } + handleChange (event) { + const _eT = event.srcElement ? event.srcElement : event.target; + const _val = _eT.value; + if (_val === '') { + this.setState({v:''}); + } else if (this.props.type === 'money') { + const _newVal = _val.toString().replace(/\,/g, ''); + if (this.props.maxValue && _newVal * 1 > this.props.maxValue * 1) { + this._setMoney(this.props.maxValue.toString()); + } else { + this._setMoney(_newVal); + } + } else if (this.props.type === 'positiveInt') { + if (this.props.maxValue && _val * 1 > this.props.maxValue * 1) { + this._setPositiveInt(this.props.maxValue.toString()); + } else { + this._setPositiveInt(_val); + } + } else if (this.props.type === 'naturalNum') { + if (this.props.maxValue && _val * 1 > this.props.maxValue * 1) { + this._setNaturalNum(this.props.maxValue); + } else { + this._setNaturalNum(_val); + } + } else if (this.props.type === 'number') { + if (this.props.maxValue && _val * 1 > this.props.maxValue * 1) { + this._setNum(this.props.maxValue); + } else { + this._setNum(_val); + } + } + if (typeof this.props.onChange === 'function') { + this.props.onChange(this); + } + } + handleBlur () { + if (this.props.type === 'money') { + if (this.state.v) { + if (this.state.v === '-') { + this.setState({v:'',isReturn:true}); + } else { + const _newVal = this.state.v.replace(/\,/g, ''); + const _newV = parseFloat(_newVal).toFixed(2); + /* let f = ''; + let _v = _newV; + if (_newV.indexOf('-') == 0) { + f = _newV.slice(0,1); + _v = _newV.substring(1); + } + const re = /\d{1,3}(?=(\d{3})+$)/g; + const n1 = _v.replace(/^(\d+)((\.\d+)?)$/,(s,s1,s2) => { return s1.replace(re,'$&,') + s2; });*/ + /* this.setState({v:f + n1,isReturn:true});*/ + this.setState({v:_newV,isReturn:true}); + } + } else { + if (typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + } + } + } else if (this.props.type === 'number') { + if (this.state.v === '-') { + this.setState({v:'',isReturn:true}); + } else { + if (typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + } + } + } else { + if (typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + } + } + } + handleKeyUp () { + if (typeof this.props.onKeyUp === 'function') { + this.props.onKeyUp(this); + } + } + handleFocus () { + if (typeof this.props.onFocus === 'function') { + this.props.onFocus(this); + } + } + render () { + const other = Object.assign({},this.props); + delete other.type; + delete other.maxValue; + delete other.v; + return ( + + ); + } +} + +Input.propTypes = { + type: PropTypes.string.isRequired +}; +Input.defaultProps = { + type:'text', + className:'', + v:'', + maxValue:'' +}; +module.exports = Input; diff --git a/dataSeparation/componentUI/js/Pagination/BasePagination.js b/dataSeparation/componentUI/js/Pagination/BasePagination.js new file mode 100644 index 0000000..051306f --- /dev/null +++ b/dataSeparation/componentUI/js/Pagination/BasePagination.js @@ -0,0 +1,88 @@ +/** + * Created by hqer on 2018/2/5. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Pagination,Button } from 'react-bootstrap'; + +import InputUI from '../Input'; +import DropDownUI from '../DropDown'; + +class PaginationArea extends React.Component { + constructor (props) { + super(props); + this.state = { + pageNow:this.props.pageNow + }; + this.handleSelect = this.handleSelect.bind(this); + this.handleSearch = this.handleSearch.bind(this); + this._setInputVal = this._setInputVal.bind(this); + this._returnSize = this._returnSize.bind(this); + } + componentWillReceiveProps (newProps) { + if (newProps.pageNow != this.state.pageNow) { + this.setState({pageNow:newProps.pageNow}); + } + } + _setInputVal (_obj) { + this.setState({pageNow:_obj.state.v}); + } + handleSelect (i) { + if (typeof this.props.returnPageInfo === 'function') { + this.props.returnPageInfo(i,this.state.pageSize); + } + } + handleSearch () { + if (typeof this.props.returnPageInfo === 'function') { + this.props.returnPageInfo(this.state.pageNow,this.props.pageSize); + } + } + _returnSize (_v) { + if (typeof this.props.returnPageInfo === 'function') { + this.props.returnPageInfo(this.state.pageNow,_v); + } + } + render () { + return ( +
+ { + this.props.pageSizeList.length > 0 ? ( +
+ ÿҳ + + +
+ ) : '' + } + + {this.props.totalPage}ҳ + + ҳ + +
+ ); + } +} + +PaginationArea.propTypes = { + totalPage: PropTypes.number.isRequired, + maxPage: PropTypes.number.isRequired, + pageNow: PropTypes.number.isRequired, + pageSize: PropTypes.number.isRequired, + pageSizeList: PropTypes.array.isRequired +}; +PaginationArea.defaultProps = { + totalPage:1, + maxPage:1, + pageNow:1, + pageSize:10, + pageSizeList:[{t:10,v:10},{t:30,v:30},{t:50,v:50}] +}; +module.exports = PaginationArea; diff --git a/dataSeparation/componentUI/js/Pagination/index.js b/dataSeparation/componentUI/js/Pagination/index.js new file mode 100644 index 0000000..4651968 --- /dev/null +++ b/dataSeparation/componentUI/js/Pagination/index.js @@ -0,0 +1,7 @@ +/** + * Created by hqer on 2018/2/5. + */ +import BasePaginationUI from './BasePagination'; +const Pagination = {BasePaginationUI}; + +module.exports = Pagination; diff --git a/dataSeparation/componentUI/js/RadioBtn.js b/dataSeparation/componentUI/js/RadioBtn.js new file mode 100644 index 0000000..54db8f3 --- /dev/null +++ b/dataSeparation/componentUI/js/RadioBtn.js @@ -0,0 +1,58 @@ +/** + * Created by hqer on 2017/5/17. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +class RadioBtn extends React.Component { + constructor (props) { + super(props); + this.state = { + s: this.props.s + }; + this.handleClick = this.handleClick.bind(this); + } + componentWillReceiveProps (newProps) { + if (newProps.s != this.state.s) { + this.setState({s:newProps.s}); + } + } + handleClick () { + if (typeof this.props.onClick === 'function') { + this.props.onClick(); + } else { + if (this.state.s) { + this.setState({s:false}); + } else { + this.setState({s:true}); + } + } + } + render () { + const other = Object.assign({},this.props); + delete other.v; + delete other.s; + delete other.style; + return ( +
+ +
+ ); + } +} + +RadioBtn.propTypes = { + s:PropTypes.bool.isRequired, + v:PropTypes.string.isRequired +}; +RadioBtn.defaultProps = { + s:false, + v:'' + +}; +module.exports = RadioBtn; diff --git a/dataSeparation/componentUI/js/SystemTips.js b/dataSeparation/componentUI/js/SystemTips.js new file mode 100644 index 0000000..6435c22 --- /dev/null +++ b/dataSeparation/componentUI/js/SystemTips.js @@ -0,0 +1,58 @@ +/** + * Created by hqer on 2016/12/27. + */ +import React from 'react'; +import { Button } from 'react-bootstrap'; +import PropTypes from 'prop-types'; + +class SystemTips extends React.Component { + constructor (props) { + super(props); + this.handleClick = this.handleClick.bind(this); + this.handCancel = this.handCancel.bind(this); + } + handleClick () { + if (typeof this.props.onSubmit === 'function') { + this.props.onSubmit(); + } + } + handCancel () { + if (typeof this.props.onCancel === 'function') { + this.props.onCancel(); + } + } + render () { + const btns = []; + if (this.props.btns.length) { + this.props.btns.map((element,index) => { + btns.push(); + }); + } + return ( +
+
+
{this.props.title}
+
{this.props.text}
+
+ {btns} +
+
+
+ ); + } +} + +SystemTips.propTypes = { + className: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + text:PropTypes.string.isRequired, + btns: PropTypes.array.isRequired +}; +SystemTips.defaultProps = { + className:'', + title:'提示', + text:'', + btns:[{text:'取消',type:0},{text:'确定',type:1}] + +}; +module.exports = SystemTips; diff --git a/dataSeparation/componentUI/js/TableList/BaseTable.js b/dataSeparation/componentUI/js/TableList/BaseTable.js new file mode 100644 index 0000000..330e69d --- /dev/null +++ b/dataSeparation/componentUI/js/TableList/BaseTable.js @@ -0,0 +1,91 @@ +/** + * Created by hqer on 2018/2/5. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Table } from 'react-bootstrap'; + +class BaseTable extends React.Component { + constructor (props) { + super(props); + this.state = {}; + this.setLoading = this.setLoading.bind(this); + } + render () { + return ( +
+ + + + {this.props.key.map((item,i) => ( + + ))} + + + + {this.props.data.length ? ( + this.props.data.map((item,i) => ( + + { + this.props.key.map((_key,j) => ( + + )) + } + + )) + ) : ( + + + + )} + +
+
{item.title}
+
+
+ { + this.props.rule && this.props.rule[_key.key] ? ( + item[_key.key].map((rItem,z) => ( + typeof this.props.rule[_key.key][rItem.key] === 'function' ? ( + {rItem.text} + ) : ( + {rItem.text} + ) + )) + ) : ( +
{item[_key.key]}
+ ) + } +
+
{this.props.noDataTips}
+ { + this.props.isLoading ? ( +
+ {this.props.loadingTips} +
+ ) : '' + } +
+ ); + } +} + +BaseTable.propTypes = { + tableType:PropTypes.object.isRequired, + key:PropTypes.array.isRequired, + data:PropTypes.array.isRequired, + className:PropTypes.string.isRequired, + rule:PropTypes.object.isRequired, + isLoading:PropTypes.bool.isRequired +}; +BaseTable.defaultProps = { + tableType:{striped:true,bordered:true,hover:true}, + key:[], + data:[], + className:'', + rule:{}, + noDataTips:'暂无数据', + loadingTips:'正在加载中,请稍后', + isLoading:false +}; +module.exports = BaseTable; diff --git a/dataSeparation/componentUI/js/TableList/BaseTablePagination.js b/dataSeparation/componentUI/js/TableList/BaseTablePagination.js new file mode 100644 index 0000000..26f213e --- /dev/null +++ b/dataSeparation/componentUI/js/TableList/BaseTablePagination.js @@ -0,0 +1,73 @@ +/** + * Created by hqer on 2018/2/5. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +import BaseTableUI from './BaseTable'; +import {BasePaginationUI} from '../Pagination/index'; + +class BaseTablePagination extends React.Component { + constructor (props) { + super(props); + this.state = {}; + this.setPageInfo = this.setPageInfo.bind(this); + } + setPageInfo (_pageNum,_pageSize) { + if (typeof this.props.getNewData === 'function') { + this.props.getNewData(_pageNum,_pageSize); + } + } + render () { + return ( +
+ + +
+ ); + } +} + +BaseTablePagination.propTypes = { + tableType:PropTypes.object.isRequired, + key:PropTypes.array.isRequired, + data:PropTypes.array.isRequired, + className:PropTypes.string.isRequired, + rule:PropTypes.object.isRequired, + isLoading:PropTypes.bool.isRequired, + totalPage: PropTypes.number.isRequired, + maxPage: PropTypes.number.isRequired, + pageNow: PropTypes.number.isRequired, + pageSize: PropTypes.number.isRequired, + pageSizeList: PropTypes.array.isRequired +}; +BaseTablePagination.defaultProps = { + tableType:{striped:true,bordered:true,hover:true}, + key:[], + data:[], + className:'', + rule:{}, + noDataTips:'暂无数据', + loadingTips:'正在加载中,请稍后', + isLoading:false, + totalPage:1, + maxPage:1, + pageNow:1, + pageSize:10, + pageSizeList:[{t:10,v:10},{t:30,v:30},{t:50,v:50}] +}; +module.exports = BaseTablePagination; diff --git a/dataSeparation/componentUI/js/TableList/BaseTableSearchPagination.js b/dataSeparation/componentUI/js/TableList/BaseTableSearchPagination.js new file mode 100644 index 0000000..8f3a7b4 --- /dev/null +++ b/dataSeparation/componentUI/js/TableList/BaseTableSearchPagination.js @@ -0,0 +1,155 @@ +/** + * Created by hqer on 2018/2/5. + */ +import React from 'react'; +import PropTypes from 'prop-types'; +import BaseTablePaginationUI from './BaseTablePagination'; +import moment from 'moment'; +import DateRangePicker from 'react-bootstrap-daterangepicker'; + +import DropDownUI from '../DropDown'; + +class BaseTableSearchPagination extends React.Component { + constructor (props) { + super(props); + this.state = { + items:this.props.inputs + }; + this.setPageInfo = this.setPageInfo.bind(this); + } + componentWillReceiveProps (newProps) { + if (newProps.inputs != this.state.items) { + this.setState({items:newProps.inputs}); + } + } + setPageInfo (_pageNum,_pageSize) { + if (typeof this.props.returnPageInfo === 'function') { + this.props.returnPageInfo(_pageNum,_pageSize); + } + } + setInputItem (i,e) { + const _eT = e.srcElement ? e.srcElement : e.target; + const _newItems = JSON.parse(JSON.stringify(this.state.items)); + _newItems[i].value = _eT.value; + this.setState({items:_newItems}); + } + setDropDownItem (i,_v) { + const _newItems = JSON.parse(JSON.stringify(this.state.items)); + _newItems[i].value = _v; + this.setState({items:_newItems}); + } + setDateItems () { + console.log(111111111); + } + search () { + if (typeof this.props.returnSearchData === 'function') { + const _data = {}; + this.state.items.map((item) => { + _data[item.key] = item.value; + }); + this.props.returnSearchData(_data); + } + } + clear () { + if (typeof this.props.returnSearchData === 'function') { + const _data = {}; + this.state.items.map((item) => { + _data[item.key] = ''; + }); + this.props.returnSearchData(_data); + } + } + render () { + return ( +
+ + +
+ ); + } +} + +BaseTableSearchPagination.propTypes = { + tableType:PropTypes.object.isRequired, + key:PropTypes.array.isRequired, + data:PropTypes.array.isRequired, + className:PropTypes.string.isRequired, + rule:PropTypes.object.isRequired, + isLoading:PropTypes.bool.isRequired, + totalPage: PropTypes.number.isRequired, + maxPage: PropTypes.number.isRequired, + pageNow: PropTypes.number.isRequired, + pageSize: PropTypes.number.isRequired, + pageSizeList: PropTypes.array.isRequired, + inputs: PropTypes.array.inputs +}; +BaseTableSearchPagination.defaultProps = { + tableType:{striped:true,bordered:true,hover:true}, + key:[], + data:[], + className:'', + rule:{}, + noDataTips:'暂无数据', + loadingTips:'正在加载中,请稍后', + isLoading:false, + totalPage:1, + maxPage:1, + pageNow:1, + pageSize:10, + pageSizeList:[{t:10,v:10},{t:30,v:30},{t:50,v:50}], + inputs:[ + {text:'aaa',type:'text',key:'',value:''}, + {text:'bbb',type:'date',key:'',value:''}, + {text:'ccc',type:'dropDown',key:'',value:'',list:[]} + ] +}; +module.exports = BaseTableSearchPagination; diff --git a/dataSeparation/componentUI/js/TableList/index.js b/dataSeparation/componentUI/js/TableList/index.js new file mode 100644 index 0000000..3c6a251 --- /dev/null +++ b/dataSeparation/componentUI/js/TableList/index.js @@ -0,0 +1,9 @@ +/** + * Created by hqer on 2018/2/5. + */ +import BaseTableUI from './BaseTable'; +import BaseTablePaginationUI from './BaseTablePagination'; +import BaseTableSearchPaginationUI from './BaseTableSearchPagination'; +const TableList = {BaseTableUI,BaseTablePaginationUI,BaseTableSearchPaginationUI}; + +module.exports = TableList; diff --git a/dataSeparation/config/checkFun.js b/dataSeparation/config/checkFun.js new file mode 100644 index 0000000..6cec674 --- /dev/null +++ b/dataSeparation/config/checkFun.js @@ -0,0 +1,66 @@ +/** + * Created by hqer on 2016/12/30. + */ +import $ from 'jquery'; +module.exports = { + isNotEmpty (_v,_tips) { + const _val = $.trim(_v); + if (!_val) { + let _t = '* 输入项不能为空'; + if (typeof _tips === 'string') { + _t = _tips; + } + return _t; + } + return ''; + }, + isCheckLogUserName (_v) { + const _rv = this.isNotEmpty(_v,'* 用户名/邮箱/手机号码不能为空'); + if (!_rv && !(/^[0-9a-zA-Z_]{4,20}$/.test(_v) || /^([a-zA-Z0-9_\.\-])+@([a-zA-Z0-9_\.\-])+\.[a-zA-Z]{2,3}$/.test(_v))) { + return '* 请输入正确格式的用户名/邮箱/手机号码'; + } + return _rv; + }, + isPhoneNum (_v) { + const _rv = this.isNotEmpty(_v,'* 手机号码不能为空'); + if (!_rv && !/^1(3[0-9]|5[0-9]|8[0-9]|4[0-9]|7[0-9])\d{8}$/.test(_v)) { + return '* 请输入正确的手机号码'; + } + return _rv; + }, + isImgCode (_v,_maxLength) { + const _rv = this.isNotEmpty(_v,'* 图形验证码不能为空'); + if (!_rv && !(/^[0-9a-zA-Z]+$/.test(_v) && _v.length === _maxLength)) { + return '* 请输入正确的图形验证码'; + } + return _rv; + }, + isSmsCode (_v,_maxLength) { + const _rv = this.isNotEmpty(_v,'* 验证码不能为空'); + if (!_rv && !(/^[0-9a-zA-Z]+$/.test(_v) && _v.length === _maxLength)) { + return '* 验证码错误'; + } + return _rv; + }, + isEmail (_v) { + const _rv = this.isNotEmpty(_v,'* 邮箱地址不能为空'); + if (!_rv && (!/^([a-zA-Z0-9_\.])+@([a-zA-Z0-9_\.])+\.[a-zA-Z]{2,3}$/.test(_v) || _v.indexOf('._') > -1 || _v.indexOf('_.') > -1 || _v.indexOf('..') > -1 || _v.indexOf('__') > -1 || _v.slice(0,1) === '.' || _v.slice(0,1) === '_')) { + return '* 请输入正确格式的email地址'; + } + return _rv; + }, + isPwd (_v) { + const _rv = this.isNotEmpty(_v,'* 密码不能为空'); + if (!_rv && !/^((?=.*?\d)(?=.*?[A-Za-z])|(?=.*?\d)(?=.*?[$#@^&_=+%<>{}?~!])|(?=.*?[A-Za-z])(?=.*?[$#@^&_=+%<>{}?~!]))[\dA-Za-z$#@^&_=+%<>{}?~!]{8,20}$/.test(_v)) { + return '* 密码格式不正确'; + } + return _rv; + }, + isVerifyPwd (_v,_vp) { + const _rv = this.isNotEmpty(_v,'* 密码不能为空'); + if (!_rv && _v !== _vp) { + return '* 密码不一致,请重新输入'; + } + return _rv; + } +}; diff --git a/dataSeparation/config/fetch.js b/dataSeparation/config/fetch.js new file mode 100644 index 0000000..772e502 --- /dev/null +++ b/dataSeparation/config/fetch.js @@ -0,0 +1,35 @@ +/** + * Created by hqer on 2017/11/8. + */ +module.exports = { + set (_url,_data) { + function checkStatus (response) { + if (response.status >= 200 && response.status < 300) { + return response; + } else { + const error = new Error(response.statusText); + error.response = response; + throw error; + } + } + function parseJSON (response) { + window.GLOBAL.token = response.headers.get('token'); + if (response && response.sessionOut) { + window.GLOBAL.isLogin = 0; + } + return response.json(); + } + /* 用于不跨越,token放在header中*/ + /* let myHeaders = new Headers(); + myHeaders.append('token', GLOBAL.token); + _data.headers = myHeaders; + _data.credentials = "same-origin";*/ + /* 用于跨域,token放在body中*/ + /* let dataBody = Object.assign({token: GLOBAL.token},JSON.parse(_data.body)); + _data.body = JSON.stringify(dataBody);*/ + const req = new Request(_url,_data); + return fetch(req) + .then(checkStatus) + .then(parseJSON); + } +}; diff --git a/dataSeparation/css/app.css b/dataSeparation/css/app.css new file mode 100644 index 0000000..54f4dd5 --- /dev/null +++ b/dataSeparation/css/app.css @@ -0,0 +1,357 @@ +* { + margin: 0; + padding: 0; + border: 0; +} +ol, +ul { + list-style: none; + margin: 0; +} +a { + text-decoration: none; +} +.fl { + float: left; +} +.fr { + float: right; +} +.CheckBoxUI { + position: relative; + display: inline-block; + box-sizing: border-box; + line-height: 0; +} +.pageContent { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + box-sizing: border-box; + padding-bottom: 60px; + min-width: 1024px; + min-height: 600px; + background-color: #f6f7f7; + font-size: 14px; +} +.pageContent .tipsBg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; + background-color: rgba(0, 0, 0, 0.5); +} +.pageContent .tipsBg .tips { + position: absolute; + left: 50%; + top: 40%; + width: 320px; + min-height: 180px; + margin: -90px 0 0 -160px; + background-color: #FFF; + border-radius: 3px; + padding: 0 0 50px 0; + box-sizing: border-box; +} +.pageContent .tipsBg .tips .tipsTitle { + height: 40px; + line-height: 40px; + text-align: center; + color: #4ecb9f; + border-bottom: 1px solid #CCC; + box-sizing: border-box; +} +.pageContent .tipsBg .tips .tipsContext { + font-size: 14px; + line-height: 20px; + text-align: center; + padding: 20px 20px; + box-sizing: border-box; +} +.pageContent .tipsBg .tips.left .tipsContext { + text-align: left; +} +.pageContent .tipsBg .tips .tipsBtnArea { + position: absolute; + left: 0; + bottom: 20px; + height: 30px; + width: 100%; + text-align: center; + box-sizing: border-box; +} +.pageContent .tipsBg .tips .tipsBtnArea .btn { + height: 30px; + margin: 0 10px; +} +.pageContent .middleBox { + position: relative; + box-sizing: border-box; + width: 1024px; + height: 100%; + margin: 0 auto; + padding: 100px 0 30px 0; +} +.pageContent .middleBox .whiteSpace { + box-sizing: border-box; + width: 100%; + padding: 20px; + background-color: #FFF; +} +.pageContent .middleBox .title { + line-height: 36px; + font-size: 16px; + color: #333; +} +.pageContent .middleBox .title:before { + content: ""; + background-color: #4ecb9f; + width: 4px; + height: 20px; + position: absolute; + left: 0; + margin-top: 8px; +} +.pageContent .header { + position: fixed; + left: 0; + top: 0; + height: 70px; + min-width: 1024px; + width: 100%; + background-color: #FFF; + border-bottom: 1px solid #CCC; + z-index: 1; +} +.pageContent .header .headerMenu { + width: 1024px; + height: 70px; + line-height: 70px; + margin: 0 auto; + text-align: center; +} +.pageContent .header .headerMenu .centerMenu { + display: inline-block; + height: 70px; + margin: 0 auto; +} +.pageContent .header .headerMenu .centerMenu .navItem { + position: relative; + height: 70px; + line-height: 70px; + padding: 0 30px; + float: left; +} +.pageContent .footer { + position: absolute; + left: 0; + bottom: 0; + height: 60px; + min-width: 1024px; + width: 100%; + background-color: #252435; +} +.pageContent .footer .footerMenu { + width: 1024px; + height: 60px; + line-height: 60px; + margin: 0 auto; +} +.pageContent .footer .footerMenu ul { + font-size: 12px; +} +.pageContent .footer .footerMenu ul li { + position: relative; + display: inline-block; + box-sizing: border-box; + color: #CCC; +} +.pageContent .footer .footerMenu ul li a { + color: #CCC; +} +.pageContent .footer .footerMenu ul li img { + margin-right: 5px; +} +.pageContent .footer .footerMenu .leftItem { + float: left; +} +.pageContent .footer .footerMenu .leftItem .item { + padding: 0 15px; +} +.pageContent .footer .footerMenu .leftItem .item:after { + content: "|"; + position: absolute; + right: 0; + top: 0; +} +.pageContent .footer .footerMenu .leftItem .item:last-child:after { + content: ""; +} +.pageContent .footer .footerMenu .rightItem { + float: right; +} +.pageContent .footer .footerMenu .rightItem .item { + padding: 0 10px; +} +.pageContent .login { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAKjCAIAAAAMJ+quAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmODdmNDhiNy1jNDM3LTRjMzItYmYzZC05ZWIwOGQ1MGJiZWEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkZBRDY5QjdEQTREMTFFN0IyMTlCMDU1RkM4Mzk0OEMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkZBRDY5QjZEQTREMTFFN0IyMTlCMDU1RkM4Mzk0OEMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YzBmMWI0ODUtMjIzMi00NDZkLThiOTEtNjI2M2MxNmJiZjgzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmY4N2Y0OGI3LWM0MzctNGMzMi1iZjNkLTllYjA4ZDUwYmJlYSIvPiA8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) no-repeat center; + background-size: 100% 100%; +} +.pageContent .login:before { + content: ""; + position: absolute; + left: 0; + bottom: 37px; + width: 100%; + height: 140px; + display: block; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAACMCAYAAADiINszAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA29pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmODdmNDhiNy1jNDM3LTRjMzItYmYzZC05ZWIwOGQ1MGJiZWEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDEwMDc5MkNEQTRFMTFFN0IwM0NERjZCNEM5NDcyQUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDEwMDc5MkJEQTRFMTFFN0IwM0NERjZCNEM5NDcyQUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTY5OUExMkU0RURBRTcxMTg5REFFMjFBMkUxQjk0NTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Zjg3ZjQ4YjctYzQzNy00YzMyLWJmM2QtOWViMDhkNTBiYmVhIi8+IDwvcmRm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) no-repeat center; +} +.pageContent .login:after { + content: ""; + position: absolute; + left: 0; + bottom: 37px; + width: 100%; + height: 47px; + display: block; + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGMAAAAvCAIAAAB4w+PVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmODdmNDhiNy1jNDM3LTRjMzItYmYzZC05ZWIwOGQ1MGJiZWEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjEzMjBENTVEQTRFMTFFNzlFMzREMThBQUUzQTMzMDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjEzMjBENTREQTRFMTFFNzlFMzREMThBQUUzQTMzMDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6YzBmMWI0ODUtMjIzMi00NDZkLThiOTEtNjI2M2MxNmJiZjgzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOmY4N2Y0OGI3LWM0MzctNGMzMi1iZjNkLTllYjA4ZDUwYmJlYSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgFbGpsAAABpSURBVHja7NNBEQAQFEBBjJYaaKmGBN9VAhWcjMO+CDvzch8t6aKCgBQpUqRIkRIpUqRIkSIlUqRIkSJFipRIkXpWjRkUrqT22hTcR4oUKVKkRIoUKVKkSIkUKVKkSJEiJVKkSP3VEWAAcxAHX7vzTFAAAAAASUVORK5CYII=) repeat-x center; +} +.pageContent .login .loginInputArea { + position: absolute; + left: 50%; + top: 20%; + width: 250px; + margin-left: -125px; +} +.pageContent .login .loginInputArea .title { + height: 58px; + line-height: 58px; + width: 100%; + color: #4ecb9f; + font-size: 24px; + text-align: center; + position: relative; +} +.pageContent .login .loginInputArea .title:before { + content: ""; + position: absolute; + left: 0; + top: 50%; + height: 1px; + width: 80px; + background-color: #4ecb9f; +} +.pageContent .login .loginInputArea .title:after { + content: ""; + position: absolute; + right: 0; + top: 50%; + height: 1px; + width: 80px; + background-color: #4ecb9f; +} +.pageContent .login .loginInputArea .inputLine { + position: relative; + width: 100%; + margin-bottom: 15px; + color: #666; +} +.pageContent .login .loginInputArea .inputLine .inputBtn { + padding: 0 15px; + width: 100%; + height: 40px; + border: 1px solid #4ecb9f; + box-sizing: border-box; +} +.pageContent .login .loginInputArea .inputLine .inputBtn.imgCode { + width: 158px; +} +.pageContent .login .loginInputArea .inputLine .inputBtn.smsCode { + width: 130px; +} +.pageContent .login .loginInputArea .inputLine .imgCodeBtn { + position: relative; + width: 80px; + height: 40px; +} +.pageContent .login .loginInputArea .inputLine .imgCodeBtn * { + width: 100%; + height: 100%; +} +.pageContent .login .loginInputArea .inputLine .imgCodeBtn .glyphicon { + position: absolute; + top: 0; + left: 0; + text-align: center; + line-height: 40px; + color: #FFF; + background-color: rgba(0, 0, 0, 0.3); + display: none; + cursor: pointer; +} +.pageContent .login .loginInputArea .inputLine .imgCodeBtn:hover .glyphicon { + display: block; +} +.pageContent .login .loginInputArea .inputLine .errorTips { + position: absolute; + left: 255px; + line-height: 40px; + font-size: 12px; + color: #ef5350; + width: 350px; + height: 100%; +} +.pageContent .login .loginInputArea .inputLine .CheckBoxUI { + width: 20px; + padding: 0 5px 0 0; + line-height: 23px; + vertical-align: middle; +} +.pageContent .login .loginInputArea .inputLine .CheckBoxUI button { + position: relative; + width: 15px; + height: 15px; + box-sizing: border-box; + border: 1px solid #CCC; + border-radius: 2px; + background-color: #FFF; + font-size: 12px; +} +.pageContent .login .loginInputArea .inputLine .CheckBoxUI button .glyphicon { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + text-align: center; + line-height: 15px; + color: #4ecb9f; +} +.pageContent .login .loginInputArea .inputLine .smsCodeBtn { + width: 110px; + height: 40px; + padding: 0; + border-radius: 0; +} +.pageContent .login .loginInputArea button.submit { + width: 100%; + height: 40px; +} +.pageContent .about { + color: #666; + word-break: break-all; + line-height: 30px; +} +.pageContent .about .whiteSpace { + height: 100%; +} diff --git a/dataSeparation/css/bootstrap.min.css b/dataSeparation/css/bootstrap.min.css new file mode 100644 index 0000000..d95c600 --- /dev/null +++ b/dataSeparation/css/bootstrap.min.css @@ -0,0 +1,14 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! + * Generated using the Bootstrap Customizer (http://v3.bootcss.com/customize/?id=250cacb9d402eb15ad32adc29eb40550) + * Config saved to config.json and https://gist.github.com/250cacb9d402eb15ad32adc29eb40550 + *//*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:微软雅黑;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#4ecb9f;text-decoration:none}a:hover,a:focus{color:#2e9e77;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#4ecb9f}a.text-primary:hover,a.text-primary:focus{color:#34b286}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#4ecb9f}a.bg-primary:hover,a.bg-primary:focus{background-color:#34b286}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:微软雅黑}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#4ecb9f;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;color:#fff;background-color:#ccc;border-color: #ccc}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#4ecb9f;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#4ecb9f;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#4ecb9f;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#4ecb9f;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#4ecb9f;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#4ecb9f}.btn-primary{color:#fff;background-color:#4ecb9f;border-color:#3ac594}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#34b286;border-color:#1d634a}.btn-primary:hover{color:#fff;background-color:#34b286;border-color:#2c9671}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#34b286;border-color:#2c9671}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#fff;background-color:#2c9671;border-color:#1d634a}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#4ecb9f;border-color:#3ac594}.btn-primary .badge{color:#4ecb9f;background-color:#fff}.btn-success{color:#fff;background-color:#58acf4;border-color:#40a0f2}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#2894f1;border-color:#0b60a8}.btn-success:hover{color:#fff;background-color:#2894f1;border-color:#0f83e6}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#2894f1;border-color:#0f83e6}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#fff;background-color:#0f83e6;border-color:#0b60a8}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#58acf4;border-color:#40a0f2}.btn-success .badge{color:#58acf4;background-color:#fff}.btn-info{color:#4ecb9f;background-color:#fff;border-color:#4ecb9f}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#4ecb9f;border-color:#3ac594}.btn-info:hover{color:#fff;background-color:#4ecb9f;border-color:#3ac594}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#4ecb9f;background-color:#e6e6e6;border-color:#32aa80}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#4ecb9f;background-color:#d4d4d4;border-color:#237759}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#ccc;color:#fff;border-color:#ccc}.btn-info .badge{color:#fff;background-color:#4ecb9f}.btn-warning{color:#fff;background-color:#ffac62;border-color:#ff9f48}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ff912f;border-color:#c85e00}.btn-warning:hover{color:#fff;background-color:#ff912f;border-color:#ff7e0b}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ff912f;border-color:#ff7e0b}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#fff;background-color:#ff7e0b;border-color:#c85e00}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#ffac62;border-color:#ff9f48}.btn-warning .badge{color:#ffac62;background-color:#fff}.btn-danger{color:#58acf4;background-color:#fff;border-color:#58acf4}.btn-danger:focus,.btn-danger.focus{color:#58acf4;background-color:#e6e6e6;border-color:#0d6dc0}.btn-danger:hover{color:#58acf4;background-color:#e6e6e6;border-color:#1f8ff0}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#58acf4;background-color:#e6e6e6;border-color:#1f8ff0}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#58acf4;background-color:#d4d4d4;border-color:#0d6dc0}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#fff;border-color:#58acf4}.btn-danger .badge{color:#fff;background-color:#58acf4}.btn-link{color:#4ecb9f;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2e9e77;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#4ecb9f}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#4ecb9f}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#4ecb9f}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#4ecb9f;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#2e9e77;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#4ecb9f;border-color:#4ecb9f;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#4ecb9f}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#34b286}.label-success{background-color:#58acf4}.label-success[href]:hover,.label-success[href]:focus{background-color:#2894f1}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#ffac62}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ff912f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#4ecb9f;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#4ecb9f}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#4ecb9f;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#58acf4}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#ffac62}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#4ecb9f;border-color:#4ecb9f}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#ecf9f5}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#4ecb9f}.panel-primary>.panel-heading{color:#fff;background-color:#4ecb9f;border-color:#4ecb9f}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#4ecb9f}.panel-primary>.panel-heading .badge{color:#4ecb9f;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#4ecb9f}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:微软雅黑;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:微软雅黑;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/dataSeparation/css/sprite.css b/dataSeparation/css/sprite.css new file mode 100644 index 0000000..27c7b33 --- /dev/null +++ b/dataSeparation/css/sprite.css @@ -0,0 +1,636 @@ +/* +Icon classes can be used entirely standalone. They are named after their original file names. + +Example usage in HTML: + +`display: block` sprite: +
+ +To change `display` (e.g. `display: inline-block;`), we suggest using a common CSS class: + +// CSS +.icon { + display: inline-block; +} + +// HTML + +*/ +.icon-3er { + background-image: url(../img/sprite.png); + background-position: -373px -300px; + width: 46px; + height: 31px; +} +.icon-45ceff { + background-image: url(../img/sprite.png); + background-position: -200px -197px; + width: 51px; + height: 39px; +} +.icon-4cdvr { + background-image: url(../img/sprite.png); + background-position: -100px -337px; + width: 100px; + height: 100px; +} +.icon-4dde { + background-image: url(../img/sprite.png); + background-position: -200px -437px; + width: 100px; + height: 100px; +} +.icon-4f4cd { + background-image: url(../img/sprite.png); + background-position: -718px -627px; + width: 45px; + height: 39px; +} +.icon-DOC { + background-image: url(../img/sprite.png); + background-position: -673px -174px; + width: 36px; + height: 44px; +} +.icon-DOME { + background-image: url(../img/sprite.png); + background-position: -718px -666px; + width: 36px; + height: 44px; +} +.icon-SDK { + background-image: url(../img/sprite.png); + background-position: -673px -218px; + width: 36px; + height: 44px; +} +.icon-accounGreen { + background-image: url(../img/sprite.png); + background-position: -673px -352px; + width: 34px; + height: 28px; +} +.icon-accountGray { + background-image: url(../img/sprite.png); + background-position: -673px -324px; + width: 34px; + height: 28px; +} +.icon-addfriend { + background-image: url(../img/sprite.png); + background-position: -273px -100px; + width: 100px; + height: 100px; +} +.icon-amsd { + background-image: url(../img/sprite.png); + background-position: -94px -604px; + width: 51px; + height: 47px; +} +.icon-android { + background-image: url(../img/sprite.png); + background-position: -573px -244px; + width: 70px; + height: 72px; +} +.icon-arrow { + background-image: url(../img/sprite.png); + background-position: -756px -206px; + width: 7px; + height: 10px; +} +.icon-arrowLeft { + background-image: url(../img/sprite.png); + background-position: -673px -380px; + width: 22px; + height: 38px; +} +.icon-arrowRight { + background-image: url(../img/sprite.png); + background-position: -695px -380px; + width: 22px; + height: 38px; +} +.icon-b2bGray { + background-image: url(../img/sprite.png); + background-position: -673px -294px; + width: 34px; + height: 30px; +} +.icon-b2bGreen { + background-image: url(../img/sprite.png); + background-position: -673px -262px; + width: 36px; + height: 32px; +} +.icon-bangCircleMiddle { + background-image: url(../img/sprite.png); + background-position: -300px -237px; + width: 60px; + height: 60px; +} +.icon-bangCircleSmall { + background-image: url(../img/sprite.png); + background-position: -500px -437px; + width: 43px; + height: 70px; +} +.icon-bankC { + background-image: url(../img/sprite.png); + background-position: -300px -337px; + width: 100px; + height: 100px; +} +.icon-books { + background-image: url(../img/sprite.png); + background-position: -718px -156px; + width: 45px; + height: 50px; +} +.icon-callCircleMiddle { + background-image: url(../img/sprite.png); + background-position: 0px -537px; + width: 74px; + height: 67px; +} +.icon-callDurationMiddle { + background-image: url(../img/sprite.png); + background-position: -256px -537px; + width: 54px; + height: 54px; +} +.icon-car { + background-image: url(../img/sprite.png); + background-position: -473px -300px; + width: 100px; + height: 100px; +} +.icon-cheep { + background-image: url(../img/sprite.png); + background-position: 0px -437px; + width: 100px; + height: 100px; +} +.icon-click { + background-image: url(../img/sprite.png); + background-position: -673px -59px; + width: 45px; + height: 59px; +} +.icon-clockCircleMiddle { + background-image: url(../img/sprite.png); + background-position: -148px -537px; + width: 54px; + height: 54px; +} +.icon-crying { + background-image: url(../img/sprite.png); + background-position: -137px 0px; + width: 136px; + height: 136px; +} +.icon-cxts { + background-image: url(../img/sprite.png); + background-position: -400px -437px; + width: 100px; + height: 100px; +} +.icon-dd3d4 { + background-image: url(../img/sprite.png); + background-position: -573px 0px; + width: 100px; + height: 100px; +} +.icon-ded4 { + background-image: url(../img/sprite.png); + background-position: -718px -500px; + width: 45px; + height: 42px; +} +.icon-der4 { + background-image: url(../img/sprite.png); + background-position: 0px -663px; + width: 48px; + height: 48px; +} +.icon-dvssf { + background-image: url(../img/sprite.png); + background-position: -473px 0px; + width: 100px; + height: 100px; +} +.icon-eded4 { + background-image: url(../img/sprite.png); + background-position: -200px -337px; + width: 100px; + height: 100px; +} +.icon-eef44 { + background-image: url(../img/sprite.png); + background-position: -718px 0px; + width: 46px; + height: 50px; +} +.icon-ef4c { + background-image: url(../img/sprite.png); + background-position: 0px -337px; + width: 100px; + height: 100px; +} +.icon-efvf { + background-image: url(../img/sprite.png); + background-position: -96px -663px; + width: 48px; + height: 48px; +} +.icon-emailCircle { + background-image: url(../img/sprite.png); + background-position: -400px -337px; + width: 55px; + height: 55px; +} +.icon-emailCircleMiddle { + background-image: url(../img/sprite.png); + background-position: -418px -537px; + width: 54px; + height: 54px; +} +.icon-emailCircleSend { + background-image: url(../img/sprite.png); + background-position: -472px -537px; + width: 54px; + height: 54px; +} +.icon-emailGraySmall { + background-image: url(../img/sprite.png); + background-position: -673px -465px; + width: 29px; + height: 21px; +} +.icon-emailReaded { + background-image: url(../img/sprite.png); + background-position: -691px -568px; + width: 18px; + height: 14px; +} +.icon-emailUnRead { + background-image: url(../img/sprite.png); + background-position: -685px -584px; + width: 18px; + height: 14px; +} +.icon-etrt { + background-image: url(../img/sprite.png); + background-position: -200px -237px; + width: 100px; + height: 100px; +} +.icon-eye { + background-image: url(../img/sprite.png); + background-position: -673px -532px; + width: 20px; + height: 20px; +} +.icon-eyeClose { + background-image: url(../img/sprite.png); + background-position: -696px -509px; + width: 20px; + height: 20px; +} +.icon-f4f4 { + background-image: url(../img/sprite.png); + background-position: -718px -450px; + width: 38px; + height: 50px; +} +.icon-f4f43 { + background-image: url(../img/sprite.png); + background-position: 0px -237px; + width: 100px; + height: 100px; +} +.icon-f4rsd { + background-image: url(../img/sprite.png); + background-position: -100px -137px; + width: 100px; + height: 100px; +} +.icon-flow3 { + background-image: url(../img/sprite.png); + background-position: -673px 0px; + width: 45px; + height: 59px; +} +.icon-flow4 { + background-image: url(../img/sprite.png); + background-position: 0px -604px; + width: 46px; + height: 59px; +} +.icon-flowLastStatistics0 { + background-image: url(../img/sprite.png); + background-position: -364px -537px; + width: 54px; + height: 54px; +} +.icon-flowLastStatistics1 { + background-image: url(../img/sprite.png); + background-position: -202px -537px; + width: 54px; + height: 54px; +} +.icon-flowLastStatistics2 { + background-image: url(../img/sprite.png); + background-position: -526px -537px; + width: 54px; + height: 54px; +} +.icon-fwfr4 { + background-image: url(../img/sprite.png); + background-position: -373px -200px; + width: 100px; + height: 100px; +} +.icon-gew { + background-image: url(../img/sprite.png); + background-position: -580px -537px; + width: 52px; + height: 52px; +} +.icon-ghs { + background-image: url(../img/sprite.png); + background-position: -696px -486px; + width: 20px; + height: 20px; +} +.icon-h5 { + background-image: url(../img/sprite.png); + background-position: -573px -388px; + width: 70px; + height: 72px; +} +.icon-help { + background-image: url(../img/sprite.png); + background-position: -702px -465px; + width: 16px; + height: 16px; +} +.icon-helpGray { + background-image: url(../img/sprite.png); + background-position: -673px -552px; + width: 18px; + height: 16px; +} +.icon-helpGreen { + background-image: url(../img/sprite.png); + background-position: -673px -568px; + width: 18px; + height: 16px; +} +.icon-helpWhite { + background-image: url(../img/sprite.png); + background-position: -691px -552px; + width: 18px; + height: 16px; +} +.icon-i { + background-image: url(../img/sprite.png); + background-position: 0px -137px; + width: 100px; + height: 100px; +} +.icon-ios { + background-image: url(../img/sprite.png); + background-position: -573px -172px; + width: 70px; + height: 72px; +} +.icon-java { + background-image: url(../img/sprite.png); + background-position: -573px -100px; + width: 70px; + height: 72px; +} +.icon-kinj { + background-image: url(../img/sprite.png); + background-position: -300px -437px; + width: 100px; + height: 100px; +} +.icon-lock { + background-image: url(../img/sprite.png); + background-position: -718px -308px; + width: 40px; + height: 50px; +} +.icon-loginBottom { + background-image: url(../img/sprite.png); + background-position: -759px -50px; + width: 1px; + height: 47px; +} +.icon-logo_CMCC { + background-image: url(../img/sprite.png); + background-position: -718px -585px; + width: 42px; + height: 42px; +} +.icon-lsts { + background-image: url(../img/sprite.png); + background-position: -400px -392px; + width: 57px; + height: 41px; +} +.icon-moneyCircleBig { + background-image: url(../img/sprite.png); + background-position: -100px -437px; + width: 100px; + height: 100px; +} +.icon-moneyCircleMiddle { + background-image: url(../img/sprite.png); + background-position: -74px -537px; + width: 74px; + height: 67px; +} +.icon-moreDown { + background-image: url(../img/sprite.png); + background-position: -673px -584px; + width: 12px; + height: 21px; +} +.icon-moreUp { + background-image: url(../img/sprite.png); + background-position: -673px -605px; + width: 12px; + height: 21px; +} +.icon-notbook { + background-image: url(../img/sprite.png); + background-position: -718px -262px; + width: 46px; + height: 46px; +} +.icon-note { + background-image: url(../img/sprite.png); + background-position: -718px -106px; + width: 45px; + height: 50px; +} +.icon-okCircleMiddle { + background-image: url(../img/sprite.png); + background-position: -200px -137px; + width: 60px; + height: 60px; +} +.icon-payCircleBig { + background-image: url(../img/sprite.png); + background-position: -100px -237px; + width: 100px; + height: 100px; +} +.icon-payGray { + background-image: url(../img/sprite.png); + background-position: -673px -442px; + width: 34px; + height: 23px; +} +.icon-payGreen { + background-image: url(../img/sprite.png); + background-position: -673px -418px; + width: 34px; + height: 24px; +} +.icon-php { + background-image: url(../img/sprite.png); + background-position: -573px -316px; + width: 70px; + height: 72px; +} +.icon-qos2 { + background-image: url(../img/sprite.png); + background-position: -718px -206px; + width: 38px; + height: 56px; +} +.icon-qos3 { + background-image: url(../img/sprite.png); + background-position: -718px -50px; + width: 41px; + height: 56px; +} +.icon-qos4 { + background-image: url(../img/sprite.png); + background-position: -673px -118px; + width: 44px; + height: 56px; +} +.icon-qos5 { + background-image: url(../img/sprite.png); + background-position: -46px -604px; + width: 48px; + height: 56px; +} +.icon-qos6 { + background-image: url(../img/sprite.png); + background-position: -473px -100px; + width: 100px; + height: 100px; +} +.icon-qos7 { + background-image: url(../img/sprite.png); + background-position: -473px -200px; + width: 100px; + height: 100px; +} +.icon-rew4 { + background-image: url(../img/sprite.png); + background-position: -48px -663px; + width: 48px; + height: 48px; +} +.icon-selectLeftTop { + background-image: url(../img/sprite.png); + background-position: -693px -532px; + width: 21px; + height: 19px; +} +.icon-sendCircleMiddle { + background-image: url(../img/sprite.png); + background-position: -573px -460px; + width: 74px; + height: 67px; +} +.icon-smiling { + background-image: url(../img/sprite.png); + background-position: 0px 0px; + width: 137px; + height: 137px; +} +.icon-spts { + background-image: url(../img/sprite.png); + background-position: -373px -100px; + width: 100px; + height: 100px; +} +.icon-take { + background-image: url(../img/sprite.png); + background-position: -373px 0px; + width: 100px; + height: 100px; +} +.icon-throughCallCircle { + background-image: url(../img/sprite.png); + background-position: -310px -537px; + width: 54px; + height: 54px; +} +.icon-tipsBg { + background-image: url(../img/sprite.png); + background-position: -754px -666px; + width: 10px; + height: 10px; +} +.icon-tipsIcon { + background-image: url(../img/sprite.png); + background-position: -718px -542px; + width: 42px; + height: 43px; +} +.icon-tvsw { + background-image: url(../img/sprite.png); + background-position: -273px 0px; + width: 100px; + height: 100px; +} +.icon-weer { + background-image: url(../img/sprite.png); + background-position: -718px -358px; + width: 41px; + height: 48px; +} +.icon-weibo { + background-image: url(../img/sprite.png); + background-position: -673px -509px; + width: 23px; + height: 23px; +} +.icon-weixin { + background-image: url(../img/sprite.png); + background-position: -673px -486px; + width: 23px; + height: 23px; +} +.icon-wre { + background-image: url(../img/sprite.png); + background-position: -473px -400px; + width: 55px; + height: 37px; +} +.icon-ww3d { + background-image: url(../img/sprite.png); + background-position: -718px -406px; + width: 44px; + height: 44px; +} diff --git a/dataSeparation/dist/about.js b/dataSeparation/dist/about.js new file mode 100644 index 0000000..87d8787 --- /dev/null +++ b/dataSeparation/dist/about.js @@ -0,0 +1,65 @@ +webpackJsonp([3,10],{ + +/***/ 550: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + /** + * Created by hqer on 2016/12/12. + */ + var React = __webpack_require__(10); + var about = window.GLOBAL.pageData.about; + var actionHeader = __webpack_require__(358); + + var About = function (_React$Component) { + _inherits(About, _React$Component); + + function About() { + _classCallCheck(this, About); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + About.prototype.componentWillMount = function componentWillMount() { + actionHeader.setNavSelect("index"); + }; + + About.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'middleBox about' }, + React.createElement( + 'div', + { className: 'whiteSpace' }, + React.createElement( + 'div', + { className: 'title' }, + '\u516C\u53F8\u7B80\u4ECB' + ), + React.createElement('div', { className: 'textLine', dangerouslySetInnerHTML: { __html: about.profile } }), + React.createElement( + 'div', + { className: 'title' }, + '\u8054\u7CFB\u6211\u4EEC' + ), + React.createElement('div', { className: 'textLine', dangerouslySetInnerHTML: { __html: about.contact } }) + ), + this.props.children + ); + }; + + return About; + }(React.Component); + + module.exports = About; + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/app.js b/dataSeparation/dist/app.js new file mode 100644 index 0000000..7d987bc --- /dev/null +++ b/dataSeparation/dist/app.js @@ -0,0 +1,7080 @@ +webpackJsonp([0,10],[ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(1); + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + /** + * Created by hqer on 2017/12/4. + */ + __webpack_require__(2); + var React = __webpack_require__(10); + var ReactDOM = __webpack_require__(167); + var hashHistory = __webpack_require__(168).hashHistory; + var Router = __webpack_require__(168).Router; + var Route = __webpack_require__(168).Route; + var IndexRedirect = __webpack_require__(168).IndexRedirect; + + var App = __webpack_require__(228); + var Header = __webpack_require__(306); + var HeaderLogin = __webpack_require__(359); + var Footer = __webpack_require__(360); + + var checkUserInfo = function checkUserInfo(nextState, replace, callback) { + if (!window.GLOBAL.isLogin || !window.GLOBAL.userId) { + replace('/login'); + } + callback(); + }; + + ReactDOM.render(React.createElement( + Router, + { history: hashHistory }, + React.createElement( + Route, + { path: '/', component: App }, + React.createElement(IndexRedirect, { to: '/index' }), + React.createElement(Route, { path: 'login', + getComponents: function getComponents(nextState, callback) { + __webpack_require__.e/* nsure */(1, function (require) { + callback(null, { header: HeaderLogin, footer: Footer, middle: __webpack_require__(361) }); + }); + } }), + React.createElement(Route, { path: 'index', + getComponents: function getComponents(nextState, callback) { + __webpack_require__.e/* nsure */(2, function (require) { + callback(null, { header: Header, footer: Footer, middle: __webpack_require__(549) }); + }); + } }), + React.createElement(Route, { path: 'about', + getComponents: function getComponents(nextState, callback) { + __webpack_require__.e/* nsure */(3, function (require) { + callback(null, { header: Header, footer: Footer, middle: __webpack_require__(550) }); + }); + } }), + React.createElement( + Route, + { path: 'workBench', + getComponents: function getComponents(nextState, callback) { + __webpack_require__.e/* nsure */(4, function (require) { + callback(null, { header: Header, footer: Footer, middle: __webpack_require__(551) }); + }); + } }, + React.createElement(IndexRedirect, { to: '/workBench/myServer' }), + React.createElement(Route, { path: 'myServer', onEnter: checkUserInfo, + getComponent: function getComponent(nextState, callback) { + __webpack_require__.e/* nsure */(5, function (require) { + callback(null, __webpack_require__(553)); + }); + } }), + React.createElement(Route, { path: 'myApps', onEnter: checkUserInfo, + getComponent: function getComponent(nextState, callback) { + __webpack_require__.e/* nsure */(6, function (require) { + callback(null, __webpack_require__(554)); + }); + } }) + ) + ) + ), document.getElementById('app')); + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + + // removed by extract-text-webpack-plugin + +/***/ }), +/* 3 */, +/* 4 */, +/* 5 */, +/* 6 */, +/* 7 */, +/* 8 */, +/* 9 */, +/* 10 */, +/* 11 */, +/* 12 */, +/* 13 */, +/* 14 */, +/* 15 */, +/* 16 */, +/* 17 */, +/* 18 */, +/* 19 */, +/* 20 */, +/* 21 */, +/* 22 */, +/* 23 */, +/* 24 */, +/* 25 */, +/* 26 */, +/* 27 */, +/* 28 */, +/* 29 */, +/* 30 */, +/* 31 */, +/* 32 */, +/* 33 */, +/* 34 */, +/* 35 */, +/* 36 */, +/* 37 */, +/* 38 */, +/* 39 */, +/* 40 */, +/* 41 */, +/* 42 */, +/* 43 */, +/* 44 */, +/* 45 */, +/* 46 */, +/* 47 */, +/* 48 */, +/* 49 */, +/* 50 */, +/* 51 */, +/* 52 */, +/* 53 */, +/* 54 */, +/* 55 */, +/* 56 */, +/* 57 */, +/* 58 */, +/* 59 */, +/* 60 */, +/* 61 */, +/* 62 */, +/* 63 */, +/* 64 */, +/* 65 */, +/* 66 */, +/* 67 */, +/* 68 */, +/* 69 */, +/* 70 */, +/* 71 */, +/* 72 */, +/* 73 */, +/* 74 */, +/* 75 */, +/* 76 */, +/* 77 */, +/* 78 */, +/* 79 */, +/* 80 */, +/* 81 */, +/* 82 */, +/* 83 */, +/* 84 */, +/* 85 */, +/* 86 */, +/* 87 */, +/* 88 */, +/* 89 */, +/* 90 */, +/* 91 */, +/* 92 */, +/* 93 */, +/* 94 */, +/* 95 */, +/* 96 */, +/* 97 */, +/* 98 */, +/* 99 */, +/* 100 */, +/* 101 */, +/* 102 */, +/* 103 */, +/* 104 */, +/* 105 */, +/* 106 */, +/* 107 */, +/* 108 */, +/* 109 */, +/* 110 */, +/* 111 */, +/* 112 */, +/* 113 */, +/* 114 */, +/* 115 */, +/* 116 */, +/* 117 */, +/* 118 */, +/* 119 */, +/* 120 */, +/* 121 */, +/* 122 */, +/* 123 */, +/* 124 */, +/* 125 */, +/* 126 */, +/* 127 */, +/* 128 */, +/* 129 */, +/* 130 */, +/* 131 */, +/* 132 */, +/* 133 */, +/* 134 */, +/* 135 */, +/* 136 */, +/* 137 */, +/* 138 */, +/* 139 */, +/* 140 */, +/* 141 */, +/* 142 */, +/* 143 */, +/* 144 */, +/* 145 */, +/* 146 */, +/* 147 */, +/* 148 */, +/* 149 */, +/* 150 */, +/* 151 */, +/* 152 */, +/* 153 */, +/* 154 */, +/* 155 */, +/* 156 */, +/* 157 */, +/* 158 */, +/* 159 */, +/* 160 */, +/* 161 */, +/* 162 */, +/* 163 */, +/* 164 */, +/* 165 */, +/* 166 */, +/* 167 */, +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + + /* components */ + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Router2 = __webpack_require__(169); + + var _Router3 = _interopRequireDefault(_Router2); + + exports.Router = _Router3['default']; + + var _Link2 = __webpack_require__(206); + + var _Link3 = _interopRequireDefault(_Link2); + + exports.Link = _Link3['default']; + + var _IndexLink2 = __webpack_require__(208); + + var _IndexLink3 = _interopRequireDefault(_IndexLink2); + + exports.IndexLink = _IndexLink3['default']; + + /* components (configuration) */ + + var _IndexRedirect2 = __webpack_require__(209); + + var _IndexRedirect3 = _interopRequireDefault(_IndexRedirect2); + + exports.IndexRedirect = _IndexRedirect3['default']; + + var _IndexRoute2 = __webpack_require__(211); + + var _IndexRoute3 = _interopRequireDefault(_IndexRoute2); + + exports.IndexRoute = _IndexRoute3['default']; + + var _Redirect2 = __webpack_require__(210); + + var _Redirect3 = _interopRequireDefault(_Redirect2); + + exports.Redirect = _Redirect3['default']; + + var _Route2 = __webpack_require__(212); + + var _Route3 = _interopRequireDefault(_Route2); + + exports.Route = _Route3['default']; + + /* mixins */ + + var _History2 = __webpack_require__(213); + + var _History3 = _interopRequireDefault(_History2); + + exports.History = _History3['default']; + + var _Lifecycle2 = __webpack_require__(214); + + var _Lifecycle3 = _interopRequireDefault(_Lifecycle2); + + exports.Lifecycle = _Lifecycle3['default']; + + var _RouteContext2 = __webpack_require__(215); + + var _RouteContext3 = _interopRequireDefault(_RouteContext2); + + exports.RouteContext = _RouteContext3['default']; + + /* utils */ + + var _useRoutes2 = __webpack_require__(216); + + var _useRoutes3 = _interopRequireDefault(_useRoutes2); + + exports.useRoutes = _useRoutes3['default']; + + var _RouteUtils = __webpack_require__(201); + + exports.createRoutes = _RouteUtils.createRoutes; + + var _RouterContext2 = __webpack_require__(203); + + var _RouterContext3 = _interopRequireDefault(_RouterContext2); + + exports.RouterContext = _RouterContext3['default']; + + var _RoutingContext2 = __webpack_require__(217); + + var _RoutingContext3 = _interopRequireDefault(_RoutingContext2); + + exports.RoutingContext = _RoutingContext3['default']; + + var _PropTypes2 = __webpack_require__(207); + + var _PropTypes3 = _interopRequireDefault(_PropTypes2); + + exports.PropTypes = _PropTypes3['default']; + exports.locationShape = _PropTypes2.locationShape; + exports.routerShape = _PropTypes2.routerShape; + + var _match2 = __webpack_require__(218); + + var _match3 = _interopRequireDefault(_match2); + + exports.match = _match3['default']; + + var _useRouterHistory2 = __webpack_require__(222); + + var _useRouterHistory3 = _interopRequireDefault(_useRouterHistory2); + + exports.useRouterHistory = _useRouterHistory3['default']; + + var _PatternUtils = __webpack_require__(194); + + exports.formatPattern = _PatternUtils.formatPattern; + + var _applyRouterMiddleware2 = __webpack_require__(223); + + var _applyRouterMiddleware3 = _interopRequireDefault(_applyRouterMiddleware2); + + exports.applyRouterMiddleware = _applyRouterMiddleware3['default']; + + /* histories */ + + var _browserHistory2 = __webpack_require__(224); + + var _browserHistory3 = _interopRequireDefault(_browserHistory2); + + exports.browserHistory = _browserHistory3['default']; + + var _hashHistory2 = __webpack_require__(227); + + var _hashHistory3 = _interopRequireDefault(_hashHistory2); + + exports.hashHistory = _hashHistory3['default']; + + var _createMemoryHistory2 = __webpack_require__(219); + + var _createMemoryHistory3 = _interopRequireDefault(_createMemoryHistory2); + + exports.createMemoryHistory = _createMemoryHistory3['default']; + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _historyLibCreateHashHistory = __webpack_require__(170); + + var _historyLibCreateHashHistory2 = _interopRequireDefault(_historyLibCreateHashHistory); + + var _historyLibUseQueries = __webpack_require__(187); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _createTransitionManager = __webpack_require__(190); + + var _createTransitionManager2 = _interopRequireDefault(_createTransitionManager); + + var _InternalPropTypes = __webpack_require__(202); + + var _RouterContext = __webpack_require__(203); + + var _RouterContext2 = _interopRequireDefault(_RouterContext); + + var _RouteUtils = __webpack_require__(201); + + var _RouterUtils = __webpack_require__(205); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function isDeprecatedHistory(history) { + return !history || !history.__v2_compatible__; + } + + var _React$PropTypes = _react2['default'].PropTypes; + var func = _React$PropTypes.func; + var object = _React$PropTypes.object; + + /** + * A is a high-level API for automatically setting up + * a router that renders a with all the props + * it needs each time the URL changes. + */ + var Router = _react2['default'].createClass({ + displayName: 'Router', + + propTypes: { + history: object, + children: _InternalPropTypes.routes, + routes: _InternalPropTypes.routes, // alias for children + render: func, + createElement: func, + onError: func, + onUpdate: func, + + // PRIVATE: For client-side rehydration of server match. + matchContext: object + }, + + getDefaultProps: function getDefaultProps() { + return { + render: function render(props) { + return _react2['default'].createElement(_RouterContext2['default'], props); + } + }; + }, + + getInitialState: function getInitialState() { + return { + location: null, + routes: null, + params: null, + components: null + }; + }, + + handleError: function handleError(error) { + if (this.props.onError) { + this.props.onError.call(this, error); + } else { + // Throw errors by default so we don't silently swallow them! + throw error; // This error probably occurred in getChildRoutes or getComponents. + } + }, + + componentWillMount: function componentWillMount() { + var _this = this; + + var _props = this.props; + var parseQueryString = _props.parseQueryString; + var stringifyQuery = _props.stringifyQuery; + + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](!(parseQueryString || stringifyQuery), '`parseQueryString` and `stringifyQuery` are deprecated. Please create a custom history. http://tiny.cc/router-customquerystring') : undefined; + + var _createRouterObjects = this.createRouterObjects(); + + var history = _createRouterObjects.history; + var transitionManager = _createRouterObjects.transitionManager; + var router = _createRouterObjects.router; + + this._unlisten = transitionManager.listen(function (error, state) { + if (error) { + _this.handleError(error); + } else { + _this.setState(state, _this.props.onUpdate); + } + }); + + this.history = history; + this.router = router; + }, + + createRouterObjects: function createRouterObjects() { + var matchContext = this.props.matchContext; + + if (matchContext) { + return matchContext; + } + + var history = this.props.history; + var _props2 = this.props; + var routes = _props2.routes; + var children = _props2.children; + + if (isDeprecatedHistory(history)) { + history = this.wrapDeprecatedHistory(history); + } + + var transitionManager = _createTransitionManager2['default'](history, _RouteUtils.createRoutes(routes || children)); + var router = _RouterUtils.createRouterObject(history, transitionManager); + var routingHistory = _RouterUtils.createRoutingHistory(history, transitionManager); + + return { history: routingHistory, transitionManager: transitionManager, router: router }; + }, + + wrapDeprecatedHistory: function wrapDeprecatedHistory(history) { + var _props3 = this.props; + var parseQueryString = _props3.parseQueryString; + var stringifyQuery = _props3.stringifyQuery; + + var createHistory = undefined; + if (history) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'It appears you have provided a deprecated history object to ``, please use a history provided by ' + 'React Router with `import { browserHistory } from \'react-router\'` or `import { hashHistory } from \'react-router\'`. ' + 'If you are using a custom history please create it with `useRouterHistory`, see http://tiny.cc/router-usinghistory for details.') : undefined; + createHistory = function () { + return history; + }; + } else { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, '`Router` no longer defaults the history prop to hash history. Please use the `hashHistory` singleton instead. http://tiny.cc/router-defaulthistory') : undefined; + createHistory = _historyLibCreateHashHistory2['default']; + } + + return _historyLibUseQueries2['default'](createHistory)({ parseQueryString: parseQueryString, stringifyQuery: stringifyQuery }); + }, + + /* istanbul ignore next: sanity check */ + componentWillReceiveProps: function componentWillReceiveProps(nextProps) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](nextProps.history === this.props.history, 'You cannot change ; it will be ignored') : undefined; + + process.env.NODE_ENV !== 'production' ? _routerWarning2['default']((nextProps.routes || nextProps.children) === (this.props.routes || this.props.children), 'You cannot change ; it will be ignored') : undefined; + }, + + componentWillUnmount: function componentWillUnmount() { + if (this._unlisten) this._unlisten(); + }, + + render: function render() { + var _state = this.state; + var location = _state.location; + var routes = _state.routes; + var params = _state.params; + var components = _state.components; + var _props4 = this.props; + var createElement = _props4.createElement; + var render = _props4.render; + + var props = _objectWithoutProperties(_props4, ['createElement', 'render']); + + if (location == null) return null; // Async match + + // Only forward non-Router-specific props to routing context, as those are + // the only ones that might be custom routing context props. + Object.keys(Router.propTypes).forEach(function (propType) { + return delete props[propType]; + }); + + return render(_extends({}, props, { + history: this.history, + router: this.router, + location: location, + routes: routes, + params: params, + components: components, + createElement: createElement + })); + } + + }); + + exports['default'] = Router; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 170 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Actions = __webpack_require__(173); + + var _PathUtils = __webpack_require__(174); + + var _ExecutionEnvironment = __webpack_require__(175); + + var _DOMUtils = __webpack_require__(176); + + var _DOMStateStorage = __webpack_require__(177); + + var _createDOMHistory = __webpack_require__(178); + + var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); + + function isAbsolutePath(path) { + return typeof path === 'string' && path.charAt(0) === '/'; + } + + function ensureSlash() { + var path = _DOMUtils.getHashPath(); + + if (isAbsolutePath(path)) return true; + + _DOMUtils.replaceHashPath('/' + path); + + return false; + } + + function addQueryStringValueToPath(path, key, value) { + return path + (path.indexOf('?') === -1 ? '?' : '&') + (key + '=' + value); + } + + function stripQueryStringValueFromPath(path, key) { + return path.replace(new RegExp('[?&]?' + key + '=[a-zA-Z0-9]+'), ''); + } + + function getQueryStringValueFromPath(path, key) { + var match = path.match(new RegExp('\\?.*?\\b' + key + '=(.+?)\\b')); + return match && match[1]; + } + + var DefaultQueryKey = '_k'; + + function createHashHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Hash history needs a DOM') : _invariant2['default'](false) : undefined; + + var queryKey = options.queryKey; + + if (queryKey === undefined || !!queryKey) queryKey = typeof queryKey === 'string' ? queryKey : DefaultQueryKey; + + function getCurrentLocation() { + var path = _DOMUtils.getHashPath(); + + var key = undefined, + state = undefined; + if (queryKey) { + key = getQueryStringValueFromPath(path, queryKey); + path = stripQueryStringValueFromPath(path, queryKey); + + if (key) { + state = _DOMStateStorage.readState(key); + } else { + state = null; + key = history.createKey(); + _DOMUtils.replaceHashPath(addQueryStringValueToPath(path, queryKey, key)); + } + } else { + key = state = null; + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function startHashChangeListener(_ref) { + var transitionTo = _ref.transitionTo; + + function hashChangeListener() { + if (!ensureSlash()) return; // Always make sure hashes are preceeded with a /. + + transitionTo(getCurrentLocation()); + } + + ensureSlash(); + _DOMUtils.addEventListener(window, 'hashchange', hashChangeListener); + + return function () { + _DOMUtils.removeEventListener(window, 'hashchange', hashChangeListener); + }; + } + + function finishTransition(location) { + var basename = location.basename; + var pathname = location.pathname; + var search = location.search; + var state = location.state; + var action = location.action; + var key = location.key; + + if (action === _Actions.POP) return; // Nothing to do. + + var path = (basename || '') + pathname + search; + + if (queryKey) { + path = addQueryStringValueToPath(path, queryKey, key); + _DOMStateStorage.saveState(key, state); + } else { + // Drop key and state. + location.key = location.state = null; + } + + var currentHash = _DOMUtils.getHashPath(); + + if (action === _Actions.PUSH) { + if (currentHash !== path) { + window.location.hash = path; + } else { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'You cannot PUSH the same path using hash history') : undefined; + } + } else if (currentHash !== path) { + // REPLACE + _DOMUtils.replaceHashPath(path); + } + } + + var history = _createDOMHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: _DOMStateStorage.saveState + })); + + var listenerCount = 0, + stopHashChangeListener = undefined; + + function listenBefore(listener) { + if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history); + + var unlisten = history.listenBefore(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopHashChangeListener(); + }; + } + + function listen(listener) { + if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history); + + var unlisten = history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopHashChangeListener(); + }; + } + + function push(location) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.push(location); + } + + function replace(location) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || location.state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.replace(location); + } + + var goIsSupportedWithoutReload = _DOMUtils.supportsGoWithoutReloadUsingHash(); + + function go(n) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](goIsSupportedWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : undefined; + + history.go(n); + } + + function createHref(path) { + return '#' + history.createHref(path); + } + + // deprecated + function registerTransitionHook(hook) { + if (++listenerCount === 1) stopHashChangeListener = startHashChangeListener(history); + + history.registerTransitionHook(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + history.unregisterTransitionHook(hook); + + if (--listenerCount === 0) stopHashChangeListener(); + } + + // deprecated + function pushState(state, path) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.pushState(state, path); + } + + // deprecated + function replaceState(state, path) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](queryKey || state == null, 'You cannot use state without a queryKey it will be dropped') : undefined; + + history.replaceState(state, path); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + go: go, + createHref: createHref, + + registerTransitionHook: registerTransitionHook, // deprecated - warning is in createHistory + unregisterTransitionHook: unregisterTransitionHook, // deprecated - warning is in createHistory + pushState: pushState, // deprecated - warning is in createHistory + replaceState: replaceState // deprecated - warning is in createHistory + }); + } + + exports['default'] = createHashHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + + 'use strict'; + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + + var warning = function() {}; + + if (process.env.NODE_ENV !== 'production') { + warning = function(condition, format, args) { + var len = arguments.length; + args = new Array(len > 2 ? len - 2 : 0); + for (var key = 2; key < len; key++) { + args[key - 2] = arguments[key]; + } + if (format === undefined) { + throw new Error( + '`warning(condition, format, ...args)` requires a warning ' + + 'message argument' + ); + } + + if (format.length < 10 || (/^[s\W]*$/).test(format)) { + throw new Error( + 'The warning format should be able to uniquely identify this ' + + 'warning. Please, use a more descriptive format than: ' + format + ); + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + + format.replace(/%s/g, function() { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch(x) {} + } + }; + } + + module.exports = warning; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 172 */, +/* 173 */ +/***/ (function(module, exports) { + + /** + * Indicates that navigation was caused by a call to history.push. + */ + 'use strict'; + + exports.__esModule = true; + var PUSH = 'PUSH'; + + exports.PUSH = PUSH; + /** + * Indicates that navigation was caused by a call to history.replace. + */ + var REPLACE = 'REPLACE'; + + exports.REPLACE = REPLACE; + /** + * Indicates that navigation was caused by some other action such + * as using a browser's back/forward buttons and/or manually manipulating + * the URL in a browser's location bar. This is the default. + * + * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate + * for more information. + */ + var POP = 'POP'; + + exports.POP = POP; + exports['default'] = { + PUSH: PUSH, + REPLACE: REPLACE, + POP: POP + }; + +/***/ }), +/* 174 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + exports.extractPath = extractPath; + exports.parsePath = parsePath; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + function extractPath(string) { + var match = string.match(/^https?:\/\/[^\/]*/); + + if (match == null) return string; + + return string.substring(match[0].length); + } + + function parsePath(path) { + var pathname = extractPath(path); + var search = ''; + var hash = ''; + + process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like "%s"', path) : undefined; + + var hashIndex = pathname.indexOf('#'); + if (hashIndex !== -1) { + hash = pathname.substring(hashIndex); + pathname = pathname.substring(0, hashIndex); + } + + var searchIndex = pathname.indexOf('?'); + if (searchIndex !== -1) { + search = pathname.substring(searchIndex); + pathname = pathname.substring(0, searchIndex); + } + + if (pathname === '') pathname = '/'; + + return { + pathname: pathname, + search: search, + hash: hash + }; + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 175 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + exports.canUseDOM = canUseDOM; + +/***/ }), +/* 176 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.addEventListener = addEventListener; + exports.removeEventListener = removeEventListener; + exports.getHashPath = getHashPath; + exports.replaceHashPath = replaceHashPath; + exports.getWindowPath = getWindowPath; + exports.go = go; + exports.getUserConfirmation = getUserConfirmation; + exports.supportsHistory = supportsHistory; + exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash; + + function addEventListener(node, event, listener) { + if (node.addEventListener) { + node.addEventListener(event, listener, false); + } else { + node.attachEvent('on' + event, listener); + } + } + + function removeEventListener(node, event, listener) { + if (node.removeEventListener) { + node.removeEventListener(event, listener, false); + } else { + node.detachEvent('on' + event, listener); + } + } + + function getHashPath() { + // We can't use window.location.hash here because it's not + // consistent across browsers - Firefox will pre-decode it! + return window.location.href.split('#')[1] || ''; + } + + function replaceHashPath(path) { + window.location.replace(window.location.pathname + window.location.search + '#' + path); + } + + function getWindowPath() { + return window.location.pathname + window.location.search + window.location.hash; + } + + function go(n) { + if (n) window.history.go(n); + } + + function getUserConfirmation(message, callback) { + callback(window.confirm(message)); + } + + /** + * Returns true if the HTML5 history API is supported. Taken from Modernizr. + * + * https://github.com/Modernizr/Modernizr/blob/master/LICENSE + * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js + * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586 + */ + + function supportsHistory() { + var ua = navigator.userAgent; + if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) { + return false; + } + return window.history && 'pushState' in window.history; + } + + /** + * Returns false if using go(n) with hash history causes a full page reload. + */ + + function supportsGoWithoutReloadUsingHash() { + var ua = navigator.userAgent; + return ua.indexOf('Firefox') === -1; + } + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/*eslint-disable no-empty */ + 'use strict'; + + exports.__esModule = true; + exports.saveState = saveState; + exports.readState = readState; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var KeyPrefix = '@@History/'; + var QuotaExceededErrors = ['QuotaExceededError', 'QUOTA_EXCEEDED_ERR']; + + var SecurityError = 'SecurityError'; + + function createKey(key) { + return KeyPrefix + key; + } + + function saveState(key, state) { + try { + if (state == null) { + window.sessionStorage.removeItem(createKey(key)); + } else { + window.sessionStorage.setItem(createKey(key), JSON.stringify(state)); + } + } catch (error) { + if (error.name === SecurityError) { + // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any + // attempt to access window.sessionStorage. + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined; + + return; + } + + if (QuotaExceededErrors.indexOf(error.name) >= 0 && window.sessionStorage.length === 0) { + // Safari "private mode" throws QuotaExceededError. + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined; + + return; + } + + throw error; + } + } + + function readState(key) { + var json = undefined; + try { + json = window.sessionStorage.getItem(createKey(key)); + } catch (error) { + if (error.name === SecurityError) { + // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any + // attempt to access window.sessionStorage. + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined; + + return null; + } + } + + if (json) { + try { + return JSON.parse(json); + } catch (error) { + // Ignore invalid JSON. + } + } + + return null; + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _ExecutionEnvironment = __webpack_require__(175); + + var _DOMUtils = __webpack_require__(176); + + var _createHistory = __webpack_require__(179); + + var _createHistory2 = _interopRequireDefault(_createHistory); + + function createDOMHistory(options) { + var history = _createHistory2['default'](_extends({ + getUserConfirmation: _DOMUtils.getUserConfirmation + }, options, { + go: _DOMUtils.go + })); + + function listen(listener) { + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined; + + return history.listen(listener); + } + + return _extends({}, history, { + listen: listen + }); + } + + exports['default'] = createDOMHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var _deepEqual = __webpack_require__(180); + + var _deepEqual2 = _interopRequireDefault(_deepEqual); + + var _PathUtils = __webpack_require__(174); + + var _AsyncUtils = __webpack_require__(183); + + var _Actions = __webpack_require__(173); + + var _createLocation2 = __webpack_require__(184); + + var _createLocation3 = _interopRequireDefault(_createLocation2); + + var _runTransitionHook = __webpack_require__(185); + + var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + + var _deprecate = __webpack_require__(186); + + var _deprecate2 = _interopRequireDefault(_deprecate); + + function createRandomKey(length) { + return Math.random().toString(36).substr(2, length); + } + + function locationsAreEqual(a, b) { + return a.pathname === b.pathname && a.search === b.search && + //a.action === b.action && // Different action !== location change. + a.key === b.key && _deepEqual2['default'](a.state, b.state); + } + + var DefaultKeyLength = 6; + + function createHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var getCurrentLocation = options.getCurrentLocation; + var finishTransition = options.finishTransition; + var saveState = options.saveState; + var go = options.go; + var getUserConfirmation = options.getUserConfirmation; + var keyLength = options.keyLength; + + if (typeof keyLength !== 'number') keyLength = DefaultKeyLength; + + var transitionHooks = []; + + function listenBefore(hook) { + transitionHooks.push(hook); + + return function () { + transitionHooks = transitionHooks.filter(function (item) { + return item !== hook; + }); + }; + } + + var allKeys = []; + var changeListeners = []; + var location = undefined; + + function getCurrent() { + if (pendingLocation && pendingLocation.action === _Actions.POP) { + return allKeys.indexOf(pendingLocation.key); + } else if (location) { + return allKeys.indexOf(location.key); + } else { + return -1; + } + } + + function updateLocation(newLocation) { + var current = getCurrent(); + + location = newLocation; + + if (location.action === _Actions.PUSH) { + allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]); + } else if (location.action === _Actions.REPLACE) { + allKeys[current] = location.key; + } + + changeListeners.forEach(function (listener) { + listener(location); + }); + } + + function listen(listener) { + changeListeners.push(listener); + + if (location) { + listener(location); + } else { + var _location = getCurrentLocation(); + allKeys = [_location.key]; + updateLocation(_location); + } + + return function () { + changeListeners = changeListeners.filter(function (item) { + return item !== listener; + }); + }; + } + + function confirmTransitionTo(location, callback) { + _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) { + _runTransitionHook2['default'](transitionHooks[index], location, function (result) { + if (result != null) { + done(result); + } else { + next(); + } + }); + }, function (message) { + if (getUserConfirmation && typeof message === 'string') { + getUserConfirmation(message, function (ok) { + callback(ok !== false); + }); + } else { + callback(message !== false); + } + }); + } + + var pendingLocation = undefined; + + function transitionTo(nextLocation) { + if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do. + + pendingLocation = nextLocation; + + confirmTransitionTo(nextLocation, function (ok) { + if (pendingLocation !== nextLocation) return; // Transition was interrupted. + + if (ok) { + // treat PUSH to current path like REPLACE to be consistent with browsers + if (nextLocation.action === _Actions.PUSH) { + var prevPath = createPath(location); + var nextPath = createPath(nextLocation); + + if (nextPath === prevPath && _deepEqual2['default'](location.state, nextLocation.state)) nextLocation.action = _Actions.REPLACE; + } + + if (finishTransition(nextLocation) !== false) updateLocation(nextLocation); + } else if (location && nextLocation.action === _Actions.POP) { + var prevIndex = allKeys.indexOf(location.key); + var nextIndex = allKeys.indexOf(nextLocation.key); + + if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL. + } + }); + } + + function push(location) { + transitionTo(createLocation(location, _Actions.PUSH, createKey())); + } + + function replace(location) { + transitionTo(createLocation(location, _Actions.REPLACE, createKey())); + } + + function goBack() { + go(-1); + } + + function goForward() { + go(1); + } + + function createKey() { + return createRandomKey(keyLength); + } + + function createPath(location) { + if (location == null || typeof location === 'string') return location; + + var pathname = location.pathname; + var search = location.search; + var hash = location.hash; + + var result = pathname; + + if (search) result += search; + + if (hash) result += hash; + + return result; + } + + function createHref(location) { + return createPath(location); + } + + function createLocation(location, action) { + var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2]; + + if (typeof action === 'object') { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to history.createLocation is deprecated; use a ' + 'location descriptor instead') : undefined; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + location = _extends({}, location, { state: action }); + + action = key; + key = arguments[3] || createKey(); + } + + return _createLocation3['default'](location, action, key); + } + + // deprecated + function setState(state) { + if (location) { + updateLocationState(location, state); + updateLocation(location); + } else { + updateLocationState(getCurrentLocation(), state); + } + } + + function updateLocationState(location, state) { + location.state = _extends({}, location.state, state); + saveState(location.key, location.state); + } + + // deprecated + function registerTransitionHook(hook) { + if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + transitionHooks = transitionHooks.filter(function (item) { + return item !== hook; + }); + } + + // deprecated + function pushState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + push(_extends({ state: state }, path)); + } + + // deprecated + function replaceState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + replace(_extends({ state: state }, path)); + } + + return { + listenBefore: listenBefore, + listen: listen, + transitionTo: transitionTo, + push: push, + replace: replace, + go: go, + goBack: goBack, + goForward: goForward, + createKey: createKey, + createPath: createPath, + createHref: createHref, + createLocation: createLocation, + + setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'), + registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'), + unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'), + pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'), + replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead') + }; + } + + exports['default'] = createHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 180 */ +/***/ (function(module, exports, __webpack_require__) { + + var pSlice = Array.prototype.slice; + var objectKeys = __webpack_require__(181); + var isArguments = __webpack_require__(182); + + var deepEqual = module.exports = function (actual, expected, opts) { + if (!opts) opts = {}; + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (actual instanceof Date && expected instanceof Date) { + return actual.getTime() === expected.getTime(); + + // 7.3. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { + return opts.strict ? actual === expected : actual == expected; + + // 7.4. For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected, opts); + } + } + + function isUndefinedOrNull(value) { + return value === null || value === undefined; + } + + function isBuffer (x) { + if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; + if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { + return false; + } + if (x.length > 0 && typeof x[0] !== 'number') return false; + return true; + } + + function objEquiv(a, b, opts) { + var i, key; + if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + //~~~I've managed to break Object.keys through screwy arguments passing. + // Converting to array solves the problem. + if (isArguments(a)) { + if (!isArguments(b)) { + return false; + } + a = pSlice.call(a); + b = pSlice.call(b); + return deepEqual(a, b, opts); + } + if (isBuffer(a)) { + if (!isBuffer(b)) { + return false; + } + if (a.length !== b.length) return false; + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; + } + try { + var ka = objectKeys(a), + kb = objectKeys(b); + } catch (e) {//happens when one is a string literal and the other isn't + return false; + } + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!deepEqual(a[key], b[key], opts)) return false; + } + return typeof a === typeof b; + } + + +/***/ }), +/* 181 */ +/***/ (function(module, exports) { + + exports = module.exports = typeof Object.keys === 'function' + ? Object.keys : shim; + + exports.shim = shim; + function shim (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; + } + + +/***/ }), +/* 182 */ +/***/ (function(module, exports) { + + var supportsArgumentsClass = (function(){ + return Object.prototype.toString.call(arguments) + })() == '[object Arguments]'; + + exports = module.exports = supportsArgumentsClass ? supported : unsupported; + + exports.supported = supported; + function supported(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; + }; + + exports.unsupported = unsupported; + function unsupported(object){ + return object && + typeof object == 'object' && + typeof object.length == 'number' && + Object.prototype.hasOwnProperty.call(object, 'callee') && + !Object.prototype.propertyIsEnumerable.call(object, 'callee') || + false; + }; + + +/***/ }), +/* 183 */ +/***/ (function(module, exports) { + + "use strict"; + + exports.__esModule = true; + var _slice = Array.prototype.slice; + exports.loopAsync = loopAsync; + + function loopAsync(turns, work, callback) { + var currentTurn = 0, + isDone = false; + var sync = false, + hasNext = false, + doneArgs = undefined; + + function done() { + isDone = true; + if (sync) { + // Iterate instead of recursing if possible. + doneArgs = [].concat(_slice.call(arguments)); + return; + } + + callback.apply(this, arguments); + } + + function next() { + if (isDone) { + return; + } + + hasNext = true; + if (sync) { + // Iterate instead of recursing if possible. + return; + } + + sync = true; + + while (!isDone && currentTurn < turns && hasNext) { + hasNext = false; + work.call(this, currentTurn++, next, done); + } + + sync = false; + + if (isDone) { + // This means the loop finished synchronously. + callback.apply(this, doneArgs); + return; + } + + if (currentTurn >= turns && hasNext) { + isDone = true; + callback(); + } + } + + next(); + } + +/***/ }), +/* 184 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var _Actions = __webpack_require__(173); + + var _PathUtils = __webpack_require__(174); + + function createLocation() { + var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0]; + var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1]; + var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + + var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3]; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + if (typeof action === 'object') { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'The state (2nd) argument to createLocation is deprecated; use a ' + 'location descriptor instead') : undefined; + + location = _extends({}, location, { state: action }); + + action = key || _Actions.POP; + key = _fourthArg; + } + + var pathname = location.pathname || '/'; + var search = location.search || ''; + var hash = location.hash || ''; + var state = location.state || null; + + return { + pathname: pathname, + search: search, + hash: hash, + state: state, + action: action, + key: key + }; + } + + exports['default'] = createLocation; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + function runTransitionHook(hook, location, callback) { + var result = hook(location, callback); + + if (hook.length < 2) { + // Assume the hook runs synchronously and automatically + // call the callback with the return value. + callback(result); + } else { + process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined; + } + } + + exports['default'] = runTransitionHook; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + function deprecate(fn, message) { + return function () { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] ' + message) : undefined; + return fn.apply(this, arguments); + }; + } + + exports['default'] = deprecate; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var _queryString = __webpack_require__(188); + + var _runTransitionHook = __webpack_require__(185); + + var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + + var _PathUtils = __webpack_require__(174); + + var _deprecate = __webpack_require__(186); + + var _deprecate2 = _interopRequireDefault(_deprecate); + + var SEARCH_BASE_KEY = '$searchBase'; + + function defaultStringifyQuery(query) { + return _queryString.stringify(query).replace(/%20/g, '+'); + } + + var defaultParseQueryString = _queryString.parse; + + function isNestedObject(object) { + for (var p in object) { + if (Object.prototype.hasOwnProperty.call(object, p) && typeof object[p] === 'object' && !Array.isArray(object[p]) && object[p] !== null) return true; + }return false; + } + + /** + * Returns a new createHistory function that may be used to create + * history objects that know how to handle URL queries. + */ + function useQueries(createHistory) { + return function () { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var history = createHistory(options); + + var stringifyQuery = options.stringifyQuery; + var parseQueryString = options.parseQueryString; + + if (typeof stringifyQuery !== 'function') stringifyQuery = defaultStringifyQuery; + + if (typeof parseQueryString !== 'function') parseQueryString = defaultParseQueryString; + + function addQuery(location) { + if (location.query == null) { + var search = location.search; + + location.query = parseQueryString(search.substring(1)); + location[SEARCH_BASE_KEY] = { search: search, searchBase: '' }; + } + + // TODO: Instead of all the book-keeping here, this should just strip the + // stringified query from the search. + + return location; + } + + function appendQuery(location, query) { + var _extends2; + + var searchBaseSpec = location[SEARCH_BASE_KEY]; + var queryString = query ? stringifyQuery(query) : ''; + if (!searchBaseSpec && !queryString) { + return location; + } + + process.env.NODE_ENV !== 'production' ? _warning2['default'](stringifyQuery !== defaultStringifyQuery || !isNestedObject(query), 'useQueries does not stringify nested query objects by default; ' + 'use a custom stringifyQuery function') : undefined; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + var searchBase = undefined; + if (searchBaseSpec && location.search === searchBaseSpec.search) { + searchBase = searchBaseSpec.searchBase; + } else { + searchBase = location.search || ''; + } + + var search = searchBase; + if (queryString) { + search += (search ? '&' : '?') + queryString; + } + + return _extends({}, location, (_extends2 = { + search: search + }, _extends2[SEARCH_BASE_KEY] = { search: search, searchBase: searchBase }, _extends2)); + } + + // Override all read methods with query-aware versions. + function listenBefore(hook) { + return history.listenBefore(function (location, callback) { + _runTransitionHook2['default'](hook, addQuery(location), callback); + }); + } + + function listen(listener) { + return history.listen(function (location) { + listener(addQuery(location)); + }); + } + + // Override all write methods with query-aware versions. + function push(location) { + history.push(appendQuery(location, location.query)); + } + + function replace(location) { + history.replace(appendQuery(location, location.query)); + } + + function createPath(location, query) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](!query, 'the query argument to createPath is deprecated; use a location descriptor instead') : undefined; + + return history.createPath(appendQuery(location, query || location.query)); + } + + function createHref(location, query) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](!query, 'the query argument to createHref is deprecated; use a location descriptor instead') : undefined; + + return history.createHref(appendQuery(location, query || location.query)); + } + + function createLocation(location) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var fullLocation = history.createLocation.apply(history, [appendQuery(location, location.query)].concat(args)); + if (location.query) { + fullLocation.query = location.query; + } + return addQuery(fullLocation); + } + + // deprecated + function pushState(state, path, query) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + push(_extends({ state: state }, path, { query: query })); + } + + // deprecated + function replaceState(state, path, query) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + replace(_extends({ state: state }, path, { query: query })); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + createPath: createPath, + createHref: createHref, + createLocation: createLocation, + + pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'), + replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead') + }); + }; + } + + exports['default'] = useQueries; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var strictUriEncode = __webpack_require__(189); + + exports.extract = function (str) { + return str.split('?')[1] || ''; + }; + + exports.parse = function (str) { + if (typeof str !== 'string') { + return {}; + } + + str = str.trim().replace(/^(\?|#|&)/, ''); + + if (!str) { + return {}; + } + + return str.split('&').reduce(function (ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + // Firefox (pre 40) decodes `%3D` to `=` + // https://github.com/sindresorhus/query-string/pull/37 + var key = parts.shift(); + var val = parts.length > 0 ? parts.join('=') : undefined; + + key = decodeURIComponent(key); + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = val === undefined ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + + return ret; + }, {}); + }; + + exports.stringify = function (obj) { + return obj ? Object.keys(obj).sort().map(function (key) { + var val = obj[key]; + + if (val === undefined) { + return ''; + } + + if (val === null) { + return key; + } + + if (Array.isArray(val)) { + return val.slice().sort().map(function (val2) { + return strictUriEncode(key) + '=' + strictUriEncode(val2); + }).join('&'); + } + + return strictUriEncode(key) + '=' + strictUriEncode(val); + }).filter(function (x) { + return x.length > 0; + }).join('&') : ''; + }; + + +/***/ }), +/* 189 */ +/***/ (function(module, exports) { + + 'use strict'; + module.exports = function (str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase(); + }); + }; + + +/***/ }), +/* 190 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports['default'] = createTransitionManager; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _historyLibActions = __webpack_require__(173); + + var _computeChangedRoutes2 = __webpack_require__(193); + + var _computeChangedRoutes3 = _interopRequireDefault(_computeChangedRoutes2); + + var _TransitionUtils = __webpack_require__(195); + + var _isActive2 = __webpack_require__(197); + + var _isActive3 = _interopRequireDefault(_isActive2); + + var _getComponents = __webpack_require__(198); + + var _getComponents2 = _interopRequireDefault(_getComponents); + + var _matchRoutes = __webpack_require__(200); + + var _matchRoutes2 = _interopRequireDefault(_matchRoutes); + + function hasAnyProperties(object) { + for (var p in object) { + if (Object.prototype.hasOwnProperty.call(object, p)) return true; + }return false; + } + + function createTransitionManager(history, routes) { + var state = {}; + + // Signature should be (location, indexOnly), but needs to support (path, + // query, indexOnly) + function isActive(location) { + var indexOnlyOrDeprecatedQuery = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var deprecatedIndexOnly = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2]; + + var indexOnly = undefined; + if (indexOnlyOrDeprecatedQuery && indexOnlyOrDeprecatedQuery !== true || deprecatedIndexOnly !== null) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, '`isActive(pathname, query, indexOnly) is deprecated; use `isActive(location, indexOnly)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : undefined; + location = { pathname: location, query: indexOnlyOrDeprecatedQuery }; + indexOnly = deprecatedIndexOnly || false; + } else { + location = history.createLocation(location); + indexOnly = indexOnlyOrDeprecatedQuery; + } + + return _isActive3['default'](location, indexOnly, state.location, state.routes, state.params); + } + + function createLocationFromRedirectInfo(location) { + return history.createLocation(location, _historyLibActions.REPLACE); + } + + var partialNextState = undefined; + + function match(location, callback) { + if (partialNextState && partialNextState.location === location) { + // Continue from where we left off. + finishMatch(partialNextState, callback); + } else { + _matchRoutes2['default'](routes, location, function (error, nextState) { + if (error) { + callback(error); + } else if (nextState) { + finishMatch(_extends({}, nextState, { location: location }), callback); + } else { + callback(); + } + }); + } + } + + function finishMatch(nextState, callback) { + var _computeChangedRoutes = _computeChangedRoutes3['default'](state, nextState); + + var leaveRoutes = _computeChangedRoutes.leaveRoutes; + var changeRoutes = _computeChangedRoutes.changeRoutes; + var enterRoutes = _computeChangedRoutes.enterRoutes; + + _TransitionUtils.runLeaveHooks(leaveRoutes); + + // Tear down confirmation hooks for left routes + leaveRoutes.filter(function (route) { + return enterRoutes.indexOf(route) === -1; + }).forEach(removeListenBeforeHooksForRoute); + + // change and enter hooks are run in series + _TransitionUtils.runChangeHooks(changeRoutes, state, nextState, function (error, redirectInfo) { + if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo); + + _TransitionUtils.runEnterHooks(enterRoutes, nextState, finishEnterHooks); + }); + + function finishEnterHooks(error, redirectInfo) { + if (error || redirectInfo) return handleErrorOrRedirect(error, redirectInfo); + + // TODO: Fetch components after state is updated. + _getComponents2['default'](nextState, function (error, components) { + if (error) { + callback(error); + } else { + // TODO: Make match a pure function and have some other API + // for "match and update state". + callback(null, null, state = _extends({}, nextState, { components: components })); + } + }); + } + + function handleErrorOrRedirect(error, redirectInfo) { + if (error) callback(error);else callback(null, createLocationFromRedirectInfo(redirectInfo)); + } + } + + var RouteGuid = 1; + + function getRouteID(route) { + var create = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1]; + + return route.__id__ || create && (route.__id__ = RouteGuid++); + } + + var RouteHooks = Object.create(null); + + function getRouteHooksForRoutes(routes) { + return routes.reduce(function (hooks, route) { + hooks.push.apply(hooks, RouteHooks[getRouteID(route)]); + return hooks; + }, []); + } + + function transitionHook(location, callback) { + _matchRoutes2['default'](routes, location, function (error, nextState) { + if (nextState == null) { + // TODO: We didn't actually match anything, but hang + // onto error/nextState so we don't have to matchRoutes + // again in the listen callback. + callback(); + return; + } + + // Cache some state here so we don't have to + // matchRoutes() again in the listen callback. + partialNextState = _extends({}, nextState, { location: location }); + + var hooks = getRouteHooksForRoutes(_computeChangedRoutes3['default'](state, partialNextState).leaveRoutes); + + var result = undefined; + for (var i = 0, len = hooks.length; result == null && i < len; ++i) { + // Passing the location arg here indicates to + // the user that this is a transition hook. + result = hooks[i](location); + } + + callback(result); + }); + } + + /* istanbul ignore next: untestable with Karma */ + function beforeUnloadHook() { + // Synchronously check to see if any route hooks want + // to prevent the current window/tab from closing. + if (state.routes) { + var hooks = getRouteHooksForRoutes(state.routes); + + var message = undefined; + for (var i = 0, len = hooks.length; typeof message !== 'string' && i < len; ++i) { + // Passing no args indicates to the user that this is a + // beforeunload hook. We don't know the next location. + message = hooks[i](); + } + + return message; + } + } + + var unlistenBefore = undefined, + unlistenBeforeUnload = undefined; + + function removeListenBeforeHooksForRoute(route) { + var routeID = getRouteID(route, false); + if (!routeID) { + return; + } + + delete RouteHooks[routeID]; + + if (!hasAnyProperties(RouteHooks)) { + // teardown transition & beforeunload hooks + if (unlistenBefore) { + unlistenBefore(); + unlistenBefore = null; + } + + if (unlistenBeforeUnload) { + unlistenBeforeUnload(); + unlistenBeforeUnload = null; + } + } + } + + /** + * Registers the given hook function to run before leaving the given route. + * + * During a normal transition, the hook function receives the next location + * as its only argument and must return either a) a prompt message to show + * the user, to make sure they want to leave the page or b) false, to prevent + * the transition. + * + * During the beforeunload event (in browsers) the hook receives no arguments. + * In this case it must return a prompt message to prevent the transition. + * + * Returns a function that may be used to unbind the listener. + */ + function listenBeforeLeavingRoute(route, hook) { + // TODO: Warn if they register for a route that isn't currently + // active. They're probably doing something wrong, like re-creating + // route objects on every location change. + var routeID = getRouteID(route); + var hooks = RouteHooks[routeID]; + + if (!hooks) { + var thereWereNoRouteHooks = !hasAnyProperties(RouteHooks); + + RouteHooks[routeID] = [hook]; + + if (thereWereNoRouteHooks) { + // setup transition & beforeunload hooks + unlistenBefore = history.listenBefore(transitionHook); + + if (history.listenBeforeUnload) unlistenBeforeUnload = history.listenBeforeUnload(beforeUnloadHook); + } + } else { + if (hooks.indexOf(hook) === -1) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'adding multiple leave hooks for the same route is deprecated; manage multiple confirmations in your own code instead') : undefined; + + hooks.push(hook); + } + } + + return function () { + var hooks = RouteHooks[routeID]; + + if (hooks) { + var newHooks = hooks.filter(function (item) { + return item !== hook; + }); + + if (newHooks.length === 0) { + removeListenBeforeHooksForRoute(route); + } else { + RouteHooks[routeID] = newHooks; + } + } + }; + } + + /** + * This is the API for stateful environments. As the location + * changes, we update state and call the listener. We can also + * gracefully handle errors and redirects. + */ + function listen(listener) { + // TODO: Only use a single history listener. Otherwise we'll + // end up with multiple concurrent calls to match. + return history.listen(function (location) { + if (state.location === location) { + listener(null, state); + } else { + match(location, function (error, redirectLocation, nextState) { + if (error) { + listener(error); + } else if (redirectLocation) { + history.transitionTo(redirectLocation); + } else if (nextState) { + listener(null, nextState); + } else { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'Location "%s" did not match any routes', location.pathname + location.search + location.hash) : undefined; + } + }); + } + }); + } + + return { + isActive: isActive, + match: match, + listenBeforeLeavingRoute: listenBeforeLeavingRoute, + listen: listen + }; + } + + //export default useRoutes + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 191 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + exports['default'] = routerWarning; + exports._resetWarned = _resetWarned; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(192); + + var _warning2 = _interopRequireDefault(_warning); + + var warned = {}; + + function routerWarning(falseToWarn, message) { + // Only issue deprecation warnings once. + if (message.indexOf('deprecated') !== -1) { + if (warned[message]) { + return; + } + + warned[message] = true; + } + + message = '[react-router] ' + message; + + for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + process.env.NODE_ENV !== 'production' ? _warning2['default'].apply(undefined, [falseToWarn, message].concat(args)) : undefined; + } + + function _resetWarned() { + warned = {}; + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + + 'use strict'; + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + + var warning = function() {}; + + if (process.env.NODE_ENV !== 'production') { + warning = function(condition, format, args) { + var len = arguments.length; + args = new Array(len > 2 ? len - 2 : 0); + for (var key = 2; key < len; key++) { + args[key - 2] = arguments[key]; + } + if (format === undefined) { + throw new Error( + '`warning(condition, format, ...args)` requires a warning ' + + 'message argument' + ); + } + + if (format.length < 10 || (/^[s\W]*$/).test(format)) { + throw new Error( + 'The warning format should be able to uniquely identify this ' + + 'warning. Please, use a more descriptive format than: ' + format + ); + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + + format.replace(/%s/g, function() { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch(x) {} + } + }; + } + + module.exports = warning; + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 193 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _PatternUtils = __webpack_require__(194); + + function routeParamsChanged(route, prevState, nextState) { + if (!route.path) return false; + + var paramNames = _PatternUtils.getParamNames(route.path); + + return paramNames.some(function (paramName) { + return prevState.params[paramName] !== nextState.params[paramName]; + }); + } + + /** + * Returns an object of { leaveRoutes, changeRoutes, enterRoutes } determined by + * the change from prevState to nextState. We leave routes if either + * 1) they are not in the next state or 2) they are in the next state + * but their params have changed (i.e. /users/123 => /users/456). + * + * leaveRoutes are ordered starting at the leaf route of the tree + * we're leaving up to the common parent route. enterRoutes are ordered + * from the top of the tree we're entering down to the leaf route. + * + * changeRoutes are any routes that didn't leave or enter during + * the transition. + */ + function computeChangedRoutes(prevState, nextState) { + var prevRoutes = prevState && prevState.routes; + var nextRoutes = nextState.routes; + + var leaveRoutes = undefined, + changeRoutes = undefined, + enterRoutes = undefined; + if (prevRoutes) { + (function () { + var parentIsLeaving = false; + leaveRoutes = prevRoutes.filter(function (route) { + if (parentIsLeaving) { + return true; + } else { + var isLeaving = nextRoutes.indexOf(route) === -1 || routeParamsChanged(route, prevState, nextState); + if (isLeaving) parentIsLeaving = true; + return isLeaving; + } + }); + + // onLeave hooks start at the leaf route. + leaveRoutes.reverse(); + + enterRoutes = []; + changeRoutes = []; + + nextRoutes.forEach(function (route) { + var isNew = prevRoutes.indexOf(route) === -1; + var paramsChanged = leaveRoutes.indexOf(route) !== -1; + + if (isNew || paramsChanged) enterRoutes.push(route);else changeRoutes.push(route); + }); + })(); + } else { + leaveRoutes = []; + changeRoutes = []; + enterRoutes = nextRoutes; + } + + return { + leaveRoutes: leaveRoutes, + changeRoutes: changeRoutes, + enterRoutes: enterRoutes + }; + } + + exports['default'] = computeChangedRoutes; + module.exports = exports['default']; + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + exports.compilePattern = compilePattern; + exports.matchPattern = matchPattern; + exports.getParamNames = getParamNames; + exports.getParams = getParams; + exports.formatPattern = formatPattern; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + } + + function _compilePattern(pattern) { + var regexpSource = ''; + var paramNames = []; + var tokens = []; + + var match = undefined, + lastIndex = 0, + matcher = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)/g; + while (match = matcher.exec(pattern)) { + if (match.index !== lastIndex) { + tokens.push(pattern.slice(lastIndex, match.index)); + regexpSource += escapeRegExp(pattern.slice(lastIndex, match.index)); + } + + if (match[1]) { + regexpSource += '([^/]+)'; + paramNames.push(match[1]); + } else if (match[0] === '**') { + regexpSource += '(.*)'; + paramNames.push('splat'); + } else if (match[0] === '*') { + regexpSource += '(.*?)'; + paramNames.push('splat'); + } else if (match[0] === '(') { + regexpSource += '(?:'; + } else if (match[0] === ')') { + regexpSource += ')?'; + } + + tokens.push(match[0]); + + lastIndex = matcher.lastIndex; + } + + if (lastIndex !== pattern.length) { + tokens.push(pattern.slice(lastIndex, pattern.length)); + regexpSource += escapeRegExp(pattern.slice(lastIndex, pattern.length)); + } + + return { + pattern: pattern, + regexpSource: regexpSource, + paramNames: paramNames, + tokens: tokens + }; + } + + var CompiledPatternsCache = {}; + + function compilePattern(pattern) { + if (!(pattern in CompiledPatternsCache)) CompiledPatternsCache[pattern] = _compilePattern(pattern); + + return CompiledPatternsCache[pattern]; + } + + /** + * Attempts to match a pattern on the given pathname. Patterns may use + * the following special characters: + * + * - :paramName Matches a URL segment up to the next /, ?, or #. The + * captured string is considered a "param" + * - () Wraps a segment of the URL that is optional + * - * Consumes (non-greedy) all characters up to the next + * character in the pattern, or to the end of the URL if + * there is none + * - ** Consumes (greedy) all characters up to the next character + * in the pattern, or to the end of the URL if there is none + * + * The return value is an object with the following properties: + * + * - remainingPathname + * - paramNames + * - paramValues + */ + + function matchPattern(pattern, pathname) { + // Ensure pattern starts with leading slash for consistency with pathname. + if (pattern.charAt(0) !== '/') { + pattern = '/' + pattern; + } + + var _compilePattern2 = compilePattern(pattern); + + var regexpSource = _compilePattern2.regexpSource; + var paramNames = _compilePattern2.paramNames; + var tokens = _compilePattern2.tokens; + + if (pattern.charAt(pattern.length - 1) !== '/') { + regexpSource += '/?'; // Allow optional path separator at end. + } + + // Special-case patterns like '*' for catch-all routes. + if (tokens[tokens.length - 1] === '*') { + regexpSource += '$'; + } + + var match = pathname.match(new RegExp('^' + regexpSource, 'i')); + + var remainingPathname = undefined, + paramValues = undefined; + if (match != null) { + var matchedPath = match[0]; + remainingPathname = pathname.substr(matchedPath.length); + + if (remainingPathname) { + // Require that the match ends at a path separator, if we didn't match + // the full path, so any remaining pathname is a new path segment. + if (matchedPath.charAt(matchedPath.length - 1) !== '/') { + return { + remainingPathname: null, + paramNames: paramNames, + paramValues: null + }; + } + + // If there is a remaining pathname, treat the path separator as part of + // the remaining pathname for properly continuing the match. + remainingPathname = '/' + remainingPathname; + } + + paramValues = match.slice(1).map(function (v) { + return v && decodeURIComponent(v); + }); + } else { + remainingPathname = paramValues = null; + } + + return { + remainingPathname: remainingPathname, + paramNames: paramNames, + paramValues: paramValues + }; + } + + function getParamNames(pattern) { + return compilePattern(pattern).paramNames; + } + + function getParams(pattern, pathname) { + var _matchPattern = matchPattern(pattern, pathname); + + var paramNames = _matchPattern.paramNames; + var paramValues = _matchPattern.paramValues; + + if (paramValues != null) { + return paramNames.reduce(function (memo, paramName, index) { + memo[paramName] = paramValues[index]; + return memo; + }, {}); + } + + return null; + } + + /** + * Returns a version of the given pattern with params interpolated. Throws + * if there is a dynamic segment of the pattern for which there is no param. + */ + + function formatPattern(pattern, params) { + params = params || {}; + + var _compilePattern3 = compilePattern(pattern); + + var tokens = _compilePattern3.tokens; + + var parenCount = 0, + pathname = '', + splatIndex = 0; + + var token = undefined, + paramName = undefined, + paramValue = undefined; + for (var i = 0, len = tokens.length; i < len; ++i) { + token = tokens[i]; + + if (token === '*' || token === '**') { + paramValue = Array.isArray(params.splat) ? params.splat[splatIndex++] : params.splat; + + !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Missing splat #%s for path "%s"', splatIndex, pattern) : _invariant2['default'](false) : undefined; + + if (paramValue != null) pathname += encodeURI(paramValue); + } else if (token === '(') { + parenCount += 1; + } else if (token === ')') { + parenCount -= 1; + } else if (token.charAt(0) === ':') { + paramName = token.substring(1); + paramValue = params[paramName]; + + !(paramValue != null || parenCount > 0) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Missing "%s" parameter for path "%s"', paramName, pattern) : _invariant2['default'](false) : undefined; + + if (paramValue != null) pathname += encodeURIComponent(paramValue); + } else { + pathname += token; + } + } + + return pathname.replace(/\/+/g, '/'); + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 195 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + exports.runEnterHooks = runEnterHooks; + exports.runChangeHooks = runChangeHooks; + exports.runLeaveHooks = runLeaveHooks; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _AsyncUtils = __webpack_require__(196); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function createTransitionHook(hook, route, asyncArity) { + return function () { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + hook.apply(route, args); + + if (hook.length < asyncArity) { + var callback = args[args.length - 1]; + // Assume hook executes synchronously and + // automatically call the callback. + callback(); + } + }; + } + + function getEnterHooks(routes) { + return routes.reduce(function (hooks, route) { + if (route.onEnter) hooks.push(createTransitionHook(route.onEnter, route, 3)); + + return hooks; + }, []); + } + + function getChangeHooks(routes) { + return routes.reduce(function (hooks, route) { + if (route.onChange) hooks.push(createTransitionHook(route.onChange, route, 4)); + return hooks; + }, []); + } + + function runTransitionHooks(length, iter, callback) { + if (!length) { + callback(); + return; + } + + var redirectInfo = undefined; + function replace(location, deprecatedPathname, deprecatedQuery) { + if (deprecatedPathname) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, '`replaceState(state, pathname, query) is deprecated; use `replace(location)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated') : undefined; + redirectInfo = { + pathname: deprecatedPathname, + query: deprecatedQuery, + state: location + }; + + return; + } + + redirectInfo = location; + } + + _AsyncUtils.loopAsync(length, function (index, next, done) { + iter(index, replace, function (error) { + if (error || redirectInfo) { + done(error, redirectInfo); // No need to continue. + } else { + next(); + } + }); + }, callback); + } + + /** + * Runs all onEnter hooks in the given array of routes in order + * with onEnter(nextState, replace, callback) and calls + * callback(error, redirectInfo) when finished. The first hook + * to use replace short-circuits the loop. + * + * If a hook needs to run asynchronously, it may use the callback + * function. However, doing so will cause the transition to pause, + * which could lead to a non-responsive UI if the hook is slow. + */ + + function runEnterHooks(routes, nextState, callback) { + var hooks = getEnterHooks(routes); + return runTransitionHooks(hooks.length, function (index, replace, next) { + hooks[index](nextState, replace, next); + }, callback); + } + + /** + * Runs all onChange hooks in the given array of routes in order + * with onChange(prevState, nextState, replace, callback) and calls + * callback(error, redirectInfo) when finished. The first hook + * to use replace short-circuits the loop. + * + * If a hook needs to run asynchronously, it may use the callback + * function. However, doing so will cause the transition to pause, + * which could lead to a non-responsive UI if the hook is slow. + */ + + function runChangeHooks(routes, state, nextState, callback) { + var hooks = getChangeHooks(routes); + return runTransitionHooks(hooks.length, function (index, replace, next) { + hooks[index](state, nextState, replace, next); + }, callback); + } + + /** + * Runs all onLeave hooks in the given array of routes in order. + */ + + function runLeaveHooks(routes) { + for (var i = 0, len = routes.length; i < len; ++i) { + if (routes[i].onLeave) routes[i].onLeave.call(routes[i]); + } + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 196 */ +/***/ (function(module, exports) { + + "use strict"; + + exports.__esModule = true; + var _slice = Array.prototype.slice; + exports.loopAsync = loopAsync; + exports.mapAsync = mapAsync; + + function loopAsync(turns, work, callback) { + var currentTurn = 0, + isDone = false; + var sync = false, + hasNext = false, + doneArgs = undefined; + + function done() { + isDone = true; + if (sync) { + // Iterate instead of recursing if possible. + doneArgs = [].concat(_slice.call(arguments)); + return; + } + + callback.apply(this, arguments); + } + + function next() { + if (isDone) { + return; + } + + hasNext = true; + if (sync) { + // Iterate instead of recursing if possible. + return; + } + + sync = true; + + while (!isDone && currentTurn < turns && hasNext) { + hasNext = false; + work.call(this, currentTurn++, next, done); + } + + sync = false; + + if (isDone) { + // This means the loop finished synchronously. + callback.apply(this, doneArgs); + return; + } + + if (currentTurn >= turns && hasNext) { + isDone = true; + callback(); + } + } + + next(); + } + + function mapAsync(array, work, callback) { + var length = array.length; + var values = []; + + if (length === 0) return callback(null, values); + + var isDone = false, + doneCount = 0; + + function done(index, error, value) { + if (isDone) return; + + if (error) { + isDone = true; + callback(error); + } else { + values[index] = value; + + isDone = ++doneCount === length; + + if (isDone) callback(null, values); + } + } + + array.forEach(function (item, index) { + work(item, index, function (error, value) { + done(index, error, value); + }); + }); + } + +/***/ }), +/* 197 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = isActive; + + var _PatternUtils = __webpack_require__(194); + + function deepEqual(a, b) { + if (a == b) return true; + + if (a == null || b == null) return false; + + if (Array.isArray(a)) { + return Array.isArray(b) && a.length === b.length && a.every(function (item, index) { + return deepEqual(item, b[index]); + }); + } + + if (typeof a === 'object') { + for (var p in a) { + if (!Object.prototype.hasOwnProperty.call(a, p)) { + continue; + } + + if (a[p] === undefined) { + if (b[p] !== undefined) { + return false; + } + } else if (!Object.prototype.hasOwnProperty.call(b, p)) { + return false; + } else if (!deepEqual(a[p], b[p])) { + return false; + } + } + + return true; + } + + return String(a) === String(b); + } + + /** + * Returns true if the current pathname matches the supplied one, net of + * leading and trailing slash normalization. This is sufficient for an + * indexOnly route match. + */ + function pathIsActive(pathname, currentPathname) { + // Normalize leading slash for consistency. Leading slash on pathname has + // already been normalized in isActive. See caveat there. + if (currentPathname.charAt(0) !== '/') { + currentPathname = '/' + currentPathname; + } + + // Normalize the end of both path names too. Maybe `/foo/` shouldn't show + // `/foo` as active, but in this case, we would already have failed the + // match. + if (pathname.charAt(pathname.length - 1) !== '/') { + pathname += '/'; + } + if (currentPathname.charAt(currentPathname.length - 1) !== '/') { + currentPathname += '/'; + } + + return currentPathname === pathname; + } + + /** + * Returns true if the given pathname matches the active routes and params. + */ + function routeIsActive(pathname, routes, params) { + var remainingPathname = pathname, + paramNames = [], + paramValues = []; + + // for...of would work here but it's probably slower post-transpilation. + for (var i = 0, len = routes.length; i < len; ++i) { + var route = routes[i]; + var pattern = route.path || ''; + + if (pattern.charAt(0) === '/') { + remainingPathname = pathname; + paramNames = []; + paramValues = []; + } + + if (remainingPathname !== null && pattern) { + var matched = _PatternUtils.matchPattern(pattern, remainingPathname); + remainingPathname = matched.remainingPathname; + paramNames = [].concat(paramNames, matched.paramNames); + paramValues = [].concat(paramValues, matched.paramValues); + + if (remainingPathname === '') { + // We have an exact match on the route. Just check that all the params + // match. + // FIXME: This doesn't work on repeated params. + return paramNames.every(function (paramName, index) { + return String(paramValues[index]) === String(params[paramName]); + }); + } + } + } + + return false; + } + + /** + * Returns true if all key/value pairs in the given query are + * currently active. + */ + function queryIsActive(query, activeQuery) { + if (activeQuery == null) return query == null; + + if (query == null) return true; + + return deepEqual(query, activeQuery); + } + + /** + * Returns true if a to the given pathname/query combination is + * currently active. + */ + + function isActive(_ref, indexOnly, currentLocation, routes, params) { + var pathname = _ref.pathname; + var query = _ref.query; + + if (currentLocation == null) return false; + + // TODO: This is a bit ugly. It keeps around support for treating pathnames + // without preceding slashes as absolute paths, but possibly also works + // around the same quirks with basenames as in matchRoutes. + if (pathname.charAt(0) !== '/') { + pathname = '/' + pathname; + } + + if (!pathIsActive(pathname, currentLocation.pathname)) { + // The path check is necessary and sufficient for indexOnly, but otherwise + // we still need to check the routes. + if (indexOnly || !routeIsActive(pathname, routes, params)) { + return false; + } + } + + return queryIsActive(query, currentLocation.query); + } + + module.exports = exports['default']; + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _AsyncUtils = __webpack_require__(196); + + var _deprecateObjectProperties = __webpack_require__(199); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function getComponentsForRoute(nextState, route, callback) { + if (route.component || route.components) { + callback(null, route.component || route.components); + return; + } + + var getComponent = route.getComponent || route.getComponents; + if (!getComponent) { + callback(); + return; + } + + var location = nextState.location; + + var nextStateWithLocation = undefined; + + if (process.env.NODE_ENV !== 'production' && _deprecateObjectProperties.canUseMembrane) { + nextStateWithLocation = _extends({}, nextState); + + // I don't use deprecateObjectProperties here because I want to keep the + // same code path between development and production, in that we just + // assign extra properties to the copy of the state object in both cases. + + var _loop = function (prop) { + if (!Object.prototype.hasOwnProperty.call(location, prop)) { + return 'continue'; + } + + Object.defineProperty(nextStateWithLocation, prop, { + get: function get() { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'Accessing location properties from the first argument to `getComponent` and `getComponents` is deprecated. That argument is now the router state (`nextState`) rather than the location. To access the location, use `nextState.location`.') : undefined; + return location[prop]; + } + }); + }; + + for (var prop in location) { + var _ret = _loop(prop); + + if (_ret === 'continue') continue; + } + } else { + nextStateWithLocation = _extends({}, nextState, location); + } + + getComponent.call(route, nextStateWithLocation, callback); + } + + /** + * Asynchronously fetches all components needed for the given router + * state and calls callback(error, components) when finished. + * + * Note: This operation may finish synchronously if no routes have an + * asynchronous getComponents method. + */ + function getComponents(nextState, callback) { + _AsyncUtils.mapAsync(nextState.routes, function (route, index, callback) { + getComponentsForRoute(nextState, route, callback); + }, callback); + } + + exports['default'] = getComponents; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var canUseMembrane = false; + + exports.canUseMembrane = canUseMembrane; + // No-op by default. + var deprecateObjectProperties = function deprecateObjectProperties(object) { + return object; + }; + + if (process.env.NODE_ENV !== 'production') { + try { + if (Object.defineProperty({}, 'x', { get: function get() { + return true; + } }).x) { + exports.canUseMembrane = canUseMembrane = true; + } + /* eslint-disable no-empty */ + } catch (e) {} + /* eslint-enable no-empty */ + + if (canUseMembrane) { + deprecateObjectProperties = function (object, message) { + // Wrap the deprecated object in a membrane to warn on property access. + var membrane = {}; + + var _loop = function (prop) { + if (!Object.prototype.hasOwnProperty.call(object, prop)) { + return 'continue'; + } + + if (typeof object[prop] === 'function') { + // Can't use fat arrow here because of use of arguments below. + membrane[prop] = function () { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, message) : undefined; + return object[prop].apply(object, arguments); + }; + return 'continue'; + } + + // These properties are non-enumerable to prevent React dev tools from + // seeing them and causing spurious warnings when accessing them. In + // principle this could be done with a proxy, but support for the + // ownKeys trap on proxies is not universal, even among browsers that + // otherwise support proxies. + Object.defineProperty(membrane, prop, { + get: function get() { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, message) : undefined; + return object[prop]; + } + }); + }; + + for (var prop in object) { + var _ret = _loop(prop); + + if (_ret === 'continue') continue; + } + + return membrane; + }; + } + } + + exports['default'] = deprecateObjectProperties; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 200 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports['default'] = matchRoutes; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _AsyncUtils = __webpack_require__(196); + + var _PatternUtils = __webpack_require__(194); + + var _RouteUtils = __webpack_require__(201); + + function getChildRoutes(route, location, callback) { + if (route.childRoutes) { + return [null, route.childRoutes]; + } + if (!route.getChildRoutes) { + return []; + } + + var sync = true, + result = undefined; + + route.getChildRoutes(location, function (error, childRoutes) { + childRoutes = !error && _RouteUtils.createRoutes(childRoutes); + if (sync) { + result = [error, childRoutes]; + return; + } + + callback(error, childRoutes); + }); + + sync = false; + return result; // Might be undefined. + } + + function getIndexRoute(route, location, callback) { + if (route.indexRoute) { + callback(null, route.indexRoute); + } else if (route.getIndexRoute) { + route.getIndexRoute(location, function (error, indexRoute) { + callback(error, !error && _RouteUtils.createRoutes(indexRoute)[0]); + }); + } else if (route.childRoutes) { + (function () { + var pathless = route.childRoutes.filter(function (childRoute) { + return !childRoute.path; + }); + + _AsyncUtils.loopAsync(pathless.length, function (index, next, done) { + getIndexRoute(pathless[index], location, function (error, indexRoute) { + if (error || indexRoute) { + var routes = [pathless[index]].concat(Array.isArray(indexRoute) ? indexRoute : [indexRoute]); + done(error, routes); + } else { + next(); + } + }); + }, function (err, routes) { + callback(null, routes); + }); + })(); + } else { + callback(); + } + } + + function assignParams(params, paramNames, paramValues) { + return paramNames.reduce(function (params, paramName, index) { + var paramValue = paramValues && paramValues[index]; + + if (Array.isArray(params[paramName])) { + params[paramName].push(paramValue); + } else if (paramName in params) { + params[paramName] = [params[paramName], paramValue]; + } else { + params[paramName] = paramValue; + } + + return params; + }, params); + } + + function createParams(paramNames, paramValues) { + return assignParams({}, paramNames, paramValues); + } + + function matchRouteDeep(route, location, remainingPathname, paramNames, paramValues, callback) { + var pattern = route.path || ''; + + if (pattern.charAt(0) === '/') { + remainingPathname = location.pathname; + paramNames = []; + paramValues = []; + } + + // Only try to match the path if the route actually has a pattern, and if + // we're not just searching for potential nested absolute paths. + if (remainingPathname !== null && pattern) { + var matched = _PatternUtils.matchPattern(pattern, remainingPathname); + remainingPathname = matched.remainingPathname; + paramNames = [].concat(paramNames, matched.paramNames); + paramValues = [].concat(paramValues, matched.paramValues); + + // By assumption, pattern is non-empty here, which is the prerequisite for + // actually terminating a match. + if (remainingPathname === '') { + var _ret2 = (function () { + var match = { + routes: [route], + params: createParams(paramNames, paramValues) + }; + + getIndexRoute(route, location, function (error, indexRoute) { + if (error) { + callback(error); + } else { + if (Array.isArray(indexRoute)) { + var _match$routes; + + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](indexRoute.every(function (route) { + return !route.path; + }), 'Index routes should not have paths') : undefined; + (_match$routes = match.routes).push.apply(_match$routes, indexRoute); + } else if (indexRoute) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](!indexRoute.path, 'Index routes should not have paths') : undefined; + match.routes.push(indexRoute); + } + + callback(null, match); + } + }); + + return { + v: undefined + }; + })(); + + if (typeof _ret2 === 'object') return _ret2.v; + } + } + + if (remainingPathname != null || route.childRoutes) { + // Either a) this route matched at least some of the path or b) + // we don't have to load this route's children asynchronously. In + // either case continue checking for matches in the subtree. + var onChildRoutes = function onChildRoutes(error, childRoutes) { + if (error) { + callback(error); + } else if (childRoutes) { + // Check the child routes to see if any of them match. + matchRoutes(childRoutes, location, function (error, match) { + if (error) { + callback(error); + } else if (match) { + // A child route matched! Augment the match and pass it up the stack. + match.routes.unshift(route); + callback(null, match); + } else { + callback(); + } + }, remainingPathname, paramNames, paramValues); + } else { + callback(); + } + }; + + var result = getChildRoutes(route, location, onChildRoutes); + if (result) { + onChildRoutes.apply(undefined, result); + } + } else { + callback(); + } + } + + /** + * Asynchronously matches the given location to a set of routes and calls + * callback(error, state) when finished. The state object will have the + * following properties: + * + * - routes An array of routes that matched, in hierarchical order + * - params An object of URL parameters + * + * Note: This operation may finish synchronously if no routes have an + * asynchronous getChildRoutes method. + */ + + function matchRoutes(routes, location, callback, remainingPathname) { + var paramNames = arguments.length <= 4 || arguments[4] === undefined ? [] : arguments[4]; + var paramValues = arguments.length <= 5 || arguments[5] === undefined ? [] : arguments[5]; + + if (remainingPathname === undefined) { + // TODO: This is a little bit ugly, but it works around a quirk in history + // that strips the leading slash from pathnames when using basenames with + // trailing slashes. + if (location.pathname.charAt(0) !== '/') { + location = _extends({}, location, { + pathname: '/' + location.pathname + }); + } + remainingPathname = location.pathname; + } + + _AsyncUtils.loopAsync(routes.length, function (index, next, done) { + matchRouteDeep(routes[index], location, remainingPathname, paramNames, paramValues, function (error, match) { + if (error || match) { + done(error, match); + } else { + next(); + } + }); + }, callback); + } + + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports.isReactChildren = isReactChildren; + exports.createRouteFromReactElement = createRouteFromReactElement; + exports.createRoutesFromReactChildren = createRoutesFromReactChildren; + exports.createRoutes = createRoutes; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + function isValidChild(object) { + return object == null || _react2['default'].isValidElement(object); + } + + function isReactChildren(object) { + return isValidChild(object) || Array.isArray(object) && object.every(isValidChild); + } + + function checkPropTypes(componentName, propTypes, props) { + componentName = componentName || 'UnknownComponent'; + + for (var propName in propTypes) { + if (Object.prototype.hasOwnProperty.call(propTypes, propName)) { + var error = propTypes[propName](props, propName, componentName); + + /* istanbul ignore if: error logging */ + if (error instanceof Error) process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, error.message) : undefined; + } + } + } + + function createRoute(defaultProps, props) { + return _extends({}, defaultProps, props); + } + + function createRouteFromReactElement(element) { + var type = element.type; + var route = createRoute(type.defaultProps, element.props); + + if (type.propTypes) checkPropTypes(type.displayName || type.name, type.propTypes, route); + + if (route.children) { + var childRoutes = createRoutesFromReactChildren(route.children, route); + + if (childRoutes.length) route.childRoutes = childRoutes; + + delete route.children; + } + + return route; + } + + /** + * Creates and returns a routes object from the given ReactChildren. JSX + * provides a convenient way to visualize how routes in the hierarchy are + * nested. + * + * import { Route, createRoutesFromReactChildren } from 'react-router' + * + * const routes = createRoutesFromReactChildren( + * + * + * + * + * ) + * + * Note: This method is automatically used when you provide children + * to a component. + */ + + function createRoutesFromReactChildren(children, parentRoute) { + var routes = []; + + _react2['default'].Children.forEach(children, function (element) { + if (_react2['default'].isValidElement(element)) { + // Component classes may have a static create* method. + if (element.type.createRouteFromReactElement) { + var route = element.type.createRouteFromReactElement(element, parentRoute); + + if (route) routes.push(route); + } else { + routes.push(createRouteFromReactElement(element)); + } + } + }); + + return routes; + } + + /** + * Creates and returns an array of routes from the given object which + * may be a JSX route, a plain object route, or an array of either. + */ + + function createRoutes(routes) { + if (isReactChildren(routes)) { + routes = createRoutesFromReactChildren(routes); + } else if (routes && !Array.isArray(routes)) { + routes = [routes]; + } + + return routes; + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 202 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports.falsy = falsy; + + var _react = __webpack_require__(10); + + var func = _react.PropTypes.func; + var object = _react.PropTypes.object; + var arrayOf = _react.PropTypes.arrayOf; + var oneOfType = _react.PropTypes.oneOfType; + var element = _react.PropTypes.element; + var shape = _react.PropTypes.shape; + var string = _react.PropTypes.string; + + function falsy(props, propName, componentName) { + if (props[propName]) return new Error('<' + componentName + '> should not have a "' + propName + '" prop'); + } + + var history = shape({ + listen: func.isRequired, + push: func.isRequired, + replace: func.isRequired, + go: func.isRequired, + goBack: func.isRequired, + goForward: func.isRequired + }); + + exports.history = history; + var component = oneOfType([func, string]); + exports.component = component; + var components = oneOfType([component, object]); + exports.components = components; + var route = oneOfType([object, element]); + exports.route = route; + var routes = oneOfType([route, arrayOf(route)]); + exports.routes = routes; + +/***/ }), +/* 203 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _deprecateObjectProperties = __webpack_require__(199); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + var _getRouteParams = __webpack_require__(204); + + var _getRouteParams2 = _interopRequireDefault(_getRouteParams); + + var _RouteUtils = __webpack_require__(201); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _React$PropTypes = _react2['default'].PropTypes; + var array = _React$PropTypes.array; + var func = _React$PropTypes.func; + var object = _React$PropTypes.object; + + /** + * A renders the component tree for a given router state + * and sets the history object and the current location in context. + */ + var RouterContext = _react2['default'].createClass({ + displayName: 'RouterContext', + + propTypes: { + history: object, + router: object.isRequired, + location: object.isRequired, + routes: array.isRequired, + params: object.isRequired, + components: array.isRequired, + createElement: func.isRequired + }, + + getDefaultProps: function getDefaultProps() { + return { + createElement: _react2['default'].createElement + }; + }, + + childContextTypes: { + history: object, + location: object.isRequired, + router: object.isRequired + }, + + getChildContext: function getChildContext() { + var _props = this.props; + var router = _props.router; + var history = _props.history; + var location = _props.location; + + if (!router) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, '`` expects a `router` rather than a `history`') : undefined; + + router = _extends({}, history, { + setRouteLeaveHook: history.listenBeforeLeavingRoute + }); + delete router.listenBeforeLeavingRoute; + } + + if (process.env.NODE_ENV !== 'production') { + location = _deprecateObjectProperties2['default'](location, '`context.location` is deprecated, please use a route component\'s `props.location` instead. http://tiny.cc/router-accessinglocation'); + } + + return { history: history, location: location, router: router }; + }, + + createElement: function createElement(component, props) { + return component == null ? null : this.props.createElement(component, props); + }, + + render: function render() { + var _this = this; + + var _props2 = this.props; + var history = _props2.history; + var location = _props2.location; + var routes = _props2.routes; + var params = _props2.params; + var components = _props2.components; + + var element = null; + + if (components) { + element = components.reduceRight(function (element, components, index) { + if (components == null) return element; // Don't create new children; use the grandchildren. + + var route = routes[index]; + var routeParams = _getRouteParams2['default'](route, params); + var props = { + history: history, + location: location, + params: params, + route: route, + routeParams: routeParams, + routes: routes + }; + + if (_RouteUtils.isReactChildren(element)) { + props.children = element; + } else if (element) { + for (var prop in element) { + if (Object.prototype.hasOwnProperty.call(element, prop)) props[prop] = element[prop]; + } + } + + if (typeof components === 'object') { + var elements = {}; + + for (var key in components) { + if (Object.prototype.hasOwnProperty.call(components, key)) { + // Pass through the key as a prop to createElement to allow + // custom createElement functions to know which named component + // they're rendering, for e.g. matching up to fetched data. + elements[key] = _this.createElement(components[key], _extends({ + key: key }, props)); + } + } + + return elements; + } + + return _this.createElement(components, props); + }, element); + } + + !(element === null || element === false || _react2['default'].isValidElement(element)) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'The root route must render a single element') : _invariant2['default'](false) : undefined; + + return element; + } + + }); + + exports['default'] = RouterContext; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 204 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _PatternUtils = __webpack_require__(194); + + /** + * Extracts an object of params the given route cares about from + * the given params object. + */ + function getRouteParams(route, params) { + var routeParams = {}; + + if (!route.path) return routeParams; + + var paramNames = _PatternUtils.getParamNames(route.path); + + for (var p in params) { + if (Object.prototype.hasOwnProperty.call(params, p) && paramNames.indexOf(p) !== -1) { + routeParams[p] = params[p]; + } + } + + return routeParams; + } + + exports['default'] = getRouteParams; + module.exports = exports['default']; + +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + exports.createRouterObject = createRouterObject; + exports.createRoutingHistory = createRoutingHistory; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _deprecateObjectProperties = __webpack_require__(199); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + function createRouterObject(history, transitionManager) { + return _extends({}, history, { + setRouteLeaveHook: transitionManager.listenBeforeLeavingRoute, + isActive: transitionManager.isActive + }); + } + + // deprecated + + function createRoutingHistory(history, transitionManager) { + history = _extends({}, history, transitionManager); + + if (process.env.NODE_ENV !== 'production') { + history = _deprecateObjectProperties2['default'](history, '`props.history` and `context.history` are deprecated. Please use `context.router`. http://tiny.cc/router-contextchanges'); + } + + return history; + } + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _PropTypes = __webpack_require__(207); + + var _React$PropTypes = _react2['default'].PropTypes; + var bool = _React$PropTypes.bool; + var object = _React$PropTypes.object; + var string = _React$PropTypes.string; + var func = _React$PropTypes.func; + var oneOfType = _React$PropTypes.oneOfType; + + function isLeftClickEvent(event) { + return event.button === 0; + } + + function isModifiedEvent(event) { + return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); + } + + // TODO: De-duplicate against hasAnyProperties in createTransitionManager. + function isEmptyObject(object) { + for (var p in object) { + if (Object.prototype.hasOwnProperty.call(object, p)) return false; + }return true; + } + + function createLocationDescriptor(to, _ref) { + var query = _ref.query; + var hash = _ref.hash; + var state = _ref.state; + + if (query || hash || state) { + return { pathname: to, query: query, hash: hash, state: state }; + } + + return to; + } + + /** + * A is used to create an element that links to a route. + * When that route is active, the link gets the value of its + * activeClassName prop. + * + * For example, assuming you have the following route: + * + * + * + * You could use the following component to link to that route: + * + * + * + * Links may pass along location state and/or query string parameters + * in the state/query props, respectively. + * + * + */ + var Link = _react2['default'].createClass({ + displayName: 'Link', + + contextTypes: { + router: _PropTypes.routerShape + }, + + propTypes: { + to: oneOfType([string, object]).isRequired, + query: object, + hash: string, + state: object, + activeStyle: object, + activeClassName: string, + onlyActiveOnIndex: bool.isRequired, + onClick: func + }, + + getDefaultProps: function getDefaultProps() { + return { + onlyActiveOnIndex: false, + style: {} + }; + }, + + handleClick: function handleClick(event) { + var allowTransition = true; + + if (this.props.onClick) this.props.onClick(event); + + if (isModifiedEvent(event) || !isLeftClickEvent(event)) return; + + if (event.defaultPrevented === true) allowTransition = false; + + // If target prop is set (e.g. to "_blank") let browser handle link. + /* istanbul ignore if: untestable with Karma */ + if (this.props.target) { + if (!allowTransition) event.preventDefault(); + + return; + } + + event.preventDefault(); + + if (allowTransition) { + var _props = this.props; + var to = _props.to; + var query = _props.query; + var hash = _props.hash; + var state = _props.state; + + var _location = createLocationDescriptor(to, { query: query, hash: hash, state: state }); + + this.context.router.push(_location); + } + }, + + render: function render() { + var _props2 = this.props; + var to = _props2.to; + var query = _props2.query; + var hash = _props2.hash; + var state = _props2.state; + var activeClassName = _props2.activeClassName; + var activeStyle = _props2.activeStyle; + var onlyActiveOnIndex = _props2.onlyActiveOnIndex; + + var props = _objectWithoutProperties(_props2, ['to', 'query', 'hash', 'state', 'activeClassName', 'activeStyle', 'onlyActiveOnIndex']); + + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](!(query || hash || state), 'the `query`, `hash`, and `state` props on `` are deprecated, use `. http://tiny.cc/router-isActivedeprecated') : undefined; + + // Ignore if rendered outside the context of router, simplifies unit testing. + var router = this.context.router; + + if (router) { + var _location2 = createLocationDescriptor(to, { query: query, hash: hash, state: state }); + props.href = router.createHref(_location2); + + if (activeClassName || activeStyle != null && !isEmptyObject(activeStyle)) { + if (router.isActive(_location2, onlyActiveOnIndex)) { + if (activeClassName) { + if (props.className) { + props.className += ' ' + activeClassName; + } else { + props.className = activeClassName; + } + } + + if (activeStyle) props.style = _extends({}, props.style, activeStyle); + } + } + } + + return _react2['default'].createElement('a', _extends({}, props, { onClick: this.handleClick })); + } + + }); + + exports['default'] = Link; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _deprecateObjectProperties = __webpack_require__(199); + + var _deprecateObjectProperties2 = _interopRequireDefault(_deprecateObjectProperties); + + var _InternalPropTypes = __webpack_require__(202); + + var InternalPropTypes = _interopRequireWildcard(_InternalPropTypes); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var func = _react.PropTypes.func; + var object = _react.PropTypes.object; + var shape = _react.PropTypes.shape; + var string = _react.PropTypes.string; + var routerShape = shape({ + push: func.isRequired, + replace: func.isRequired, + go: func.isRequired, + goBack: func.isRequired, + goForward: func.isRequired, + setRouteLeaveHook: func.isRequired, + isActive: func.isRequired + }); + + exports.routerShape = routerShape; + var locationShape = shape({ + pathname: string.isRequired, + search: string.isRequired, + state: object, + action: string.isRequired, + key: string + }); + + exports.locationShape = locationShape; + // Deprecated stuff below: + + var falsy = InternalPropTypes.falsy; + exports.falsy = falsy; + var history = InternalPropTypes.history; + exports.history = history; + var location = locationShape; + exports.location = location; + var component = InternalPropTypes.component; + exports.component = component; + var components = InternalPropTypes.components; + exports.components = components; + var route = InternalPropTypes.route; + exports.route = route; + var routes = InternalPropTypes.routes; + exports.routes = routes; + var router = routerShape; + + exports.router = router; + if (process.env.NODE_ENV !== 'production') { + (function () { + var deprecatePropType = function deprecatePropType(propType, message) { + return function () { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, message) : undefined; + return propType.apply(undefined, arguments); + }; + }; + + var deprecateInternalPropType = function deprecateInternalPropType(propType) { + return deprecatePropType(propType, 'This prop type is not intended for external use, and was previously exported by mistake. These internal prop types are deprecated for external use, and will be removed in a later version.'); + }; + + var deprecateRenamedPropType = function deprecateRenamedPropType(propType, name) { + return deprecatePropType(propType, 'The `' + name + '` prop type is now exported as `' + name + 'Shape` to avoid name conflicts. This export is deprecated and will be removed in a later version.'); + }; + + exports.falsy = falsy = deprecateInternalPropType(falsy); + exports.history = history = deprecateInternalPropType(history); + exports.component = component = deprecateInternalPropType(component); + exports.components = components = deprecateInternalPropType(components); + exports.route = route = deprecateInternalPropType(route); + exports.routes = routes = deprecateInternalPropType(routes); + + exports.location = location = deprecateRenamedPropType(location, 'location'); + exports.router = router = deprecateRenamedPropType(router, 'router'); + })(); + } + + var defaultExport = { + falsy: falsy, + history: history, + location: location, + component: component, + components: components, + route: route, + // For some reason, routes was never here. + router: router + }; + + if (process.env.NODE_ENV !== 'production') { + defaultExport = _deprecateObjectProperties2['default'](defaultExport, 'The default export from `react-router/lib/PropTypes` is deprecated. Please use the named exports instead.'); + } + + exports['default'] = defaultExport; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _Link = __webpack_require__(206); + + var _Link2 = _interopRequireDefault(_Link); + + /** + * An is used to link to an . + */ + var IndexLink = _react2['default'].createClass({ + displayName: 'IndexLink', + + render: function render() { + return _react2['default'].createElement(_Link2['default'], _extends({}, this.props, { onlyActiveOnIndex: true })); + } + + }); + + exports['default'] = IndexLink; + module.exports = exports['default']; + +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Redirect = __webpack_require__(210); + + var _Redirect2 = _interopRequireDefault(_Redirect); + + var _InternalPropTypes = __webpack_require__(202); + + var _React$PropTypes = _react2['default'].PropTypes; + var string = _React$PropTypes.string; + var object = _React$PropTypes.object; + + /** + * An is used to redirect from an indexRoute. + */ + var IndexRedirect = _react2['default'].createClass({ + displayName: 'IndexRedirect', + + statics: { + + createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) { + /* istanbul ignore else: sanity check */ + if (parentRoute) { + parentRoute.indexRoute = _Redirect2['default'].createRouteFromReactElement(element); + } else { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'An does not make sense at the root of your route config') : undefined; + } + } + + }, + + propTypes: { + to: string.isRequired, + query: object, + state: object, + onEnter: _InternalPropTypes.falsy, + children: _InternalPropTypes.falsy + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = IndexRedirect; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 210 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(201); + + var _PatternUtils = __webpack_require__(194); + + var _InternalPropTypes = __webpack_require__(202); + + var _React$PropTypes = _react2['default'].PropTypes; + var string = _React$PropTypes.string; + var object = _React$PropTypes.object; + + /** + * A is used to declare another URL path a client should + * be sent to when they request a given URL. + * + * Redirects are placed alongside routes in the route configuration + * and are traversed in the same manner. + */ + var Redirect = _react2['default'].createClass({ + displayName: 'Redirect', + + statics: { + + createRouteFromReactElement: function createRouteFromReactElement(element) { + var route = _RouteUtils.createRouteFromReactElement(element); + + if (route.from) route.path = route.from; + + route.onEnter = function (nextState, replace) { + var location = nextState.location; + var params = nextState.params; + + var pathname = undefined; + if (route.to.charAt(0) === '/') { + pathname = _PatternUtils.formatPattern(route.to, params); + } else if (!route.to) { + pathname = location.pathname; + } else { + var routeIndex = nextState.routes.indexOf(route); + var parentPattern = Redirect.getRoutePattern(nextState.routes, routeIndex - 1); + var pattern = parentPattern.replace(/\/*$/, '/') + route.to; + pathname = _PatternUtils.formatPattern(pattern, params); + } + + replace({ + pathname: pathname, + query: route.query || location.query, + state: route.state || location.state + }); + }; + + return route; + }, + + getRoutePattern: function getRoutePattern(routes, routeIndex) { + var parentPattern = ''; + + for (var i = routeIndex; i >= 0; i--) { + var route = routes[i]; + var pattern = route.path || ''; + + parentPattern = pattern.replace(/\/*$/, '/') + parentPattern; + + if (pattern.indexOf('/') === 0) break; + } + + return '/' + parentPattern; + } + + }, + + propTypes: { + path: string, + from: string, // Alias for path + to: string.isRequired, + query: object, + state: object, + onEnter: _InternalPropTypes.falsy, + children: _InternalPropTypes.falsy + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = Redirect; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 211 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(201); + + var _InternalPropTypes = __webpack_require__(202); + + var func = _react2['default'].PropTypes.func; + + /** + * An is used to specify its parent's in + * a JSX route config. + */ + var IndexRoute = _react2['default'].createClass({ + displayName: 'IndexRoute', + + statics: { + + createRouteFromReactElement: function createRouteFromReactElement(element, parentRoute) { + /* istanbul ignore else: sanity check */ + if (parentRoute) { + parentRoute.indexRoute = _RouteUtils.createRouteFromReactElement(element); + } else { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'An does not make sense at the root of your route config') : undefined; + } + } + + }, + + propTypes: { + path: _InternalPropTypes.falsy, + component: _InternalPropTypes.component, + components: _InternalPropTypes.components, + getComponent: func, + getComponents: func + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = IndexRoute; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 212 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _RouteUtils = __webpack_require__(201); + + var _InternalPropTypes = __webpack_require__(202); + + var _React$PropTypes = _react2['default'].PropTypes; + var string = _React$PropTypes.string; + var func = _React$PropTypes.func; + + /** + * A is used to declare which components are rendered to the + * page when the URL matches a given pattern. + * + * Routes are arranged in a nested tree structure. When a new URL is + * requested, the tree is searched depth-first to find a route whose + * path matches the URL. When one is found, all routes in the tree + * that lead to it are considered "active" and their components are + * rendered into the DOM, nested in the same order as in the tree. + */ + var Route = _react2['default'].createClass({ + displayName: 'Route', + + statics: { + createRouteFromReactElement: _RouteUtils.createRouteFromReactElement + }, + + propTypes: { + path: string, + component: _InternalPropTypes.component, + components: _InternalPropTypes.components, + getComponent: func, + getComponents: func + }, + + /* istanbul ignore next: sanity check */ + render: function render() { + true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, ' elements are for router configuration only and should not be rendered') : _invariant2['default'](false) : undefined; + } + + }); + + exports['default'] = Route; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _InternalPropTypes = __webpack_require__(202); + + /** + * A mixin that adds the "history" instance variable to components. + */ + var History = { + + contextTypes: { + history: _InternalPropTypes.history + }, + + componentWillMount: function componentWillMount() { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'the `History` mixin is deprecated, please access `context.router` with your own `contextTypes`. http://tiny.cc/router-historymixin') : undefined; + this.history = this.context.history; + } + + }; + + exports['default'] = History; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var object = _react2['default'].PropTypes.object; + + /** + * The Lifecycle mixin adds the routerWillLeave lifecycle method to a + * component that may be used to cancel a transition or prompt the user + * for confirmation. + * + * On standard transitions, routerWillLeave receives a single argument: the + * location we're transitioning to. To cancel the transition, return false. + * To prompt the user for confirmation, return a prompt message (string). + * + * During the beforeunload event (assuming you're using the useBeforeUnload + * history enhancer), routerWillLeave does not receive a location object + * because it isn't possible for us to know the location we're transitioning + * to. In this case routerWillLeave must return a prompt message to prevent + * the user from closing the window/tab. + */ + var Lifecycle = { + + contextTypes: { + history: object.isRequired, + // Nested children receive the route as context, either + // set by the route component using the RouteContext mixin + // or by some other ancestor. + route: object + }, + + propTypes: { + // Route components receive the route object as a prop. + route: object + }, + + componentDidMount: function componentDidMount() { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'the `Lifecycle` mixin is deprecated, please use `context.router.setRouteLeaveHook(route, hook)`. http://tiny.cc/router-lifecyclemixin') : undefined; + !this.routerWillLeave ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'The Lifecycle mixin requires you to define a routerWillLeave method') : _invariant2['default'](false) : undefined; + + var route = this.props.route || this.context.route; + + !route ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'The Lifecycle mixin must be used on either a) a or ' + 'b) a descendant of a that uses the RouteContext mixin') : _invariant2['default'](false) : undefined; + + this._unlistenBeforeLeavingRoute = this.context.history.listenBeforeLeavingRoute(route, this.routerWillLeave); + }, + + componentWillUnmount: function componentWillUnmount() { + if (this._unlistenBeforeLeavingRoute) this._unlistenBeforeLeavingRoute(); + } + + }; + + exports['default'] = Lifecycle; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 215 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var object = _react2['default'].PropTypes.object; + + /** + * The RouteContext mixin provides a convenient way for route + * components to set the route in context. This is needed for + * routes that render elements that want to use the Lifecycle + * mixin to prevent transitions. + */ + var RouteContext = { + + propTypes: { + route: object.isRequired + }, + + childContextTypes: { + route: object.isRequired + }, + + getChildContext: function getChildContext() { + return { + route: this.props.route + }; + }, + + componentWillMount: function componentWillMount() { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, 'The `RouteContext` mixin is deprecated. You can provide `this.props.route` on context with your own `contextTypes`. http://tiny.cc/router-routecontextmixin') : undefined; + } + + }; + + exports['default'] = RouteContext; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _historyLibUseQueries = __webpack_require__(187); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _createTransitionManager = __webpack_require__(190); + + var _createTransitionManager2 = _interopRequireDefault(_createTransitionManager); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + /** + * Returns a new createHistory function that may be used to create + * history objects that know about routing. + * + * Enhances history objects with the following methods: + * + * - listen((error, nextState) => {}) + * - listenBeforeLeavingRoute(route, (nextLocation) => {}) + * - match(location, (error, redirectLocation, nextState) => {}) + * - isActive(pathname, query, indexOnly=false) + */ + function useRoutes(createHistory) { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, '`useRoutes` is deprecated. Please use `createTransitionManager` instead.') : undefined; + + return function () { + var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var routes = _ref.routes; + + var options = _objectWithoutProperties(_ref, ['routes']); + + var history = _historyLibUseQueries2['default'](createHistory)(options); + var transitionManager = _createTransitionManager2['default'](history, routes); + return _extends({}, history, transitionManager); + }; + } + + exports['default'] = useRoutes; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _RouterContext = __webpack_require__(203); + + var _RouterContext2 = _interopRequireDefault(_RouterContext); + + var _routerWarning = __webpack_require__(191); + + var _routerWarning2 = _interopRequireDefault(_routerWarning); + + var RoutingContext = _react2['default'].createClass({ + displayName: 'RoutingContext', + + componentWillMount: function componentWillMount() { + process.env.NODE_ENV !== 'production' ? _routerWarning2['default'](false, '`RoutingContext` has been renamed to `RouterContext`. Please use `import { RouterContext } from \'react-router\'`. http://tiny.cc/router-routercontext') : undefined; + }, + + render: function render() { + return _react2['default'].createElement(_RouterContext2['default'], this.props); + } + }); + + exports['default'] = RoutingContext; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _createMemoryHistory = __webpack_require__(219); + + var _createMemoryHistory2 = _interopRequireDefault(_createMemoryHistory); + + var _createTransitionManager = __webpack_require__(190); + + var _createTransitionManager2 = _interopRequireDefault(_createTransitionManager); + + var _RouteUtils = __webpack_require__(201); + + var _RouterUtils = __webpack_require__(205); + + /** + * A high-level API to be used for server-side rendering. + * + * This function matches a location to a set of routes and calls + * callback(error, redirectLocation, renderProps) when finished. + * + * Note: You probably don't want to use this in a browser unless you're using + * server-side rendering with async routes. + */ + function match(_ref, callback) { + var history = _ref.history; + var routes = _ref.routes; + var location = _ref.location; + + var options = _objectWithoutProperties(_ref, ['history', 'routes', 'location']); + + !(history || location) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'match needs a history or a location') : _invariant2['default'](false) : undefined; + + history = history ? history : _createMemoryHistory2['default'](options); + var transitionManager = _createTransitionManager2['default'](history, _RouteUtils.createRoutes(routes)); + + var unlisten = undefined; + + if (location) { + // Allow match({ location: '/the/path', ... }) + location = history.createLocation(location); + } else { + // Pick up the location from the history via synchronous history.listen + // call if needed. + unlisten = history.listen(function (historyLocation) { + location = historyLocation; + }); + } + + var router = _RouterUtils.createRouterObject(history, transitionManager); + history = _RouterUtils.createRoutingHistory(history, transitionManager); + + transitionManager.match(location, function (error, redirectLocation, nextState) { + callback(error, redirectLocation, nextState && _extends({}, nextState, { + history: history, + router: router, + matchContext: { history: history, transitionManager: transitionManager, router: router } + })); + + // Defer removing the listener to here to prevent DOM histories from having + // to unwind DOM event listeners unnecessarily, in case callback renders a + // and attaches another history listener. + if (unlisten) { + unlisten(); + } + }); + } + + exports['default'] = match; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 219 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = createMemoryHistory; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibUseQueries = __webpack_require__(187); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _historyLibUseBasename = __webpack_require__(220); + + var _historyLibUseBasename2 = _interopRequireDefault(_historyLibUseBasename); + + var _historyLibCreateMemoryHistory = __webpack_require__(221); + + var _historyLibCreateMemoryHistory2 = _interopRequireDefault(_historyLibCreateMemoryHistory); + + function createMemoryHistory(options) { + // signatures and type checking differ between `useRoutes` and + // `createMemoryHistory`, have to create `memoryHistory` first because + // `useQueries` doesn't understand the signature + var memoryHistory = _historyLibCreateMemoryHistory2['default'](options); + var createHistory = function createHistory() { + return memoryHistory; + }; + var history = _historyLibUseQueries2['default'](_historyLibUseBasename2['default'](createHistory))(options); + history.__v2_compatible__ = true; + return history; + } + + module.exports = exports['default']; + +/***/ }), +/* 220 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var _ExecutionEnvironment = __webpack_require__(175); + + var _PathUtils = __webpack_require__(174); + + var _runTransitionHook = __webpack_require__(185); + + var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook); + + var _deprecate = __webpack_require__(186); + + var _deprecate2 = _interopRequireDefault(_deprecate); + + function useBasename(createHistory) { + return function () { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var history = createHistory(options); + + var basename = options.basename; + + var checkedBaseHref = false; + + function checkBaseHref() { + if (checkedBaseHref) { + return; + } + + // Automatically use the value of in HTML + // documents as basename if it's not explicitly given. + if (basename == null && _ExecutionEnvironment.canUseDOM) { + var base = document.getElementsByTagName('base')[0]; + var baseHref = base && base.getAttribute('href'); + + if (baseHref != null) { + basename = baseHref; + + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Automatically setting basename using is deprecated and will ' + 'be removed in the next major release. The semantics of are ' + 'subtly different from basename. Please pass the basename explicitly in ' + 'the options to createHistory') : undefined; + } + } + + checkedBaseHref = true; + } + + function addBasename(location) { + checkBaseHref(); + + if (basename && location.basename == null) { + if (location.pathname.indexOf(basename) === 0) { + location.pathname = location.pathname.substring(basename.length); + location.basename = basename; + + if (location.pathname === '') location.pathname = '/'; + } else { + location.basename = ''; + } + } + + return location; + } + + function prependBasename(location) { + checkBaseHref(); + + if (!basename) return location; + + if (typeof location === 'string') location = _PathUtils.parsePath(location); + + var pname = location.pathname; + var normalizedBasename = basename.slice(-1) === '/' ? basename : basename + '/'; + var normalizedPathname = pname.charAt(0) === '/' ? pname.slice(1) : pname; + var pathname = normalizedBasename + normalizedPathname; + + return _extends({}, location, { + pathname: pathname + }); + } + + // Override all read methods with basename-aware versions. + function listenBefore(hook) { + return history.listenBefore(function (location, callback) { + _runTransitionHook2['default'](hook, addBasename(location), callback); + }); + } + + function listen(listener) { + return history.listen(function (location) { + listener(addBasename(location)); + }); + } + + // Override all write methods with basename-aware versions. + function push(location) { + history.push(prependBasename(location)); + } + + function replace(location) { + history.replace(prependBasename(location)); + } + + function createPath(location) { + return history.createPath(prependBasename(location)); + } + + function createHref(location) { + return history.createHref(prependBasename(location)); + } + + function createLocation(location) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return addBasename(history.createLocation.apply(history, [prependBasename(location)].concat(args))); + } + + // deprecated + function pushState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + push(_extends({ state: state }, path)); + } + + // deprecated + function replaceState(state, path) { + if (typeof path === 'string') path = _PathUtils.parsePath(path); + + replace(_extends({ state: state }, path)); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + push: push, + replace: replace, + createPath: createPath, + createHref: createHref, + createLocation: createLocation, + + pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'), + replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead') + }); + }; + } + + exports['default'] = useBasename; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 221 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _warning = __webpack_require__(171); + + var _warning2 = _interopRequireDefault(_warning); + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _PathUtils = __webpack_require__(174); + + var _Actions = __webpack_require__(173); + + var _createHistory = __webpack_require__(179); + + var _createHistory2 = _interopRequireDefault(_createHistory); + + function createStateStorage(entries) { + return entries.filter(function (entry) { + return entry.state; + }).reduce(function (memo, entry) { + memo[entry.key] = entry.state; + return memo; + }, {}); + } + + function createMemoryHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + if (Array.isArray(options)) { + options = { entries: options }; + } else if (typeof options === 'string') { + options = { entries: [options] }; + } + + var history = _createHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: saveState, + go: go + })); + + var _options = options; + var entries = _options.entries; + var current = _options.current; + + if (typeof entries === 'string') { + entries = [entries]; + } else if (!Array.isArray(entries)) { + entries = ['/']; + } + + entries = entries.map(function (entry) { + var key = history.createKey(); + + if (typeof entry === 'string') return { pathname: entry, key: key }; + + if (typeof entry === 'object' && entry) return _extends({}, entry, { key: key }); + + true ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Unable to create history entry from %s', entry) : _invariant2['default'](false) : undefined; + }); + + if (current == null) { + current = entries.length - 1; + } else { + !(current >= 0 && current < entries.length) ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Current index must be >= 0 and < %s, was %s', entries.length, current) : _invariant2['default'](false) : undefined; + } + + var storage = createStateStorage(entries); + + function saveState(key, state) { + storage[key] = state; + } + + function readState(key) { + return storage[key]; + } + + function getCurrentLocation() { + var entry = entries[current]; + var basename = entry.basename; + var pathname = entry.pathname; + var search = entry.search; + + var path = (basename || '') + pathname + (search || ''); + + var key = undefined, + state = undefined; + if (entry.key) { + key = entry.key; + state = readState(key); + } else { + key = history.createKey(); + state = null; + entry.key = key; + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function canGo(n) { + var index = current + n; + return index >= 0 && index < entries.length; + } + + function go(n) { + if (n) { + if (!canGo(n)) { + process.env.NODE_ENV !== 'production' ? _warning2['default'](false, 'Cannot go(%s) there is not enough history', n) : undefined; + return; + } + + current += n; + + var currentLocation = getCurrentLocation(); + + // change action to POP + history.transitionTo(_extends({}, currentLocation, { action: _Actions.POP })); + } + } + + function finishTransition(location) { + switch (location.action) { + case _Actions.PUSH: + current += 1; + + // if we are not on the top of stack + // remove rest and push new + if (current < entries.length) entries.splice(current); + + entries.push(location); + saveState(location.key, location.state); + break; + case _Actions.REPLACE: + entries[current] = location; + saveState(location.key, location.state); + break; + } + } + + return history; + } + + exports['default'] = createMemoryHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + exports['default'] = useRouterHistory; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibUseQueries = __webpack_require__(187); + + var _historyLibUseQueries2 = _interopRequireDefault(_historyLibUseQueries); + + var _historyLibUseBasename = __webpack_require__(220); + + var _historyLibUseBasename2 = _interopRequireDefault(_historyLibUseBasename); + + function useRouterHistory(createHistory) { + return function (options) { + var history = _historyLibUseQueries2['default'](_historyLibUseBasename2['default'](createHistory))(options); + history.__v2_compatible__ = true; + return history; + }; + } + + module.exports = exports['default']; + +/***/ }), +/* 223 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _react = __webpack_require__(10); + + var _react2 = _interopRequireDefault(_react); + + var _RouterContext = __webpack_require__(203); + + var _RouterContext2 = _interopRequireDefault(_RouterContext); + + exports['default'] = function () { + for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) { + middlewares[_key] = arguments[_key]; + } + + var withContext = middlewares.map(function (m) { + return m.renderRouterContext; + }).filter(function (f) { + return f; + }); + var withComponent = middlewares.map(function (m) { + return m.renderRouteComponent; + }).filter(function (f) { + return f; + }); + var makeCreateElement = function makeCreateElement() { + var baseCreateElement = arguments.length <= 0 || arguments[0] === undefined ? _react.createElement : arguments[0]; + return function (Component, props) { + return withComponent.reduceRight(function (previous, renderRouteComponent) { + return renderRouteComponent(previous, props); + }, baseCreateElement(Component, props)); + }; + }; + + return function (renderProps) { + return withContext.reduceRight(function (previous, renderRouterContext) { + return renderRouterContext(previous, renderProps); + }, _react2['default'].createElement(_RouterContext2['default'], _extends({}, renderProps, { + createElement: makeCreateElement(renderProps.createElement) + }))); + }; + }; + + module.exports = exports['default']; + +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibCreateBrowserHistory = __webpack_require__(225); + + var _historyLibCreateBrowserHistory2 = _interopRequireDefault(_historyLibCreateBrowserHistory); + + var _createRouterHistory = __webpack_require__(226); + + var _createRouterHistory2 = _interopRequireDefault(_createRouterHistory); + + exports['default'] = _createRouterHistory2['default'](_historyLibCreateBrowserHistory2['default']); + module.exports = exports['default']; + +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {'use strict'; + + exports.__esModule = true; + + var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _invariant = __webpack_require__(172); + + var _invariant2 = _interopRequireDefault(_invariant); + + var _Actions = __webpack_require__(173); + + var _PathUtils = __webpack_require__(174); + + var _ExecutionEnvironment = __webpack_require__(175); + + var _DOMUtils = __webpack_require__(176); + + var _DOMStateStorage = __webpack_require__(177); + + var _createDOMHistory = __webpack_require__(178); + + var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory); + + /** + * Creates and returns a history object that uses HTML5's history API + * (pushState, replaceState, and the popstate event) to manage history. + * This is the recommended method of managing history in browsers because + * it provides the cleanest URLs. + * + * Note: In browsers that do not support the HTML5 history API full + * page reloads will be used to preserve URLs. + */ + function createBrowserHistory() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined; + + var forceRefresh = options.forceRefresh; + + var isSupported = _DOMUtils.supportsHistory(); + var useRefresh = !isSupported || forceRefresh; + + function getCurrentLocation(historyState) { + try { + historyState = historyState || window.history.state || {}; + } catch (e) { + historyState = {}; + } + + var path = _DOMUtils.getWindowPath(); + var _historyState = historyState; + var key = _historyState.key; + + var state = undefined; + if (key) { + state = _DOMStateStorage.readState(key); + } else { + state = null; + key = history.createKey(); + + if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null); + } + + var location = _PathUtils.parsePath(path); + + return history.createLocation(_extends({}, location, { state: state }), undefined, key); + } + + function startPopStateListener(_ref) { + var transitionTo = _ref.transitionTo; + + function popStateListener(event) { + if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit. + + transitionTo(getCurrentLocation(event.state)); + } + + _DOMUtils.addEventListener(window, 'popstate', popStateListener); + + return function () { + _DOMUtils.removeEventListener(window, 'popstate', popStateListener); + }; + } + + function finishTransition(location) { + var basename = location.basename; + var pathname = location.pathname; + var search = location.search; + var hash = location.hash; + var state = location.state; + var action = location.action; + var key = location.key; + + if (action === _Actions.POP) return; // Nothing to do. + + _DOMStateStorage.saveState(key, state); + + var path = (basename || '') + pathname + search + hash; + var historyState = { + key: key + }; + + if (action === _Actions.PUSH) { + if (useRefresh) { + window.location.href = path; + return false; // Prevent location update. + } else { + window.history.pushState(historyState, null, path); + } + } else { + // REPLACE + if (useRefresh) { + window.location.replace(path); + return false; // Prevent location update. + } else { + window.history.replaceState(historyState, null, path); + } + } + } + + var history = _createDOMHistory2['default'](_extends({}, options, { + getCurrentLocation: getCurrentLocation, + finishTransition: finishTransition, + saveState: _DOMStateStorage.saveState + })); + + var listenerCount = 0, + stopPopStateListener = undefined; + + function listenBefore(listener) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + var unlisten = history.listenBefore(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopPopStateListener(); + }; + } + + function listen(listener) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + var unlisten = history.listen(listener); + + return function () { + unlisten(); + + if (--listenerCount === 0) stopPopStateListener(); + }; + } + + // deprecated + function registerTransitionHook(hook) { + if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history); + + history.registerTransitionHook(hook); + } + + // deprecated + function unregisterTransitionHook(hook) { + history.unregisterTransitionHook(hook); + + if (--listenerCount === 0) stopPopStateListener(); + } + + return _extends({}, history, { + listenBefore: listenBefore, + listen: listen, + registerTransitionHook: registerTransitionHook, + unregisterTransitionHook: unregisterTransitionHook + }); + } + + exports['default'] = createBrowserHistory; + module.exports = exports['default']; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 226 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _useRouterHistory = __webpack_require__(222); + + var _useRouterHistory2 = _interopRequireDefault(_useRouterHistory); + + var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); + + exports['default'] = function (createHistory) { + var history = undefined; + if (canUseDOM) history = _useRouterHistory2['default'](createHistory)(); + return history; + }; + + module.exports = exports['default']; + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _historyLibCreateHashHistory = __webpack_require__(170); + + var _historyLibCreateHashHistory2 = _interopRequireDefault(_historyLibCreateHashHistory); + + var _createRouterHistory = __webpack_require__(226); + + var _createRouterHistory2 = _interopRequireDefault(_createRouterHistory); + + exports['default'] = _createRouterHistory2['default'](_historyLibCreateHashHistory2['default']); + module.exports = exports['default']; + +/***/ }), +/* 228 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var App = function (_React$Component) { + _inherits(App, _React$Component); + + function App() { + _classCallCheck(this, App); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + App.prototype.render = function render() { + var _props = this.props, + header = _props.header, + middle = _props.middle, + footer = _props.footer; + + return React.createElement( + 'div', + { className: 'pageContent' }, + header, + middle, + footer + ); + }; + + return App; + }(React.Component); /** + * Created by hqer on 2016/12/12. + */ + + + module.exports = App; + +/***/ }), +/* 229 */, +/* 230 */, +/* 231 */, +/* 232 */, +/* 233 */, +/* 234 */, +/* 235 */, +/* 236 */, +/* 237 */, +/* 238 */, +/* 239 */, +/* 240 */, +/* 241 */, +/* 242 */, +/* 243 */, +/* 244 */, +/* 245 */, +/* 246 */, +/* 247 */, +/* 248 */, +/* 249 */, +/* 250 */, +/* 251 */, +/* 252 */, +/* 253 */, +/* 254 */, +/* 255 */, +/* 256 */, +/* 257 */, +/* 258 */, +/* 259 */, +/* 260 */, +/* 261 */, +/* 262 */, +/* 263 */, +/* 264 */, +/* 265 */, +/* 266 */, +/* 267 */, +/* 268 */, +/* 269 */, +/* 270 */, +/* 271 */, +/* 272 */, +/* 273 */, +/* 274 */, +/* 275 */, +/* 276 */, +/* 277 */, +/* 278 */, +/* 279 */, +/* 280 */, +/* 281 */, +/* 282 */, +/* 283 */, +/* 284 */, +/* 285 */, +/* 286 */, +/* 287 */, +/* 288 */, +/* 289 */, +/* 290 */, +/* 291 */, +/* 292 */, +/* 293 */, +/* 294 */, +/* 295 */, +/* 296 */, +/* 297 */, +/* 298 */, +/* 299 */, +/* 300 */, +/* 301 */, +/* 302 */, +/* 303 */, +/* 304 */, +/* 305 */, +/* 306 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$assign = __webpack_require__(307)['default']; + + var _JSON$stringify = __webpack_require__(311)['default']; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + /** + * Created by hqer on 2016/12/12. + */ + var React = __webpack_require__(10); + var Link = __webpack_require__(168).Link; + var hashHistory = __webpack_require__(168).hashHistory; + var Reflux = __webpack_require__(313); + var ReactMixin = __webpack_require__(332); + var storeHeader = __webpack_require__(335); + var actionHeader = __webpack_require__(358); + var Fetch = __webpack_require__(357); + + var header = window.GLOBAL.pageData.header; + + var Header = function (_React$Component) { + _inherits(Header, _React$Component); + + function Header(props) { + _classCallCheck(this, Header); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + data: { + isLogin: window.GLOBAL.isLogin ? window.GLOBAL.isLogin : 0, + name: window.GLOBAL.userInfo && window.GLOBAL.userInfo.name ? window.GLOBAL.userInfo.name : '', + unReadMail: 0, + navSelect: 'index' + } + }; + _this.logout = _this.logout.bind(_this); + return _this; + } + + Header.prototype.componentWillMount = function componentWillMount() { + actionHeader.getData(); + }; + + Header.prototype.componentDidMount = function componentDidMount() { + if (sessionStorage && sessionStorage.devPortalUid && !(window.GLOBAL.userInfo && window.GLOBAL.userInfo.name)) { + window.GLOBAL.userId = sessionStorage.devPortalUid; + actionHeader.getUserInfo(); + } + }; + + Header.prototype.logout = function logout() { + var _this2 = this; + + Fetch.set(header.rightMenu.userName.action, { + method: 'POST', + cache: 'no-cache', + body: _JSON$stringify({ + userId: window.GLOBAL.userId + }) + }).then(function (r) { + if (r.code && r.isExit) { + window.GLOBAL.isLogin = 0; + window.GLOBAL.userInfo = ''; + sessionStorage.removeItem('devPortalUid'); + var newData = _Object$assign({}, _this2.state.data); + newData.isLogin = 0; + newData.name = ''; + newData.unReadMail = ''; + _this2.setState({ data: newData }); + hashHistory.push('/index'); + } + }); + }; + + Header.prototype.render = function render() { + var _this3 = this; + + return React.createElement( + 'div', + { className: 'header' }, + React.createElement( + 'div', + { className: 'headerMenu' }, + React.createElement( + Link, + { className: 'logoBtn', to: '/index' }, + header.logo.img ? React.createElement('img', { src: header.logo.img, className: 'logoImg' }) : '', + header.logo.text ? React.createElement( + 'span', + null, + header.logo.text + ) : '' + ), + this.state.isLogin ? React.createElement( + 'ul', + { className: 'centerMenu' }, + header.centerMenu.loginNav.map(function (item, i) { + return header.centerMenu[item] && header.centerMenu[item].child && header.centerMenu[item].child.length ? React.createElement( + 'li', + { key: i, className: _this3.state.data.navSelect === item ? 'navItem select' : 'navItem' }, + React.createElement( + 'span', + { className: 'navTitle' }, + header.centerMenu[item].text + ), + React.createElement( + 'ul', + { className: 'showMenuBox ' + item }, + header.centerMenu[item].child.map(function (cItem, j) { + return cItem && cItem.child && cItem.child.length ? React.createElement( + 'li', + { key: j, className: 'showMenuItem' }, + React.createElement( + 'span', + { className: 'showMenuItemTitle' }, + cItem.text + ), + React.createElement( + 'ul', + { className: 'menu' }, + cItem.child.map(function (iItem, n) { + return React.createElement( + 'li', + { key: n }, + React.createElement( + Link, + { to: iItem.url }, + iItem.text + ) + ); + }) + ) + ) : React.createElement( + 'li', + { key: j, className: 'showMenuItem' }, + React.createElement( + Link, + { to: cItem.url }, + cItem.text + ) + ); + }) + ) + ) : React.createElement( + 'li', + { key: i, className: _this3.state.data.navSelect === item ? 'navItem select' : 'navItem' }, + React.createElement( + Link, + { to: header.centerMenu[item].url }, + React.createElement( + 'span', + { className: 'navTitle' }, + header.centerMenu[item].text + ) + ) + ); + }) + ) : React.createElement( + 'ul', + { className: 'centerMenu' }, + header.centerMenu.unLoginNav.map(function (item, i) { + return header.centerMenu[item] && header.centerMenu[item].child && header.centerMenu[item].child.length ? React.createElement( + 'li', + { key: i, className: _this3.state.data.navSelect === item ? 'navItem select' : 'navItem' }, + React.createElement( + 'span', + { className: 'navTitle' }, + header.centerMenu[item].text + ), + React.createElement( + 'ul', + { className: 'showMenuBox ' + item }, + header.centerMenu[item].child.map(function (cItem, j) { + return cItem && cItem.child && cItem.child.length ? React.createElement( + 'li', + { key: j, className: 'showMenuItem' }, + React.createElement( + 'span', + { className: 'showMenuItemTitle' }, + cItem.text + ), + React.createElement( + 'ul', + { className: 'menu' }, + cItem.child.map(function (iItem, n) { + return React.createElement( + 'li', + { key: n }, + React.createElement( + Link, + { to: iItem.url }, + iItem.text + ) + ); + }) + ) + ) : React.createElement( + 'li', + { key: j, className: 'showMenuItem' }, + React.createElement( + Link, + { to: cItem.url }, + cItem.text + ) + ); + }) + ) + ) : React.createElement( + 'li', + { key: i, className: _this3.state.data.navSelect === item ? 'navItem select' : 'navItem' }, + React.createElement( + Link, + { to: header.centerMenu[item].url }, + React.createElement( + 'span', + { className: 'navTitle' }, + header.centerMenu[item].text + ) + ) + ); + }) + ), + this.state.isLogin ? React.createElement( + 'div', + { className: 'rightMenu' }, + React.createElement( + 'div', + { className: 'userName' }, + React.createElement( + 'span', + null, + this.state.name + ), + React.createElement( + 'div', + { className: 'iconTips', onClick: this.logout }, + '\u9000\u51FA' + ) + ), + React.createElement( + Link, + { to: header.rightMenu.email.url }, + React.createElement('div', { className: this.state.data.unReadMail ? 'icon icon-emailGraySmall redDot' : 'icon icon-emailGraySmall' }) + ) + ) : React.createElement( + 'div', + { className: 'rightMenu' }, + header.rightMenu.unLoginBtns.map(function (item, i) { + return React.createElement( + Link, + { key: i, role: 'button', className: item.key, to: item.url }, + item.text + ); + }) + ) + ) + ); + }; + + return Header; + }(React.Component); + + ReactMixin.onClass(Header, Reflux.connect(storeHeader, 'data')); + module.exports = Header; + +/***/ }), +/* 307 */, +/* 308 */, +/* 309 */, +/* 310 */, +/* 311 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(312), __esModule: true }; + +/***/ }), +/* 312 */ +/***/ (function(module, exports, __webpack_require__) { + + var core = __webpack_require__(242); + var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify }); + module.exports = function stringify(it) { // eslint-disable-line no-unused-vars + return $JSON.stringify.apply($JSON, arguments); + }; + + +/***/ }), +/* 313 */, +/* 314 */, +/* 315 */, +/* 316 */, +/* 317 */, +/* 318 */, +/* 319 */, +/* 320 */, +/* 321 */, +/* 322 */, +/* 323 */, +/* 324 */, +/* 325 */, +/* 326 */, +/* 327 */, +/* 328 */, +/* 329 */, +/* 330 */, +/* 331 */, +/* 332 */, +/* 333 */, +/* 334 */, +/* 335 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$assign = __webpack_require__(307)['default']; + + var _JSON$stringify = __webpack_require__(311)['default']; + + var _Promise = __webpack_require__(336)['default']; + + /** + * Created by hqer on 2017/12/15. + */ + var Reflux = __webpack_require__(313); + var Fetch = __webpack_require__(357); + var actions = __webpack_require__(358); + var header = window.GLOBAL.pageData.header; + module.exports = Reflux.createStore({ + listenables: [actions], + init: function init() { + this.data = { + isLogin: window.GLOBAL.isLogin ? window.GLOBAL.isLogin : 0, + name: window.GLOBAL.userInfo && window.GLOBAL.userInfo.name ? window.GLOBAL.userInfo.name : '', + unReadMail: 0, + navSelect: 'index' + }; + }, + onGetData: function onGetData() { + this.trigger(this.data); + }, + onGetUserInfo: function onGetUserInfo() { + var _this = this; + + var userInfo = new _Promise(function (resolve) { + Fetch.set(header.action, { + method: 'POST', + cache: 'no-cache', + body: _JSON$stringify({ + userId: window.GLOBAL.userId + }) + }).then(function (r) { + if (r.code) { + window.GLOBAL.isLogin = r.isLogin; + window.GLOBAL.userInfo = r.userInfo; + var newData = _Object$assign({}, _this.data); + newData.isLogin = r.isLogin; + newData.name = r.userInfo.name; + resolve(newData); + } + }); + }); + userInfo.then(function (_obj) { + return new _Promise(function (resolve) { + Fetch.set(header.rightMenu.email.action, { + method: 'POST', + cache: 'no-cache', + body: _JSON$stringify({ + userId: window.GLOBAL.userId + }) + }).then(function (r) { + if (r.code) { + var newData = _Object$assign({}, _obj); + newData.unReadMail = r.unReadMail; + resolve(newData); + } + }); + }); + }).then(function (_obj) { + _this.trigger(_obj); + }); + }, + onSetUnReadMail: function onSetUnReadMail(_num) { + var newData = _Object$assign({}, this.data); + newData.unReadMail = _num; + this.trigger(newData); + }, + onSetNavSelect: function onSetNavSelect(_key) { + var newData = _Object$assign({}, this.data); + newData.navSelect = _key; + this.trigger(newData); + } + }); + +/***/ }), +/* 336 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(337), __esModule: true }; + +/***/ }), +/* 337 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(295); + __webpack_require__(234); + __webpack_require__(278); + __webpack_require__(338); + __webpack_require__(355); + __webpack_require__(356); + module.exports = __webpack_require__(242).Promise; + + +/***/ }), +/* 338 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var LIBRARY = __webpack_require__(239); + var global = __webpack_require__(241); + var ctx = __webpack_require__(243); + var classof = __webpack_require__(339); + var $export = __webpack_require__(240); + var isObject = __webpack_require__(248); + var aFunction = __webpack_require__(244); + var anInstance = __webpack_require__(340); + var forOf = __webpack_require__(341); + var speciesConstructor = __webpack_require__(345); + var task = __webpack_require__(346).set; + var microtask = __webpack_require__(348)(); + var newPromiseCapabilityModule = __webpack_require__(349); + var perform = __webpack_require__(350); + var promiseResolve = __webpack_require__(351); + var PROMISE = 'Promise'; + var TypeError = global.TypeError; + var process = global.process; + var $Promise = global[PROMISE]; + var isNode = classof(process) == 'process'; + var empty = function () { /* empty */ }; + var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; + var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; + + var USE_NATIVE = !!function () { + try { + // correct subclassing with @@species support + var promise = $Promise.resolve(1); + var FakePromise = (promise.constructor = {})[__webpack_require__(275)('species')] = function (exec) { + exec(empty, empty); + }; + // unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; + } catch (e) { /* empty */ } + }(); + + // helpers + var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; + }; + var notify = function (promise, isReject) { + if (promise._n) return; + promise._n = true; + var chain = promise._c; + microtask(function () { + var value = promise._v; + var ok = promise._s == 1; + var i = 0; + var run = function (reaction) { + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then; + try { + if (handler) { + if (!ok) { + if (promise._h == 2) onHandleUnhandled(promise); + promise._h = 1; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); + if (domain) domain.exit(); + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (e) { + reject(e); + } + }; + while (chain.length > i) run(chain[i++]); // variable length - can't use forEach + promise._c = []; + promise._n = false; + if (isReject && !promise._h) onUnhandled(promise); + }); + }; + var onUnhandled = function (promise) { + task.call(global, function () { + var value = promise._v; + var unhandled = isUnhandled(promise); + var result, handler, console; + if (unhandled) { + result = perform(function () { + if (isNode) { + process.emit('unhandledRejection', value, promise); + } else if (handler = global.onunhandledrejection) { + handler({ promise: promise, reason: value }); + } else if ((console = global.console) && console.error) { + console.error('Unhandled promise rejection', value); + } + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + promise._h = isNode || isUnhandled(promise) ? 2 : 1; + } promise._a = undefined; + if (unhandled && result.e) throw result.v; + }); + }; + var isUnhandled = function (promise) { + if (promise._h == 1) return false; + var chain = promise._a || promise._c; + var i = 0; + var reaction; + while (chain.length > i) { + reaction = chain[i++]; + if (reaction.fail || !isUnhandled(reaction.promise)) return false; + } return true; + }; + var onHandleUnhandled = function (promise) { + task.call(global, function () { + var handler; + if (isNode) { + process.emit('rejectionHandled', promise); + } else if (handler = global.onrejectionhandled) { + handler({ promise: promise, reason: promise._v }); + } + }); + }; + var $reject = function (value) { + var promise = this; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + promise._v = value; + promise._s = 2; + if (!promise._a) promise._a = promise._c.slice(); + notify(promise, true); + }; + var $resolve = function (value) { + var promise = this; + var then; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + try { + if (promise === value) throw TypeError("Promise can't be resolved itself"); + if (then = isThenable(value)) { + microtask(function () { + var wrapper = { _w: promise, _d: false }; // wrap + try { + then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); + } catch (e) { + $reject.call(wrapper, e); + } + }); + } else { + promise._v = value; + promise._s = 1; + notify(promise, false); + } + } catch (e) { + $reject.call({ _w: promise, _d: false }, e); // wrap + } + }; + + // constructor polyfill + if (!USE_NATIVE) { + // 25.4.3.1 Promise(executor) + $Promise = function Promise(executor) { + anInstance(this, $Promise, PROMISE, '_h'); + aFunction(executor); + Internal.call(this); + try { + executor(ctx($resolve, this, 1), ctx($reject, this, 1)); + } catch (err) { + $reject.call(this, err); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + this._c = []; // <- awaiting reactions + this._a = undefined; // <- checked in isUnhandled reactions + this._s = 0; // <- state + this._d = false; // <- done + this._v = undefined; // <- value + this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled + this._n = false; // <- notify + }; + Internal.prototype = __webpack_require__(352)($Promise.prototype, { + // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) + then: function then(onFulfilled, onRejected) { + var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = isNode ? process.domain : undefined; + this._c.push(reaction); + if (this._a) this._a.push(reaction); + if (this._s) notify(this, false); + return reaction.promise; + }, + // 25.4.5.1 Promise.prototype.catch(onRejected) + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + this.promise = promise; + this.resolve = ctx($resolve, promise, 1); + this.reject = ctx($reject, promise, 1); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === $Promise || C === Wrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; + } + + $export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); + __webpack_require__(274)($Promise, PROMISE); + __webpack_require__(353)(PROMISE); + Wrapper = __webpack_require__(242)[PROMISE]; + + // statics + $export($export.S + $export.F * !USE_NATIVE, PROMISE, { + // 25.4.4.5 Promise.reject(r) + reject: function reject(r) { + var capability = newPromiseCapability(this); + var $$reject = capability.reject; + $$reject(r); + return capability.promise; + } + }); + $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { + // 25.4.4.6 Promise.resolve(x) + resolve: function resolve(x) { + return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); + } + }); + $export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(354)(function (iter) { + $Promise.all(iter)['catch'](empty); + })), PROMISE, { + // 25.4.4.1 Promise.all(iterable) + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var values = []; + var index = 0; + var remaining = 1; + forOf(iterable, false, function (promise) { + var $index = index++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + C.resolve(promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[$index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.e) reject(result.v); + return capability.promise; + }, + // 25.4.4.4 Promise.race(iterable) + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + forOf(iterable, false, function (promise) { + C.resolve(promise).then(capability.resolve, reject); + }); + }); + if (result.e) reject(result.v); + return capability.promise; + } + }); + + +/***/ }), +/* 339 */, +/* 340 */ +/***/ (function(module, exports) { + + module.exports = function (it, Constructor, name, forbiddenField) { + if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { + throw TypeError(name + ': incorrect invocation!'); + } return it; + }; + + +/***/ }), +/* 341 */ +/***/ (function(module, exports, __webpack_require__) { + + var ctx = __webpack_require__(243); + var call = __webpack_require__(342); + var isArrayIter = __webpack_require__(343); + var anObject = __webpack_require__(247); + var toLength = __webpack_require__(267); + var getIterFn = __webpack_require__(344); + var BREAK = {}; + var RETURN = {}; + var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { + var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); + var f = ctx(fn, that, entries ? 2 : 1); + var index = 0; + var length, step, iterator, result; + if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); + // fast case for arrays with default iterator + if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if (result === BREAK || result === RETURN) return result; + } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { + result = call(iterator, f, step.value, entries); + if (result === BREAK || result === RETURN) return result; + } + }; + exports.BREAK = BREAK; + exports.RETURN = RETURN; + + +/***/ }), +/* 342 */, +/* 343 */, +/* 344 */, +/* 345 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.3.20 SpeciesConstructor(O, defaultConstructor) + var anObject = __webpack_require__(247); + var aFunction = __webpack_require__(244); + var SPECIES = __webpack_require__(275)('species'); + module.exports = function (O, D) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); + }; + + +/***/ }), +/* 346 */ +/***/ (function(module, exports, __webpack_require__) { + + var ctx = __webpack_require__(243); + var invoke = __webpack_require__(347); + var html = __webpack_require__(273); + var cel = __webpack_require__(252); + var global = __webpack_require__(241); + var process = global.process; + var setTask = global.setImmediate; + var clearTask = global.clearImmediate; + var MessageChannel = global.MessageChannel; + var Dispatch = global.Dispatch; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = 'onreadystatechange'; + var defer, channel, port; + var run = function () { + var id = +this; + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + var listener = function (event) { + run.call(event.data); + }; + // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + if (!setTask || !clearTask) { + setTask = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (__webpack_require__(265)(process) == 'process') { + defer = function (id) { + process.nextTick(ctx(run, id, 1)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if (MessageChannel) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { + defer = function (id) { + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in cel('script')) { + defer = function (id) { + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(ctx(run, id, 1), 0); + }; + } + } + module.exports = { + set: setTask, + clear: clearTask + }; + + +/***/ }), +/* 347 */ +/***/ (function(module, exports) { + + // fast apply, http://jsperf.lnkit.com/fast-apply/5 + module.exports = function (fn, args, that) { + var un = that === undefined; + switch (args.length) { + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); + }; + + +/***/ }), +/* 348 */ +/***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__(241); + var macrotask = __webpack_require__(346).set; + var Observer = global.MutationObserver || global.WebKitMutationObserver; + var process = global.process; + var Promise = global.Promise; + var isNode = __webpack_require__(265)(process) == 'process'; + + module.exports = function () { + var head, last, notify; + + var flush = function () { + var parent, fn; + if (isNode && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (e) { + if (head) notify(); + else last = undefined; + throw e; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (isNode) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver + } else if (Observer) { + var toggle = true; + var node = document.createTextNode(''); + new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + var promise = Promise.resolve(); + notify = function () { + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + + return function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; + }; + }; + + +/***/ }), +/* 349 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + // 25.4.1.5 NewPromiseCapability(C) + var aFunction = __webpack_require__(244); + + function PromiseCapability(C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); + } + + module.exports.f = function (C) { + return new PromiseCapability(C); + }; + + +/***/ }), +/* 350 */ +/***/ (function(module, exports) { + + module.exports = function (exec) { + try { + return { e: false, v: exec() }; + } catch (e) { + return { e: true, v: e }; + } + }; + + +/***/ }), +/* 351 */ +/***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__(247); + var isObject = __webpack_require__(248); + var newPromiseCapability = __webpack_require__(349); + + module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + + +/***/ }), +/* 352 */ +/***/ (function(module, exports, __webpack_require__) { + + var hide = __webpack_require__(245); + module.exports = function (target, src, safe) { + for (var key in src) { + if (safe && target[key]) target[key] = src[key]; + else hide(target, key, src[key]); + } return target; + }; + + +/***/ }), +/* 353 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var global = __webpack_require__(241); + var core = __webpack_require__(242); + var dP = __webpack_require__(246); + var DESCRIPTORS = __webpack_require__(250); + var SPECIES = __webpack_require__(275)('species'); + + module.exports = function (KEY) { + var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY]; + if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { + configurable: true, + get: function () { return this; } + }); + }; + + +/***/ }), +/* 354 */, +/* 355 */ +/***/ (function(module, exports, __webpack_require__) { + + // https://github.com/tc39/proposal-promise-finally + 'use strict'; + var $export = __webpack_require__(240); + var core = __webpack_require__(242); + var global = __webpack_require__(241); + var speciesConstructor = __webpack_require__(345); + var promiseResolve = __webpack_require__(351); + + $export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { + var C = speciesConstructor(this, core.Promise || global.Promise); + var isFunction = typeof onFinally == 'function'; + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); + } }); + + +/***/ }), +/* 356 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + // https://github.com/tc39/proposal-promise-try + var $export = __webpack_require__(240); + var newPromiseCapability = __webpack_require__(349); + var perform = __webpack_require__(350); + + $export($export.S, 'Promise', { 'try': function (callbackfn) { + var promiseCapability = newPromiseCapability.f(this); + var result = perform(callbackfn); + (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); + return promiseCapability.promise; + } }); + + +/***/ }), +/* 357 */, +/* 358 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + /** + * Created by hqer on 2017/12/15. + */ + var Reflux = __webpack_require__(313); + module.exports = Reflux.createActions(['getData', 'getUserInfo', 'setUnReadMail', 'setNavSelect']); + +/***/ }), +/* 359 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + /** + * Created by hqer on 2016/12/12. + */ + var React = __webpack_require__(10); + var Link = __webpack_require__(168).Link; + var header = window.GLOBAL.pageData.header; + + var Header = function (_React$Component) { + _inherits(Header, _React$Component); + + function Header() { + _classCallCheck(this, Header); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + Header.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'header' }, + React.createElement( + 'div', + { className: 'headerMenu' }, + React.createElement( + Link, + { className: 'logoBtn', to: '/index' }, + header.logo.img ? React.createElement('img', { src: header.logo.img, className: 'logoImg' }) : '', + header.logo.text ? React.createElement( + 'span', + null, + header.logo.text + ) : '' + ) + ) + ); + }; + + return Header; + }(React.Component); + + module.exports = Header; + +/***/ }), +/* 360 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + /** + * Created by hqer on 2016/12/12. + */ + var React = __webpack_require__(10); + var Link = __webpack_require__(168).Link; + var footer = window.GLOBAL.pageData.footer; + + var Footer = function (_React$Component) { + _inherits(Footer, _React$Component); + + function Footer() { + _classCallCheck(this, Footer); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + Footer.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'footer' }, + React.createElement( + 'div', + { className: 'footerMenu' }, + footer.leftItems.length ? React.createElement( + 'ul', + { className: 'leftItem' }, + footer.leftItems.map(function (item, i) { + return item && item.url ? React.createElement( + 'li', + { className: 'item', key: i }, + React.createElement( + Link, + { to: item.url }, + item && item.img ? React.createElement('img', { src: item.img, className: 'leftItemImg' }) : '', + item && item.text ? React.createElement( + 'span', + null, + item.text + ) : '' + ) + ) : React.createElement( + 'li', + { className: 'item', key: i }, + item && item.img ? React.createElement('img', { src: item.img, className: 'leftItemImg' }) : '', + item && item.text ? React.createElement( + 'span', + null, + item.text + ) : '' + ); + }) + ) : '', + footer.rightItems.length ? React.createElement( + 'ul', + { className: 'rightItem' }, + footer.rightItems.map(function (item, i) { + return item && item.url ? React.createElement( + 'li', + { className: 'item', key: i }, + React.createElement( + Link, + { to: item.url }, + item && item.img ? React.createElement('img', { src: item.img, className: 'leftItemImg' }) : '', + item && item.text ? React.createElement( + 'span', + null, + item.text + ) : '' + ) + ) : React.createElement( + 'li', + { className: 'item', key: i }, + item && item.img ? React.createElement('img', { src: item.img, className: 'leftItemImg' }) : '', + item && item.text ? React.createElement( + 'span', + null, + item.text + ) : '' + ); + }) + ) : '' + ) + ); + }; + + return Footer; + }(React.Component); + + module.exports = Footer; + +/***/ }) +]); \ No newline at end of file diff --git a/dataSeparation/dist/componentUI.js b/dataSeparation/dist/componentUI.js new file mode 100644 index 0000000..655d145 --- /dev/null +++ b/dataSeparation/dist/componentUI.js @@ -0,0 +1,657 @@ +webpackJsonp([7,10],{ + +/***/ 0: +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(547); + __webpack_require__(555); + __webpack_require__(556); + __webpack_require__(557); + module.exports = __webpack_require__(548); + + +/***/ }), + +/***/ 547: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _extends = __webpack_require__(364)['default']; + + var _Object$assign = __webpack_require__(307)['default']; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var PropTypes = __webpack_require__(368); + + var _reactBootstrap = __webpack_require__(362); + + var Glyphicon = _reactBootstrap.Glyphicon; + + var CheckBox = function (_React$Component) { + _inherits(CheckBox, _React$Component); + + function CheckBox(props) { + _classCallCheck(this, CheckBox); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + s: _this.props.s + }; + _this.handleClick = _this.handleClick.bind(_this); + return _this; + } + + CheckBox.prototype.componentWillReceiveProps = function componentWillReceiveProps(newProps) { + if (newProps.s != this.state.s) { + this.setState({ s: newProps.s }); + } + }; + + CheckBox.prototype.handleClick = function handleClick() { + if (typeof this.props.onClick === 'function') { + this.props.onClick(); + } else { + if (this.state.s) { + this.setState({ s: false }); + } else { + this.setState({ s: true }); + } + } + }; + + CheckBox.prototype.render = function render() { + var other = _Object$assign({}, this.props); + delete other.v; + delete other.s; + delete other.style; + return React.createElement( + 'div', + { style: this.props.style, className: 'CheckBoxUI' }, + React.createElement( + 'button', + _extends({}, other, { + type: 'button', + className: this.props.className, + value: this.state.s ? this.props.v : '', + onClick: this.handleClick }), + this.state.s ? React.createElement(Glyphicon, { glyph: 'ok' }) : '' + ) + ); + }; + + return CheckBox; + }(React.Component); /** + * Created by hqer on 2017/5/17. + */ + + + CheckBox.propTypes = { + s: PropTypes.bool.isRequired, + v: PropTypes.string.isRequired + }; + CheckBox.defaultProps = { + s: false, + v: '' + + }; + module.exports = CheckBox; + +/***/ }), + +/***/ 548: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var _reactBootstrap = __webpack_require__(362); + + var Button = _reactBootstrap.Button; + + var PropTypes = __webpack_require__(368); + + var SystemTips = function (_React$Component) { + _inherits(SystemTips, _React$Component); + + function SystemTips(props) { + _classCallCheck(this, SystemTips); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.handleClick = _this.handleClick.bind(_this); + _this.handCancel = _this.handCancel.bind(_this); + return _this; + } + + SystemTips.prototype.handleClick = function handleClick() { + if (typeof this.props.onSubmit === 'function') { + this.props.onSubmit(); + } + }; + + SystemTips.prototype.handCancel = function handCancel() { + if (typeof this.props.onCancel === 'function') { + this.props.onCancel(); + } + }; + + SystemTips.prototype.render = function render() { + var _this2 = this; + + var btns = []; + if (this.props.btns.length) { + this.props.btns.map(function (element, index) { + btns.push(React.createElement( + Button, + { key: index, bsStyle: element.type ? 'primary' : 'info', onClick: element.type ? _this2.handleClick : _this2.handCancel }, + element.text + )); + }); + } + return React.createElement( + 'div', + { className: 'tipsBg' }, + React.createElement( + 'div', + { className: 'tips ' + this.props.className }, + React.createElement( + 'div', + { className: 'tipsTitle' }, + this.props.title + ), + React.createElement( + 'div', + { className: 'tipsContext' }, + this.props.text + ), + React.createElement( + 'div', + { className: 'tipsBtnArea' }, + btns + ) + ) + ); + }; + + return SystemTips; + }(React.Component); /** + * Created by hqer on 2016/12/27. + */ + + + SystemTips.propTypes = { + className: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + text: PropTypes.string.isRequired, + btns: PropTypes.array.isRequired + }; + SystemTips.defaultProps = { + className: '', + title: '提示', + text: '', + btns: [{ text: '取消', type: 0 }, { text: '确定', type: 1 }] + + }; + module.exports = SystemTips; + +/***/ }), + +/***/ 555: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var $ = __webpack_require__(546); + + var _reactDom = __webpack_require__(167); + + var findDOMNode = _reactDom.findDOMNode; + + var _reactBootstrap = __webpack_require__(362); + + var Glyphicon = _reactBootstrap.Glyphicon; + + var PropTypes = __webpack_require__(368); + + var DropDown = function (_React$Component) { + _inherits(DropDown, _React$Component); + + function DropDown(props) { + _classCallCheck(this, DropDown); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + v: _this.props.v, + isReturn: false + }; + _this.selectItem = _this.selectItem.bind(_this); + _this._clickAway = _this._clickAway.bind(_this); + _this.toggle = _this.toggle.bind(_this); + return _this; + } + + DropDown.prototype.componentWillReceiveProps = function componentWillReceiveProps(newProps) { + if (newProps.v != this.state.v) { + this.setState({ v: newProps.v, isShowList: false }); + } + }; + + DropDown.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) { + if (this.state.isReturn && !prevState.isReturn && typeof this.props.returnValue === 'function') { + this.setState({ isReturn: false }); + this.props.returnValue(this); + } + }; + + DropDown.prototype.componentWillUnmount = function componentWillUnmount() { + $(document).off('click'); + }; + + DropDown.prototype.selectItem = function selectItem(_v) { + this.setState({ isShowList: false, v: _v, isReturn: true }); + }; + + DropDown.prototype._clickAway = function _clickAway() { + var _this2 = this; + + $(document).off('click').on('click', function (event) { + var _el = findDOMNode(_this2); + if ($(_el).hasClass('showUl')) { + var _eventTarget = event.srcElement ? event.srcElement : event.target; + if (_eventTarget !== _el && $(_el).find(_eventTarget).length == 0) { + _this2.setState({ isShowList: false }); + } + } + }); + }; + + DropDown.prototype.toggle = function toggle(event) { + var _el = findDOMNode(this); + $(_el).find('input').focus(); + if (this.state.isShowList) { + this.setState({ isShowList: false }); + } else { + this.setState({ isShowList: true }); + } + }; + + DropDown.prototype.render = function render() { + var _this3 = this; + + return React.createElement( + 'div', + { className: this.state.isShowList ? 'DropDownUI showUl' : 'DropDownUI', onClick: this._clickAway }, + React.createElement('input', { + type: 'text', + readOnly: true, + className: this.props.className, + placeholder: '\u8BF7\u9009\u62E9', + value: this.props.a.map(function (n, i) { + return n.v === _this3.state.v ? n.t : ''; + }).toString().replace(/\,/g, ''), + onClick: this.toggle + }), + React.createElement( + 'div', + { className: this.state.isShowList ? 'icon top' : 'icon' }, + React.createElement(Glyphicon, { glyph: 'chevron-down', onClick: this.toggle }) + ), + this.state.isShowList ? React.createElement( + 'div', + { className: 'DropDownListArea' }, + React.createElement( + 'ul', + { className: 'DropDownList' }, + this.props.a.map(function (n, i) { + return React.createElement( + 'li', + { key: i, onClick: _this3.selectItem.bind(_this3, n.v) }, + n.t + ); + }) + ) + ) : '' + ); + }; + + return DropDown; + }(React.Component); /** + * Created by hqer on 2017/5/16. + */ + + + DropDown.propTypes = { + a: PropTypes.array.isRequired + }; + DropDown.defaultProps = { + className: '', + v: '', + a: [] + }; + module.exports = DropDown; + +/***/ }), + +/***/ 556: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _extends = __webpack_require__(364)['default']; + + var _Object$assign = __webpack_require__(307)['default']; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var PropTypes = __webpack_require__(368); + + /** + * Created by hqer on 2016/12/21. + */ + var Input = function (_React$Component) { + _inherits(Input, _React$Component); + + function Input(props) { + _classCallCheck(this, Input); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + v: _this.props.v, + isReturn: false + }; + _this.handleChange = _this.handleChange.bind(_this); + _this.handleBlur = _this.handleBlur.bind(_this); + _this.handleKeyUp = _this.handleKeyUp.bind(_this); + _this.handleFocus = _this.handleFocus.bind(_this); + _this._setPositiveInt = _this._setPositiveInt.bind(_this); + _this._setNaturalNum = _this._setNaturalNum.bind(_this); + _this._setMoney = _this._setMoney.bind(_this); + _this._setNum = _this._setNum.bind(_this); + return _this; + } + + Input.prototype.componentWillReceiveProps = function componentWillReceiveProps(newProps) { + if (newProps.v != this.state.v) { + this.setState({ v: newProps.v }); + } + }; + + Input.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) { + if (this.state.isReturn && !prevState.isReturn && typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + this.setState({ isReturn: false }); + } + }; + + Input.prototype._setPositiveInt = function _setPositiveInt(_val) { + if (/^[1-9]\d*$/.test(_val)) { + this.setState({ v: _val * 1 }); + } + }; + + Input.prototype._setNaturalNum = function _setNaturalNum(_val) { + if (/^\d*$/.test(_val)) { + this.setState({ v: _val * 1 }); + } + }; + + Input.prototype._setMoney = function _setMoney(_val) { + if (/^(\-)?(\d)*(\.)?(\d{0,2})$/.test(_val)) { + var f = ''; + var _v = _val; + if (_val.indexOf('-') == 0) { + f = _val.slice(0, 1); + _v = _val.substring(1); + } + var re = /\d{1,3}(?=(\d{3})+$)/g; + var n1 = _v.replace(/^(\d+)((\.\d+)?)$/, function (s, s1, s2) { + return s1.replace(re, '$&,') + s2; + }); + this.setState({ v: f + n1 }); + } + }; + + Input.prototype._setNum = function _setNum(_val) { + if (/^(\-)?(\d)*(\.)?\d*$/.test(_val)) { + this.setState({ v: _val }); + } + }; + + Input.prototype.handleChange = function handleChange(event) { + var _eT = event.srcElement ? event.srcElement : event.target; + var _val = _eT.value; + if (_val === '') { + this.setState({ v: '' }); + } else if (this.props.type === 'money') { + var _newVal = _val.toString().replace(/\,/g, ''); + if (this.props.maxValue && _newVal * 1 > this.props.maxValue * 1) { + this._setMoney(this.props.maxValue.toString()); + } else { + this._setMoney(_newVal); + } + } else if (this.props.type === 'positiveInt') { + if (this.props.maxValue && _val * 1 > this.props.maxValue * 1) { + this._setPositiveInt(this.props.maxValue.toString()); + } else { + this._setPositiveInt(_val); + } + } else if (this.props.type === 'naturalNum') { + if (this.props.maxValue && _val * 1 > this.props.maxValue * 1) { + this._setNaturalNum(this.props.maxValue); + } else { + this._setNaturalNum(_val); + } + } else if (this.props.type === 'number') { + if (this.props.maxValue && _val * 1 > this.props.maxValue * 1) { + this._setNum(this.props.maxValue); + } else { + this._setNum(_val); + } + } + if (typeof this.props.onChange === 'function') { + this.props.onChange(this); + } + }; + + Input.prototype.handleBlur = function handleBlur(event) { + if (this.props.type === 'money') { + if (this.state.v) { + if (this.state.v === '-') { + this.setState({ v: '', isReturn: true }); + } else { + var _newVal = this.state.v.replace(/\,/g, ''); + var _newV = parseFloat(_newVal).toFixed(2); + /* let f = ''; + let _v = _newV; + if (_newV.indexOf('-') == 0) { + f = _newV.slice(0,1); + _v = _newV.substring(1); + } + const re = /\d{1,3}(?=(\d{3})+$)/g; + const n1 = _v.replace(/^(\d+)((\.\d+)?)$/,(s,s1,s2) => { return s1.replace(re,'$&,') + s2; });*/ + /* this.setState({v:f + n1,isReturn:true});*/ + this.setState({ v: _newV, isReturn: true }); + } + } else { + if (typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + } + } + } else if (this.props.type === 'number') { + if (this.state.v === '-') { + this.setState({ v: '', isReturn: true }); + } else { + if (typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + } + } + } else { + if (typeof this.props.onBlur === 'function') { + this.props.onBlur(this); + } + } + }; + + Input.prototype.handleKeyUp = function handleKeyUp(event) { + if (typeof this.props.onKeyUp === 'function') { + this.props.onKeyUp(this); + } + }; + + Input.prototype.handleFocus = function handleFocus(event) { + if (typeof this.props.onFocus === 'function') { + this.props.onFocus(this); + } + }; + + Input.prototype.render = function render() { + var other = _Object$assign({}, this.props); + delete other.type; + delete other.maxValue; + delete other.v; + return React.createElement('input', _extends({}, other, { + type: 'text', + value: this.state.v, + onKeyUp: this.handleKeyUp, + onBlur: this.handleBlur, + onFocus: this.handleFocus, + onChange: this.handleChange + })); + }; + + return Input; + }(React.Component); + + Input.propTypes = { + type: PropTypes.string.isRequired + }; + Input.defaultProps = { + type: 'text', + className: '', + v: '', + maxValue: '' + }; + module.exports = Input; + +/***/ }), + +/***/ 557: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _extends = __webpack_require__(364)['default']; + + var _Object$assign = __webpack_require__(307)['default']; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var PropTypes = __webpack_require__(368); + + /** + * Created by hqer on 2017/5/17. + */ + var RadioBtn = function (_React$Component) { + _inherits(RadioBtn, _React$Component); + + function RadioBtn(props) { + _classCallCheck(this, RadioBtn); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + s: _this.props.s + }; + _this.handleClick = _this.handleClick.bind(_this); + return _this; + } + + RadioBtn.prototype.componentWillReceiveProps = function componentWillReceiveProps(newProps) { + if (newProps.s != this.state.s) { + this.setState({ s: newProps.s }); + } + }; + + RadioBtn.prototype.handleClick = function handleClick() { + if (typeof this.props.onClick === 'function') { + this.props.onClick(); + } else { + if (this.state.s) { + this.setState({ s: false }); + } else { + this.setState({ s: true }); + } + } + }; + + RadioBtn.prototype.render = function render() { + var other = _Object$assign({}, this.props); + delete other.v; + delete other.s; + delete other.style; + return React.createElement( + 'div', + { style: this.props.style, className: this.state.s ? 'RadioUI select' : 'RadioUI' }, + React.createElement('button', _extends({}, other, { + type: 'button', + className: this.props.className, + value: this.state.s ? this.props.v : '', + onClick: this.handleClick })) + ); + }; + + return RadioBtn; + }(React.Component); + + RadioBtn.propTypes = { + s: PropTypes.bool.isRequired, + v: PropTypes.string.isRequired + }; + RadioBtn.defaultProps = { + s: false, + v: '' + + }; + module.exports = RadioBtn; + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/config.js b/dataSeparation/dist/config.js new file mode 100644 index 0000000..46cc181 --- /dev/null +++ b/dataSeparation/dist/config.js @@ -0,0 +1,127 @@ +webpackJsonp([8,10],{ + +/***/ 0: +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(545); + module.exports = __webpack_require__(357); + + +/***/ }), + +/***/ 357: +/***/ (function(module, exports) { + + 'use strict'; + + /** + * Created by hqer on 2017/11/8. + */ + module.exports = { + set: function set(_url, _data) { + function checkStatus(response) { + if (response.status >= 200 && response.status < 300) { + return response; + } else { + var error = new Error(response.statusText); + error.response = response; + throw error; + } + } + function parseJSON(response) { + window.GLOBAL.token = response.headers.get('token'); + if (response && response.sessionOut) { + window.GLOBAL.isLogin = 0; + } + return response.json(); + } + /* 用于不跨越,token放在header中*/ + /* let myHeaders = new Headers(); + myHeaders.append('token', GLOBAL.token); + _data.headers = myHeaders; + _data.credentials = "same-origin";*/ + /* 用于跨域,token放在body中*/ + /* let dataBody = Object.assign({token: GLOBAL.token},JSON.parse(_data.body)); + _data.body = JSON.stringify(dataBody);*/ + var req = new Request(_url, _data); + return fetch(req).then(checkStatus).then(parseJSON); + } + }; + +/***/ }), + +/***/ 545: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var $ = __webpack_require__(546); + + module.exports = { + isNotEmpty: function isNotEmpty(_v, _tips) { + var _val = $.trim(_v); + if (!_val) { + var _t = '* 输入项不能为空'; + if (typeof _tips === 'string') { + _t = _tips; + } + return _t; + } + return ''; + }, + isCheckLogUserName: function isCheckLogUserName(_v) { + var _rv = this.isNotEmpty(_v, '* 用户名/邮箱/手机号码不能为空'); + if (!_rv && !(/^[0-9a-zA-Z_]{4,20}$/.test(_v) || /^([a-zA-Z0-9_\.\-])+@([a-zA-Z0-9_\.\-])+\.[a-zA-Z]{2,3}$/.test(_v))) { + return '* 请输入正确格式的用户名/邮箱/手机号码'; + } + return _rv; + }, + isPhoneNum: function isPhoneNum(_v) { + var _rv = this.isNotEmpty(_v, '* 手机号码不能为空'); + if (!_rv && !/^1(3[0-9]|5[0-9]|8[0-9]|4[0-9]|7[0-9])\d{8}$/.test(_v)) { + return '* 请输入正确的手机号码'; + } + return _rv; + }, + isImgCode: function isImgCode(_v, _maxLength) { + var _rv = this.isNotEmpty(_v, '* 图形验证码不能为空'); + if (!_rv && !(/^[0-9a-zA-Z]+$/.test(_v) && _v.length === _maxLength)) { + return '* 请输入正确的图形验证码'; + } + return _rv; + }, + isSmsCode: function isSmsCode(_v, _maxLength) { + var _rv = this.isNotEmpty(_v, '* 验证码不能为空'); + if (!_rv && !(/^[0-9a-zA-Z]+$/.test(_v) && _v.length === _maxLength)) { + return '* 验证码错误'; + } + return _rv; + }, + isEmail: function isEmail(_v) { + var _rv = this.isNotEmpty(_v, '* 邮箱地址不能为空'); + if (!_rv && (!/^([a-zA-Z0-9_\.])+@([a-zA-Z0-9_\.])+\.[a-zA-Z]{2,3}$/.test(_v) || _v.indexOf('._') > -1 || _v.indexOf('_.') > -1 || _v.indexOf('..') > -1 || _v.indexOf('__') > -1 || _v.slice(0, 1) === '.' || _v.slice(0, 1) === '_')) { + return '* 请输入正确格式的email地址'; + } + return _rv; + }, + isPwd: function isPwd(_v) { + var _rv = this.isNotEmpty(_v, '* 密码不能为空'); + if (!_rv && !/^((?=.*?\d)(?=.*?[A-Za-z])|(?=.*?\d)(?=.*?[$#@^&_=+%<>{}?~!])|(?=.*?[A-Za-z])(?=.*?[$#@^&_=+%<>{}?~!]))[\dA-Za-z$#@^&_=+%<>{}?~!]{8,20}$/.test(_v)) { + return '* 密码格式不正确'; + } + return _rv; + }, + isVerifyPwd: function isVerifyPwd(_v, _vp) { + var _rv = this.isNotEmpty(_v, '* 密码不能为空'); + if (!_rv && _v !== _vp) { + return '* 密码不一致,请重新输入'; + } + return _rv; + } + }; /** + * Created by hqer on 2016/12/30. + */ + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/index.js b/dataSeparation/dist/index.js new file mode 100644 index 0000000..02e20e6 --- /dev/null +++ b/dataSeparation/dist/index.js @@ -0,0 +1,58 @@ +webpackJsonp([2,10],{ + +/***/ 549: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + /** + * Created by hqer on 2016/12/12. + */ + var React = __webpack_require__(10); + var actionHeader = __webpack_require__(358); + + var Index = function (_React$Component) { + _inherits(Index, _React$Component); + + function Index() { + _classCallCheck(this, Index); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + Index.prototype.componentWillMount = function componentWillMount() { + actionHeader.setNavSelect("index"); + }; + + Index.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'order devDoc About' }, + React.createElement( + 'div', + { className: 'whiteSpace' }, + React.createElement( + 'div', + { className: 'title' }, + '\u9996\u9875' + ), + React.createElement('div', { className: 'UploadArea' }) + ), + this.props.children + ); + }; + + return Index; + }(React.Component); + + module.exports = Index; + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/login.js b/dataSeparation/dist/login.js new file mode 100644 index 0000000..b7f1028 --- /dev/null +++ b/dataSeparation/dist/login.js @@ -0,0 +1,471 @@ +webpackJsonp([1,10],{ + +/***/ 361: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _JSON$stringify = __webpack_require__(311)['default']; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + /** + * Created by hqer on 2016/12/12. + */ + var React = __webpack_require__(10); + var Button = __webpack_require__(362).Button; + var Glyphicon = __webpack_require__(362).Glyphicon; + var MD5 = __webpack_require__(541); + var hashHistory = __webpack_require__(168).hashHistory; + + var CheckFun = __webpack_require__(545); + var Fetch = __webpack_require__(357); + var UICheckBox = __webpack_require__(547); + var SystemTips = __webpack_require__(548); + + var loginData = window.GLOBAL.pageData.login; + var systemError = window.GLOBAL.pageData.systemError; + + var Login = function (_React$Component) { + _inherits(Login, _React$Component); + + function Login(props) { + _classCallCheck(this, Login); + + var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); + + _this.state = { + userName: '', + userNameTips: '', + password: '', + passwordTips: '', + smsCode: '', + smsCodeTips: '', + imgCode: '', + imgCodeTips: '', + isCheckBox: false, + showTips: { type: 0, text: '', className: '' }, + isSentSms: false, + smsSentTime: loginData.smsSentBtn.times, + imgCodeIcon: loginData.imgCode.action + '?' + new Date().getTime(), + status: localStorage.getItem('loginStatus') ? localStorage.getItem('loginStatus') * 1 : 0 + }; + _this.checkUseInfo = _this.checkUseInfo.bind(_this); + _this.handleChangeUserName = _this.handleChangeUserName.bind(_this); + _this.handleBlurUserName = _this.handleBlurUserName.bind(_this); + _this.handleChangePassWord = _this.handleChangePassWord.bind(_this); + _this.handleBlurPassWord = _this.handleBlurPassWord.bind(_this); + _this.handleChangeSmsCode = _this.handleChangeSmsCode.bind(_this); + _this.handleBlurSmsCode = _this.handleBlurSmsCode.bind(_this); + _this.handleChangeImgCode = _this.handleChangeImgCode.bind(_this); + _this.handleBlurImgCode = _this.handleBlurImgCode.bind(_this); + _this.submit = _this.submit.bind(_this); + _this.sentSms = _this.sentSms.bind(_this); + _this.refreshImgCode = _this.refreshImgCode.bind(_this); + _this.closeTips = _this.closeTips.bind(_this); + return _this; + } + + Login.prototype.checkUseInfo = function checkUseInfo() { + var _isCheckBox = this.state.isCheckBox; + if (_isCheckBox) { + _isCheckBox = false; + } else { + _isCheckBox = true; + } + this.setState({ isCheckBox: _isCheckBox }); + }; + + Login.prototype.handleChangeUserName = function handleChangeUserName(event) { + var _eT = event.srcElement ? event.srcElement : event.target; + var _val = _eT.value; + if (/^[0-9a-zA-Z_.@]*$/.test(_val)) { + this.setState({ userName: _val }); + } + }; + + Login.prototype.handleBlurUserName = function handleBlurUserName() { + this.setState({ userNameTips: CheckFun.isNotEmpty(this.state.userName, '* 用户名/邮箱/手机号码不能为空') }); + }; + + Login.prototype.handleChangePassWord = function handleChangePassWord(event) { + var _eT = event.srcElement ? event.srcElement : event.target; + var _val = _eT.value; + if (/^[a-zA-Z0-9$#@^&_=+%<>{}?~!]*$/.test(_val)) { + this.setState({ password: _val }); + } + }; + + Login.prototype.handleBlurPassWord = function handleBlurPassWord() { + this.setState({ passwordTips: CheckFun.isNotEmpty(this.state.password, '* 密码不能为空') }); + }; + + Login.prototype.handleChangeSmsCode = function handleChangeSmsCode(event) { + var _eT = event.srcElement ? event.srcElement : event.target; + var _val = _eT.value; + if (/^[a-zA-Z0-9]*$/.test(_val)) { + this.setState({ smsCode: _val }); + } + }; + + Login.prototype.handleBlurSmsCode = function handleBlurSmsCode() { + this.setState({ smsCodeTips: CheckFun.isSmsCode(this.state.smsCode, loginData.smsCode.maxLength) }); + }; + + Login.prototype.handleChangeImgCode = function handleChangeImgCode(event) { + var _eT = event.srcElement ? event.srcElement : event.target; + var _val = _eT.value; + if (/^[a-zA-Z0-9]*$/.test(_val)) { + this.setState({ imgCode: _val }); + } + }; + + Login.prototype.handleBlurImgCode = function handleBlurImgCode() { + this.setState({ imgCodeTips: CheckFun.isImgCode(this.state.imgCode, loginData.imgCode.maxLength) }); + }; + + Login.prototype.submit = function submit() { + var _this2 = this; + + var _status = this.state.status; + if (_status === 0) { + if (CheckFun.isCheckLogUserName(this.state.userName)) { + this.setState({ userNameTips: CheckFun.isCheckLogUserName(this.state.userName) }); + } else if (CheckFun.isPwd(this.state.password)) { + this.setState({ passwordTips: CheckFun.isPwd(this.state.password) }); + } else if (CheckFun.isImgCode(this.state.imgCode, loginData.imgCode.maxLength)) { + this.setState({ imgCodeTips: CheckFun.isImgCode(this.state.imgCode, loginData.imgCode.maxLength) }); + } else { + setMaxDigits(130); + var _key = new RSAKeyPair('10001', '', window.GLOBAL.key); + Fetch.set(loginData.submit.action, { + method: 'POST', + cache: 'no-cache', + body: _JSON$stringify({ + userName: encryptedString(_key, encodeURIComponent(this.state.userName)), + password: encryptedString(_key, encodeURIComponent(this.state.password)), + imgCode: encryptedString(_key, encodeURIComponent(this.state.imgCode)), + isCheck: this.state.isCheckBox ? 1 : 0, + key: MD5(GLOBAL.userName + this.state.password + this.state.imgCode + this.state.token + 'devPortal') + }) + }).then(function (r) { + if (!r.code && r.errorTips) { + _this2.setState({ showTips: { type: -1, text: r.errorTips } }); + } else if (r.code && r.resultCode) { + if (r.resultCode === '200') { + sessionStorage.removeItem('loginStatus'); + sessionStorage.setItem('devPortalUid', r.userId); + window.GLOBAL.userId = r.userId; + _this2.setState({ status: 0 }); + hashHistory.push('/workBench'); + } else { + var _newTips = { + userName: '', + userNameTips: '', + password: '', + passwordTips: '', + imgCode: '', + imgCodeTips: '', + imgCodeIcon: loginData.imgCode.action + '?' + new Date().getTime() + }; + sessionStorage.setItem('loginStatus', r.status); + _newTips.status = r.status; + if (r.status === 2) { + loginData.status.result.map(function (item) { + if (r.status === item.apiCode) { + if (item.type === -1) { + _newTips.showTips = { type: -1, text: item.text, className: item.key }; + } + } + }, _this2); + } + loginData.smsSentBtn.result.map(function (item) { + if (r.resultCode === item.apiCode) { + if (item.type === 0) { + _newTips[item.key] = item.text; + } + } + }, _this2); + _this2.setState(_newTips); + } + } + })['catch'](function () { + _this2.setState({ showTips: { type: -1, text: systemError['2000'].text, className: systemError['2000'].key } }); + }); + } + } else if (_status === 3) { + loginData.status.result.map(function (item) { + if (_status === item.apiCode) { + var _newTips = {}; + if (item.type === -1) { + _newTips.showTips = { type: -1, text: item.text, className: item.key }; + } + _this2.setState(_newTips); + } + }, this); + } else { + if (CheckFun.isCheckLogUserName(this.state.userName)) { + this.setState({ userNameTips: CheckFun.isCheckLogUserName(this.state.userName) }); + } else if (CheckFun.isPwd(this.state.password)) { + this.setState({ passwordTips: CheckFun.isPwd(this.state.password) }); + } else if (CheckFun.isSmsCode(this.state.smsCode, loginData.smsCode.maxLength)) { + this.setState({ smsCodeTips: CheckFun.isSmsCode(this.state.smsCode, loginData.smsCode.maxLength) }); + } else if (CheckFun.isImgCode(this.state.imgCode, loginData.imgCode.maxLength)) { + this.setState({ imgCodeTips: CheckFun.isImgCode(this.state.imgCode, loginData.imgCode.maxLength) }); + } else { + setMaxDigits(130); + var _key2 = new RSAKeyPair('10001', '', window.GLOBAL.key); + Fetch.set(loginData.submit.action, { + method: 'POST', + cache: 'no-cache', + body: _JSON$stringify({ + userName: encryptedString(_key2, encodeURIComponent(this.state.userName)), + password: encryptedString(_key2, encodeURIComponent(this.state.password)), + smsCode: encryptedString(_key2, encodeURIComponent(this.state.smsCode)), + imgCode: encryptedString(_key2, encodeURIComponent(this.state.imgCode)), + isCheck: this.state.isCheckBox ? 1 : 0, + key: MD5(GLOBAL.userName + this.state.password + this.state.smsCode + this.state.imgCode + this.state.token + 'devPortal') + }) + }).then(function (r) { + if (!r.code && r.errorTips) { + _this2.setState({ showTips: { type: -1, text: r.errorTips } }); + } else if (r.code && r.resultCode) { + if (r.resultCode === '200') { + sessionStorage.removeItem('loginStatus'); + sessionStorage.setItem('devPortalUid', r.userId); + window.GLOBAL.userId = r.userId; + _this2.setState({ status: 0 }); + hashHistory.push('/workBench'); + } else { + var _newTips = { + userName: '', + userNameTips: '', + password: '', + passwordTips: '', + smsCode: '', + smsCodeTips: '', + imgCode: '', + imgCodeTips: '', + imgCodeIcon: loginData.imgCode.action + '?' + new Date().getTime() + }; + sessionStorage.setItem('loginStatus', r.status); + _newTips.status = r.status; + if (r.status === 2) { + loginData.status.result.map(function (item) { + if (r.status === item.apiCode) { + if (item.type === -1) { + _newTips.showTips = { type: -1, text: item.text, className: item.key }; + } + } + }, _this2); + } + loginData.smsSentBtn.result.map(function (item) { + if (r.resultCode === item.apiCode) { + if (item.type === 0) { + _newTips[item.key] = item.text; + } + } + }, _this2); + _this2.setState(_newTips); + } + } + })['catch'](function () { + _this2.setState({ showTips: { type: -1, text: systemError['2000'].text, className: systemError['2000'].key } }); + }); + } + } + }; + + Login.prototype.sentSms = function sentSms() { + var _this3 = this; + + var _userNameTips = CheckFun.isCheckLogUserName(this.state.userName); + if (_userNameTips) { + this.setState({ userNameTips: _userNameTips }); + } else { + Fetch.set(loginData.smsSentBtn.action, { + method: 'POST', + cache: 'no-cache', + body: _JSON$stringify({ + userName: this.state.userName + }) + }).then(function (r) { + if (!r.code && r.errorTips) { + _this3.setState({ showTips: { type: -1, text: r.errorTips } }); + } else if (r.code && r.resultCode) { + var _newTips = {}; + loginData.smsSentBtn.result.map(function (item) { + if (r.resultCode === item.apiCode) { + if (r.resultCode === '200') { + _newTips.isSentSms = true; + window.GLOBAL.timer.sendSms = window.setInterval(function () { + var _smsSentTime = _this3.state.smsSentTime; + _smsSentTime = _smsSentTime - 1; + if (_smsSentTime === 0) { + _this3.setState({ smsSentTime: loginData.smsSentBtn.times, isSentSms: false }); + clearInterval(window.GLOBAL.timer.sendSms); + delete window.GLOBAL.timer.sendSms; + } else { + _this3.setState({ smsSentTime: _smsSentTime }); + } + }, 1000); + } + if (item.type === 0) { + _newTips[item.key] = item.text; + } + } + }, _this3); + _this3.setState(_newTips); + } + })['catch'](function () { + _this3.setState({ showTips: { type: -1, text: systemError['2000'].text, className: systemError['2000'].key } }); + }); + } + }; + + Login.prototype.refreshImgCode = function refreshImgCode() { + this.setState({ imgCodeTips: '', imgCode: '', imgCodeIcon: loginData.imgCode.action + '?' + new Date().getTime() }); + }; + + Login.prototype.closeTips = function closeTips() { + this.setState({ showTips: { type: 0, text: '', className: '' } }); + }; + + Login.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'login' }, + React.createElement( + 'div', + { className: 'loginInputArea' }, + React.createElement( + 'div', + { className: 'title fl' }, + '\u767B\u5F55' + ), + React.createElement( + 'div', + { className: 'inputLine' }, + React.createElement('input', { + type: 'text', + className: 'inputBtn', + value: this.state.userName, + placeholder: loginData.userName.placeholder, + maxLength: loginData.userName.maxLength, + autoComplete: 'off', + onChange: this.handleChangeUserName, + onBlur: this.handleBlurUserName + }), + React.createElement( + 'span', + { className: 'errorTips' }, + this.state.userNameTips + ) + ), + React.createElement( + 'div', + { className: 'inputLine' }, + React.createElement('input', { + type: 'password', + className: 'inputBtn', + value: this.state.password, + placeholder: loginData.password.placeholder, + maxLength: loginData.password.maxLength, + autoComplete: 'off', + onChange: this.handleChangePassWord, + onBlur: this.handleBlurPassWord + }), + React.createElement( + 'span', + { className: 'errorTips' }, + this.state.passwordTips + ) + ), + this.state.status !== 0 ? React.createElement( + 'div', + { className: 'inputLine' }, + React.createElement('input', { + type: 'text', + className: 'inputBtn smsCode', + value: this.state.smsCode, + placeholder: loginData.smsCode.placeholder, + maxLength: loginData.smsCode.maxLength, + autoComplete: 'off', + onChange: this.handleChangeSmsCode, + onBlur: this.handleBlurSmsCode + }), + this.state.isSentSms ? React.createElement( + Button, + { className: 'smsCodeBtn fr', bsStyle: 'info', disabled: true }, + '\u91CD\u65B0\u83B7\u53D6\uFF08', + this.state.smsSentTime, + '\uFF09' + ) : React.createElement( + Button, + { className: 'smsCodeBtn fr', bsStyle: 'info', onClick: this.sentSms }, + loginData.smsSentBtn.text + ), + React.createElement( + 'span', + { className: 'errorTips' }, + this.state.smsCodeTips + ) + ) : '', + React.createElement( + 'div', + { className: 'inputLine' }, + React.createElement('input', { + type: 'text', + className: 'inputBtn imgCode', + value: this.state.imgCode, + maxLength: loginData.imgCode.maxLength, + placeholder: loginData.imgCode.placeholder, + autoComplete: 'off', + onChange: this.handleChangeImgCode, + onBlur: this.handleBlurImgCode + }), + React.createElement( + 'div', + { className: 'imgCodeBtn fr', onClick: this.refreshImgCode }, + React.createElement('img', { className: 'imgCodeShow', src: this.state.imgCodeIcon }), + React.createElement(Glyphicon, { glyph: 'repeat' }) + ), + React.createElement( + 'span', + { className: 'errorTips' }, + this.state.imgCodeTips + ) + ), + React.createElement( + 'div', + { className: 'inputLine' }, + React.createElement(UICheckBox, { s: this.state.isCheckBox ? true : false, onClick: this.checkUseInfo }), + React.createElement( + 'span', + null, + '\u8BB0\u4F4F\u5BC6\u7801' + ) + ), + React.createElement( + Button, + { className: 'submit', bsStyle: 'primary', onClick: this.submit }, + '\u767B\u5F55' + ) + ), + this.state.showTips.type === -1 ? React.createElement(SystemTips, { className: this.state.showTips.className, text: this.state.showTips.text, onCancel: this.closeTips, btns: [{ text: '确定', type: 0 }] }) : '', + this.props.children + ); + }; + + return Login; + }(React.Component); + + module.exports = Login; + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/manifest.js b/dataSeparation/dist/manifest.js new file mode 100644 index 0000000..4a5a5ae --- /dev/null +++ b/dataSeparation/dist/manifest.js @@ -0,0 +1,96 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // install a JSONP callback for chunk loading +/******/ var parentJsonpFunction = window["webpackJsonp"]; +/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) { +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0, callbacks = []; +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(installedChunks[chunkId]) +/******/ callbacks.push.apply(callbacks, installedChunks[chunkId]); +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ for(moduleId in moreModules) { +/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ modules[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules); +/******/ while(callbacks.length) +/******/ callbacks.shift().call(null, __webpack_require__); +/******/ if(moreModules[0]) { +/******/ installedModules[0] = 0; +/******/ return __webpack_require__(0); +/******/ } +/******/ }; +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // object to store loaded and loading chunks +/******/ // "0" means "already loaded" +/******/ // Array means "loading", array contains callbacks +/******/ var installedChunks = { +/******/ 10:0 +/******/ }; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = function requireEnsure(chunkId, callback) { +/******/ // "0" is the signal for "already loaded" +/******/ if(installedChunks[chunkId] === 0) +/******/ return callback.call(null, __webpack_require__); +/******/ +/******/ // an array means "currently loading". +/******/ if(installedChunks[chunkId] !== undefined) { +/******/ installedChunks[chunkId].push(callback); +/******/ } else { +/******/ // start chunk loading +/******/ installedChunks[chunkId] = [callback]; +/******/ var head = document.getElementsByTagName('head')[0]; +/******/ var script = document.createElement('script'); +/******/ script.type = 'text/javascript'; +/******/ script.charset = 'utf-8'; +/******/ script.async = true; +/******/ +/******/ script.src = __webpack_require__.p + "" + ({"0":"app","1":"login","2":"index","3":"about","4":"workBench","5":"myServer","6":"myApps","7":"componentUI","8":"config","9":"vendors"}[chunkId]||chunkId) + ".js"; +/******/ head.appendChild(script); +/******/ } +/******/ }; +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "dist/"; +/******/ }) +/************************************************************************/ +/******/ ([]); \ No newline at end of file diff --git a/dataSeparation/dist/myApps.js b/dataSeparation/dist/myApps.js new file mode 100644 index 0000000..e52be67 --- /dev/null +++ b/dataSeparation/dist/myApps.js @@ -0,0 +1,52 @@ +webpackJsonp([6,10],{ + +/***/ 554: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var myApps = function (_React$Component) { + _inherits(myApps, _React$Component); + + function myApps() { + _classCallCheck(this, myApps); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + myApps.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'myServer' }, + React.createElement( + 'div', + { className: 'whiteSpace' }, + React.createElement( + 'div', + { className: 'title' }, + '\u6211\u7684\u5E94\u7528' + ) + ), + this.props.children + ); + }; + + return myApps; + }(React.Component); /** + * Created by hqer on 2016/12/12. + */ + + + module.exports = myApps; + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/myServer.js b/dataSeparation/dist/myServer.js new file mode 100644 index 0000000..83ccccd --- /dev/null +++ b/dataSeparation/dist/myServer.js @@ -0,0 +1,52 @@ +webpackJsonp([5,10],{ + +/***/ 553: +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _classCallCheck = __webpack_require__(229)['default']; + + var _possibleConstructorReturn = __webpack_require__(230)['default']; + + var _inherits = __webpack_require__(298)['default']; + + var React = __webpack_require__(10); + + var MyServer = function (_React$Component) { + _inherits(MyServer, _React$Component); + + function MyServer() { + _classCallCheck(this, MyServer); + + return _possibleConstructorReturn(this, _React$Component.apply(this, arguments)); + } + + MyServer.prototype.render = function render() { + return React.createElement( + 'div', + { className: 'myServer' }, + React.createElement( + 'div', + { className: 'whiteSpace' }, + React.createElement( + 'div', + { className: 'title' }, + '\u6211\u7684\u80FD\u529B' + ) + ), + this.props.children + ); + }; + + return MyServer; + }(React.Component); /** + * Created by hqer on 2016/12/12. + */ + + + module.exports = MyServer; + +/***/ }) + +}); \ No newline at end of file diff --git a/dataSeparation/dist/vendors.js b/dataSeparation/dist/vendors.js new file mode 100644 index 0000000..d81f1f8 --- /dev/null +++ b/dataSeparation/dist/vendors.js @@ -0,0 +1,67303 @@ +webpackJsonp([9,10],[ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(558); + __webpack_require__(559); + __webpack_require__(561); + __webpack_require__(562); + __webpack_require__(563); + __webpack_require__(546); + __webpack_require__(888); + __webpack_require__(10); + __webpack_require__(167); + __webpack_require__(541); + __webpack_require__(362); + __webpack_require__(313); + __webpack_require__(332); + module.exports = __webpack_require__(368); + + +/***/ }), +/* 1 */, +/* 2 */, +/* 3 */, +/* 4 */, +/* 5 */, +/* 6 */, +/* 7 */, +/* 8 */, +/* 9 */, +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(11); + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule React + */ + + 'use strict'; + + var ReactDOM = __webpack_require__(12); + var ReactDOMServer = __webpack_require__(157); + var ReactIsomorphic = __webpack_require__(161); + + var assign = __webpack_require__(48); + var deprecated = __webpack_require__(166); + + // `version` will be added here by ReactIsomorphic. + var React = {}; + + assign(React, ReactIsomorphic); + + assign(React, { + // ReactDOM + findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode), + render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render), + unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode), + + // ReactDOMServer + renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString), + renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup) + }); + + React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM; + React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer; + + module.exports = React; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOM + */ + + /* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/ + + 'use strict'; + + var ReactCurrentOwner = __webpack_require__(14); + var ReactDOMTextComponent = __webpack_require__(15); + var ReactDefaultInjection = __webpack_require__(80); + var ReactInstanceHandles = __webpack_require__(54); + var ReactMount = __webpack_require__(37); + var ReactPerf = __webpack_require__(27); + var ReactReconciler = __webpack_require__(59); + var ReactUpdates = __webpack_require__(63); + var ReactVersion = __webpack_require__(155); + + var findDOMNode = __webpack_require__(100); + var renderSubtreeIntoContainer = __webpack_require__(156); + var warning = __webpack_require__(34); + + ReactDefaultInjection.inject(); + + var render = ReactPerf.measure('React', 'render', ReactMount.render); + + var React = { + findDOMNode: findDOMNode, + render: render, + unmountComponentAtNode: ReactMount.unmountComponentAtNode, + version: ReactVersion, + + /* eslint-disable camelcase */ + unstable_batchedUpdates: ReactUpdates.batchedUpdates, + unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer + }; + + // Inject the runtime into a devtools global hook regardless of browser. + // Allows for debugging when the hook is injected on the page. + /* eslint-enable camelcase */ + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') { + __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({ + CurrentOwner: ReactCurrentOwner, + InstanceHandles: ReactInstanceHandles, + Mount: ReactMount, + Reconciler: ReactReconciler, + TextComponent: ReactDOMTextComponent + }); + } + + if (process.env.NODE_ENV !== 'production') { + var ExecutionEnvironment = __webpack_require__(18); + if (ExecutionEnvironment.canUseDOM && window.top === window.self) { + + // First check if devtools is not installed + if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { + // If we're in Chrome or Firefox, provide a download link if not installed. + if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) { + console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools'); + } + } + + // If we're in IE8, check to see if we are in compatibility mode and provide + // information on preventing compatibility mode + var ieCompatibilityMode = document.documentMode && document.documentMode < 8; + + process.env.NODE_ENV !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '') : undefined; + + var expectedFeatures = [ + // shims + Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim, + + // shams + Object.create, Object.freeze]; + + for (var i = 0; i < expectedFeatures.length; i++) { + if (!expectedFeatures[i]) { + console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills'); + break; + } + } + } + } + + module.exports = React; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + + // shim for using process in browser + var process = module.exports = {}; + + // cached from whatever global is present so that test runners that stub it + // don't break things. But we need to wrap it in a try catch in case it is + // wrapped in strict mode code which doesn't define any globals. It's inside a + // function because try/catches deoptimize in certain engines. + + var cachedSetTimeout; + var cachedClearTimeout; + + function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); + } + function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); + } + (function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } + } ()) + function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + + } + function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + + } + var queue = []; + var draining = false; + var currentQueue; + var queueIndex = -1; + + function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } + } + + function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); + } + + process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } + }; + + // v8 likes predictible objects + function Item(fun, array) { + this.fun = fun; + this.array = array; + } + Item.prototype.run = function () { + this.fun.apply(null, this.array); + }; + process.title = 'browser'; + process.browser = true; + process.env = {}; + process.argv = []; + process.version = ''; // empty string to avoid regexp issues + process.versions = {}; + + function noop() {} + + process.on = noop; + process.addListener = noop; + process.once = noop; + process.off = noop; + process.removeListener = noop; + process.removeAllListeners = noop; + process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + + process.listeners = function (name) { return [] } + + process.binding = function (name) { + throw new Error('process.binding is not supported'); + }; + + process.cwd = function () { return '/' }; + process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); + }; + process.umask = function() { return 0; }; + + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactCurrentOwner + */ + + 'use strict'; + + /** + * Keeps track of the current owner. + * + * The current owner is the component who should own any components that are + * currently being constructed. + */ + var ReactCurrentOwner = { + + /** + * @internal + * @type {ReactComponent} + */ + current: null + + }; + + module.exports = ReactCurrentOwner; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMTextComponent + * @typechecks static-only + */ + + 'use strict'; + + var DOMChildrenOperations = __webpack_require__(16); + var DOMPropertyOperations = __webpack_require__(31); + var ReactComponentBrowserEnvironment = __webpack_require__(35); + var ReactMount = __webpack_require__(37); + + var assign = __webpack_require__(48); + var escapeTextContentForBrowser = __webpack_require__(30); + var setTextContent = __webpack_require__(29); + var validateDOMNesting = __webpack_require__(79); + + /** + * Text nodes violate a couple assumptions that React makes about components: + * + * - When mounting text into the DOM, adjacent text nodes are merged. + * - Text nodes cannot be assigned a React root ID. + * + * This component is used to wrap strings in elements so that they can undergo + * the same reconciliation that is applied to elements. + * + * TODO: Investigate representing React components in the DOM with text nodes. + * + * @class ReactDOMTextComponent + * @extends ReactComponent + * @internal + */ + var ReactDOMTextComponent = function (props) { + // This constructor and its argument is currently used by mocks. + }; + + assign(ReactDOMTextComponent.prototype, { + + /** + * @param {ReactText} text + * @internal + */ + construct: function (text) { + // TODO: This is really a ReactText (ReactNode), not a ReactElement + this._currentElement = text; + this._stringText = '' + text; + + // Properties + this._rootNodeID = null; + this._mountIndex = 0; + }, + + /** + * Creates the markup for this text node. This node is not intended to have + * any features besides containing text content. + * + * @param {string} rootID DOM ID of the root node. + * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction + * @return {string} Markup for this text node. + * @internal + */ + mountComponent: function (rootID, transaction, context) { + if (process.env.NODE_ENV !== 'production') { + if (context[validateDOMNesting.ancestorInfoContextKey]) { + validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]); + } + } + + this._rootNodeID = rootID; + if (transaction.useCreateElement) { + var ownerDocument = context[ReactMount.ownerDocumentContextKey]; + var el = ownerDocument.createElement('span'); + DOMPropertyOperations.setAttributeForID(el, rootID); + // Populate node cache + ReactMount.getID(el); + setTextContent(el, this._stringText); + return el; + } else { + var escapedText = escapeTextContentForBrowser(this._stringText); + + if (transaction.renderToStaticMarkup) { + // Normally we'd wrap this in a `span` for the reasons stated above, but + // since this is a situation where React won't take over (static pages), + // we can simply return the text as it is. + return escapedText; + } + + return '' + escapedText + ''; + } + }, + + /** + * Updates this component by updating the text content. + * + * @param {ReactText} nextText The next text content + * @param {ReactReconcileTransaction} transaction + * @internal + */ + receiveComponent: function (nextText, transaction) { + if (nextText !== this._currentElement) { + this._currentElement = nextText; + var nextStringText = '' + nextText; + if (nextStringText !== this._stringText) { + // TODO: Save this as pending props and use performUpdateIfNecessary + // and/or updateComponent to do the actual update for consistency with + // other component types? + this._stringText = nextStringText; + var node = ReactMount.getNode(this._rootNodeID); + DOMChildrenOperations.updateTextContent(node, nextStringText); + } + } + }, + + unmountComponent: function () { + ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID); + } + + }); + + module.exports = ReactDOMTextComponent; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMChildrenOperations + * @typechecks static-only + */ + + 'use strict'; + + var Danger = __webpack_require__(17); + var ReactMultiChildUpdateTypes = __webpack_require__(25); + var ReactPerf = __webpack_require__(27); + + var setInnerHTML = __webpack_require__(28); + var setTextContent = __webpack_require__(29); + var invariant = __webpack_require__(22); + + /** + * Inserts `childNode` as a child of `parentNode` at the `index`. + * + * @param {DOMElement} parentNode Parent node in which to insert. + * @param {DOMElement} childNode Child node to insert. + * @param {number} index Index at which to insert the child. + * @internal + */ + function insertChildAt(parentNode, childNode, index) { + // By exploiting arrays returning `undefined` for an undefined index, we can + // rely exclusively on `insertBefore(node, null)` instead of also using + // `appendChild(node)`. However, using `undefined` is not allowed by all + // browsers so we must replace it with `null`. + + // fix render order error in safari + // IE8 will throw error when index out of list size. + var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index); + + parentNode.insertBefore(childNode, beforeChild); + } + + /** + * Operations for updating with DOM children. + */ + var DOMChildrenOperations = { + + dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup, + + updateTextContent: setTextContent, + + /** + * Updates a component's children by processing a series of updates. The + * update configurations are each expected to have a `parentNode` property. + * + * @param {array} updates List of update configurations. + * @param {array} markupList List of markup strings. + * @internal + */ + processUpdates: function (updates, markupList) { + var update; + // Mapping from parent IDs to initial child orderings. + var initialChildren = null; + // List of children that will be moved or removed. + var updatedChildren = null; + + for (var i = 0; i < updates.length; i++) { + update = updates[i]; + if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) { + var updatedIndex = update.fromIndex; + var updatedChild = update.parentNode.childNodes[updatedIndex]; + var parentID = update.parentID; + + !updatedChild ? process.env.NODE_ENV !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a when using tables, ' + 'nesting tags like
,

, or , or using non-SVG elements ' + 'in an parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined; + + initialChildren = initialChildren || {}; + initialChildren[parentID] = initialChildren[parentID] || []; + initialChildren[parentID][updatedIndex] = updatedChild; + + updatedChildren = updatedChildren || []; + updatedChildren.push(updatedChild); + } + } + + var renderedMarkup; + // markupList is either a list of markup or just a list of elements + if (markupList.length && typeof markupList[0] === 'string') { + renderedMarkup = Danger.dangerouslyRenderMarkup(markupList); + } else { + renderedMarkup = markupList; + } + + // Remove updated children first so that `toIndex` is consistent. + if (updatedChildren) { + for (var j = 0; j < updatedChildren.length; j++) { + updatedChildren[j].parentNode.removeChild(updatedChildren[j]); + } + } + + for (var k = 0; k < updates.length; k++) { + update = updates[k]; + switch (update.type) { + case ReactMultiChildUpdateTypes.INSERT_MARKUP: + insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex); + break; + case ReactMultiChildUpdateTypes.MOVE_EXISTING: + insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex); + break; + case ReactMultiChildUpdateTypes.SET_MARKUP: + setInnerHTML(update.parentNode, update.content); + break; + case ReactMultiChildUpdateTypes.TEXT_CONTENT: + setTextContent(update.parentNode, update.content); + break; + case ReactMultiChildUpdateTypes.REMOVE_NODE: + // Already removed by the for-loop above. + break; + } + } + } + + }; + + ReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', { + updateTextContent: 'updateTextContent' + }); + + module.exports = DOMChildrenOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Danger + * @typechecks static-only + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(18); + + var createNodesFromMarkup = __webpack_require__(19); + var emptyFunction = __webpack_require__(24); + var getMarkupWrap = __webpack_require__(23); + var invariant = __webpack_require__(22); + + var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/; + var RESULT_INDEX_ATTR = 'data-danger-index'; + + /** + * Extracts the `nodeName` from a string of markup. + * + * NOTE: Extracting the `nodeName` does not require a regular expression match + * because we make assumptions about React-generated markup (i.e. there are no + * spaces surrounding the opening tag and there is at least one attribute). + * + * @param {string} markup String of markup. + * @return {string} Node name of the supplied markup. + * @see http://jsperf.com/extract-nodename + */ + function getNodeName(markup) { + return markup.substring(1, markup.indexOf(' ')); + } + + var Danger = { + + /** + * Renders markup into an array of nodes. The markup is expected to render + * into a list of root nodes. Also, the length of `resultList` and + * `markupList` should be the same. + * + * @param {array} markupList List of markup strings to render. + * @return {array} List of rendered nodes. + * @internal + */ + dangerouslyRenderMarkup: function (markupList) { + !ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined; + var nodeName; + var markupByNodeName = {}; + // Group markup by `nodeName` if a wrap is necessary, else by '*'. + for (var i = 0; i < markupList.length; i++) { + !markupList[i] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined; + nodeName = getNodeName(markupList[i]); + nodeName = getMarkupWrap(nodeName) ? nodeName : '*'; + markupByNodeName[nodeName] = markupByNodeName[nodeName] || []; + markupByNodeName[nodeName][i] = markupList[i]; + } + var resultList = []; + var resultListAssignmentCount = 0; + for (nodeName in markupByNodeName) { + if (!markupByNodeName.hasOwnProperty(nodeName)) { + continue; + } + var markupListByNodeName = markupByNodeName[nodeName]; + + // This for-in loop skips the holes of the sparse array. The order of + // iteration should follow the order of assignment, which happens to match + // numerical index order, but we don't rely on that. + var resultIndex; + for (resultIndex in markupListByNodeName) { + if (markupListByNodeName.hasOwnProperty(resultIndex)) { + var markup = markupListByNodeName[resultIndex]; + + // Push the requested markup with an additional RESULT_INDEX_ATTR + // attribute. If the markup does not start with a < character, it + // will be discarded below (with an appropriate console.error). + markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP, + // This index will be parsed back out below. + '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" '); + } + } + + // Render each group of markup with similar wrapping `nodeName`. + var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with ', '
']; + var trWrap = [3, '', '
']; + + var svgWrap = [1, '', '']; + + var markupWrap = { + '*': [1, '?

'], + + 'area': [1, '', ''], + 'col': [2, '', '
'], + 'legend': [1, '
', '
'], + 'param': [1, '', ''], + 'tr': [2, '', '
'], + + 'optgroup': selectWrap, + 'option': selectWrap, + + 'caption': tableWrap, + 'colgroup': tableWrap, + 'tbody': tableWrap, + 'tfoot': tableWrap, + 'thead': tableWrap, + + 'td': trWrap, + 'th': trWrap + }; + + // Initialize the SVG elements since we know they'll always need to be wrapped + // consistently. If they are created inside a
they will be initialized in + // the wrong namespace (and will not display). + var svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan']; + svgElements.forEach(function (nodeName) { + markupWrap[nodeName] = svgWrap; + shouldWrap[nodeName] = true; + }); + + /** + * Gets the markup wrap configuration for the supplied `nodeName`. + * + * NOTE: This lazily detects which wraps are necessary for the current browser. + * + * @param {string} nodeName Lowercase `nodeName`. + * @return {?array} Markup wrap configuration, if applicable. + */ + function getMarkupWrap(nodeName) { + !!!dummyNode ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined; + if (!markupWrap.hasOwnProperty(nodeName)) { + nodeName = '*'; + } + if (!shouldWrap.hasOwnProperty(nodeName)) { + if (nodeName === '*') { + dummyNode.innerHTML = ''; + } else { + dummyNode.innerHTML = '<' + nodeName + '>'; + } + shouldWrap[nodeName] = !dummyNode.firstChild; + } + return shouldWrap[nodeName] ? markupWrap[nodeName] : null; + } + + module.exports = getMarkupWrap; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 24 */ +/***/ (function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule emptyFunction + */ + + "use strict"; + + function makeEmptyFunction(arg) { + return function () { + return arg; + }; + } + + /** + * This function accepts and discards inputs; it has no side effects. This is + * primarily useful idiomatically for overridable function endpoints which + * always need to be callable, since JS lacks a null-call idiom ala Cocoa. + */ + function emptyFunction() {} + + emptyFunction.thatReturns = makeEmptyFunction; + emptyFunction.thatReturnsFalse = makeEmptyFunction(false); + emptyFunction.thatReturnsTrue = makeEmptyFunction(true); + emptyFunction.thatReturnsNull = makeEmptyFunction(null); + emptyFunction.thatReturnsThis = function () { + return this; + }; + emptyFunction.thatReturnsArgument = function (arg) { + return arg; + }; + + module.exports = emptyFunction; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMultiChildUpdateTypes + */ + + 'use strict'; + + var keyMirror = __webpack_require__(26); + + /** + * When a component's children are updated, a series of update configuration + * objects are created in order to batch and serialize the required changes. + * + * Enumerates all the possible types of update configurations. + * + * @internal + */ + var ReactMultiChildUpdateTypes = keyMirror({ + INSERT_MARKUP: null, + MOVE_EXISTING: null, + REMOVE_NODE: null, + SET_MARKUP: null, + TEXT_CONTENT: null + }); + + module.exports = ReactMultiChildUpdateTypes; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule keyMirror + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(22); + + /** + * Constructs an enumeration with keys equal to their value. + * + * For example: + * + * var COLORS = keyMirror({blue: null, red: null}); + * var myColor = COLORS.blue; + * var isColorValid = !!COLORS[myColor]; + * + * The last line could not be performed if the values of the generated enum were + * not equal to their keys. + * + * Input: {key1: val1, key2: val2} + * Output: {key1: key1, key2: key2} + * + * @param {object} obj + * @return {object} + */ + var keyMirror = function (obj) { + var ret = {}; + var key; + !(obj instanceof Object && !Array.isArray(obj)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined; + for (key in obj) { + if (!obj.hasOwnProperty(key)) { + continue; + } + ret[key] = key; + } + return ret; + }; + + module.exports = keyMirror; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactPerf + * @typechecks static-only + */ + + 'use strict'; + + /** + * ReactPerf is a general AOP system designed to measure performance. This + * module only has the hooks: see ReactDefaultPerf for the analysis tool. + */ + var ReactPerf = { + /** + * Boolean to enable/disable measurement. Set to false by default to prevent + * accidental logging and perf loss. + */ + enableMeasure: false, + + /** + * Holds onto the measure function in use. By default, don't measure + * anything, but we'll override this if we inject a measure function. + */ + storedMeasure: _noMeasure, + + /** + * @param {object} object + * @param {string} objectName + * @param {object} methodNames + */ + measureMethods: function (object, objectName, methodNames) { + if (process.env.NODE_ENV !== 'production') { + for (var key in methodNames) { + if (!methodNames.hasOwnProperty(key)) { + continue; + } + object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]); + } + } + }, + + /** + * Use this to wrap methods you want to measure. Zero overhead in production. + * + * @param {string} objName + * @param {string} fnName + * @param {function} func + * @return {function} + */ + measure: function (objName, fnName, func) { + if (process.env.NODE_ENV !== 'production') { + var measuredFunc = null; + var wrapper = function () { + if (ReactPerf.enableMeasure) { + if (!measuredFunc) { + measuredFunc = ReactPerf.storedMeasure(objName, fnName, func); + } + return measuredFunc.apply(this, arguments); + } + return func.apply(this, arguments); + }; + wrapper.displayName = objName + '_' + fnName; + return wrapper; + } + return func; + }, + + injection: { + /** + * @param {function} measure + */ + injectMeasure: function (measure) { + ReactPerf.storedMeasure = measure; + } + } + }; + + /** + * Simply passes through the measured function, without measuring it. + * + * @param {string} objName + * @param {string} fnName + * @param {function} func + * @return {function} + */ + function _noMeasure(objName, fnName, func) { + return func; + } + + module.exports = ReactPerf; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule setInnerHTML + */ + + /* globals MSApp */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(18); + + var WHITESPACE_TEST = /^[ \r\n\t\f]/; + var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/; + + /** + * Set the innerHTML property of a node, ensuring that whitespace is preserved + * even in IE8. + * + * @param {DOMElement} node + * @param {string} html + * @internal + */ + var setInnerHTML = function (node, html) { + node.innerHTML = html; + }; + + // Win8 apps: Allow all html to be inserted + if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) { + setInnerHTML = function (node, html) { + MSApp.execUnsafeLocalFunction(function () { + node.innerHTML = html; + }); + }; + } + + if (ExecutionEnvironment.canUseDOM) { + // IE8: When updating a just created node with innerHTML only leading + // whitespace is removed. When updating an existing node with innerHTML + // whitespace in root TextNodes is also collapsed. + // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html + + // Feature detection; only IE8 is known to behave improperly like this. + var testElement = document.createElement('div'); + testElement.innerHTML = ' '; + if (testElement.innerHTML === '') { + setInnerHTML = function (node, html) { + // Magic theory: IE8 supposedly differentiates between added and updated + // nodes when processing innerHTML, innerHTML on updated nodes suffers + // from worse whitespace behavior. Re-adding a node like this triggers + // the initial and more favorable whitespace behavior. + // TODO: What to do on a detached node? + if (node.parentNode) { + node.parentNode.replaceChild(node, node); + } + + // We also implement a workaround for non-visible tags disappearing into + // thin air on IE8, this only happens if there is no visible text + // in-front of the non-visible tags. Piggyback on the whitespace fix + // and simply check if any non-visible tags appear in the source. + if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) { + // Recover leading whitespace by temporarily prepending any character. + // \uFEFF has the potential advantage of being zero-width/invisible. + // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode + // in hopes that this is preserved even if "\uFEFF" is transformed to + // the actual Unicode character (by Babel, for example). + // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216 + node.innerHTML = String.fromCharCode(0xFEFF) + html; + + // deleteData leaves an empty `TextNode` which offsets the index of all + // children. Definitely want to avoid this. + var textNode = node.firstChild; + if (textNode.data.length === 1) { + node.removeChild(textNode); + } else { + textNode.deleteData(0, 1); + } + } else { + node.innerHTML = html; + } + }; + } + } + + module.exports = setInnerHTML; + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule setTextContent + */ + + 'use strict'; + + var ExecutionEnvironment = __webpack_require__(18); + var escapeTextContentForBrowser = __webpack_require__(30); + var setInnerHTML = __webpack_require__(28); + + /** + * Set the textContent property of a node, ensuring that whitespace is preserved + * even in IE8. innerText is a poor substitute for textContent and, among many + * issues, inserts
instead of the literal newline chars. innerHTML behaves + * as it should. + * + * @param {DOMElement} node + * @param {string} text + * @internal + */ + var setTextContent = function (node, text) { + node.textContent = text; + }; + + if (ExecutionEnvironment.canUseDOM) { + if (!('textContent' in document.documentElement)) { + setTextContent = function (node, text) { + setInnerHTML(node, escapeTextContentForBrowser(text)); + }; + } + } + + module.exports = setTextContent; + +/***/ }), +/* 30 */ +/***/ (function(module, exports) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule escapeTextContentForBrowser + */ + + 'use strict'; + + var ESCAPE_LOOKUP = { + '&': '&', + '>': '>', + '<': '<', + '"': '"', + '\'': ''' + }; + + var ESCAPE_REGEX = /[&><"']/g; + + function escaper(match) { + return ESCAPE_LOOKUP[match]; + } + + /** + * Escapes text to prevent scripting attacks. + * + * @param {*} text Text value to escape. + * @return {string} An escaped string. + */ + function escapeTextContentForBrowser(text) { + return ('' + text).replace(ESCAPE_REGEX, escaper); + } + + module.exports = escapeTextContentForBrowser; + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMPropertyOperations + * @typechecks static-only + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(32); + var ReactPerf = __webpack_require__(27); + + var quoteAttributeValueForBrowser = __webpack_require__(33); + var warning = __webpack_require__(34); + + // Simplified subset + var VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\w\.\-]*$/; + var illegalAttributeNameCache = {}; + var validatedAttributeNameCache = {}; + + function isAttributeNameSafe(attributeName) { + if (validatedAttributeNameCache.hasOwnProperty(attributeName)) { + return true; + } + if (illegalAttributeNameCache.hasOwnProperty(attributeName)) { + return false; + } + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { + validatedAttributeNameCache[attributeName] = true; + return true; + } + illegalAttributeNameCache[attributeName] = true; + process.env.NODE_ENV !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined; + return false; + } + + function shouldIgnoreValue(propertyInfo, value) { + return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false; + } + + if (process.env.NODE_ENV !== 'production') { + var reactProps = { + children: true, + dangerouslySetInnerHTML: true, + key: true, + ref: true + }; + var warnedProperties = {}; + + var warnUnknownProperty = function (name) { + if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) { + return; + } + + warnedProperties[name] = true; + var lowerCasedName = name.toLowerCase(); + + // data-* attributes should be lowercase; suggest the lowercase version + var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null; + + // For now, only warn when we have a suggested correction. This prevents + // logging too much when using transferPropsTo. + process.env.NODE_ENV !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined; + }; + } + + /** + * Operations for dealing with DOM properties. + */ + var DOMPropertyOperations = { + + /** + * Creates markup for the ID property. + * + * @param {string} id Unescaped ID. + * @return {string} Markup string. + */ + createMarkupForID: function (id) { + return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id); + }, + + setAttributeForID: function (node, id) { + node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id); + }, + + /** + * Creates markup for a property. + * + * @param {string} name + * @param {*} value + * @return {?string} Markup string, or null if the property was invalid. + */ + createMarkupForProperty: function (name, value) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + if (shouldIgnoreValue(propertyInfo, value)) { + return ''; + } + var attributeName = propertyInfo.attributeName; + if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + return attributeName + '=""'; + } + return attributeName + '=' + quoteAttributeValueForBrowser(value); + } else if (DOMProperty.isCustomAttribute(name)) { + if (value == null) { + return ''; + } + return name + '=' + quoteAttributeValueForBrowser(value); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + return null; + }, + + /** + * Creates markup for a custom property. + * + * @param {string} name + * @param {*} value + * @return {string} Markup string, or empty string if the property was invalid. + */ + createMarkupForCustomAttribute: function (name, value) { + if (!isAttributeNameSafe(name) || value == null) { + return ''; + } + return name + '=' + quoteAttributeValueForBrowser(value); + }, + + /** + * Sets the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + * @param {*} value + */ + setValueForProperty: function (node, name, value) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, value); + } else if (shouldIgnoreValue(propertyInfo, value)) { + this.deleteValueForProperty(node, name); + } else if (propertyInfo.mustUseAttribute) { + var attributeName = propertyInfo.attributeName; + var namespace = propertyInfo.attributeNamespace; + // `setAttribute` with objects becomes only `[object]` in IE8/9, + // ('' + value) makes it output the correct toString()-value. + if (namespace) { + node.setAttributeNS(namespace, attributeName, '' + value); + } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) { + node.setAttribute(attributeName, ''); + } else { + node.setAttribute(attributeName, '' + value); + } + } else { + var propName = propertyInfo.propertyName; + // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the + // property type before comparing; only `value` does and is string. + if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) { + // Contrary to `setAttribute`, object properties are properly + // `toString`ed by IE8/9. + node[propName] = value; + } + } + } else if (DOMProperty.isCustomAttribute(name)) { + DOMPropertyOperations.setValueForAttribute(node, name, value); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + }, + + setValueForAttribute: function (node, name, value) { + if (!isAttributeNameSafe(name)) { + return; + } + if (value == null) { + node.removeAttribute(name); + } else { + node.setAttribute(name, '' + value); + } + }, + + /** + * Deletes the value for a property on a node. + * + * @param {DOMElement} node + * @param {string} name + */ + deleteValueForProperty: function (node, name) { + var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null; + if (propertyInfo) { + var mutationMethod = propertyInfo.mutationMethod; + if (mutationMethod) { + mutationMethod(node, undefined); + } else if (propertyInfo.mustUseAttribute) { + node.removeAttribute(propertyInfo.attributeName); + } else { + var propName = propertyInfo.propertyName; + var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName); + if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) { + node[propName] = defaultValue; + } + } + } else if (DOMProperty.isCustomAttribute(name)) { + node.removeAttribute(name); + } else if (process.env.NODE_ENV !== 'production') { + warnUnknownProperty(name); + } + } + + }; + + ReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', { + setValueForProperty: 'setValueForProperty', + setValueForAttribute: 'setValueForAttribute', + deleteValueForProperty: 'deleteValueForProperty' + }); + + module.exports = DOMPropertyOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule DOMProperty + * @typechecks static-only + */ + + 'use strict'; + + var invariant = __webpack_require__(22); + + function checkMask(value, bitmask) { + return (value & bitmask) === bitmask; + } + + var DOMPropertyInjection = { + /** + * Mapping from normalized, camelcased property names to a configuration that + * specifies how the associated DOM property should be accessed or rendered. + */ + MUST_USE_ATTRIBUTE: 0x1, + MUST_USE_PROPERTY: 0x2, + HAS_SIDE_EFFECTS: 0x4, + HAS_BOOLEAN_VALUE: 0x8, + HAS_NUMERIC_VALUE: 0x10, + HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10, + HAS_OVERLOADED_BOOLEAN_VALUE: 0x40, + + /** + * Inject some specialized knowledge about the DOM. This takes a config object + * with the following properties: + * + * isCustomAttribute: function that given an attribute name will return true + * if it can be inserted into the DOM verbatim. Useful for data-* or aria-* + * attributes where it's impossible to enumerate all of the possible + * attribute names, + * + * Properties: object mapping DOM property name to one of the + * DOMPropertyInjection constants or null. If your attribute isn't in here, + * it won't get written to the DOM. + * + * DOMAttributeNames: object mapping React attribute name to the DOM + * attribute name. Attribute names not specified use the **lowercase** + * normalized name. + * + * DOMAttributeNamespaces: object mapping React attribute name to the DOM + * attribute namespace URL. (Attribute names not specified use no namespace.) + * + * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties. + * Property names not specified use the normalized name. + * + * DOMMutationMethods: Properties that require special mutation methods. If + * `value` is undefined, the mutation method should unset the property. + * + * @param {object} domPropertyConfig the config as described above. + */ + injectDOMPropertyConfig: function (domPropertyConfig) { + var Injection = DOMPropertyInjection; + var Properties = domPropertyConfig.Properties || {}; + var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {}; + var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {}; + var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {}; + var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {}; + + if (domPropertyConfig.isCustomAttribute) { + DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute); + } + + for (var propName in Properties) { + !!DOMProperty.properties.hasOwnProperty(propName) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined; + + var lowerCased = propName.toLowerCase(); + var propConfig = Properties[propName]; + + var propertyInfo = { + attributeName: lowerCased, + attributeNamespace: null, + propertyName: propName, + mutationMethod: null, + + mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE), + mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY), + hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS), + hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE), + hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE), + hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE), + hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE) + }; + + !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined; + !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined; + !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined; + + if (process.env.NODE_ENV !== 'production') { + DOMProperty.getPossibleStandardName[lowerCased] = propName; + } + + if (DOMAttributeNames.hasOwnProperty(propName)) { + var attributeName = DOMAttributeNames[propName]; + propertyInfo.attributeName = attributeName; + if (process.env.NODE_ENV !== 'production') { + DOMProperty.getPossibleStandardName[attributeName] = propName; + } + } + + if (DOMAttributeNamespaces.hasOwnProperty(propName)) { + propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName]; + } + + if (DOMPropertyNames.hasOwnProperty(propName)) { + propertyInfo.propertyName = DOMPropertyNames[propName]; + } + + if (DOMMutationMethods.hasOwnProperty(propName)) { + propertyInfo.mutationMethod = DOMMutationMethods[propName]; + } + + DOMProperty.properties[propName] = propertyInfo; + } + } + }; + var defaultValueCache = {}; + + /** + * DOMProperty exports lookup objects that can be used like functions: + * + * > DOMProperty.isValid['id'] + * true + * > DOMProperty.isValid['foobar'] + * undefined + * + * Although this may be confusing, it performs better in general. + * + * @see http://jsperf.com/key-exists + * @see http://jsperf.com/key-missing + */ + var DOMProperty = { + + ID_ATTRIBUTE_NAME: 'data-reactid', + + /** + * Map from property "standard name" to an object with info about how to set + * the property in the DOM. Each object contains: + * + * attributeName: + * Used when rendering markup or with `*Attribute()`. + * attributeNamespace + * propertyName: + * Used on DOM node instances. (This includes properties that mutate due to + * external factors.) + * mutationMethod: + * If non-null, used instead of the property or `setAttribute()` after + * initial render. + * mustUseAttribute: + * Whether the property must be accessed and mutated using `*Attribute()`. + * (This includes anything that fails ` in `.) + * mustUseProperty: + * Whether the property must be accessed and mutated as an object property. + * hasSideEffects: + * Whether or not setting a value causes side effects such as triggering + * resources to be loaded or text selection changes. If true, we read from + * the DOM before updating to ensure that the value is only set if it has + * changed. + * hasBooleanValue: + * Whether the property should be removed when set to a falsey value. + * hasNumericValue: + * Whether the property must be numeric or parse as a numeric and should be + * removed when set to a falsey value. + * hasPositiveNumericValue: + * Whether the property must be positive numeric or parse as a positive + * numeric and should be removed when set to a falsey value. + * hasOverloadedBooleanValue: + * Whether the property can be used as a flag as well as with a value. + * Removed when strictly equal to false; present without a value when + * strictly equal to true; present with a value otherwise. + */ + properties: {}, + + /** + * Mapping from lowercase property names to the properly cased version, used + * to warn in the case of missing properties. Available only in __DEV__. + * @type {Object} + */ + getPossibleStandardName: process.env.NODE_ENV !== 'production' ? {} : null, + + /** + * All of the isCustomAttribute() functions that have been injected. + */ + _isCustomAttributeFunctions: [], + + /** + * Checks whether a property name is a custom attribute. + * @method + */ + isCustomAttribute: function (attributeName) { + for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) { + var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i]; + if (isCustomAttributeFn(attributeName)) { + return true; + } + } + return false; + }, + + /** + * Returns the default property value for a DOM property (i.e., not an + * attribute). Most default values are '' or false, but not all. Worse yet, + * some (in particular, `type`) vary depending on the type of element. + * + * TODO: Is it better to grab all the possible properties when creating an + * element to avoid having to create the same element twice? + */ + getDefaultValueForProperty: function (nodeName, prop) { + var nodeDefaults = defaultValueCache[nodeName]; + var testElement; + if (!nodeDefaults) { + defaultValueCache[nodeName] = nodeDefaults = {}; + } + if (!(prop in nodeDefaults)) { + testElement = document.createElement(nodeName); + nodeDefaults[prop] = testElement[prop]; + } + return nodeDefaults[prop]; + }, + + injection: DOMPropertyInjection + }; + + module.exports = DOMProperty; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule quoteAttributeValueForBrowser + */ + + 'use strict'; + + var escapeTextContentForBrowser = __webpack_require__(30); + + /** + * Escapes attribute value to prevent scripting attacks. + * + * @param {*} value Value to escape. + * @return {string} An escaped string. + */ + function quoteAttributeValueForBrowser(value) { + return '"' + escapeTextContentForBrowser(value) + '"'; + } + + module.exports = quoteAttributeValueForBrowser; + +/***/ }), +/* 34 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule warning + */ + + 'use strict'; + + var emptyFunction = __webpack_require__(24); + + /** + * Similar to invariant but only logs a warning if the condition is not met. + * This can be used to log issues in development environments in critical + * paths. Removing the logging code for production environments will keep the + * same logic and follow the same code paths. + */ + + var warning = emptyFunction; + + if (process.env.NODE_ENV !== 'production') { + warning = function (condition, format) { + for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + args[_key - 2] = arguments[_key]; + } + + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + } + }; + } + + module.exports = warning; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + /** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactComponentBrowserEnvironment + */ + + 'use strict'; + + var ReactDOMIDOperations = __webpack_require__(36); + var ReactMount = __webpack_require__(37); + + /** + * Abstracts away all functionality of the reconciler that requires knowledge of + * the browser context. TODO: These callers should be refactored to avoid the + * need for this injection. + */ + var ReactComponentBrowserEnvironment = { + + processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates, + + replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID, + + /** + * If a particular environment requires that some resources be cleaned up, + * specify this in the injected Mixin. In the DOM, we would likely want to + * purge any cached node ID lookups. + * + * @private + */ + unmountIDFromEnvironment: function (rootNodeID) { + ReactMount.purgeID(rootNodeID); + } + + }; + + module.exports = ReactComponentBrowserEnvironment; + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactDOMIDOperations + * @typechecks static-only + */ + + 'use strict'; + + var DOMChildrenOperations = __webpack_require__(16); + var DOMPropertyOperations = __webpack_require__(31); + var ReactMount = __webpack_require__(37); + var ReactPerf = __webpack_require__(27); + + var invariant = __webpack_require__(22); + + /** + * Errors for properties that should not be updated with `updatePropertyByID()`. + * + * @type {object} + * @private + */ + var INVALID_PROPERTY_ERRORS = { + dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.', + style: '`style` must be set using `updateStylesByID()`.' + }; + + /** + * Operations used to process updates to DOM nodes. + */ + var ReactDOMIDOperations = { + + /** + * Updates a DOM node with new property values. This should only be used to + * update DOM properties in `DOMProperty`. + * + * @param {string} id ID of the node to update. + * @param {string} name A valid property name, see `DOMProperty`. + * @param {*} value New value of the property. + * @internal + */ + updatePropertyByID: function (id, name, value) { + var node = ReactMount.getNode(id); + !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined; + + // If we're updating to null or undefined, we should remove the property + // from the DOM node instead of inadvertantly setting to a string. This + // brings us in line with the same behavior we have on initial render. + if (value != null) { + DOMPropertyOperations.setValueForProperty(node, name, value); + } else { + DOMPropertyOperations.deleteValueForProperty(node, name); + } + }, + + /** + * Replaces a DOM node that exists in the document with markup. + * + * @param {string} id ID of child to be replaced. + * @param {string} markup Dangerous markup to inject in place of child. + * @internal + * @see {Danger.dangerouslyReplaceNodeWithMarkup} + */ + dangerouslyReplaceNodeWithMarkupByID: function (id, markup) { + var node = ReactMount.getNode(id); + DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup); + }, + + /** + * Updates a component's children by processing a series of updates. + * + * @param {array} updates List of update configurations. + * @param {array} markup List of markup strings. + * @internal + */ + dangerouslyProcessChildrenUpdates: function (updates, markup) { + for (var i = 0; i < updates.length; i++) { + updates[i].parentNode = ReactMount.getNode(updates[i].parentID); + } + DOMChildrenOperations.processUpdates(updates, markup); + } + }; + + ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', { + dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID', + dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates' + }); + + module.exports = ReactDOMIDOperations; + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule ReactMount + */ + + 'use strict'; + + var DOMProperty = __webpack_require__(32); + var ReactBrowserEventEmitter = __webpack_require__(38); + var ReactCurrentOwner = __webpack_require__(14); + var ReactDOMFeatureFlags = __webpack_require__(50); + var ReactElement = __webpack_require__(51); + var ReactEmptyComponentRegistry = __webpack_require__(53); + var ReactInstanceHandles = __webpack_require__(54); + var ReactInstanceMap = __webpack_require__(56); + var ReactMarkupChecksum = __webpack_require__(57); + var ReactPerf = __webpack_require__(27); + var ReactReconciler = __webpack_require__(59); + var ReactUpdateQueue = __webpack_require__(62); + var ReactUpdates = __webpack_require__(63); + + var assign = __webpack_require__(48); + var emptyObject = __webpack_require__(67); + var containsNode = __webpack_require__(68); + var instantiateReactComponent = __webpack_require__(71); + var invariant = __webpack_require__(22); + var setInnerHTML = __webpack_require__(28); + var shouldUpdateReactComponent = __webpack_require__(76); + var validateDOMNesting = __webpack_require__(79); + var warning = __webpack_require__(34); + + var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME; + var nodeCache = {}; + + var ELEMENT_NODE_TYPE = 1; + var DOC_NODE_TYPE = 9; + var DOCUMENT_FRAGMENT_NODE_TYPE = 11; + + var ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2); + + /** Mapping from reactRootID to React component instance. */ + var instancesByReactRootID = {}; + + /** Mapping from reactRootID to `container` nodes. */ + var containersByReactRootID = {}; + + if (process.env.NODE_ENV !== 'production') { + /** __DEV__-only mapping from reactRootID to root elements. */ + var rootElementsByReactRootID = {}; + } + + // Used to store breadth-first search state in findComponentRoot. + var findComponentRootReusableArray = []; + + /** + * Finds the index of the first character + * that's not common between the two given strings. + * + * @return {number} the index of the character where the strings diverge + */ + function firstDifferenceIndex(string1, string2) { + var minLen = Math.min(string1.length, string2.length); + for (var i = 0; i < minLen; i++) { + if (string1.charAt(i) !== string2.charAt(i)) { + return i; + } + } + return string1.length === string2.length ? -1 : minLen; + } + + /** + * @param {DOMElement|DOMDocument} container DOM element that may contain + * a React component + * @return {?*} DOM element that may have the reactRoot ID, or null. + */ + function getReactRootElementInContainer(container) { + if (!container) { + return null; + } + + if (container.nodeType === DOC_NODE_TYPE) { + return container.documentElement; + } else { + return container.firstChild; + } + } + + /** + * @param {DOMElement} container DOM element that may contain a React component. + * @return {?string} A "reactRoot" ID, if a React component is rendered. + */ + function getReactRootID(container) { + var rootElement = getReactRootElementInContainer(container); + return rootElement && ReactMount.getID(rootElement); + } + + /** + * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form + * element can return its control whose name or ID equals ATTR_NAME. All + * DOM nodes support `getAttributeNode` but this can also get called on + * other objects so just return '' if we're given something other than a + * DOM node (such as window). + * + * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node. + * @return {string} ID of the supplied `domNode`. + */ + function getID(node) { + var id = internalGetID(node); + if (id) { + if (nodeCache.hasOwnProperty(id)) { + var cached = nodeCache[id]; + if (cached !== node) { + !!isValid(cached, id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined; + + nodeCache[id] = node; + } + } else { + nodeCache[id] = node; + } + } + + return id; + } + + function internalGetID(node) { + // If node is something like a window, document, or text node, none of + // which support attributes or a .getAttribute method, gracefully return + // the empty string, as if the attribute were missing. + return node && node.getAttribute && node.getAttribute(ATTR_NAME) || ''; + } + + /** + * Sets the React-specific ID of the given node. + * + * @param {DOMElement} node The DOM node whose ID will be set. + * @param {string} id The value of the ID attribute. + */ + function setID(node, id) { + var oldID = internalGetID(node); + if (oldID !== id) { + delete nodeCache[oldID]; + } + node.setAttribute(ATTR_NAME, id); + nodeCache[id] = node; + } + + /** + * Finds the node with the supplied React-generated DOM ID. + * + * @param {string} id A React-generated DOM ID. + * @return {DOMElement} DOM node with the suppled `id`. + * @internal + */ + function getNode(id) { + if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { + nodeCache[id] = ReactMount.findReactNodeByID(id); + } + return nodeCache[id]; + } + + /** + * Finds the node with the supplied public React instance. + * + * @param {*} instance A public React instance. + * @return {?DOMElement} DOM node with the suppled `id`. + * @internal + */ + function getNodeFromInstance(instance) { + var id = ReactInstanceMap.get(instance)._rootNodeID; + if (ReactEmptyComponentRegistry.isNullComponentID(id)) { + return null; + } + if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) { + nodeCache[id] = ReactMount.findReactNodeByID(id); + } + return nodeCache[id]; + } + + /** + * A node is "valid" if it is contained by a currently mounted container. + * + * This means that the node does not have to be contained by a document in + * order to be considered valid. + * + * @param {?DOMElement} node The candidate DOM node. + * @param {string} id The expected ID of the node. + * @return {boolean} Whether the node is contained by a mounted container. + */ + function isValid(node, id) { + if (node) { + !(internalGetID(node) === id) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined; + + var container = ReactMount.findReactContainerForID(id); + if (container && containsNode(container, node)) { + return true; + } + } + + return false; + } + + /** + * Causes the cache to forget about one React-specific ID. + * + * @param {string} id The ID to forget. + */ + function purgeID(id) { + delete nodeCache[id]; + } + + var deepestNodeSoFar = null; + function findDeepestCachedAncestorImpl(ancestorID) { + var ancestor = nodeCache[ancestorID]; + if (ancestor && isValid(ancestor, ancestorID)) { + deepestNodeSoFar = ancestor; + } else { + // This node isn't populated in the cache, so presumably none of its + // descendants are. Break out of the loop. + return false; + } + } + + /** + * Return the deepest cached node whose ID is a prefix of `targetID`. + */ + function findDeepestCachedAncestor(targetID) { + deepestNodeSoFar = null; + ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl); + + var foundNode = deepestNodeSoFar; + deepestNodeSoFar = null; + return foundNode; + } + + /** + * Mounts this component and inserts it into the DOM. + * + * @param {ReactComponent} componentInstance The instance to mount. + * @param {string} rootID DOM ID of the root node. + * @param {DOMElement} container DOM element to mount into. + * @param {ReactReconcileTransaction} transaction + * @param {boolean} shouldReuseMarkup If true, do not insert markup + */ + function mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) { + if (ReactDOMFeatureFlags.useCreateElement) { + context = assign({}, context); + if (container.nodeType === DOC_NODE_TYPE) { + context[ownerDocumentContextKey] = container; + } else { + context[ownerDocumentContextKey] = container.ownerDocument; + } + } + if (process.env.NODE_ENV !== 'production') { + if (context === emptyObject) { + context = {}; + } + var tag = container.nodeName.toLowerCase(); + context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null); + } + var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context); + componentInstance._renderedComponent._topLevelWrapper = componentInstance; + ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction); + } + + /** + * Batched mount. + * + * @param {ReactComponent} componentInstance The instance to mount. + * @param {string} rootID DOM ID of the root node. + * @param {DOMElement} container DOM element to mount into. + * @param {boolean} shouldReuseMarkup If true, do not insert markup + */ + function batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) { + var transaction = ReactUpdates.ReactReconcileTransaction.getPooled( + /* forceHTML */shouldReuseMarkup); + transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context); + ReactUpdates.ReactReconcileTransaction.release(transaction); + } + + /** + * Unmounts a component and removes it from the DOM. + * + * @param {ReactComponent} instance React component instance. + * @param {DOMElement} container DOM element to unmount from. + * @final + * @internal + * @see {ReactMount.unmountComponentAtNode} + */ + function unmountComponentFromNode(instance, container) { + ReactReconciler.unmountComponent(instance); + + if (container.nodeType === DOC_NODE_TYPE) { + container = container.documentElement; + } + + // http://jsperf.com/emptying-a-node + while (container.lastChild) { + container.removeChild(container.lastChild); + } + } + + /** + * True if the supplied DOM node has a direct React-rendered child that is + * not a React root element. Useful for warning in `render`, + * `unmountComponentAtNode`, etc. + * + * @param {?DOMElement} node The candidate DOM node. + * @return {boolean} True if the DOM element contains a direct child that was + * rendered by React but is not a root element. + * @internal + */ + function hasNonRootReactChild(node) { + var reactRootID = getReactRootID(node); + return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false; + } + + /** + * Returns the first (deepest) ancestor of a node which is rendered by this copy + * of React. + */ + function findFirstReactDOMImpl(node) { + // This node might be from another React instance, so we make sure not to + // examine the node cache here + for (; node && node.parentNode !== node; node = node.parentNode) { + if (node.nodeType !== 1) { + // Not a DOMElement, therefore not a React component + continue; + } + var nodeID = internalGetID(node); + if (!nodeID) { + continue; + } + var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID); + + // If containersByReactRootID contains the container we find by crawling up + // the tree, we know that this instance of React rendered the node. + // nb. isValid's strategy (with containsNode) does not work because render + // trees may be nested and we don't want a false positive in that case. + var current = node; + var lastID; + do { + lastID = internalGetID(current); + current = current.parentNode; + if (current == null) { + // The passed-in node has been detached from the container it was + // originally rendered into. + return null; + } + } while (lastID !== reactRootID); + + if (current === containersByReactRootID[reactRootID]) { + return node; + } + } + return null; + } + + /** + * Temporary (?) hack so that we can store all top-level pending updates on + * composites instead of having to worry about different types of components + * here. + */ + var TopLevelWrapper = function () {}; + TopLevelWrapper.prototype.isReactComponent = {}; + if (process.env.NODE_ENV !== 'production') { + TopLevelWrapper.displayName = 'TopLevelWrapper'; + } + TopLevelWrapper.prototype.render = function () { + // this.props is actually a ReactElement + return this.props; + }; + + /** + * Mounting is the process of initializing a React component by creating its + * representative DOM elements and inserting them into a supplied `container`. + * Any prior content inside `container` is destroyed in the process. + * + * ReactMount.render( + * component, + * document.getElementById('container') + * ); + * + *
<-- Supplied `container`. + *
<-- Rendered reactRoot of React + * // ... component. + *
+ *
+ * + * Inside of `container`, the first element rendered is the "reactRoot". + */ + var ReactMount = { + + TopLevelWrapper: TopLevelWrapper, + + /** Exposed for debugging purposes **/ + _instancesByReactRootID: instancesByReactRootID, + + /** + * This is a hook provided to support rendering React components while + * ensuring that the apparent scroll position of its `container` does not + * change. + * + * @param {DOMElement} container The `container` being rendered into. + * @param {function} renderCallback This must be called once to do the render. + */ + scrollMonitor: function (container, renderCallback) { + renderCallback(); + }, + + /** + * Take a component that's already mounted into the DOM and replace its props + * @param {ReactComponent} prevComponent component instance already in the DOM + * @param {ReactElement} nextElement component instance to render + * @param {DOMElement} container container to render into + * @param {?function} callback function triggered on completion + */ + _updateRootComponent: function (prevComponent, nextElement, container, callback) { + ReactMount.scrollMonitor(container, function () { + ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement); + if (callback) { + ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback); + } + }); + + if (process.env.NODE_ENV !== 'production') { + // Record the root element in case it later gets transplanted. + rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container); + } + + return prevComponent; + }, + + /** + * Register a component into the instance map and starts scroll value + * monitoring + * @param {ReactComponent} nextComponent component instance to render + * @param {DOMElement} container container to render into + * @return {string} reactRoot ID prefix + */ + _registerComponent: function (nextComponent, container) { + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined; + + ReactBrowserEventEmitter.ensureScrollValueMonitoring(); + + var reactRootID = ReactMount.registerContainer(container); + instancesByReactRootID[reactRootID] = nextComponent; + return reactRootID; + }, + + /** + * Render a new component into the DOM. + * @param {ReactElement} nextElement element to render + * @param {DOMElement} container container to render into + * @param {boolean} shouldReuseMarkup if we should skip the markup insertion + * @return {ReactComponent} nextComponent + */ + _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) { + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined; + + var componentInstance = instantiateReactComponent(nextElement, null); + var reactRootID = ReactMount._registerComponent(componentInstance, container); + + // The initial render is synchronous but any updates that happen during + // rendering, in componentWillMount or componentDidMount, will be batched + // according to the current batching strategy. + + ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context); + + if (process.env.NODE_ENV !== 'production') { + // Record the root element in case it later gets transplanted. + rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container); + } + + return componentInstance; + }, + + /** + * Renders a React component into the DOM in the supplied `container`. + * + * If the React component was previously rendered into `container`, this will + * perform an update on it and only mutate the DOM as necessary to reflect the + * latest React component. + * + * @param {ReactComponent} parentComponent The conceptual parent of this render tree. + * @param {ReactElement} nextElement Component element to render. + * @param {DOMElement} container DOM element to render into. + * @param {?function} callback function triggered on completion + * @return {ReactComponent} Component instance rendered in `container`. + */ + renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) { + !(parentComponent != null && parentComponent._reactInternalInstance != null) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined; + return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback); + }, + + _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) { + !ReactElement.isValidElement(nextElement) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' : + // Check if it quacks like an element + nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined; + + process.env.NODE_ENV !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined; + + var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement); + + var prevComponent = instancesByReactRootID[getReactRootID(container)]; + + if (prevComponent) { + var prevWrappedElement = prevComponent._currentElement; + var prevElement = prevWrappedElement.props; + if (shouldUpdateReactComponent(prevElement, nextElement)) { + var publicInst = prevComponent._renderedComponent.getPublicInstance(); + var updatedCallback = callback && function () { + callback.call(publicInst); + }; + ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback); + return publicInst; + } else { + ReactMount.unmountComponentAtNode(container); + } + } + + var reactRootElement = getReactRootElementInContainer(container); + var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement); + var containerHasNonRootReactChild = hasNonRootReactChild(container); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined; + + if (!containerHasReactMarkup || reactRootElement.nextSibling) { + var rootElementSibling = reactRootElement; + while (rootElementSibling) { + if (internalGetID(rootElementSibling)) { + process.env.NODE_ENV !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined; + break; + } + rootElementSibling = rootElementSibling.nextSibling; + } + } + } + + var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild; + var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance(); + if (callback) { + callback.call(component); + } + return component; + }, + + /** + * Renders a React component into the DOM in the supplied `container`. + * + * If the React component was previously rendered into `container`, this will + * perform an update on it and only mutate the DOM as necessary to reflect the + * latest React component. + * + * @param {ReactElement} nextElement Component element to render. + * @param {DOMElement} container DOM element to render into. + * @param {?function} callback function triggered on completion + * @return {ReactComponent} Component instance rendered in `container`. + */ + render: function (nextElement, container, callback) { + return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback); + }, + + /** + * Registers a container node into which React components will be rendered. + * This also creates the "reactRoot" ID that will be assigned to the element + * rendered within. + * + * @param {DOMElement} container DOM element to register as a container. + * @return {string} The "reactRoot" ID of elements rendered within. + */ + registerContainer: function (container) { + var reactRootID = getReactRootID(container); + if (reactRootID) { + // If one exists, make sure it is a valid "reactRoot" ID. + reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID); + } + if (!reactRootID) { + // No valid "reactRoot" ID found, create one. + reactRootID = ReactInstanceHandles.createReactRootID(); + } + containersByReactRootID[reactRootID] = container; + return reactRootID; + }, + + /** + * Unmounts and destroys the React component rendered in the `container`. + * + * @param {DOMElement} container DOM element containing a React component. + * @return {boolean} True if a component was found in and unmounted from + * `container` + */ + unmountComponentAtNode: function (container) { + // Various parts of our code (such as ReactCompositeComponent's + // _renderValidatedComponent) assume that calls to render aren't nested; + // verify that that's the case. (Strictly speaking, unmounting won't cause a + // render but we still don't expect to be in a render call here.) + process.env.NODE_ENV !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined; + + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined; + + var reactRootID = getReactRootID(container); + var component = instancesByReactRootID[reactRootID]; + if (!component) { + // Check if the node being unmounted was rendered by React, but isn't a + // root node. + var containerHasNonRootReactChild = hasNonRootReactChild(container); + + // Check if the container itself is a React root node. + var containerID = internalGetID(container); + var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID); + + if (process.env.NODE_ENV !== 'production') { + process.env.NODE_ENV !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined; + } + + return false; + } + ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container); + delete instancesByReactRootID[reactRootID]; + delete containersByReactRootID[reactRootID]; + if (process.env.NODE_ENV !== 'production') { + delete rootElementsByReactRootID[reactRootID]; + } + return true; + }, + + /** + * Finds the container DOM element that contains React component to which the + * supplied DOM `id` belongs. + * + * @param {string} id The ID of an element rendered by a React component. + * @return {?DOMElement} DOM element that contains the `id`. + */ + findReactContainerForID: function (id) { + var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id); + var container = containersByReactRootID[reactRootID]; + + if (process.env.NODE_ENV !== 'production') { + var rootElement = rootElementsByReactRootID[reactRootID]; + if (rootElement && rootElement.parentNode !== container) { + process.env.NODE_ENV !== 'production' ? warning( + // Call internalGetID here because getID calls isValid which calls + // findReactContainerForID (this function). + internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined; + var containerChild = container.firstChild; + if (containerChild && reactRootID === internalGetID(containerChild)) { + // If the container has a new child with the same ID as the old + // root element, then rootElementsByReactRootID[reactRootID] is + // just stale and needs to be updated. The case that deserves a + // warning is when the container is empty. + rootElementsByReactRootID[reactRootID] = containerChild; + } else { + process.env.NODE_ENV !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined; + } + } + } + + return container; + }, + + /** + * Finds an element rendered by React with the supplied ID. + * + * @param {string} id ID of a DOM node in the React component. + * @return {DOMElement} Root DOM node of the React component. + */ + findReactNodeByID: function (id) { + var reactRoot = ReactMount.findReactContainerForID(id); + return ReactMount.findComponentRoot(reactRoot, id); + }, + + /** + * Traverses up the ancestors of the supplied node to find a node that is a + * DOM representation of a React component rendered by this copy of React. + * + * @param {*} node + * @return {?DOMEventTarget} + * @internal + */ + getFirstReactDOM: function (node) { + return findFirstReactDOMImpl(node); + }, + + /** + * Finds a node with the supplied `targetID` inside of the supplied + * `ancestorNode`. Exploits the ID naming scheme to perform the search + * quickly. + * + * @param {DOMEventTarget} ancestorNode Search from this root. + * @pararm {string} targetID ID of the DOM representation of the component. + * @return {DOMEventTarget} DOM node with the supplied `targetID`. + * @internal + */ + findComponentRoot: function (ancestorNode, targetID) { + var firstChildren = findComponentRootReusableArray; + var childIndex = 0; + + var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode; + + if (process.env.NODE_ENV !== 'production') { + // This will throw on the next line; give an early warning + process.env.NODE_ENV !== 'production' ? warning(deepestAncestor != null, 'React can\'t find the root component node for data-reactid value ' + '`%s`. If you\'re seeing this message, it probably means that ' + 'you\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined; + } + + firstChildren[0] = deepestAncestor.firstChild; + firstChildren.length = 1; + + while (childIndex < firstChildren.length) { + var child = firstChildren[childIndex++]; + var targetChild; + + while (child) { + var childID = ReactMount.getID(child); + if (childID) { + // Even if we find the node we're looking for, we finish looping + // through its siblings to ensure they're cached so that we don't have + // to revisit this node again. Otherwise, we make n^2 calls to getID + // when visiting the many children of a single node in order. + + if (targetID === childID) { + targetChild = child; + } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) { + // If we find a child whose ID is an ancestor of the given ID, + // then we can be sure that we only want to search the subtree + // rooted at this child, so we can throw out the rest of the + // search state. + firstChildren.length = childIndex = 0; + firstChildren.push(child.firstChild); + } + } else { + // If this child had no ID, then there's a chance that it was + // injected automatically by the browser, as when a `` + // element sprouts an extra `` child as a side effect of + // `.innerHTML` parsing. Optimistically continue down this + // branch, but not before examining the other siblings. + firstChildren.push(child.firstChild); + } + + child = child.nextSibling; + } + + if (targetChild) { + // Emptying firstChildren/findComponentRootReusableArray is + // not necessary for correctness, but it helps the GC reclaim + // any nodes that were left at the end of the search. + firstChildren.length = 0; + + return targetChild; + } + } + + firstChildren.length = 0; + + true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a when using tables, nesting tags ' + 'like ,

, or , or using non-SVG elements in an ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined; + }, + + _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) { + !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined; + + if (shouldReuseMarkup) { + var rootElement = getReactRootElementInContainer(container); + if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) { + return; + } else { + var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME); + + var rootMarkup = rootElement.outerHTML; + rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum); + + var normalizedMarkup = markup; + if (process.env.NODE_ENV !== 'production') { + // because rootMarkup is retrieved from the DOM, various normalizations + // will have occurred which will not be present in `markup`. Here, + // insert markup into a

or