From 56f3b6e3766a0b5074fb36d5f803ec857a6a20a9 Mon Sep 17 00:00:00 2001 From: zwjamnsss <zwjamnsss@gmail.com> Date: Fri, 11 Aug 2017 21:10:54 +0800 Subject: [PATCH 01/14] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E9=9B=86?= =?UTF-8?q?=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interface/InterfaceCol/InterfaceColContent.js | 15 +++++++++++---- .../Interface/InterfaceCol/InterfaceColMenu.js | 14 ++++++++++---- client/containers/Project/Project.js | 5 ++--- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js b/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js index 1b92a5c6..b94829d2 100644 --- a/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js +++ b/client/containers/Project/Interface/InterfaceCol/InterfaceColContent.js @@ -1,4 +1,11 @@ -import React from 'react' -export default () => { - return <h1>hello colContent</h1> -} \ No newline at end of file +import React, { Component } from 'react' + +export default class InterfaceColContent extends Component { + constructor(props) { + super(props) + } + + render() { + return <h1>hello colContent</h1> + } +} diff --git a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js index 1b92a5c6..3b103640 100644 --- a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js +++ b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js @@ -1,4 +1,10 @@ -import React from 'react' -export default () => { - return <h1>hello colContent</h1> -} \ No newline at end of file +import React, { Component } from 'react' +export default class InterfaceColMenu extends Component { + constructor(props) { + super(props) + } + + render() { + return <h1>hello colContent</h1> + } +} diff --git a/client/containers/Project/Project.js b/client/containers/Project/Project.js index 1dd5ded8..afd0962f 100644 --- a/client/containers/Project/Project.js +++ b/client/containers/Project/Project.js @@ -37,11 +37,10 @@ export default class Project extends Component { render () { const { match } = this.props; - console.log('project') return ( <div> <Subnav - default={'接口'} + default={'动态'} data={[{ name: '接口', path: `/project/${match.params.id}/interface` @@ -53,7 +52,7 @@ export default class Project extends Component { path: `/project/${match.params.id}/activity` }]}/> <Switch> - <Redirect exact from ="/project/:id" to={`/project/${match.params.id}/activity`}/> + <Redirect exact from="/project/:id" to={`/project/${match.params.id}/activity`}/> <Route path="/project/:id/activity" component={Activity} /> <Route path="/project/:id/interface" component={Interface} /> <Route path="/project/:id/setting" component={Setting} /> From cad46617b80aa75dd23cb4bb39f671af034ee8b3 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 13:44:49 +0800 Subject: [PATCH 02/14] feat: add interface list and edit module --- client/containers/Login/Login.js | 2 +- .../InterfaceList/AddInterfaceForm.js | 96 +++++ .../Project/Interface/InterfaceList/Edit.js | 32 +- .../InterfaceList/InterfaceEditForm.js | 334 ++++++++++++++++++ .../Interface/InterfaceList/InterfaceMenu.js | 150 +++++++- .../Project/Interface/InterfaceList/View.js | 27 +- .../Interface/InterfaceList/mockEditor.js | 135 +++++++ .../Project/Interface/interface.scss | 11 +- client/reducer/modules/interface.js | 85 ++++- server/controllers/interface.js | 42 +-- server/models/interface.js | 7 +- static/dev.html | 4 +- 12 files changed, 853 insertions(+), 72 deletions(-) create mode 100644 client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js create mode 100644 client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js create mode 100644 client/containers/Project/Interface/InterfaceList/mockEditor.js diff --git a/client/containers/Login/Login.js b/client/containers/Login/Login.js index 312fc4d9..e208c350 100644 --- a/client/containers/Login/Login.js +++ b/client/containers/Login/Login.js @@ -54,7 +54,7 @@ class Login extends Component { } componentDidMount() { - window.QSSO.attach('qsso-login','/api/user/login_by_token') + if(window.QSSO) window.QSSO.attach('qsso-login','/api/user/login_by_token') } diff --git a/client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js b/client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js new file mode 100644 index 00000000..c2799977 --- /dev/null +++ b/client/containers/Project/Interface/InterfaceList/AddInterfaceForm.js @@ -0,0 +1,96 @@ +import React,{Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Input, Select, Button } from 'antd'; +const FormItem = Form.Item; +const Option = Select.Option; +function hasErrors(fieldsError) { + return Object.keys(fieldsError).some(field => fieldsError[field]); +} +class AddInterfaceForm extends Component { + static propTypes = { + form: PropTypes.object, + onSubmit: PropTypes.func, + onCancel: PropTypes.func + } + handleSubmit = (e) => { + e.preventDefault(); + this.props.form.validateFields((err, values) => { + if (!err) { + this.props.onSubmit(values) + } + }); + } + + + + render() { + const { getFieldDecorator, getFieldsError } = this.props.form; + const prefixSelector = getFieldDecorator('method', { + initialValue: 'GET' + })( + <Select style={{ width: 75 }}> + <Option value="GET">GET</Option> + <Option value="POST">POST</Option> + <Option value="PUT">PUT</Option> + <Option value="DELETE">DELETE</Option> + </Select> + ); + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 6 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 14 } + } + }; + + + return ( + + <Form onSubmit={this.handleSubmit}> + <FormItem + {...formItemLayout} + label="接口名称" + > + {getFieldDecorator('title', { + rules: [{ + required: true, message: '清输入接口名称!' + }] + })( + <Input placeholder="接口名称" /> + )} + </FormItem> + + <FormItem + {...formItemLayout} + label="接口路径" + > + {getFieldDecorator('path', { + rules: [{ + required: true, message: '清输入接口路径!' + }] + })( + <Input addonBefore={prefixSelector} placeholder="/path" /> + )} + </FormItem> + <br /> + <FormItem wrapperCol={{ span: 24, offset: 8 }} > + <Button onClick={this.props.onCancel} style={{marginRight: "10px"}} >取消</Button> + <Button + type="primary" + htmlType="submit" + disabled={hasErrors(getFieldsError())} + > + 提交 + </Button> + </FormItem> + + </Form> + + ); + } +} + +export default Form.create()(AddInterfaceForm); diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js index 79fbcc4d..c677b8bf 100644 --- a/client/containers/Project/Interface/InterfaceList/Edit.js +++ b/client/containers/Project/Interface/InterfaceList/Edit.js @@ -1,5 +1,29 @@ -import React from 'react' +import React,{Component} from 'react' +import PropTypes from 'prop-types' +import { connect } from 'react-redux'; +import InterfaceEditForm from './InterfaceEditForm.js' -export default () => { - return <h1>接口Edit</h1> -} \ No newline at end of file + +@connect( + state => { + return { + curdata: state.inter.curdata + } + } +) + +class InterfaceEdit extends Component{ + static propTypes = { + curdata: PropTypes.object + } + + render(){ + + return <div> + <h3>Edit</h3> + <InterfaceEditForm /> + </div> + } +} + +export default InterfaceEdit; \ No newline at end of file diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js new file mode 100644 index 00000000..46819cb3 --- /dev/null +++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js @@ -0,0 +1,334 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' + +import { + Form, Select, Input, + Button, Row, Col, Radio, Icon +} from 'antd'; +const FormItem = Form.Item; +const Option = Select.Option; +const RadioGroup = Radio.Group; +const dataTpl = { + query: { name: "", required: "1", desc: "" }, + req_headers: { name: "", required: "1", desc: "" } +} + +const mockEditor = require('./mockEditor.js'); + + +class InterfaceEditForm extends Component { + static propTypes = { + form: PropTypes.object + } + + constructor(props) { + super(props) + this.state = { + title: 'title', + path: 'path', + method: 'get', + query: [{ + name: 'name', + desc: 'desc', + required: "1" + }], + req_body_type: 'form', + req_headers: [{ + name: 'Content-Type', + value: 'application/urlencode', required: "1" + }], + req_body_form: [{ + name: 'id', + type: 'text', + required: '1' + }] + } + } + + handleSubmit = (e) => { + e.preventDefault(); + this.props.form.validateFields((err, values) => { + if (!err) { + console.log('Received values of form: ', values); + console.log(this.props.form.getFieldValue('keys')) + } + }); + } + + componentDidMount() { + mockEditor({ + container: 'req_body_json', + data: { + name: "@name" + }, + onChange: function (d) { + console.log(this) + console.log(d) + } + }) + } + + addParams = (name) => { + let newValue = {} + newValue[name] = [].concat(this.state[name], dataTpl[name]) + this.setState(newValue) + } + + delParams = (key, name) => { + + let curValue = this.props.form.getFieldValue(name); + let newValue = {} + newValue[name] = curValue.filter((val, index) => { + return index !== key; + }) + this.props.form.setFieldsValue(newValue) + this.setState(newValue) + } + + render() { + const { getFieldDecorator } = this.props.form; + const formItemLayout = { + labelCol: { span: 6 }, + wrapperCol: { span: 14 } + }; + const prefixSelector = getFieldDecorator('method', { + initialValue: 'GET' + })( + <Select style={{ width: 75 }}> + <Option value="GET">GET</Option> + <Option value="POST">POST</Option> + <Option value="PUT">PUT</Option> + <Option value="DELETE">DELETE</Option> + </Select> + ); + + const queryTpl = (data, index) => { + return <Row key={index}> + <Col span="4"> + {getFieldDecorator('query[' + index + '].name', { + initialValue: data.name + })( + <Input placeholder="参数名称" /> + )} + </Col> + <Col span="4" > + {getFieldDecorator('query[' + index + '].required', { + initialValue: data.required + })( + <Select> + <Option value="1">必需</Option> + <Option value="0">非必需</Option> + </Select> + )} + </Col> + <Col span="8" > + {getFieldDecorator('query[' + index + '].desc', { + initialValue: data.desc + })( + <Input placeholder="备注" /> + )} + </Col> + <Col span="2" > + <Icon type="delete" onClick={() => this.delParams(index, 'query')} /> + </Col> + + </Row> + } + + const headerTpl = (data, index) => { + return <Row key={index}> + <Col span="4"> + {getFieldDecorator('req_headers[' + index + '].name', { + initialValue: data.name + })( + <Input placeholder="参数名称" /> + )} + </Col> + <Col span="6" > + {getFieldDecorator('req_headers[' + index + '].value', { + initialValue: data.value + })( + <Input placeholder="参数值" /> + )} + </Col> + <Col span="8" > + {getFieldDecorator('req_headers[' + index + '].desc', { + initialValue: data.desc + })( + <Input placeholder="备注" /> + )} + </Col> + <Col span="2" > + <Icon type="delete" onClick={() => this.delParams(index, 'req_headers')} /> + </Col> + + </Row> + } + + const requestBodyTpl = (data, index) => { + return <Row key={index}> + <Col span="8"> + {getFieldDecorator('req_body_form[' + index + '].name')( + <Input placeholder="name" /> + )} + </Col> + <Col span="4" > + {getFieldDecorator('req_body_form[' + index + '].type', { + initialValue: 'text' + })( + <Select> + <Option value="text">文本</Option> + <Option value="file">文件</Option> + </Select> + )} + </Col> + <Col span="8"> + {getFieldDecorator('req_body_form[' + index + '].desc')( + <Input placeholder="备注" /> + )} + </Col> + <Col span="2" > + <Icon type="delete" onClick={() => this.delParams(index, 'req_body_form')} /> + </Col> + </Row> + } + + const QueryList = this.state.query.map((item, index) => { + return queryTpl(item, index) + }) + + const headerList = this.state.req_headers.map((item, index) => { + return headerTpl(item, index) + }) + + const requestBodyList = this.state.req_body_form.map((item, index) => { + return requestBodyTpl(item, index) + }) + + return ( + <Form onSubmit={this.handleSubmit}> + <FormItem + {...formItemLayout} + label="接口名称" + > + {getFieldDecorator('title', { + rules: [{ + required: true, message: '清输入接口名称!' + }] + })( + <Input placeholder="接口名称" /> + )} + </FormItem> + + <FormItem + {...formItemLayout} + label="接口路径" + > + {getFieldDecorator('path', { + rules: [{ + required: true, message: '清输入接口路径!' + }] + })( + <Input addonBefore={prefixSelector} placeholder="/path" /> + )} + </FormItem> + + <FormItem + {...formItemLayout} + label="状态" + > + {getFieldDecorator('status', { initialValue: 'undone' })( + <Select> + <Option value="done">已完成</Option> + <Option value="undone">未完成</Option> + </Select> + )} + </FormItem> + + <FormItem + {...formItemLayout} + label="接口描述" + > + {getFieldDecorator('desc')( + <Input.TextArea placeholder="接口描述" /> + )} + </FormItem> + + <FormItem + {...formItemLayout} + label="Query" + > + <Button onClick={() => this.addParams('query')}>添加Query参数</Button> + </FormItem> + + <Row> + <Col span={18} offset={6}> + {QueryList} + </Col> + + </Row> + + + <FormItem + {...formItemLayout} + label="请求Headers" + > + <Button onClick={() => this.addParams('req_headers')}>添加Header</Button> + </FormItem> + + <Row> + <Col span={18} offset={6}> + {headerList} + </Col> + + </Row> + + <FormItem style={{ marginBottom: "5px" }} + {...formItemLayout} + label="请求Body" + > + {getFieldDecorator('req_body_type', { + initialValue: this.state.req_body_type + })( + <RadioGroup> + <Radio value="form">form</Radio> + <Radio value="json">json</Radio> + <Radio value="file">file</Radio> + </RadioGroup> + )} + + </FormItem> + + <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'form' ? 'block' : 'none' }}> + <Col span={14} offset={6} style={{ minHeight: "300px", padding: "15px" }}> + <Row> + <Col span="24"> + + <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button> + + </Col> + + </Row> + {requestBodyList} + </Col> + + </Row> + + <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}> + <Col span={14} offset={6} id="req_body_json" style={{ minHeight: "300px", padding: "15px" }}> + + </Col> + + + </Row> + <FormItem + wrapperCol={{ span: 12, offset: 6 }} + > + <Button type="primary" htmlType="submit">Submit</Button> + </FormItem> + </Form> + ); + } +} + +export default Form.create()(InterfaceEditForm); \ No newline at end of file diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js b/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js index 911ef4a2..d1926bee 100644 --- a/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js +++ b/client/containers/Project/Interface/InterfaceList/InterfaceMenu.js @@ -1,54 +1,174 @@ import React, { Component } from 'react' import { connect } from 'react-redux'; import PropTypes from 'prop-types' -import { fetchInterfaceList } from '../../../../reducer/modules/interface.js'; -import { Menu, Button, Input, Icon, Tag } from 'antd'; +import { fetchInterfaceList, fetchInterfaceData, changeInterfaceId, addInterfaceData, deleteInterfaceData } from '../../../../reducer/modules/interface.js'; +import { Menu, Input, Icon, Tag, Modal, message } from 'antd'; +import AddInterfaceForm from './AddInterfaceForm'; +import axios from 'axios' + +const confirm = Modal.confirm; + + @connect( state => { return { list: state.inter.list, - curProject: state.project.curProject + curProject: state.project.curProject, + interfaceId: state.inter.interfaceId } }, { - fetchInterfaceList + fetchInterfaceList, + fetchInterfaceData, + changeInterfaceId, + addInterfaceData, + deleteInterfaceData } ) class InterfaceMenu extends Component { static propTypes = { projectId: PropTypes.string, + interfaceId: PropTypes.number, list: PropTypes.array, fetchInterfaceList: PropTypes.func, - curProject: PropTypes.object - } + curProject: PropTypes.object, + fetchInterfaceData: PropTypes.func, + changeInterfaceId: PropTypes.func, + addInterfaceData: PropTypes.func, + deleteInterfaceData: PropTypes.func + } + + showModal = () => { + this.setState({ + visible: true + }); + } + + handleCancel = () => { + this.setState({ + visible: false + }); + } constructor(props) { super(props) + this.state = { + curKey: null, + visible: false, + delIcon: null, + filter: '' + } } - componentWillMount(){ - this.props.fetchInterfaceList(this.props.projectId) + async handleRequest() { + let result = await this.props.fetchInterfaceList(this.props.projectId); + let interfaces = result.payload.data; + if (interfaces.length > 0) { + this.props.changeInterfaceId(interfaces[0]._id) + await this.props.fetchInterfaceData(interfaces[0]._id) + } + } + + componentWillMount() { + this.handleRequest() + } + + onSelect = (item) => { + this.props.changeInterfaceId(parseInt(item.key, 10)) + this.props.fetchInterfaceData(parseInt(item.key, 10)) + } + + handleAddInterface = (data) => { + data.project_id = this.props.projectId; + axios.post('/api/interface/add', data).then((res) => { + if (res.data.errcode !== 0) { + return message.error(res.data.errmsg); + } + message.success('接口添加成功') + this.props.addInterfaceData(res.data.data) + this.setState({ + visible: false + }); + + }) + } + + showConfirm = (id)=> { + let that = this; + confirm({ + title: '您确认删除此接口', + content: '温馨提示:接口删除后,无法恢复', + onOk() { + that.props.deleteInterfaceData(id) + }, + onCancel() { } + }); + } + + delInterface = (id) => { + + this.props.deleteInterfaceData(id) + } + + enterItem = (e) => { + this.setState({ delIcon: e.key }) + } + + leaveItem = () => { + this.setState({ delIcon: null }) + } + + onFilter = (e) => { + this.setState({ + filter: e.target.value + }) } render() { const items = []; - this.props.list.forEach((item, index)=> { + this.props.list.forEach((item) => { + let color, filter = this.state.filter; + if(filter && item.title.indexOf(filter) === -1 && item.path.indexOf(filter) === -1){ + return null; + } + switch (item.method) { + case 'GET': color = "green"; break; + case 'POST': color = "blue"; break; + case 'PUT': color = "yellow"; break; + case 'DELETE': color = 'red'; break; + default: color = "green"; + } + items.push( - <Menu.Item key={index}><Button className="btn-http" type="primary">{item.method} </Button>{item.title}</Menu.Item> + <Menu.Item onMouseEnter={this.enterItem} onMouseLeave={this.leaveItem} key={"" + item._id}> + <Tag className="btn-http" color={color}>{item.method} </Tag> + {item.title} + <Icon type="delete" onClick={()=> {this.showConfirm(item._id)}} style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }} className="interface-delete-icon" /> + </Menu.Item> ) - } ) + }) + return <div> <div className="interface-filter"> - <Input placeholder="Filter by name" style={{ width: "70%" }} /> - <Tag color="#108ee9" style={{ marginLeft: "15px" }} ><Icon type="plus" /></Tag> + <Input onChange={this.onFilter} value={this.state.filter} placeholder="Filter by name" style={{ width: "70%" }} /> + <Tag onClick={this.showModal} color="#108ee9" style={{ marginLeft: "15px" }} ><Icon type="plus" /></Tag> + <Modal + title="添加接口" + visible={this.state.visible} + onOk={this.handleOk} + onCancel={this.handleCancel} + footer={null} + > + <AddInterfaceForm onCancel={this.handleCancel} onSubmit={this.handleAddInterface} /> + </Modal> </div> - <Menu className="interface-list"> + <Menu selectedKeys={[this.props.interfaceId + ""]} className="interface-list" onSelect={this.onSelect}> {items} </Menu> </div> } -} +} export default InterfaceMenu \ No newline at end of file diff --git a/client/containers/Project/Interface/InterfaceList/View.js b/client/containers/Project/Interface/InterfaceList/View.js index 4fe8a1eb..8aecbd92 100644 --- a/client/containers/Project/Interface/InterfaceList/View.js +++ b/client/containers/Project/Interface/InterfaceList/View.js @@ -1,6 +1,27 @@ -import React from 'react' +import React,{Component} from 'react' +import PropTypes from 'prop-types' +import { connect } from 'react-redux'; -export default () => { - return <h1>接口预览</h1> +@connect( + state => { + return { + curdata: state.inter.curdata + } + } +) + +class InterfaceView extends Component{ + static propTypes = { + curdata: PropTypes.object + } + + render(){ + console.log(this.props.curdata) + let view = JSON.stringify(this.props.curdata, null, " "); + return <pre> + {view} + </pre> + } } +export default InterfaceView; \ No newline at end of file diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js new file mode 100644 index 00000000..fd0bc4b9 --- /dev/null +++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js @@ -0,0 +1,135 @@ +var ace = require('brace'), + Mock = require('mockjs') +require('brace/mode/json'); +require('brace/theme/xcode'); +require("brace/ext/language_tools.js"); +require("brace/snippets/json.js") + +var langTools = ace.acequire("ace/ext/language_tools"), + editor, + mockEditor, + rhymeCompleter, + wordList = [ + { name: '字符串', mock: '@string' }, + { name: '自然数', mock: '@natural' }, + { name: '浮点数', mock: '@float' }, + { name: '字符', mock: '@character' }, + { name: '布尔', mock: '@boolean' }, + { name: 'url', mock: '@url' }, + { name: '域名', mock: '@domain' }, + { name: 'ip地址', mock: '@ip' }, + { name: 'id', mock: '@id' }, + { name: 'guid', mock: '@guid' }, + { name: '当前时间', mock: '@now' }, + { name: '日期', mock: '@date' }, + { name: '时间', mock: '@time' }, + { name: '日期时间', mock: '@datetime' }, + { name: '图片连接', mock: '@image' }, + { name: '图片data', mock: "@imageData" }, + { name: '颜色', mock: '@color' }, + { name: '颜色hex', mock: '@hex' }, + { name: '颜色rgba', mock: '@rgba' }, + { name: '颜色rgb', mock: '@rgb' }, + { name: '颜色hsl', mock: '@hsl' }, + { name: '整数', mock: '@integer' }, + { name: '浮点数', mock: '@float' }, + { name: 'email', mock: '@email' }, + { name: '大段文本', mock: '@paragraph' }, + { name: '句子', mock: '@sentence' }, + { name: '单词', mock: '@word' }, + { name: '大段中文文本', mock: '@cparagraph' }, + { name: '中文标题', mock: '@ctitle' }, + { name: '标题', mock: '@title' }, + { name: '姓名', mock: '@name' }, + { name: '中文姓名', mock: '@cname' }, + { name: '中文姓', mock: '@cfirst' }, + { name: '中文名', mock: '@clast' }, + { name: '英文姓', mock: '@first' }, + { name: '英文名', mock: '@last' }, + { name: '中文句子', mock: '@csentence' }, + { name: '中文词组', mock: '@cword' }, + { name: '地址', mock: '@region' }, + { name: '省份', mock: '@province' }, + { name: '城市', mock: '@city' }, + { name: '地区', mock: '@county' }, + { name: '转换为大写', mock: '@upper' }, + { name: '转换为小写', mock: '@lower' }, + { name: '挑选(枚举)', mock: '@pick' }, + { name: '打乱数组', mock: '@shuffle' }, + { name: '协议', mock: '@protocol' } + ]; + +function run(options) { + options = options || {}; + var container, data; + container = options.container || 'mock-editor'; + if (options.wordList && typeof options.wordList === 'object' && options.wordList.name && options.wordList.mock) { + wordList.push(options.wordList); + } + data = options.data || ''; + + editor = ace.edit(container) + editor.$blockScrolling = Infinity; + editor.getSession().setMode('ace/mode/json'); + editor.setTheme('ace/theme/xcode'); + editor.setOptions({ + enableBasicAutocompletion: true, + enableSnippets: true, + enableLiveAutocompletion: true + }); + mockEditor = { + curData: {}, + getValue: editor.getValue, + setValue: function (data) { + data = data || ''; + if (typeof data === 'string') { + editor.setValue(data); + } else if (typeof data === 'object') { + editor.setValue(JSON.stringify(data, null, " ")) + } + }, + editor: editor + } + rhymeCompleter = { + identifierRegexps: [/[@]/], + getCompletions: function (editor, session, pos, prefix, callback) { + if (prefix.length === 0) { callback(null, []); return } + callback(null, wordList.map(function (ea) { + return { name: ea.mock, value: ea.mock, score: ea.mock, meta: ea.name } + })); + } + } + + langTools.addCompleter(rhymeCompleter); + mockEditor.setValue(data); + handleJson(editor.getValue()) + + editor.clearSelection(); + + editor.getSession().on('change', () => { + handleJson(editor.getValue()) + if (typeof options.onChange === 'function') { + options.onChange.call(mockEditor, mockEditor.curData); + } + + }); + + return mockEditor; +} + + + +function handleJson(json) { + var curData = mockEditor.curData; + try { + var obj = JSON.parse(json); + curData.format = true; + curData.jsonData = obj; + curData.mockData = Mock.mock(obj); + } catch (e) { + curData.format = e.message; + } +} + + +module.exports = run; \ No newline at end of file diff --git a/client/containers/Project/Interface/interface.scss b/client/containers/Project/Interface/interface.scss index c2accb43..5460e7bd 100644 --- a/client/containers/Project/Interface/interface.scss +++ b/client/containers/Project/Interface/interface.scss @@ -3,7 +3,7 @@ min-height: 5rem; box-shadow: 0 2px 4px 0 rgba(0,0,0,0.20); background: #FFF; - border-radius:4px; + border-radius:5px; margin: 3px; .ant-tabs-bar{ border-bottom: none; @@ -41,9 +41,10 @@ width: 40px; } - .btn-http-get{ - background-color: #00a854; - border-color: #00a854 + .interface-delete-icon{ + position: absolute; + right: 5px; + top: 14px; } } } @@ -53,7 +54,7 @@ min-height: 5rem; box-shadow: 0 2px 4px 0 rgba(0,0,0,0.20); background: #FFF; - border-radius:4px; + border-radius:5px; .interface-content{ .ant-tabs-nav{ width:100% diff --git a/client/reducer/modules/interface.js b/client/reducer/modules/interface.js index 323d7df3..4dd3c3d7 100644 --- a/client/reducer/modules/interface.js +++ b/client/reducer/modules/interface.js @@ -2,19 +2,54 @@ import axios from 'axios' // Actions const FETCH_INTERFACE_DATA = 'yapi/interface/FETCH_INTERFACE_DATA'; const FETCH_INTERFACE_LIST = 'yapi/interface/FETCH_INTERFACE_LIST'; - -// const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA'; +const CHANGE_INTERFACE_ID = 'yapi/interface/CHANGE_INTERFACE_ID'; +const ADD_INTERFACE_DATA = 'yapi/interface/ADD_INTERFACE_DATA'; +const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA'; // const SAVE_INTERFACE_PROJECT_ID = 'yapi/interface/SAVE_INTERFACE_PROJECT_ID'; // const GET_INTERFACE_GROUP_LIST = 'yapi/interface/GET_INTERFACE_GROUP_LIST'; // Reducer const initialState = { + interfaceId: 0, curdata: {}, list: [] } export default (state = initialState, action) => { switch (action.type) { + case DELETE_INTERFACE_DATA: + return (() => { + + let newlist = state.list.filter(data=> data._id !== action.payload), newid, curdata; + + if (state.interfaceId === action.payload && state.list.length > 0) { + newid = state.list[0]._id + curdata = state.list[0] + } else if (state.list.length == 0) { + newid = 0; + curdata = {} + } + + return { + ...state, + curdata: curdata, + interfaceId: newid, + list: newlist + } + })() + + case ADD_INTERFACE_DATA: + return { + ...state, + curdata: action.payload, + list: [].concat(state.list, action.payload), + interfaceId: action.payload._id + } + case CHANGE_INTERFACE_ID: + return { + ...state, + interfaceId: action.payload + } case FETCH_INTERFACE_DATA: return { ...state, @@ -24,31 +59,47 @@ export default (state = initialState, action) => { return { ...state, list: action.payload.data - } + } default: return state } } +export function changeInterfaceId(id) { + return { + type: CHANGE_INTERFACE_ID, + payload: id + } +} + +export async function deleteInterfaceData(id) { + await axios.post('/api/interface/del', { id: id }) + return { + type: DELETE_INTERFACE_DATA, + payload: id + } +} // Action Creators -export function fetchInterfaceData (interfaceId) { - return async (dispatch) => { - let result = await axios.get('/api/interface/get?id=' + interfaceId); - dispatch({ - type: FETCH_INTERFACE_DATA, - payload: result.data - }) +export async function fetchInterfaceData(interfaceId) { + let result = await axios.get('/api/interface/get?id=' + interfaceId); + return { + type: FETCH_INTERFACE_DATA, + payload: result.data } } -export function fetchInterfaceList(projectId){ - return async (dispatch) => { - let result = await axios.get('/api/interface/list?project_id=' + projectId); - dispatch({ - type: FETCH_INTERFACE_LIST, - payload: result.data - }) +export async function fetchInterfaceList(projectId) { + let result = await axios.get('/api/interface/list?project_id=' + projectId); + return { + type: FETCH_INTERFACE_LIST, + payload: result.data } } +export async function addInterfaceData(data) { + return { + type: ADD_INTERFACE_DATA, + payload: data + } +} \ No newline at end of file diff --git a/server/controllers/interface.js b/server/controllers/interface.js index 642b0cb1..f70a1066 100644 --- a/server/controllers/interface.js +++ b/server/controllers/interface.js @@ -23,12 +23,12 @@ class interfaceController extends baseController { * @param {String} [req_headers[].value] 请求的header信息值 * @param {Boolean} [req_headers[].required] 是否是必须,默认为否 * @param {String} [req_headers[].desc] header描述 - * @param {String} [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种 - * @param {Mixed} [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 - * @param {String} [req_params_form[].name] 请求参数名 - * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email - * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种 - * @param {String} [req_params_other] 非form类型的请求参数可保存到此字段 + * @param {String} [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种 + * @param {Mixed} [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 + * @param {String} [req_body_form[].name] 请求参数名 + * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email + * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种 + * @param {String} [req_body_other] 非form类型的请求参数可保存到此字段 * @param {String} [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种 * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能 * @param {String} [desc] 接口描述 @@ -75,7 +75,7 @@ class interfaceController extends baseController { desc: params.desc, method: params.method, req_headers: params.req_headers, - req_params_type: params.req_params_type, + req_body_type: params.req_body_type, res_body: params.res_body, res_body_type: params.res_body_type, uid: this.getUid(), @@ -83,11 +83,11 @@ class interfaceController extends baseController { up_time: yapi.commons.time() }; - if (params.req_params_form) { - data.req_params_form = params.req_params_form; + if (params.req_body_form) { + data.req_body_form = params.req_body_form; } - if (params.req_params_other) { - data.req_params_other = params.req_params_other; + if (params.req_body_other) { + data.req_body_other = params.req_body_other; } let result = await this.Model.save(data); @@ -161,12 +161,12 @@ class interfaceController extends baseController { * @param {String} [req_headers[].value] 请求的header信息值 * @param {Boolean} [req_headers[].required] 是否是必须,默认为否 * @param {String} [req_headers[].desc] header描述 - * @param {String} [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种 - * @param {Mixed} [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 - * @param {String} [req_params_form[].name] 请求参数名 - * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email - * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种 - * @param {String} [req_params_other] 非form类型的请求参数可保存到此字段 + * @param {String} [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种 + * @param {Mixed} [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 + * @param {String} [req_body_form[].name] 请求参数名 + * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email + * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种 + * @param {String} [req_body_other] 非form类型的请求参数可保存到此字段 * @param {String} [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种 * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能 * @param {String} [desc] 接口描述 @@ -225,11 +225,11 @@ class interfaceController extends baseController { data.req_headers = params.req_headers; } - if (params.req_params_form) { - data.req_params_form = params.req_params_form; + if (params.req_body_form) { + data.req_body_form = params.req_body_form; } - if (params.req_params_other) { - data.req_params_other = params.req_params_other; + if (params.req_body_other) { + data.req_body_other = params.req_body_other; } if (params.res_body_type) { diff --git a/server/models/interface.js b/server/models/interface.js index a5a4f6e7..85944e55 100644 --- a/server/models/interface.js +++ b/server/models/interface.js @@ -13,6 +13,7 @@ class interfaceModel extends baseModel { path: { type: String, required: true }, method: { type: String, required: true }, project_id: { type: Number, required: true }, + status: {type: String, enum: ['undone', 'done'], default: 'undone'}, desc: String, add_time: Number, up_time: Number, @@ -22,14 +23,14 @@ class interfaceModel extends baseModel { req_headers: [{ name: String, value: String, desc: String, required: Boolean }], - req_params_type: { + req_body_type: { type: String, enum: ['form', 'json', 'text', 'xml'] }, - req_params_form: [{ + req_body_form: [{ name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: Boolean }], - req_params_other: String, + req_body_other: String, res_body_type: { type: String, enum: ['json', 'text', 'xml'] diff --git a/static/dev.html b/static/dev.html index 39413bb5..ad5fe2e7 100644 --- a/static/dev.html +++ b/static/dev.html @@ -9,8 +9,6 @@ <body> <div id="yapi" style="height: 100%;"></div> - - <script src="http://127.0.0.1:4000/prd/manifest@dev.js"></script> <script src="http://127.0.0.1:4000/prd/lib2@dev.js"></script> <script src="http://127.0.0.1:4000/prd/lib@dev.js"></script> @@ -20,7 +18,7 @@ <script src="/lib/snippets-json.js"></script> <script src="/lib/ext-language.tools.js"></script> <script src="/lib/mode-json-1.2.8.js"></script> -<script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> +<!-- <script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> --> From 01ea9897fe256a5b11d97730d2727aef61186c2c Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 15:06:32 +0800 Subject: [PATCH 03/14] fix: fix add project member bug --- server/models/interface.js | 18 ++++++++++-- server/models/project.js | 4 +-- server_dist/controllers/interface.js | 42 ++++++++++++++-------------- server_dist/models/interface.js | 25 +++++++++++++---- server_dist/models/project.js | 4 +-- 5 files changed, 59 insertions(+), 34 deletions(-) diff --git a/server/models/interface.js b/server/models/interface.js index 85944e55..174cfb9f 100644 --- a/server/models/interface.js +++ b/server/models/interface.js @@ -18,17 +18,29 @@ class interfaceModel extends baseModel { add_time: Number, up_time: Number, req_query:[{ - name: String, value: String, desc: String, required: Boolean + name: String, value: String, desc: String, required: { + type:String, + enum: ["1", "0"], + default: "1" + } }], req_headers: [{ - name: String, value: String, desc: String, required: Boolean + name: String, value: String, desc: String, required: { + type:String, + enum: ["1", "0"], + default: "1" + } }], req_body_type: { type: String, enum: ['form', 'json', 'text', 'xml'] }, req_body_form: [{ - name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: Boolean + name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: { + type:String, + enum: ["1", "0"], + default: "1" + } }], req_body_other: String, res_body_type: { diff --git a/server/models/project.js b/server/models/project.js index d55a9c41..ea3676d9 100644 --- a/server/models/project.js +++ b/server/models/project.js @@ -15,7 +15,7 @@ class projectModel extends baseModel { group_id: { type: Number, required: true }, project_type: {type:String, required: true, enum: ['public', 'private']}, members: [ - {uid: Number, role: {type: String, enum:['owner', 'dev'], username: String, email: String}} + {uid: Number, role: {type: String, enum:['owner', 'dev']},username: String, email: String} ], protocol: { type: String, required: true }, prd_host: { type: String, required: true }, @@ -111,7 +111,7 @@ class projectModel extends baseModel { { _id: id }, { - $pull: { members: uid } + $pull: { members: {uid: uid} } } ); } diff --git a/server_dist/controllers/interface.js b/server_dist/controllers/interface.js index 1a6941c4..98c826cb 100644 --- a/server_dist/controllers/interface.js +++ b/server_dist/controllers/interface.js @@ -69,12 +69,12 @@ var interfaceController = function (_baseController) { * @param {String} [req_headers[].value] 请求的header信息值 * @param {Boolean} [req_headers[].required] 是否是必须,默认为否 * @param {String} [req_headers[].desc] header描述 - * @param {String} [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种 - * @param {Mixed} [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 - * @param {String} [req_params_form[].name] 请求参数名 - * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email - * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种 - * @param {String} [req_params_other] 非form类型的请求参数可保存到此字段 + * @param {String} [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种 + * @param {Mixed} [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 + * @param {String} [req_body_form[].name] 请求参数名 + * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email + * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种 + * @param {String} [req_body_other] 非form类型的请求参数可保存到此字段 * @param {String} [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种 * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能 * @param {String} [desc] 接口描述 @@ -152,7 +152,7 @@ var interfaceController = function (_baseController) { desc: params.desc, method: params.method, req_headers: params.req_headers, - req_params_type: params.req_params_type, + req_body_type: params.req_body_type, res_body: params.res_body, res_body_type: params.res_body_type, uid: this.getUid(), @@ -161,11 +161,11 @@ var interfaceController = function (_baseController) { }; - if (params.req_params_form) { - data.req_params_form = params.req_params_form; + if (params.req_body_form) { + data.req_body_form = params.req_body_form; } - if (params.req_params_other) { - data.req_params_other = params.req_params_other; + if (params.req_body_other) { + data.req_body_other = params.req_body_other; } _context.next = 22; @@ -337,12 +337,12 @@ var interfaceController = function (_baseController) { * @param {String} [req_headers[].value] 请求的header信息值 * @param {Boolean} [req_headers[].required] 是否是必须,默认为否 * @param {String} [req_headers[].desc] header描述 - * @param {String} [req_params_type] 请求参数方式,有["form", "json", "text", "xml"]四种 - * @param {Mixed} [req_params_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 - * @param {String} [req_params_form[].name] 请求参数名 - * @param {String} [req_params_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email - * @param {String} [req_params_form[].type] 请求参数类型,有["text", "file"]两种 - * @param {String} [req_params_other] 非form类型的请求参数可保存到此字段 + * @param {String} [req_body_type] 请求参数方式,有["form", "json", "text", "xml"]四种 + * @param {Mixed} [req_body_form] 请求参数,如果请求方式是form,参数是Array数组,其他格式请求参数是字符串 + * @param {String} [req_body_form[].name] 请求参数名 + * @param {String} [req_body_form[].value] 请求参数值,可填写生成规则(mock)。如@email,随机生成一条email + * @param {String} [req_body_form[].type] 请求参数类型,有["text", "file"]两种 + * @param {String} [req_body_other] 非form类型的请求参数可保存到此字段 * @param {String} [res_body_type] 相应信息的数据格式,有["json", "text", "xml"]三种 * @param {String} [res_body] 响应信息,可填写任意字符串,如果res_body_type是json,则会调用mock功能 * @param {String} [desc] 接口描述 @@ -436,11 +436,11 @@ var interfaceController = function (_baseController) { data.req_headers = params.req_headers; } - if (params.req_params_form) { - data.req_params_form = params.req_params_form; + if (params.req_body_form) { + data.req_body_form = params.req_body_form; } - if (params.req_params_other) { - data.req_params_other = params.req_params_other; + if (params.req_body_other) { + data.req_body_other = params.req_body_other; } if (params.res_body_type) { diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js index d51903dd..44434ca6 100644 --- a/server_dist/models/interface.js +++ b/server_dist/models/interface.js @@ -52,23 +52,36 @@ var interfaceModel = function (_baseModel) { path: { type: String, required: true }, method: { type: String, required: true }, project_id: { type: Number, required: true }, + status: { type: String, enum: ['undone', 'done'], default: 'undone' }, desc: String, add_time: Number, up_time: Number, req_query: [{ - name: String, value: String, desc: String, required: Boolean + name: String, value: String, desc: String, required: { + type: String, + enum: ["1", "0"], + default: "1" + } }], req_headers: [{ - name: String, value: String, desc: String, required: Boolean + name: String, value: String, desc: String, required: { + type: String, + enum: ["1", "0"], + default: "1" + } }], - req_params_type: { + req_body_type: { type: String, enum: ['form', 'json', 'text', 'xml'] }, - req_params_form: [{ - name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: Boolean + req_body_form: [{ + name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: { + type: String, + enum: ["1", "0"], + default: "1" + } }], - req_params_other: String, + req_body_other: String, res_body_type: { type: String, enum: ['json', 'text', 'xml'] diff --git a/server_dist/models/project.js b/server_dist/models/project.js index b9b4988d..39c8b360 100644 --- a/server_dist/models/project.js +++ b/server_dist/models/project.js @@ -53,7 +53,7 @@ var projectModel = function (_baseModel) { desc: String, group_id: { type: Number, required: true }, project_type: { type: String, required: true, enum: ['public', 'private'] }, - members: [{ uid: Number, role: { type: String, enum: ['owner', 'dev'], username: String, email: String } }], + members: [{ uid: Number, role: { type: String, enum: ['owner', 'dev'] }, username: String, email: String }], protocol: { type: String, required: true }, prd_host: { type: String, required: true }, env: [{ name: String, domain: String }], @@ -156,7 +156,7 @@ var projectModel = function (_baseModel) { return this.model.update({ _id: id }, { - $pull: { members: uid } + $pull: { members: { uid: uid } } }); } }, { From 6ff320aecca7d502520aeb828956cb7f2bb48bef Mon Sep 17 00:00:00 2001 From: "wenbo.dong" <wenbo.dong@qunar.com> Date: Mon, 14 Aug 2017 15:41:58 +0800 Subject: [PATCH 04/14] =?UTF-8?q?feat:=20=E6=88=91=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E6=B3=A8=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/ProjectCard/ProjectCard.js | 6 +- client/containers/Follows/Follows.js | 55 ++++++++++-- client/containers/Follows/Follows.scss | 9 +- .../containers/Group/MemberList/MemberList.js | 3 +- .../Group/ProjectList/ProjectList.js | 22 ++--- client/reducer/modules/follow.js | 34 ++++++++ client/reducer/modules/reducer.js | 4 +- server/controllers/project.js | 1 + server_dist/controllers/project.js | 1 + static/doc/api.html | 86 +++++++++---------- static/doc/index.html | 6 +- static/doc/interface.html | 14 +-- static/doc/mock.html | 24 +++--- static/doc/source/app.js | 16 +++- static/doc/source/code.css | 2 +- static/doc/source/main.css | 2 +- static/doc/source/main.js | 12 +-- .../static/server/controllers/base.js.html | 3 + .../static/server/controllers/follow.js.html | 14 ++- .../doc/static/server/controllers/log.js.html | 14 +-- .../static/server/controllers/project.js.html | 57 ++++++++++++ 21 files changed, 267 insertions(+), 118 deletions(-) create mode 100644 client/reducer/modules/follow.js diff --git a/client/components/ProjectCard/ProjectCard.js b/client/components/ProjectCard/ProjectCard.js index 1c16ca55..d5dc9aa6 100644 --- a/client/components/ProjectCard/ProjectCard.js +++ b/client/components/ProjectCard/ProjectCard.js @@ -7,9 +7,6 @@ import PropTypes from 'prop-types'; class ProjectCard extends Component { constructor(props) { super(props); - this.state = { - - }; } static propTypes = { @@ -18,13 +15,12 @@ class ProjectCard extends Component { render() { const { projectData } = this.props; - console.log(projectData); return ( <Link to={`/project/${projectData._id}`}> <Card bordered={false} bodyStyle={{padding: 16}} className="m-card"> <div className="m-card-logo"> <Icon type="area-chart" className="icon" /> - <p className="name">{projectData.name}</p> + <p className="name">{projectData.name || projectData.projectname}</p> </div> <div className="m-card-btns" style={{display: 'none'}}>btns</div> </Card> diff --git a/client/containers/Follows/Follows.js b/client/containers/Follows/Follows.js index d5a2c60a..00830127 100644 --- a/client/containers/Follows/Follows.js +++ b/client/containers/Follows/Follows.js @@ -1,10 +1,48 @@ import React, { Component } from 'react'; import './Follows.scss'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { Row, Col } from 'antd'; +import { getFollowList } from '../../reducer/modules/follow'; import Subnav from '../../components/Subnav/Subnav.js'; import ProjectCard from '../../components/ProjectCard/ProjectCard.js'; + +@connect( + state => { + return { + data: state.follow.data + } + }, + { + getFollowList + } +) class Follows extends Component { + constructor(props) { + super(props); + this.state = { + data: [] + } + } + static propTypes = { + getFollowList: PropTypes.func + } + + componentDidMount() { + this.props.getFollowList(107).then((res) => { + console.log(res); + if (res.payload.data.errcode === 0) { + this.setState({ + data: res.payload.data.data.list + }) + } + }); + } + render () { + const data = this.state.data; + console.log(data); return ( <div> <Subnav @@ -17,14 +55,15 @@ class Follows extends Component { path: '/follow' }]}/> <div className="g-row"> - <div className="follow-box"> - <div className="follow-container"> - <ProjectCard /> - <ProjectCard /> - <ProjectCard /> - <ProjectCard /> - </div> - </div> + <Row gutter={16} className="follow-box"> + {data.map((item, index) => { + console.log(item); + return ( + <Col span={6} key={index}> + <ProjectCard projectData={item} /> + </Col>); + })} + </Row> </div> </div> ) diff --git a/client/containers/Follows/Follows.scss b/client/containers/Follows/Follows.scss index 2ee476cc..8f5dabcb 100644 --- a/client/containers/Follows/Follows.scss +++ b/client/containers/Follows/Follows.scss @@ -3,10 +3,5 @@ .follow-box{ padding: 24px; - background-color: #FFF; - .follow-container{ - display: flex; - display: -webkit-flex; - } - -} \ No newline at end of file + background-color: #fff; +} diff --git a/client/containers/Group/MemberList/MemberList.js b/client/containers/Group/MemberList/MemberList.js index d1691ae8..a87062aa 100644 --- a/client/containers/Group/MemberList/MemberList.js +++ b/client/containers/Group/MemberList/MemberList.js @@ -6,8 +6,7 @@ class MemberList extends Component { render() { return ( <div className="m-panel"> - chengyuan 列表 成员 - + </div> ); } diff --git a/client/containers/Group/ProjectList/ProjectList.js b/client/containers/Group/ProjectList/ProjectList.js index 04be893e..5828b950 100644 --- a/client/containers/Group/ProjectList/ProjectList.js +++ b/client/containers/Group/ProjectList/ProjectList.js @@ -133,17 +133,17 @@ class ProjectList extends Component { }) } - // 分页逻辑 - @autobind - paginationChange(pageNum) { - this.props.fetchProjectList(this.props.currGroup._id, pageNum).then((res) => { - if (res.payload.data.errcode) { - message.error(res.payload.data.errmsg); - } else { - this.props.changeTableLoading(false); - } - }); - } + // // 分页逻辑 取消分页 + // @autobind + // paginationChange(pageNum) { + // this.props.fetchProjectList(this.props.currGroup._id, pageNum).then((res) => { + // if (res.payload.data.errcode) { + // message.error(res.payload.data.errmsg); + // } else { + // this.props.changeTableLoading(false); + // } + // }); + // } componentWillReceiveProps(nextProps) { // 切换分组 diff --git a/client/reducer/modules/follow.js b/client/reducer/modules/follow.js new file mode 100644 index 00000000..a7c4130b --- /dev/null +++ b/client/reducer/modules/follow.js @@ -0,0 +1,34 @@ +import axios from 'axios'; + +// Actions +const GET_FOLLOW_LIST = 'yapi/follow/GET_FOLLOW_LIST'; + +// Reducer +const initialState = { + data: [] +}; + +export default (state = initialState, action) => { + switch (action.type) { + case GET_FOLLOW_LIST: { + console.log(action); + return { + ...state, + data: action.payload.data.data + }; + } + + default: + return state; + } +}; + +// Action Creators +export function getFollowList(uid) { + return { + type: GET_FOLLOW_LIST, + payload: axios.get('/api/follow/list', { + params: { uid } + }) + } +} diff --git a/client/reducer/modules/reducer.js b/client/reducer/modules/reducer.js index c3623d73..bc088920 100644 --- a/client/reducer/modules/reducer.js +++ b/client/reducer/modules/reducer.js @@ -6,6 +6,7 @@ import inter from './interface.js' import news from './news.js' import addInterface from './addInterface.js' import menu from './menu.js' +import follow from './follow.js' export default combineReducers({ group, @@ -14,5 +15,6 @@ export default combineReducers({ project, news, addInterface, - menu + menu, + follow }) diff --git a/server/controllers/project.js b/server/controllers/project.js index 3f28aba6..295e83dd 100644 --- a/server/controllers/project.js +++ b/server/controllers/project.js @@ -579,6 +579,7 @@ class projectController extends baseController { * @method GET * @category project * @foldnumber 10 + * @author wenbo.dong * @param {String} project_id */ async download(ctx) { diff --git a/server_dist/controllers/project.js b/server_dist/controllers/project.js index 62e5f276..eeb081f4 100644 --- a/server_dist/controllers/project.js +++ b/server_dist/controllers/project.js @@ -1284,6 +1284,7 @@ var projectController = function (_baseController) { * @method GET * @category project * @foldnumber 10 + * @author wenbo.dong * @param {String} project_id */ diff --git a/static/doc/api.html b/static/doc/api.html index f1cb19d4..2807a838 100644 --- a/static/doc/api.html +++ b/static/doc/api.html @@ -406,7 +406,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -443,7 +443,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span> @@ -541,7 +541,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -637,7 +637,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -725,7 +725,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"logout success..."</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -764,7 +764,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token string">"ok"</span> @@ -855,7 +855,7 @@ <div>示例:</div> - <pre class="ydoc-example" ><code><span class="token punctuation">{</span> + <pre class="ydoc-example" ><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -951,7 +951,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"logout success..."</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -1436,7 +1436,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"ok"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span> @@ -1549,7 +1549,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#37" target="_blank">./server/controllers/project.js:37</a> + <a href="./static/server/controllers/project.js.html#39" target="_blank">./server/controllers/project.js:39</a> </p> @@ -1661,7 +1661,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -1702,7 +1702,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#127" target="_blank">./server/controllers/project.js:127</a> + <a href="./static/server/controllers/project.js.html#137" target="_blank">./server/controllers/project.js:137</a> </p> @@ -1756,7 +1756,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -1786,7 +1786,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#170" target="_blank">./server/controllers/project.js:170</a> + <a href="./static/server/controllers/project.js.html#188" target="_blank">./server/controllers/project.js:188</a> </p> @@ -1840,7 +1840,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -1870,7 +1870,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#223" target="_blank">./server/controllers/project.js:223</a> + <a href="./static/server/controllers/project.js.html#254" target="_blank">./server/controllers/project.js:254</a> </p> @@ -1912,7 +1912,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">[</span> @@ -1948,7 +1948,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#248" target="_blank">./server/controllers/project.js:248</a> + <a href="./static/server/controllers/project.js.html#279" target="_blank">./server/controllers/project.js:279</a> </p> @@ -1990,7 +1990,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -2031,7 +2031,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#272" target="_blank">./server/controllers/project.js:272</a> + <a href="./static/server/controllers/project.js.html#303" target="_blank">./server/controllers/project.js:303</a> </p> @@ -2073,7 +2073,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -2258,7 +2258,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#313" target="_blank">./server/controllers/project.js:313</a> + <a href="./static/server/controllers/project.js.html#344" target="_blank">./server/controllers/project.js:344</a> </p> @@ -2300,7 +2300,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -2330,7 +2330,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#373" target="_blank">./server/controllers/project.js:373</a> + <a href="./static/server/controllers/project.js.html#419" target="_blank">./server/controllers/project.js:419</a> </p> @@ -2448,7 +2448,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"> <span class="token comment" spellcheck="true">//请求示例</span> <span class="token punctuation">{</span> <span class="token string">"id"</span><span class="token punctuation">:</span> <span class="token number">8</span><span class="token punctuation">,</span> @@ -2490,7 +2490,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#464" target="_blank">./server/controllers/project.js:464</a> + <a href="./static/server/controllers/project.js.html#520" target="_blank">./server/controllers/project.js:520</a> </p> @@ -2532,7 +2532,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"ok"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -2585,7 +2585,7 @@ <p> <small class="text-muted">源码位置:</small> - <a href="./static/server/controllers/project.js.html#519" target="_blank">./server/controllers/project.js:519</a> + <a href="./static/server/controllers/project.js.html#575" target="_blank">./server/controllers/project.js:575</a> </p> @@ -2868,7 +2868,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"> <span class="token comment" spellcheck="true">//请求 /interface/add</span> <span class="token comment" spellcheck="true">//header Content-Type:application/json</span> @@ -3003,7 +3003,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span><span class="token keyword">get</span><span class="token punctuation">.</span>json</code></pre> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span><span class="token keyword">get</span><span class="token punctuation">.</span>json</code></pre> </div> @@ -3068,7 +3068,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span>list<span class="token punctuation">.</span>json</code></pre> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">.</span><span class="token operator">/</span>api<span class="token operator">/</span><span class="token keyword">interface</span><span class="token operator">/</span>list<span class="token punctuation">.</span>json</code></pre> </div> @@ -3293,7 +3293,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -3366,7 +3366,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token punctuation">{</span> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token punctuation">{</span> <span class="token string">"errcode"</span><span class="token punctuation">:</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string">"errmsg"</span><span class="token punctuation">:</span> <span class="token string">"success"</span><span class="token punctuation">,</span> <span class="token string">"data"</span><span class="token punctuation">:</span> <span class="token punctuation">{</span> @@ -3461,7 +3461,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>follow<span class="token operator">/</span>list</code></pre> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>follow<span class="token operator">/</span>list</code></pre> </div> @@ -3526,7 +3526,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>follow<span class="token operator">/</span>del</code></pre> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>follow<span class="token operator">/</span>del</code></pre> </div> @@ -3536,7 +3536,7 @@ <h3 id="-follow-add" class="page-header subject"> /follow/add - <span class="ui-badge">POST</span> + <span class="ui-badge">GET</span> <a class="hashlink" href="#-follow-add">#</a> @@ -3627,7 +3627,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>follow<span class="token operator">/</span>add</code></pre> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>follow<span class="token operator">/</span>add</code></pre> </div> @@ -4344,9 +4344,9 @@ </thead> <tr> - <td>uid</td> + <td>typeid</td> <td>Number</td> - <td>用户id, 不能为空</td> + <td>动态类型id, 不能为空</td> <td> <i class="yo-ico glyphicon glyphicon-ok text-success"></i> @@ -4380,7 +4380,7 @@ <div>示例:</div> - <pre class="ydoc-example" data-foldnumber=10><code><span class="token operator">/</span>log<span class="token operator">/</span>list</code></pre> + <pre class="ydoc-example" data-foldnumber=10><code class="js-code"><span class="token operator">/</span>log<span class="token operator">/</span>list</code></pre> </div> @@ -4435,8 +4435,8 @@ var $this = $(this); $this.removeClass('extend').addClass('fold'); $this.html('折叠代码'); - $this.prev().height('auto'); - $this.prev().parent().height('auto'); + $this.parent().children('.js-code').height('auto'); + $this.parent().height('auto'); }); $('.ydoc-example').delegate('.fold', 'click', function() { var $this = $(this); @@ -4444,7 +4444,7 @@ EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6); $this.removeClass('fold').addClass('extend'); $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre - $this.prev().height(EXAMPLE_MAX_HEIGHT); // code + $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code $this.html("展开更多……"); }); } diff --git a/static/doc/index.html b/static/doc/index.html index 1aab9b97..54da277b 100644 --- a/static/doc/index.html +++ b/static/doc/index.html @@ -175,8 +175,8 @@ var $this = $(this); $this.removeClass('extend').addClass('fold'); $this.html('折叠代码'); - $this.prev().height('auto'); - $this.prev().parent().height('auto'); + $this.parent().children('.js-code').height('auto'); + $this.parent().height('auto'); }); $('.ydoc-example').delegate('.fold', 'click', function() { var $this = $(this); @@ -184,7 +184,7 @@ EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6); $this.removeClass('fold').addClass('extend'); $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre - $this.prev().height(EXAMPLE_MAX_HEIGHT); // code + $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code $this.html("展开更多……"); }); } diff --git a/static/doc/interface.html b/static/doc/interface.html index 3032de09..db93bb8c 100644 --- a/static/doc/interface.html +++ b/static/doc/interface.html @@ -68,23 +68,23 @@ <div class="ydoc-container-content " id="readme"> <article class="markdown-body"> - <h2 class="subject" id="快速开始">快速开始 <a class="hashlink" href="#快速开始">#</a></h2><h3 class="subject" id="1 接口管理架构">1 接口管理架构 <a class="hashlink" href="#1 接口管理架构">#</a></h3><p>平台以<strong>项目分组</strong> -> <strong>项目</strong> -> <strong>接口</strong>的划分进行接口组织管理。</p> + <h2 class="subject" id="快速开始">快速开始 <a class="hashlink" href="#快速开始">#</a></h2><h3 class="subject" id="1_接口管理架构">1 接口管理架构 <a class="hashlink" href="#1_接口管理架构">#</a></h3><p>平台以<strong>项目分组</strong> -> <strong>项目</strong> -> <strong>接口</strong>的划分进行接口组织管理。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-305ba49a60ee1ff5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> -<h4 class="subject" id="1.1 项目分组">1.1 项目分组 <a class="hashlink" href="#1.1 项目分组">#</a></h4><p>登录之后进到项目首页,左边侧边栏显示的即分组列表。</p> +<h4 class="subject" id="1.1_项目分组">1.1 项目分组 <a class="hashlink" href="#1.1_项目分组">#</a></h4><p>登录之后进到项目首页,左边侧边栏显示的即分组列表。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-d90ca4b3242fa760.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "200" style="margin-left:170px;display:block;" alt="图片名称" align=center /></p> <p>管理员有权限添加或删除分组。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-a0d4d9a98003896a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "500" style="margin-left:170px;display:block;" alt="图片名称" align=center /></p> <blockquote> <p>分组名称具有唯一性</p> </blockquote> -<h4 class="subject" id="1.2 项目">1.2 项目 <a class="hashlink" href="#1.2 项目">#</a></h4><p>选中不同的分组,右边会显示该分组下的项目列表。</p> +<h4 class="subject" id="1.2_项目">1.2 项目 <a class="hashlink" href="#1.2_项目">#</a></h4><p>选中不同的分组,右边会显示该分组下的项目列表。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-137bcae58b84715e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> <p>创建项目需要填写项目名称,项目线上域名(添加完成后可配置项目其他环境域名),项目接口基本路径(接口路径前面相同的部分)以及项目描述。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-360a50ddb746f73d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> <blockquote> <p>项目『线上域名 + 基本路径』具有唯一性</p> </blockquote> -<h4 class="subject" id="1.3 接口">1.3 接口 <a class="hashlink" href="#1.3 接口">#</a></h4><p>点击项目名称,进入该项目接口列表。</p> +<h4 class="subject" id="1.3_接口">1.3 接口 <a class="hashlink" href="#1.3_接口">#</a></h4><p>点击项目名称,进入该项目接口列表。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-e858005f714f4889.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> <p>点击编辑,进入接口详情页(之后接口详情页和编辑也会分开),可以编辑接口或者请求测试真实接口。</p> <p><img src="http://upload-images.jianshu.io/upload_images/842107-78c0ea839619d068.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> @@ -134,8 +134,8 @@ var $this = $(this); $this.removeClass('extend').addClass('fold'); $this.html('折叠代码'); - $this.prev().height('auto'); - $this.prev().parent().height('auto'); + $this.parent().children('.js-code').height('auto'); + $this.parent().height('auto'); }); $('.ydoc-example').delegate('.fold', 'click', function() { var $this = $(this); @@ -143,7 +143,7 @@ EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6); $this.removeClass('fold').addClass('extend'); $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre - $this.prev().height(EXAMPLE_MAX_HEIGHT); // code + $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code $this.html("展开更多……"); }); } diff --git a/static/doc/mock.html b/static/doc/mock.html index 1117c391..9af52501 100644 --- a/static/doc/mock.html +++ b/static/doc/mock.html @@ -70,7 +70,7 @@ <article class="markdown-body"> <h2 class="subject" id="Mock功能">Mock功能 <a class="hashlink" href="#Mock功能">#</a></h2> <p style='text-indent:2em;line-height:1.8em'>yapi的Mock功能可以根据用户的输入接口信息如协议、URL、接口名、请求头、请求参数、mock规则(<a href="#mock">点击到Mock规则</a>)生成Mock接口,这些接口会自动生成模拟数据,支持复杂的生成逻辑,创建者可以自由构造需要的数据。而且与常见的Mock方式如将Mock写在代码里和JS拦截等相比yapi的Mock在使用场景和效率和复杂度上是相差甚远的,正是由于yapi的Mock是一个第三方平台那么在 团队开发时任何人都可以权限许可下创建、修改接口信息等操作,这对于团队开发是很有好处的。</p> -<h3 class="subject" id="1 Mock步骤">1 Mock步骤 <a class="hashlink" href="#1 Mock步骤">#</a></h3><h4 class="subject" id="1.1 创建接口">1.1 创建接口 <a class="hashlink" href="#1.1 创建接口">#</a></h4><p>通过点击页面上的"+添加接口"</p> +<h3 class="subject" id="1_Mock步骤">1 Mock步骤 <a class="hashlink" href="#1_Mock步骤">#</a></h3><h4 class="subject" id="1.1_创建接口">1.1 创建接口 <a class="hashlink" href="#1.1_创建接口">#</a></h4><p>通过点击页面上的"+添加接口"</p> <p><img src="http://note.youdao.com/yws/api/personal/file/WEB613bd4f29db038f2b41c03dcfceda2b6?method=download&shareKey=29bfc2b855f6f26ce0079baf567e54cc" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> <p> 输入协议、URL、接口名、请求头、请求参数、Mock规则(<a href="#mock">点击到Mock规则</a>)等信息。</p> <p><img src="http://note.youdao.com/yws/api/personal/file/WEB680a37ba304768804b23cf2cf36ed40d?method=download&shareKey=0d750695dce3a4c7abf697fa58d24c57" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> @@ -84,14 +84,14 @@ <p>取到上面的链接在浏览器中请求就可以得到如下结果。</p> <p><img src="http://note.youdao.com/yws/api/personal/file/WEB1d1f7dc7b83a8cd6f576953cf45e9719?method=download&shareKey=99b4af9baac527b969543dd0a909d2a1" width = "800" style="margin:0px auto;display:block;" alt="图片名称" align=center /></p> <p><span id = "mock"></span></p> -<h3 class="subject" id="2.1 Mock语法规范">2.1 Mock语法规范 <a class="hashlink" href="#2.1 Mock语法规范">#</a></h3><blockquote> +<h3 class="subject" id="2.1_Mock语法规范">2.1 Mock语法规范 <a class="hashlink" href="#2.1_Mock语法规范">#</a></h3><blockquote> <p>了解更多Mock详情:<a href="https://github.com/nuysoft/Mock/wiki/Syntax-Specification">Mock.js 官方文档</a></p> </blockquote> <p>Mock.js 的语法规范包括两部分:</p> <p><a href="#DTD">1. 数据模板定义规范(Data Template Definition,DTD)</a></p> <p><a href="#DPD">2. 数据占位符定义规范(Data Placeholder Definition,DPD)</a></p> <p><span id = "DTD"></span></p> -<h3 class="subject" id="数据模板定义规范(Data Template Definition,DTD)">数据模板定义规范(Data Template Definition,DTD) <a class="hashlink" href="#数据模板定义规范(Data Template Definition,DTD)">#</a></h3><p>数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:</p> +<h3 class="subject" id="数据模板定义规范(Data_Template_Definition,DTD)">数据模板定义规范(Data Template Definition,DTD) <a class="hashlink" href="#数据模板定义规范(Data_Template_Definition,DTD)">#</a></h3><p>数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:</p> <pre><code>// 属性名 name (与生成规则之间用 "|<span class="token string">" 隔开) // 生成规则 rule(生成规则有7种详见下面的生成规则) // 属性值 value(可以含有 "</span>@占位符" 同时也指定了最终值的初始值和类型) @@ -107,14 +107,14 @@ 'name|count.dcount'<span class="token operator">:</span> value 'name|+step'<span class="token operator">:</span> value </code></pre><p>下面提供了6种生成规则以及示例包括 String、Number、Boolean、Object、Array:</p> -<h4 class="subject" id="1. 属性值是字符串 String">1. 属性值是字符串 String <a class="hashlink" href="#1. 属性值是字符串 String">#</a></h4><pre><code><span class="token number">1</span>. 'name|min-max'<span class="token operator">:</span> string +<h4 class="subject" id="1._属性值是字符串_String">1. 属性值是字符串 String <a class="hashlink" href="#1._属性值是字符串_String">#</a></h4><pre><code><span class="token number">1</span>. 'name|min-max'<span class="token operator">:</span> string 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。 <span class="token number">2</span>. 'name|count'<span class="token operator">:</span> string 通过重复 string 生成一个字符串,重复次数等于 count。 -</code></pre><h4 class="subject" id="2. 属性值是数字 Number">2. 属性值是数字 Number <a class="hashlink" href="#2. 属性值是数字 Number">#</a></h4><pre><code><span class="token number">1</span>. 'name|+<span class="token number">1</span>'<span class="token operator">:</span> number +</code></pre><h4 class="subject" id="2._属性值是数字_Number">2. 属性值是数字 Number <a class="hashlink" href="#2._属性值是数字_Number">#</a></h4><pre><code><span class="token number">1</span>. 'name|+<span class="token number">1</span>'<span class="token operator">:</span> number 属性值自动加 <span class="token number">1</span>,初始值为 number。 @@ -140,21 +140,21 @@ Mock.mock(<span class="token punctuation">{</span> <span class="token property">"number3"</span><span class="token operator">:</span> <span class="token number">123.777</span><span class="token punctuation">,</span> <span class="token property">"number4"</span><span class="token operator">:</span> <span class="token number">123.1231091814</span> <span class="token punctuation">}</span> -</code></pre><h4 class="subject" id="3. 属性值是布尔型 Boolean">3. 属性值是布尔型 Boolean <a class="hashlink" href="#3. 属性值是布尔型 Boolean">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> boolean +</code></pre><h4 class="subject" id="3._属性值是布尔型_Boolean">3. 属性值是布尔型 Boolean <a class="hashlink" href="#3._属性值是布尔型_Boolean">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> boolean 随机生成一个布尔值,值为 <span class="token boolean">true</span> 的概率是 <span class="token number">1</span>/<span class="token number">2</span>,值为 <span class="token boolean">false</span> 的概率同样是 <span class="token number">1</span>/<span class="token number">2</span>。 <span class="token number">2</span>. 'name|min-max'<span class="token operator">:</span> value 随机生成一个布尔值,值为 value 的概率是 min / (min + max<span class="token punctuation">)</span>,值为 !value 的概率是 max / (min + max<span class="token punctuation">)</span>。 -</code></pre><h4 class="subject" id="4. 属性值是对象 Object">4. 属性值是对象 Object <a class="hashlink" href="#4. 属性值是对象 Object">#</a></h4><pre><code><span class="token number">1</span>. 'name|count'<span class="token operator">:</span> object +</code></pre><h4 class="subject" id="4._属性值是对象_Object">4. 属性值是对象 Object <a class="hashlink" href="#4._属性值是对象_Object">#</a></h4><pre><code><span class="token number">1</span>. 'name|count'<span class="token operator">:</span> object 从属性值 object 中随机选取 count 个属性。 <span class="token number">2</span>. 'name|min-max'<span class="token operator">:</span> object 从属性值 object 中随机选取 min 到 max 个属性。 -</code></pre><h4 class="subject" id="5. 属性值是数组 Array">5. 属性值是数组 Array <a class="hashlink" href="#5. 属性值是数组 Array">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> array +</code></pre><h4 class="subject" id="5._属性值是数组_Array">5. 属性值是数组 Array <a class="hashlink" href="#5._属性值是数组_Array">#</a></h4><pre><code><span class="token number">1</span>. 'name|<span class="token number">1</span>'<span class="token operator">:</span> array 从属性值 array 中随机选取 <span class="token number">1</span> 个元素,作为最终值。 @@ -170,7 +170,7 @@ Mock.mock(<span class="token punctuation">{</span> 通过重复属性值 array 生成一个新数组,重复次数为 count。 </code></pre><p><span id = "DPD"></span></p> -<h3 class="subject" id="数据占位符定义规范(Data Placeholder Definition,DPD)">数据占位符定义规范(Data Placeholder Definition,DPD) <a class="hashlink" href="#数据占位符定义规范(Data Placeholder Definition,DPD)">#</a></h3><pre><code>占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。 +<h3 class="subject" id="数据占位符定义规范(Data_Placeholder_Definition,DPD)">数据占位符定义规范(Data Placeholder Definition,DPD) <a class="hashlink" href="#数据占位符定义规范(Data_Placeholder_Definition,DPD)">#</a></h3><pre><code>占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。 占位符 的格式为: @@ -240,8 +240,8 @@ name<span class="token operator">:</span> <span class="token punctuation">{</spa var $this = $(this); $this.removeClass('extend').addClass('fold'); $this.html('折叠代码'); - $this.prev().height('auto'); - $this.prev().parent().height('auto'); + $this.parent().children('.js-code').height('auto'); + $this.parent().height('auto'); }); $('.ydoc-example').delegate('.fold', 'click', function() { var $this = $(this); @@ -249,7 +249,7 @@ name<span class="token operator">:</span> <span class="token punctuation">{</spa EXAMPLE_MAX_HEIGHT = lineHeight * (foldnumber || 6); $this.removeClass('fold').addClass('extend'); $this.parent().height(EXAMPLE_MAX_HEIGHT); // pre - $this.prev().height(EXAMPLE_MAX_HEIGHT); // code + $this.parent().children('.js-code').height(EXAMPLE_MAX_HEIGHT); // code $this.html("展开更多……"); }); } diff --git a/static/doc/source/app.js b/static/doc/source/app.js index 6ad0bec1..a99b7be9 100644 --- a/static/doc/source/app.js +++ b/static/doc/source/app.js @@ -129,7 +129,8 @@ $(document).ready(function() { }); $('.markdown-body pre').map(function(i, item) { - $(item).addClass('ydoc-example'); + $(item).addClass('ydoc-example').append('<div class="ui-copy js-copy" data-clipboard-action="copy" data-clipboard-target=".js-code-' + i + '" data-copy-number="' + i + '">copy</div><div class="copy-tip copy-tip-' + i + '">已复制</div>'); + $(item).children('code').addClass('js-code-'+i); }); var winHeight = $(window).height() - 44, @@ -213,4 +214,17 @@ $(document).ready(function() { return false; } } + + // 代码复制功能 + var clipboard = new Clipboard('.js-copy'); + + clipboard.on('success', function(e) { + var copyNumber = $(e.trigger).attr('data-copy-number'); + $('.copy-tip-'+copyNumber).show(); + setTimeout(function() { + $('.copy-tip-'+copyNumber).hide(); + }, 1000); + e.clearSelection(); + }); + }); diff --git a/static/doc/source/code.css b/static/doc/source/code.css index c4775fde..df68bdb0 100644 --- a/static/doc/source/code.css +++ b/static/doc/source/code.css @@ -1 +1 @@ -@charset "UTF-8";.syntaxhighlighter .toolbar a,.syntaxhighlighter.printing a{text-decoration:none!important}.ydoc .task-list,menu,ol,ul{list-style:none}.syntaxhighlighter a,.syntaxhighlighter code,.syntaxhighlighter div,.syntaxhighlighter table,.syntaxhighlighter table caption,.syntaxhighlighter table tbody,.syntaxhighlighter table td,.syntaxhighlighter table thead,.syntaxhighlighter table tr,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:0 0!important;border:0!important;bottom:auto!important;float:none!important;height:auto!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace!important;font-weight:400!important;font-style:normal!important;font-size:1em!important;min-height:inherit!important;min-height:auto!important}.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}.syntaxhighlighter,.syntaxhighlighter table td.code .container{position:relative!important}.syntaxhighlighter,.syntaxhighlighter table,.syntaxhighlighter table td.code{width:100%!important}.syntaxhighlighter .bold,.syntaxhighlighter .keyword,.syntaxhighlighter .script,.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter{margin:1em 0!important;overflow:auto!important;font-size:1em!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .line{white-space:pre!important}.syntaxhighlighter table caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter table td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;height:100%!important;border:none!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter table td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter table td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important;height:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter .toolbar span.title,.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource,.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:0 0!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content,.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#069!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter .line.highlighted.number,.syntaxhighlighter table caption,.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter,.syntaxhighlighter .line.alt1,.syntaxhighlighter .line.alt2{background-color:#fff!important}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important}.syntaxhighlighter .gutter{color:#afafaf!important}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a,.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#069!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{color:#069!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.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 .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%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%} \ No newline at end of file +@charset "UTF-8";.syntaxhighlighter .toolbar a,.syntaxhighlighter.printing a{text-decoration:none!important}.ydoc .task-list,menu,ol,ul{list-style:none}.syntaxhighlighter a,.syntaxhighlighter code,.syntaxhighlighter div,.syntaxhighlighter table,.syntaxhighlighter table caption,.syntaxhighlighter table tbody,.syntaxhighlighter table td,.syntaxhighlighter table thead,.syntaxhighlighter table tr,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:0 0!important;border:0!important;bottom:auto!important;float:none!important;height:auto!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Consolas,"Bitstream Vera Sans Mono","Courier New",Courier,monospace!important;font-weight:400!important;font-style:normal!important;font-size:1em!important;min-height:inherit!important;min-height:auto!important}.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}.syntaxhighlighter,.syntaxhighlighter table td.code .container{position:relative!important}.syntaxhighlighter,.syntaxhighlighter table,.syntaxhighlighter table td.code{width:100%!important}.syntaxhighlighter .bold,.syntaxhighlighter .keyword,.syntaxhighlighter .script,.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter{margin:1em 0!important;overflow:auto!important;font-size:1em!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .line{white-space:pre!important}.syntaxhighlighter table caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter table td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;height:100%!important;border:none!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter table td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter table td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important;height:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter .toolbar span.title,.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource,.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:0 0!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content,.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#069!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter .line.highlighted.number,.syntaxhighlighter table caption,.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter,.syntaxhighlighter .line.alt1,.syntaxhighlighter .line.alt2{background-color:#fff!important}.syntaxhighlighter .line.highlighted.alt1,.syntaxhighlighter .line.highlighted.alt2{background-color:#e0e0e0!important}.syntaxhighlighter .gutter{color:#afafaf!important}.syntaxhighlighter .gutter .line{border-right:3px solid #6ce26c!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a,.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#069!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{color:#069!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.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 .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%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .ydoc-example .ui-copy{position:absolute;right:0;top:-1px;text-align:center;line-height:20px;width:40px;height:24px;border-left:1px solid #ccc;border-bottom:1px solid #ccc;border-bottom-left-radius:3px;background-color:#efefef;cursor:pointer;user-select:none;transition:all .4s;transform:translateY(0)}.ydoc-container-content .ydoc-example .ui-copy:hover{transform:translateY(1px);background-color:#fff}.ydoc-container-content .ydoc-example .copy-tip{display:none;color:#fff;padding:4px;border-radius:4px;position:absolute;right:0;top:27px;background-color:rgba(0,0,0,.85)}.ydoc-container-content .ydoc-example .copy-tip:after{content:'';display:block;position:absolute;right:20px;top:-8px;transform:translateX(50%);width:0;height:0;border:4px solid transparent;border-bottom-color:rgba(0,0,0,.85)}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%} \ No newline at end of file diff --git a/static/doc/source/main.css b/static/doc/source/main.css index f7791892..367c06fd 100644 --- a/static/doc/source/main.css +++ b/static/doc/source/main.css @@ -1 +1 @@ -@charset "UTF-8";.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.ydoc .task-list,menu,ol,ul{list-style:none}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function{color:#DD4A68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.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 .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%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%} \ No newline at end of file +@charset "UTF-8";.ydoc .navbar-brand>li,.ydoc-nav li{float:left}.ydoc .task-list,menu,ol,ul{list-style:none}.markdown-body .anchor:focus,a,button,input,select,textarea{outline:0}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#a67f59;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.function{color:#DD4A68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}html{font-size:100px;height:100%}blockquote,body,button,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,input,legend,ol,p,pre,td,textarea,th,ul,xmp{margin:0;padding:0}body,button,code,input,kbd,pre,samp,select,textarea,tt,xmp{height:100%;line-height:1.5;font-family:tahoma,arial,"Hiragino Sans GB",simsun,sans-serif}.clr,.clrfix:after{height:0;clear:both}big,button,h1,h2,h3,h4,h5,h6,input,select,small,textarea{font-size:100%}h1,h2,h3,h4,h5,h6{font-family:tahoma,arial,"Hiragino Sans GB","微软雅黑",simsun,sans-serif;font-weight:400}.ydoc .task-list,.ydoc .ydocIcon{font-family:ydocfont}address,cite,dfn,em,i,optgroup,var{font-style:normal}table{border-collapse:collapse;border-spacing:0;text-align:left}caption,th{text-align:inherit}fieldset,img{border:0}button,img,input,object,select,textarea{vertical-align:middle}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}audio,canvas,video{display:inline-block}blockquote:after,blockquote:before,q:after,q:before{content:"\0020"}textarea{overflow:auto;resize:vertical}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.mark,mark{background-color:#fcf8e3;padding:.2em}a,del,ins,s,u{text-decoration:none}sub,sup{vertical-align:baseline}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.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 .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%}.ydoc,.ydoc-header,.ydoc-nav{font-size:.14rem}*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-tap-highlight-color:transparent}.clr{overflow:hidden}.clrfix{zoom:1}.clrfix:after{display:block;visibility:hidden;content:"."}@font-face{font-family:ydocfont;font-style:normal;font-weight:400;src:url(fonts/ydoc.eot?v=1.0.0);src:url(fonts/ydoc.eot?#iefix&#iefix&v=1.0.0) format("embedded-opentype"),url(fonts/ydoc.woff?v=1.0.0) format("woff"),url(fonts/ydoc.ttf?v=1.0.0) format("truetype"),url(source/fonts/ydoc.svg?v=1.0.0#icomoonregular) format("svg")}.ydoc{background:#fafafa;overflow:hidden;height:auto;min-height:100%;position:relative}.ydoc-header{line-height:.48rem;color:#3b3b3b;text-align:right;padding:0 .2rem;background-color:#252a31;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.ydoc-header a,.ydoc-nav{color:#fff}.ydoc-header-area{margin:0 auto}.ydoc .navbar-brand{width:auto;float:left;margin-right:20px;font-weight:700}.ydoc-nav li a{padding:0 15px;color:#fff;transition:all .4s}.ydoc-nav .active,.ydoc-nav .active a,.ydoc-nav li a:hover{color:#ff503f}.ydoc-nav .navbar-right{float:right}.ydoc-nav .navbar-left{float:left}.ydoc-second-header{background:#252a31}.ydoc-second-header a{color:#fff}.ydoc-second-header .ydoc-nav{float:right}.ydoc .task-list .checkbox{vertical-align:baseline;user-select:none}.ydoc .ydoc-header:after{content:'';display:block;clear:both}.ydoc .version-selector{color:#ff503f}.ydoc .version-selector .icon{vertical-align:bottom}.ydoc .m-version{float:left;color:#fff;cursor:pointer;position:relative}.ydoc .m-version-mask{display:none;position:absolute;left:0;top:.4rem;z-index:1;background-color:#fff;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.ydoc .m-version-item{line-height:normal;text-align:center}.ydoc .link{display:inline-block;color:#000;padding:.08rem .3rem;width:100%;transition:all .4s}.ydoc .link:hover{background-color:#eee}.ydoc .navbar-toggle{float:right;font-size:.22rem;display:none;background:0 0;border:none;cursor:pointer;color:#fff;line-height:.48rem}.ydoc .ydoc-banner-bg{background:url(images/grid-18px-masked.png) 0 top repeat-x;padding-bottom:121px}.ydoc .ydoc-banner-bg .desc{font-family:"微软雅黑"}.ydoc .ydoc-banner-home{padding:.8rem 0;text-align:center}.ydoc .ydoc-banner-home .home-title{margin-bottom:.2rem;font-size:.8rem;font-weight:700}.ydoc .ydoc-banner-home .home-desc{padding:0 1rem .16rem;font-size:.28rem}.ydoc .ydoc-banner-home .home-btn{display:inline-block;margin:.04rem;padding:.1rem .4rem;min-width:1.5rem;border:1px solid;border-radius:.05rem;color:#ff503f;font-size:.2rem;font-weight:700;transition:all .4s}.ydoc .ydoc-banner-home .home-btn:hover{text-decoration:none;border-color:#ff503f;background-color:#ff503f;color:#fff}.ydoc .ydoc-banner-home .home-version{display:block;margin-top:.15rem;color:#ff503f;font-size:.14rem}.ydoc .home-page-title{text-align:center;margin-top:.6rem;border:none;font-size:.35rem}.ydoc .home-page-desc{text-align:center;width:80%;margin:.2rem auto;color:#666;font-size:.2rem}.ydoc .home-thumbnail{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-around;-moz-box-pack:justify;-moz-justify-content:space-around;-ms-flex-pack:justify;justify-content:space-around;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 .6rem;margin:0;list-style:none}.ydoc .home-item{overflow:hidden;width:200px;-webkit-background-clip:padding-box!important;-moz-background-clip:padding-box!important;-ms-background-clip:padding-box!important;background-clip:padding-box!important}.ydoc .home-thumbnail-img{margin:.16rem 0;text-align:center}.ydoc .home-thumbnail-src{margin:10px 3%;vertical-align:middle;max-width:1rem;max-height:1rem}.ydoc .home-thumbnail-name{color:#444;text-align:center;font-size:.18rem;margin-top:.3rem;margin-bottom:.16rem}.ydoc .home-thumbnail-desc{color:#999;text-align:center;font-size:.14rem}.ydoc-banner{color:#fff;font-size:.18rem;padding:20px 30px}.ydoc-banner-area{margin:0 auto}.ydoc-banner-area h1{font-size:.28rem;margin-bottom:.1rem;color:#333}.ydoc-banner-area p{line-height:1.7;margin:0 0 10px;color:#333}.ydoc .footer{text-align:center;position:absolute;left:0;bottom:0;overflow:hidden;margin:0 auto;padding:40px 0 60px;width:100%;color:#fff;background:#252a31;font-size:14px}.ydoc .footer .copyright{font-size:14px;text-align:center;color:#a1a1a1}.ydoc .footer .copyright a{color:#a1a1a1;text-decoration:underline}.ydoc-container{clear:both;overflow:hidden}.ydoc-container-content{overflow:hidden;background-color:#fff;margin:.2rem auto;padding:.24rem 0;box-shadow:0 0 3px #e5e5e5;position:relative}.ydoc-container-content .static-code-content{width:100%;background:#fff;padding:.15rem}.ydoc-container-content .content-left,.ydoc-container-content .content-right{float:left;position:relative;min-height:1px}.ydoc-container-content .content-right{box-sizing:border-box;width:75%;background:#fff;padding:15px;float:right;min-height:500px}.ydoc-container-content .use-sidebar{border-left:1px solid #eee}.ydoc-container-content .hashlink{display:none}.ydoc-container-content .subject:hover .hashlink{display:inline}.ydoc-container-content .right{float:right}.ydoc-container-content .content-left{width:25%}.ydoc-container-content .docs-table del{text-decoration:line-through;color:#999}.ydoc-container-content .ydoc-example{position:relative;overflow:hidden;height:auto;margin-top:.16rem}.ydoc-container-content .ydoc-example code{overflow-y:hidden;display:block;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace}.ydoc-container-content .ydoc-example .extend,.ydoc-container-content .ydoc-example .fold{color:#337ab7;position:absolute;left:15px;bottom:10px;cursor:pointer}.ydoc-container-content .ydoc-example .extend:hover,.ydoc-container-content .ydoc-example .fold:hover{text-decoration:underline}.ydoc-container-content .ydoc-example .ui-copy{position:absolute;right:0;top:-1px;text-align:center;line-height:20px;width:40px;height:24px;border-left:1px solid #ccc;border-bottom:1px solid #ccc;border-bottom-left-radius:3px;background-color:#efefef;cursor:pointer;user-select:none;transition:all .4s;transform:translateY(0)}.ydoc-container-content .ydoc-example .ui-copy:hover{transform:translateY(1px);background-color:#fff}.ydoc-container-content .ydoc-example .copy-tip{display:none;color:#fff;padding:4px;border-radius:4px;position:absolute;right:0;top:27px;background-color:rgba(0,0,0,.85)}.ydoc-container-content .ydoc-example .copy-tip:after{content:'';display:block;position:absolute;right:20px;top:-8px;transform:translateX(50%);width:0;height:0;border:4px solid transparent;border-bottom-color:rgba(0,0,0,.85)}.ydoc-container-content .docs-sidebar{background:#fff;z-index:9999;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav{padding-left:0;overflow-x:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li{line-height:.42rem;height:.42rem;font-size:14px;overflow:hidden}.ydoc-container-content .docs-sidebar .docs-sidenav li a{padding:0 .16rem 0 .28rem;border-left:2px solid #fff;text-overflow:ellipsis;color:#666;line-height:.42rem;height:.42rem;display:inline-block;width:100%;position:relative;overflow:hidden;white-space:nowrap;transition:all .4s}.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#fff8ef;border-left-color:#fff8ef}.ydoc-container-content .docs-sidebar .docs-sidenav li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav li.active a:hover{border-left:2px solid #ff503f;color:#ff503f}.ydoc-container-content .docs-sidebar .docs-sidenav ul{width:100%}.ydoc-container-content .docs-sidebar .docs-sidenav ul li,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active{font-size:.12rem}.ydoc-container-content .docs-sidebar .docs-sidenav ul li a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li a:hover,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a,.ydoc-container-content .docs-sidebar .docs-sidenav ul li.active a:hover{padding-left:48px}.ydoc-container-content .docs-sidebar.affix{position:fixed;top:20px}.ydoc-container-content .docs-sidebar.affix-bottom{position:absolute}.ydoc-container-content .docs-section{margin:10px}.ydoc-container-content .con-list-item{margin-bottom:.32rem}.open-panel{display:none;overflow:hidden;position:fixed;right:5%;bottom:50px;opacity:.5;width:40px;height:40px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpEMzJFMTVDOUNCMTQxMUU2OERGOEZGOEM1MkU1MUJENCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQThGQTIzRENEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQThGQTIzQ0NEQTUxMUU2QTczMUM3QjRDM0UxNjQxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODZjMjliOTEtNjI0Zi1iZDQ3LWEzZWQtMDIwYzQwNDQxMjlkIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkQzMkUxNUM5Q0IxNDExRTY4REY4RkY4QzUyRTUxQkQ0Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+g3TxwAAAANRJREFUeNrsmT0KwkAQhWfXNGLhQewUW08i2FlZ7LZeQMRiC0EQwcvYixcRrbRc35DYaJNGdpD34EsRUnzs/AQSF0IQpAN2YAq6wEmZZPAABxD1RtVwAQMpHz2YHtBTm4Cxx2VrRO4zQ7BSwZnYzdw3PWc1fS+246wLCgX/XrBq81BK6SdvlhhjZolNlLhNKTjFFOQe5B7kHuQUU5B7kHuQe5BTTEEKUvArWQWfhgVvKng0LLhXwQU4G5Q7geW7B0dgA+5S/woo1nPgCtZSf+WXlwADAGEgKNreXHUxAAAAAElFTkSuQmCC) no-repeat}@media screen and (min-width:1200px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:1200px}}@media screen and (min-width:992px) and (max-width:1199px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:992px}}@media screen and (min-width:768px) and (max-width:991px){.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:768px}}@media screen and (max-width:767px){.mask,.ydoc-container-content .content-left{position:fixed;top:0;transition:all .4s;height:100%}.mask,.ydoc{height:100%}.mask{display:none;left:0;z-index:0;width:100%;background-color:transparent}.show{background-color:rgba(0,0,0,.35)}.ydoc-container-home{padding:.2rem}.ydoc-container-home .home-page-desc{font-size:.14rem}.ydoc-container-content .content-right{width:100%!important}.ydoc-container-content .content-left{display:block;right:-75%;width:75%!important;background-color:#222;z-index:1;-webkit-transition:all .4s}.ydoc .footer,.ydoc-container-content .docs-sidebar.affix{position:static}.ydoc-container-content .content-left:before{content:'目录:';display:block;padding:.28rem;color:#999;background-color:#2c2c2c;font-weight:700}.ydoc-container-content .docs-sidebar,.ydoc-container-content .docs-sidebar .docs-sidenav li a:hover{background-color:#222}.ydoc-container-content .docs-sidebar .docs-sidenav li a{color:#999;border-color:#222;transition:all .4s}.ydoc-container-content .instructions-con-runner{display:none}.open-panel{display:block;cursor:default;transition:all .4s;-webkit-transition:all .4s}.ydoc-banner-area,.ydoc-container-content,.ydoc-header-area{width:100%}.ydoc{overflow:scroll;-webkit-overflow-scrolling:touch}.ydoc .navbar-toggle{display:inline-block}.ydoc .ydoc-nav{display:none;clear:both;width:100%}.ydoc .ydoc-nav .navbar-left,.ydoc .ydoc-nav .navbar-right{width:100%}.ydoc .ydoc-nav .navbar-left li,.ydoc .ydoc-nav .navbar-right li{width:100%;text-align:left;display:inline-block}.ydoc .ydoc-nav .navbar-left li a,.ydoc .ydoc-nav .navbar-right li a{padding:0;width:100%;display:inline-block;transition:all .4s}.ydoc .ydoc-nav .navbar-left li a:hover,.ydoc .ydoc-nav .navbar-right li a:hover{color:#ff503f}.ydoc .ydoc-banner-bg{padding-bottom:0}.ydoc .ydoc-banner-home{padding:.4rem 0}.ydoc .ydoc-banner-home .home-title{font-size:.6rem}.ydoc .ydoc-banner-home .home-desc{padding:0 .2rem;font-size:.2rem}.ydoc .home-page-title{font-size:.24rem}.off-webkit-scroll{-webkit-overflow-scrolling:auto}.hidden{overflow:hidden}.ydoc-second-header,.ydoc-second-header .ydoc-nav{display:block}.ydoc-second-header .ydoc-nav li{float:left}}.anchorjs-link{display:none}@media screen and (min-width:768px){.ydoc-container-content .staticsidenav .docs-sidebar.affix{position:static}.ydoc-container-content .staticsidenav .docs-sidebar .docs-sidenav{overflow:inherit}.staticsidenav .docs-sidebar{overflow:initial}}.markdown-body code{color:#c7254e;background-color:#f9f2f4;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{display:block;margin:0 0 10px;word-break:break-all;color:#333;background-color:#fafafa;border:1px solid #ccc}.markdown-body::after,.markdown-body::before{display:table;content:""}.markdown-body pre code{font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.markdown-body em{font-style:italic}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;word-wrap:break-word}.markdown-body a{color:#337ab7}.markdown-body::after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.markdown-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1.15em}.markdown-body h5{font-size:.875em}.markdown-body h6{font-size:.85em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em;list-style-type:disc}.markdown-body ol.no-list,.markdown-body ul.no-list{padding:0;list-style-type:none}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:0;margin-bottom:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #ddd}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#333}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{letter-spacing:-.2em;content:"\00a0"}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:0 0;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body pre{word-wrap:normal}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.glyphicon,.markdown-body kbd,.yo-badge{display:inline-block}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body kbd{padding:3px 5px;font-size:11px;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}#readme.contributing>div{max-height:250px;overflow:auto}#readme .markdown-body,#readme .plain{background-color:#fff;border:1px solid #ddd;border-bottom-left-radius:3px;border-bottom-right-radius:3px;padding:30px;word-wrap:break-word}#readme .plain pre{font-size:15px;white-space:pre-wrap}#readme .markdown-body{border:0;padding:30px;border-radius:0}#readme table[data-table-type=yaml-metadata]{line-height:1;font-size:12px}#readme table[data-table-type=yaml-metadata] table{margin:0}.yo-badge{padding:1px .1rem;color:#fff;font-size:.12rem;margin-left:10px;border-radius:12px;font-weight:400}.yo-badge-primary{color:#337ab7;border:1px solid #337ab7}.yo-badge-success{color:#5cb85c;border:1px solid #5cb85c}.yo-badge-info{color:#5bc0de;border:1px solid #5bc0de}.yo-badge-warning{color:#f0ad4e;border:1px solid #f0ad4e}.yo-badge-danger{color:#d9534f;border:1px solid #d9534f}.glyphicon{position:relative;top:1px;font-family:ydocfont;font-style:normal;font-weight:700;font-size:.2rem;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:"\f078"}.text-success{color:#3c763d}.release-date{font-size:1em;color:grey}.change-type{font-size:1em;color:#ff503f}.markdown-body blockquote.api{border-left:none;padding:0;color:#ff503f}.markdown-body .docs-section h1,.markdown-body .docs-section h2{border-bottom:none}.markdown-body .docs-section li .ydoc-example{left:-2em}.markdown-body .docs-section .blockquote.api{padding:0 0 .15rem}.markdown-body .docs-section h3{color:#ff503f;border-left-color:#ff503f;font-weight:400}.markdown-body .docs-section h3 a{color:#ff503f}.markdown-body .docs-section .con-list-item .con-head{font-size:22px;font-weight:700;border-bottom:1px solid #ddd;margin:0 0 .2rem;padding:.1rem 0;width:100%}.markdown-body .docs-section .con-list-item .prop-type{font-size:14px}.markdown-body .docs-section .con-list-item:last-child{border:none}.markdown-body .docs-section .hide-params{display:none}.markdown-body .docs-section .show-params{display:table-row}.markdown-body .docs-section .extend-params,.markdown-body .docs-section .fold-params{color:#337ab7;margin:-.1rem 0 .15rem;display:block;cursor:pointer}.instructions{margin-bottom:.2rem;overflow:hidden}.instructions-con{display:flex;flex-direction:row}.instructions-con-info{flex:1;overflow:hidden;padding-right:10px}.instructions-con-runner{width:3.2rem;height:6.5rem;padding:0 .16rem;background:url(images/feed.png) no-repeat;background-size:100%;position:relative}.instructions-con-runner .instructions-iframe{background:#fff;width:2.9rem;height:5.1rem;position:absolute;top:.66rem;left:.18rem;border:0}.ui-badge{color:#fff;background-color:#ff503f;font-size:.12rem;padding:.03rem .08rem;border-radius:.03rem}.ydoc-container-content .nosidebar{width:100%} \ No newline at end of file diff --git a/static/doc/source/main.js b/static/doc/source/main.js index 6c4dbac6..af8d4e62 100644 --- a/static/doc/source/main.js +++ b/static/doc/source/main.js @@ -1,6 +1,6 @@ -function AnchorJS(e){"use strict";this.options=e||{},this._applyRemainingDefaultOptions=function(e){this.options.icon=this.options.hasOwnProperty("icon")?e.icon:"",this.options.visible=this.options.hasOwnProperty("visible")?e.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?e.placement:"right",this.options.class=this.options.hasOwnProperty("class")?e.class:""},this._applyRemainingDefaultOptions(e),this.add=function(e){var t,n,i,o,r,s,a,l,c,u,d,f,p,h;if(this._applyRemainingDefaultOptions(this.options),e){if("string"!=typeof e)throw new Error("The selector provided to AnchorJS was invalid.")}else e="h1, h2, h3, h4, h5, h6";if(t=document.querySelectorAll(e),0===t.length)return!1;for(this._addBaselineStyles(),n=document.querySelectorAll("[id]"),i=[].map.call(n,function(e){return e.id}),r=0;r<t.length;r++){if(t[r].hasAttribute("id"))o=t[r].getAttribute("id");else{s=t[r].textContent,a=s.replace(/[^\w\s-]/gi,"").replace(/\s+/g,"-").replace(/-{2,}/g,"-").substring(0,32).replace(/^-+|-+$/gm,"").toLowerCase(),u=a,c=0;do void 0!==l&&(u=a+"-"+c),l=i.indexOf(u),c+=1;while(-1!==l);l=void 0,i.push(u),t[r].setAttribute("id",u),o=u}d=o.replace(/-/g," "),f='<a class="anchorjs-link '+this.options.class+'" href="#'+o+'" aria-label="Anchor link for: '+d+'" data-anchorjs-icon="'+this.options.icon+'"></a>',p=document.createElement("div"),p.innerHTML=f,h=p.childNodes,"always"===this.options.visible&&(h[0].style.opacity="1"),""===this.options.icon&&(h[0].style.fontFamily="anchorjs-icons",h[0].style.fontStyle="normal",h[0].style.fontVariant="normal",h[0].style.fontWeight="normal"),"left"===this.options.placement?(h[0].style.position="absolute",h[0].style.marginLeft="-1em",h[0].style.paddingRight="0.5em",t[r].insertBefore(h[0],t[r].firstChild)):(h[0].style.paddingLeft="0.375em",t[r].appendChild(h[0]))}return this},this.remove=function(e){for(var t,n=document.querySelectorAll(e),i=0;i<n.length;i++)t=n[i].querySelector(".anchorjs-link"),t&&n[i].removeChild(t);return this},this._addBaselineStyles=function(){if(null===document.head.querySelector("style.anchorjs")){var e,t=document.createElement("style"),n=" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",i=" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",o=' @font-face { font-family: "anchorjs-icons"; font-style: normal; font-weight: normal; src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"); }',r=" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }";t.className="anchorjs",t.appendChild(document.createTextNode("")),e=document.head.querySelector('[rel="stylesheet"], style'),void 0===e?document.head.appendChild(t):document.head.insertBefore(t,e),t.sheet.insertRule(n,t.sheet.cssRules.length),t.sheet.insertRule(i,t.sheet.cssRules.length),t.sheet.insertRule(r,t.sheet.cssRules.length),t.sheet.insertRule(o,t.sheet.cssRules.length)}}}if(!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"!==n&&!oe.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e))}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(fe.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function r(e){var t=Ae[e]={};return oe.each(e.match(be)||[],function(e,n){t[n]=!0}),t}function s(){he.addEventListener?(he.removeEventListener("DOMContentLoaded",a,!1),e.removeEventListener("load",a,!1)):(he.detachEvent("onreadystatechange",a),e.detachEvent("onload",a))}function a(){(he.addEventListener||"load"===event.type||"complete"===he.readyState)&&(s(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Ee,"-$1").toLowerCase();if(n=e.getAttribute(i),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Te.test(n)?oe.parseJSON(n):n)}catch(e){}oe.data(e,t,n)}else n=void 0}return n}function c(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(e,t,n,i){if(oe.acceptData(e)){var o,r,s=oe.expando,a=e.nodeType,l=a?oe.cache:e,c=a?e[s]:e[s]&&s;if(c&&l[c]&&(i||l[c].data)||void 0!==n||"string"!=typeof t)return c||(c=a?e[s]=X.pop()||oe.guid++:s),l[c]||(l[c]=a?{}:{toJSON:oe.noop}),("object"==typeof t||"function"==typeof t)&&(i?l[c]=oe.extend(l[c],t):l[c].data=oe.extend(l[c].data,t)),r=l[c],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?(o=r[t],null==o&&(o=r[oe.camelCase(t)])):o=r,o}}function d(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,s=r?oe.cache:e,a=r?e[oe.expando]:oe.expando;if(s[a]){if(t&&(i=n?s[a]:s[a].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!c(i):!oe.isEmptyObject(i))return}(n||(delete s[a].data,c(s[a])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function f(){return!0}function p(){return!1}function h(){try{return he.activeElement}catch(e){}}function g(e){var t=Re.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==Ce?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==Ce?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){$e.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function A(e){var t=Ge.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function x(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function w(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),s=oe._data(t,r),a=r.events;if(a){delete s.handle,s.events={};for(n in a)for(i=0,o=a[n].length;o>i;i++)oe.event.add(t,n,a[n][i])}s.data&&(s.data=oe.extend({},s.data))}}function C(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,A(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&$e.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function T(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function E(e){var t=he,n=Ke[e];return n||(n=T(e,t),"none"!==n&&n||(Je=(Je||oe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=(Je[0].contentWindow||Je[0].contentDocument).document,t.write(),t.close(),n=T(e,t),Je.detach()),Ke[e]=n),n}function S(e,t){return{get:function(){var n=e();if(null!=n)return n?void delete this.get:(this.get=t).apply(this,arguments)}}}function k(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=t,o=ft.length;o--;)if(t=ft[o]+n,t in e)return t;return i}function N(e,t){for(var n,i,o,r=[],s=0,a=e.length;a>s;s++)i=e[s],i.style&&(r[s]=oe._data(i,"olddisplay"),n=i.style.display,t?(r[s]||"none"!==n||(i.style.display=""),""===i.style.display&&Ne(i)&&(r[s]=oe._data(i,"olddisplay",E(i.nodeName)))):(o=Ne(i),(n&&"none"!==n||!o)&&oe._data(i,"olddisplay",o?n:oe.css(i,"display"))));for(s=0;a>s;s++)i=e[s],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?r[s]||"":"none"));return e}function D(e,t,n){var i=lt.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):t}function $(e,t,n,i,o){for(var r=n===(i?"border":"content")?4:"width"===t?1:0,s=0;4>r;r+=2)"margin"===n&&(s+=oe.css(e,n+ke[r],!0,o)),i?("content"===n&&(s-=oe.css(e,"padding"+ke[r],!0,o)),"margin"!==n&&(s-=oe.css(e,"border"+ke[r]+"Width",!0,o))):(s+=oe.css(e,"padding"+ke[r],!0,o),"padding"!==n&&(s+=oe.css(e,"border"+ke[r]+"Width",!0,o)));return s}function j(e,t,n){var i=!0,o="width"===t?e.offsetWidth:e.offsetHeight,r=et(e),s=ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,r);if(0>=o||null==o){if(o=tt(e,t,r),(0>o||null==o)&&(o=e.style[t]),it.test(o))return o;i=s&&(ne.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+$(e,t,n||(s?"border":"content"),i,r)+"px"}function L(e,t,n,i,o){return new L.prototype.init(e,t,n,i,o)}function O(){return setTimeout(function(){pt=void 0}),pt=oe.now()}function I(e,t){var n,i={height:e},o=0;for(t=t?1:0;4>o;o+=2-t)n=ke[o],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function B(e,t,n){for(var i,o=(bt[t]||[]).concat(bt["*"]),r=0,s=o.length;s>r;r++)if(i=o[r].call(n,t,e))return i}function R(e,t,n){var i,o,r,s,a,l,c,u,d=this,f={},p=e.style,h=e.nodeType&&Ne(e),g=oe._data(e,"fxshow");n.queue||(a=oe._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,l=a.empty.fire,a.empty.fire=function(){a.unqueued||l()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,oe.queue(e,"fx").length||a.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],c=oe.css(e,"display"),u="none"===c?oe._data(e,"olddisplay")||E(e.nodeName):c,"inline"===u&&"none"===oe.css(e,"float")&&(ne.inlineBlockNeedsLayout&&"inline"!==E(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",ne.shrinkWrapBlocks()||d.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(i in t)if(o=t[i],gt.exec(o)){if(delete t[i],r=r||"toggle"===o,o===(h?"hide":"show")){if("show"!==o||!g||void 0===g[i])continue;h=!0}f[i]=g&&g[i]||oe.style(e,i)}else c=void 0;if(oe.isEmptyObject(f))"inline"===("none"===c?E(e.nodeName):c)&&(p.display=c);else{g?"hidden"in g&&(h=g.hidden):g=oe._data(e,"fxshow",{}),r&&(g.hidden=!h),h?oe(e).show():d.done(function(){oe(e).hide()}),d.done(function(){var t;oe._removeData(e,"fxshow");for(t in f)oe.style(e,t,f[t])});for(i in f)s=B(h?g[i]:0,i,d),i in g||(g[i]=s.start,h&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function H(e,t){var n,i,o,r,s;for(n in e)if(i=oe.camelCase(n),o=t[i],r=e[n],oe.isArray(r)&&(o=r[1],r=e[n]=r[0]),n!==i&&(e[i]=r,delete e[n]),s=oe.cssHooks[i],s&&"expand"in s){r=s.expand(r),delete e[i];for(n in r)n in e||(e[n]=r[n],t[n]=o)}else t[i]=o}function M(e,t,n){var i,o,r=0,s=yt.length,a=oe.Deferred().always(function(){delete l.elem}),l=function(){if(o)return!1;for(var t=pt||O(),n=Math.max(0,c.startTime+c.duration-t),i=n/c.duration||0,r=1-i,s=0,l=c.tweens.length;l>s;s++)c.tweens[s].run(r);return a.notifyWith(e,[c,r,n]),1>r&&l?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:oe.extend({},t),opts:oe.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:pt||O(),duration:n.duration,tweens:[],createTween:function(t,n){var i=oe.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(i),i},stop:function(t){var n=0,i=t?c.tweens.length:0;if(o)return this;for(o=!0;i>n;n++)c.tweens[n].run(1);return t?a.resolveWith(e,[c,t]):a.rejectWith(e,[c,t]),this}}),u=c.props;for(H(u,c.opts.specialEasing);s>r;r++)if(i=yt[r].call(c,e,u,c.opts))return i;return oe.map(u,B,c),oe.isFunction(c.opts.start)&&c.opts.start.call(e,c),oe.fx.timer(oe.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function F(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,o=0,r=t.toLowerCase().match(be)||[];if(oe.isFunction(n))for(;i=r[o++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function P(e,t,n,i){function o(a){var l;return r[a]=!0,oe.each(e[a]||[],function(e,a){var c=a(t,n,i);return"string"!=typeof c||s||r[c]?s?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)}),l}var r={},s=e===_t;return o(t.dataTypes[0])||!r["*"]&&o("*")}function z(e,t){var n,i,o=oe.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((o[i]?e:n||(n={}))[i]=t[i]);return n&&oe.extend(!0,e,n),e}function q(e,t,n){for(var i,o,r,s,a=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(s in a)if(a[s]&&a[s].test(o)){l.unshift(s);break}if(l[0]in n)r=l[0];else{for(s in n){if(!l[0]||e.converters[s+" "+l[0]]){r=s;break}i||(i=s)}r=r||i}return r?(r!==l[0]&&l.unshift(r),n[r]):void 0}function _(e,t,n,i){var o,r,s,a,l,c={},u=e.dataTypes.slice();if(u[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(r=u.shift();r;)if(e.responseFields[r]&&(n[e.responseFields[r]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=r,r=u.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(s=c[l+" "+r]||c["* "+r],!s)for(o in c)if(a=o.split(" "),a[1]===r&&(s=c[l+" "+a[0]]||c["* "+a[0]])){s===!0?s=c[o]:c[o]!==!0&&(r=a[0],u.unshift(a[1]));break}if(s!==!0)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:"parsererror",error:s?e:"No conversion from "+l+" to "+r}}}return{state:"success",data:t}}function W(e,t,n,i){var o;if(oe.isArray(t))oe.each(t,function(t,o){n||Qt.test(e)?i(e,o):W(e+"["+("object"==typeof o?t:"")+"]",o,n,i)});else if(n||"object"!==oe.type(t))i(e,t);else for(o in t)W(e+"["+o+"]",t[o],n,i)}function U(){try{return new e.XMLHttpRequest}catch(e){}}function Q(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function G(e){return oe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var X=[],V=X.slice,Y=X.concat,Z=X.push,J=X.indexOf,K={},ee=K.toString,te=K.hasOwnProperty,ne={},ie="1.11.3",oe=function(e,t){return new oe.fn.init(e,t)},re=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,se=/^-ms-/,ae=/-([\da-z])/gi,le=function(e,t){return t.toUpperCase()};oe.fn=oe.prototype={jquery:ie,constructor:oe,selector:"",length:0,toArray:function(){return V.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:V.call(this)},pushStack:function(e){var t=oe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return oe.each(this,e,t)},map:function(e){return this.pushStack(oe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(V.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:Z,sort:X.sort,splice:X.splice},oe.extend=oe.fn.extend=function(){var e,t,n,i,o,r,s=arguments[0]||{},a=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[a]||{},a++),"object"==typeof s||oe.isFunction(s)||(s={}),a===l&&(s=this,a--);l>a;a++)if(null!=(o=arguments[a]))for(i in o)e=s[i],n=o[i],s!==n&&(c&&n&&(oe.isPlainObject(n)||(t=oe.isArray(n)))?(t?(t=!1,r=e&&oe.isArray(e)?e:[]):r=e&&oe.isPlainObject(e)?e:{},s[i]=oe.extend(c,r,n)):void 0!==n&&(s[i]=n));return s},oe.extend({expando:"jQuery"+(ie+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===oe.type(e)},isArray:Array.isArray||function(e){return"array"===oe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!oe.isArray(e)&&e-parseFloat(e)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==oe.type(e)||e.nodeType||oe.isWindow(e))return!1;try{if(e.constructor&&!te.call(e,"constructor")&&!te.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(ne.ownLast)for(t in e)return te.call(e,t);for(t in e);return void 0===t||te.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?K[ee.call(e)]||"object":typeof e},globalEval:function(t){t&&oe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(se,"ms-").replace(ae,le)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,i){var o,r=0,s=e.length,a=n(e);if(i){if(a)for(;s>r&&(o=t.apply(e[r],i),o!==!1);r++);else for(r in e)if(o=t.apply(e[r],i),o===!1)break}else if(a)for(;s>r&&(o=t.call(e[r],r,e[r]),o!==!1);r++);else for(r in e)if(o=t.call(e[r],r,e[r]),o===!1)break;return e},trim:function(e){return null==e?"":(e+"").replace(re,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?oe.merge(i,"string"==typeof e?[e]:e):Z.call(i,e)),i},inArray:function(e,t,n){var i;if(t){if(J)return J.call(t,e,n);for(i=t.length,n=n?0>n?Math.max(0,i+n):n:0;i>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,i=0,o=e.length;n>i;)e[o++]=t[i++];if(n!==n)for(;void 0!==t[i];)e[o++]=t[i++];return e.length=o,e},grep:function(e,t,n){for(var i,o=[],r=0,s=e.length,a=!n;s>r;r++)i=!t(e[r],r),i!==a&&o.push(e[r]);return o},map:function(e,t,i){var o,r=0,s=e.length,a=n(e),l=[];if(a)for(;s>r;r++)o=t(e[r],r,i),null!=o&&l.push(o);else for(r in e)o=t(e[r],r,i),null!=o&&l.push(o);return Y.apply([],l)},guid:1,proxy:function(e,t){var n,i,o;return"string"==typeof t&&(o=e[t],t=e,e=o),oe.isFunction(e)?(n=V.call(arguments,2),i=function(){return e.apply(t||this,n.concat(V.call(arguments)))},i.guid=e.guid=e.guid||oe.guid++,i):void 0},now:function(){return+new Date},support:ne}),oe.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){K["[object "+t+"]"]=t.toLowerCase()});var ce=function(e){function t(e,t,n,i){var o,r,s,a,l,c,d,p,h,g;if((t?t.ownerDocument||t:P)!==L&&j(t),t=t||L,n=n||[],a=t.nodeType,"string"!=typeof e||!e||1!==a&&9!==a&&11!==a)return n;if(!i&&I){if(11!==a&&(o=ye.exec(e)))if(s=o[1]){if(9===a){if(r=t.getElementById(s),!r||!r.parentNode)return n;if(r.id===s)return n.push(r),n}else if(t.ownerDocument&&(r=t.ownerDocument.getElementById(s))&&M(t,r)&&r.id===s)return n.push(r),n}else{if(o[2])return J.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&x.getElementsByClassName)return J.apply(n,t.getElementsByClassName(s)),n}if(x.qsa&&(!B||!B.test(e))){if(p=d=F,h=t,g=1!==a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){for(c=E(e),(d=t.getAttribute("id"))?p=d.replace(Ae,"\\$&"):t.setAttribute("id",p),p="[id='"+p+"'] ",l=c.length;l--;)c[l]=p+f(c[l]);h=be.test(e)&&u(t.parentNode)||t,g=c.join(",")}if(g)try{return J.apply(n,h.querySelectorAll(g)),n}catch(e){}finally{d||t.removeAttribute("id")}}}return k(e.replace(le,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[F]=!0,e}function o(e){var t=L.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function r(e,t){for(var n=e.split("|"),i=e.length;i--;)w.attrHandle[n[i]]=t}function s(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||G)-(~e.sourceIndex||G);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,i){for(var o,r=e([],n.length,t),s=r.length;s--;)n[o=r[s]]&&(n[o]=!(i[o]=n[o]))})})}function u(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,n=e.length,i="";n>t;t++)i+=e[t].value;return i}function p(e,t,n){var i=t.dir,o=n&&"parentNode"===i,r=q++;return t.first?function(t,n,r){for(;t=t[i];)if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var a,l,c=[z,r];if(s){for(;t=t[i];)if((1===t.nodeType||o)&&e(t,n,s))return!0}else for(;t=t[i];)if(1===t.nodeType||o){if(l=t[F]||(t[F]={}),(a=l[i])&&a[0]===z&&a[1]===r)return c[2]=a[2];if(l[i]=c,c[2]=e(t,n,s))return!0}}}function h(e){return e.length>1?function(t,n,i){for(var o=e.length;o--;)if(!e[o](t,n,i))return!1;return!0}:e[0]}function g(e,n,i){for(var o=0,r=n.length;r>o;o++)t(e,n[o],i);return i}function m(e,t,n,i,o){for(var r,s=[],a=0,l=e.length,c=null!=t;l>a;a++)(r=e[a])&&(!n||n(r,i,o))&&(s.push(r),c&&t.push(a));return s}function v(e,t,n,o,r,s){return o&&!o[F]&&(o=v(o)),r&&!r[F]&&(r=v(r,s)),i(function(i,s,a,l){var c,u,d,f=[],p=[],h=s.length,v=i||g(t||"*",a.nodeType?[a]:a,[]),y=!e||!i&&t?v:m(v,f,e,a,l),b=n?r||(i?e:h||o)?[]:s:y;if(n&&n(y,b,a,l),o)for(c=m(b,p),o(c,[],a,l),u=c.length;u--;)(d=c[u])&&(b[p[u]]=!(y[p[u]]=d));if(i){if(r||e){if(r){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);r(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=r?ee(i,d):f[u])>-1&&(i[c]=!(s[c]=d))}}else b=m(b===s?b.splice(h,b.length):b),r?r(null,s,b,l):J.apply(s,b)})}function y(e){for(var t,n,i,o=e.length,r=w.relative[e[0].type],s=r||w.relative[" "],a=r?1:0,l=p(function(e){return e===t},s,!0),c=p(function(e){return ee(t,e)>-1},s,!0),u=[function(e,n,i){var o=!r&&(i||n!==N)||((t=n).nodeType?l(e,n,i):c(e,n,i));return t=null,o}];o>a;a++)if(n=w.relative[e[a].type])u=[p(h(u),n)];else{if(n=w.filter[e[a].type].apply(null,e[a].matches),n[F]){for(i=++a;o>i&&!w.relative[e[i].type];i++);return v(a>1&&h(u),a>1&&f(e.slice(0,a-1).concat({value:" "===e[a-2].type?"*":""})).replace(le,"$1"),n,i>a&&y(e.slice(a,i)),o>i&&y(e=e.slice(i)),o>i&&f(e))}u.push(n)}return h(u)}function b(e,n){var o=n.length>0,r=e.length>0,s=function(i,s,a,l,c){var u,d,f,p=0,h="0",g=i&&[],v=[],y=N,b=i||r&&w.find.TAG("*",c),A=z+=null==y?1:Math.random()||.1,x=b.length;for(c&&(N=s!==L&&s);h!==x&&null!=(u=b[h]);h++){if(r&&u){for(d=0;f=e[d++];)if(f(u,s,a)){l.push(u);break}c&&(z=A)}o&&((u=!f&&u)&&p--,i&&g.push(u))}if(p+=h,o&&h!==p){for(d=0;f=n[d++];)f(g,v,s,a);if(i){if(p>0)for(;h--;)g[h]||v[h]||(v[h]=Y.call(l));v=m(v)}J.apply(l,v),c&&!i&&v.length>0&&p+n.length>1&&t.uniqueSort(l)}return c&&(z=A,N=y),g};return o?i(s):s}var A,x,w,C,T,E,S,k,N,D,$,j,L,O,I,B,R,H,M,F="sizzle"+1*new Date,P=e.document,z=0,q=0,_=n(),W=n(),U=n(),Q=function(e,t){return e===t&&($=!0),0},G=1<<31,X={}.hasOwnProperty,V=[],Y=V.pop,Z=V.push,J=V.push,K=V.slice,ee=function(e,t){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},te="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ne="[\\x20\\t\\r\\n\\f]",ie="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",oe=ie.replace("w","w#"),re="\\["+ne+"*("+ie+")(?:"+ne+"*([*^$|!~]?=)"+ne+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+oe+"))|)"+ne+"*\\]",se=":("+ie+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+re+")*)|.*)\\)|)",ae=new RegExp(ne+"+","g"),le=new RegExp("^"+ne+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ne+"+$","g"),ce=new RegExp("^"+ne+"*,"+ne+"*"),ue=new RegExp("^"+ne+"*([>+~]|"+ne+")"+ne+"*"),de=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(se),pe=new RegExp("^"+oe+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie.replace("w","w*")+")"),ATTR:new RegExp("^"+re),PSEUDO:new RegExp("^"+se),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},ge=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ve=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,be=/[+~]/,Ae=/'|\\/g,xe=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Ce=function(){j()};try{J.apply(V=K.call(P.childNodes),P.childNodes),V[P.childNodes.length].nodeType}catch(e){J={apply:V.length?function(e,t){Z.apply(e,K.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}x=t.support={},T=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},j=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:P;return i!==L&&9===i.nodeType&&i.documentElement?(L=i,O=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),I=!T(i),x.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),x.getElementsByTagName=o(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),x.getElementsByClassName=ve.test(i.getElementsByClassName),x.getById=o(function(e){return O.appendChild(e).id=F,!i.getElementsByName||!i.getElementsByName(F).length}),x.getById?(w.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&I){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(xe,we);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(xe,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=x.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):x.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],o=0,r=t.getElementsByTagName(e);if("*"===e){for(;n=r[o++];)1===n.nodeType&&i.push(n);return i}return r},w.find.CLASS=x.getElementsByClassName&&function(e,t){return I?t.getElementsByClassName(e):void 0},R=[],B=[],(x.qsa=ve.test(i.querySelectorAll))&&(o(function(e){O.appendChild(e).innerHTML="<a id='"+F+"'></a><select id='"+F+"-\f]' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&B.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||B.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+F+"-]").length||B.push("~="),e.querySelectorAll(":checked").length||B.push(":checked"),e.querySelectorAll("a#"+F+"+*").length||B.push(".#.+[+~]")}),o(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&B.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||B.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),B.push(",.*:")})),(x.matchesSelector=ve.test(H=O.matches||O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&o(function(e){x.disconnectedMatch=H.call(e,"div"),H.call(e,"[s!='']:x"),R.push("!=",se)}),B=B.length&&new RegExp(B.join("|")),R=R.length&&new RegExp(R.join("|")),t=ve.test(O.compareDocumentPosition),M=t||ve.test(O.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Q=t?function(e,t){if(e===t)return $=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===i||e.ownerDocument===P&&M(P,e)?-1:t===i||t.ownerDocument===P&&M(P,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return $=!0,0;var n,o=0,r=e.parentNode,a=t.parentNode,l=[e],c=[t];if(!r||!a)return e===i?-1:t===i?1:r?-1:a?1:D?ee(D,e)-ee(D,t):0;if(r===a)return s(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[o]===c[o];)o++;return o?s(l[o],c[o]):l[o]===P?-1:c[o]===P?1:0},i):L},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==L&&j(e),n=n.replace(de,"='$1']"),!(!x.matchesSelector||!I||R&&R.test(n)||B&&B.test(n)))try{var i=H.call(e,n);if(i||x.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,L,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==L&&j(e),M(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==L&&j(e);var n=w.attrHandle[t.toLowerCase()],i=n&&X.call(w.attrHandle,t.toLowerCase())?n(e,t,!I):void 0;return void 0!==i?i:x.attributes||!I?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,o=0;if($=!x.detectDuplicates,D=!x.sortStable&&e.slice(0),e.sort(Q),$){for(;t=e[o++];)t===e[o]&&(i=n.push(o));for(;i--;)e.splice(n[i],1)}return D=null,e},C=t.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=C(t);return n},w=t.selectors={cacheLength:50,createPseudo:i,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,we),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])), -e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=_[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&_(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(o){var r=t.attr(o,e);return null==r?"!="===n:!n||(r+="","="===n?r===i:"!="===n?r!==i:"^="===n?i&&0===r.indexOf(i):"*="===n?i&&r.indexOf(i)>-1:"$="===n?i&&r.slice(-i.length)===i:"~="===n?(" "+r.replace(ae," ")+" ").indexOf(i)>-1:"|="===n&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,o){var r="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===i&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,g=r!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),y=!l&&!a;if(m){if(r){for(;g;){for(d=t;d=d[g];)if(a?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?m.firstChild:m.lastChild],s&&y){for(u=m[F]||(m[F]={}),c=u[e]||[],p=c[0]===z&&c[1],f=c[0]===z&&c[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(f=p=0)||h.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[z,p,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===z)f=c[1];else for(;(d=++p&&d&&d[g]||(f=p=0)||h.pop())&&((a?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[z,f]),d!==t)););return f-=o,f===i||f%i===0&&f/i>=0}}},PSEUDO:function(e,n){var o,r=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return r[F]?r(n):r.length>1?(o=[e,e,"",n],w.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,o=r(e,n),s=o.length;s--;)i=ee(e,o[s]),e[i]=!(t[i]=o[s])}):function(e){return r(e,0,o)}):r}},pseudos:{not:i(function(e){var t=[],n=[],o=S(e.replace(le,"$1"));return o[F]?i(function(e,t,n,i){for(var r,s=o(e,null,i,[]),a=e.length;a--;)(r=s[a])&&(e[a]=!(t[a]=r))}):function(e,i,r){return t[0]=e,o(t,null,r,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(xe,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:i(function(e){return pe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(xe,we).toLowerCase(),function(t){var n;do if(n=I?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===O},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return ge.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var i=0>n?n+t:n;--i>=0;)e.push(i);return e}),gt:c(function(e,t,n){for(var i=0>n?n+t:n;++i<t;)e.push(i);return e})}},w.pseudos.nth=w.pseudos.eq;for(A in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[A]=a(A);for(A in{submit:!0,reset:!0})w.pseudos[A]=l(A);return d.prototype=w.filters=w.pseudos,w.setFilters=new d,E=t.tokenize=function(e,n){var i,o,r,s,a,l,c,u=W[e+" "];if(u)return n?0:u.slice(0);for(a=e,l=[],c=w.preFilter;a;){(!i||(o=ce.exec(a)))&&(o&&(a=a.slice(o[0].length)||a),l.push(r=[])),i=!1,(o=ue.exec(a))&&(i=o.shift(),r.push({value:i,type:o[0].replace(le," ")}),a=a.slice(i.length));for(s in w.filter)!(o=he[s].exec(a))||c[s]&&!(o=c[s](o))||(i=o.shift(),r.push({value:i,type:s,matches:o}),a=a.slice(i.length));if(!i)break}return n?a.length:a?t.error(e):W(e,l).slice(0)},S=t.compile=function(e,t){var n,i=[],o=[],r=U[e+" "];if(!r){for(t||(t=E(e)),n=t.length;n--;)r=y(t[n]),r[F]?i.push(r):o.push(r);r=U(e,b(o,i)),r.selector=e}return r},k=t.select=function(e,t,n,i){var o,r,s,a,l,c="function"==typeof e&&e,d=!i&&E(e=c.selector||e);if(n=n||[],1===d.length){if(r=d[0]=d[0].slice(0),r.length>2&&"ID"===(s=r[0]).type&&x.getById&&9===t.nodeType&&I&&w.relative[r[1].type]){if(t=(w.find.ID(s.matches[0].replace(xe,we),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(r.shift().value.length)}for(o=he.needsContext.test(e)?0:r.length;o--&&(s=r[o],!w.relative[a=s.type]);)if((l=w.find[a])&&(i=l(s.matches[0].replace(xe,we),be.test(r[0].type)&&u(t.parentNode)||t))){if(r.splice(o,1),e=i.length&&f(r),!e)return J.apply(n,i),n;break}}return(c||S(e,d))(i,t,!I,n,be.test(e)&&u(t.parentNode)||t),n},x.sortStable=F.split("").sort(Q).join("")===F,x.detectDuplicates=!!$,j(),x.sortDetached=o(function(e){return 1&e.compareDocumentPosition(L.createElement("div"))}),o(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||r("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),x.attributes&&o(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||r("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||r(te,function(e,t,n){var i;return n?void 0:e[t]===!0?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);oe.find=ce,oe.expr=ce.selectors,oe.expr[":"]=oe.expr.pseudos,oe.unique=ce.uniqueSort,oe.text=ce.getText,oe.isXMLDoc=ce.isXML,oe.contains=ce.contains;var ue=oe.expr.match.needsContext,de=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,fe=/^.[^:#\[\.,]*$/;oe.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?oe.find.matchesSelector(i,e)?[i]:[]:oe.find.matches(e,oe.grep(t,function(e){return 1===e.nodeType}))},oe.fn.extend({find:function(e){var t,n=[],i=this,o=i.length;if("string"!=typeof e)return this.pushStack(oe(e).filter(function(){for(t=0;o>t;t++)if(oe.contains(i[t],this))return!0}));for(t=0;o>t;t++)oe.find(e,i[t],n);return n=this.pushStack(o>1?oe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&ue.test(e)?oe(e):e||[],!1).length}});var pe,he=e.document,ge=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,me=oe.fn.init=function(e,t){var n,i;if(!e)return this;if("string"==typeof e){if(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ge.exec(e),!n||!n[1]&&t)return!t||t.jquery?(t||pe).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof oe?t[0]:t,oe.merge(this,oe.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:he,!0)),de.test(n[1])&&oe.isPlainObject(t))for(n in t)oe.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if(i=he.getElementById(n[2]),i&&i.parentNode){if(i.id!==n[2])return pe.find(e);this.length=1,this[0]=i}return this.context=he,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):oe.isFunction(e)?"undefined"!=typeof pe.ready?pe.ready(e):e(oe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),oe.makeArray(e,this))};me.prototype=oe.fn,pe=oe(he);var ve=/^(?:parents|prev(?:Until|All))/,ye={children:!0,contents:!0,next:!0,prev:!0};oe.extend({dir:function(e,t,n){for(var i=[],o=e[t];o&&9!==o.nodeType&&(void 0===n||1!==o.nodeType||!oe(o).is(n));)1===o.nodeType&&i.push(o),o=o[t];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),oe.fn.extend({has:function(e){var t,n=oe(e,this),i=n.length;return this.filter(function(){for(t=0;i>t;t++)if(oe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,i=0,o=this.length,r=[],s=ue.test(e)||"string"!=typeof e?oe(e,t||this.context):0;o>i;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&oe.find.matchesSelector(n,e))){r.push(n);break}return this.pushStack(r.length>1?oe.unique(r):r)},index:function(e){return e?"string"==typeof e?oe.inArray(this[0],oe(e)):oe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(oe.unique(oe.merge(this.get(),oe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),oe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return oe.dir(e,"parentNode")},parentsUntil:function(e,t,n){return oe.dir(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return oe.dir(e,"nextSibling")},prevAll:function(e){return oe.dir(e,"previousSibling")},nextUntil:function(e,t,n){return oe.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return oe.dir(e,"previousSibling",n)},siblings:function(e){return oe.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return oe.sibling(e.firstChild)},contents:function(e){return oe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:oe.merge([],e.childNodes)}},function(e,t){oe.fn[e]=function(n,i){var o=oe.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=oe.filter(i,o)),this.length>1&&(ye[e]||(o=oe.unique(o)),ve.test(e)&&(o=o.reverse())),this.pushStack(o)}});var be=/\S+/g,Ae={};oe.Callbacks=function(e){e="string"==typeof e?Ae[e]||r(e):oe.extend({},e);var t,n,i,o,s,a,l=[],c=!e.once&&[],u=function(r){for(n=e.memory&&r,i=!0,s=a||0,a=0,o=l.length,t=!0;l&&o>s;s++)if(l[s].apply(r[0],r[1])===!1&&e.stopOnFalse){n=!1;break}t=!1,l&&(c?c.length&&u(c.shift()):n?l=[]:d.disable())},d={add:function(){if(l){var i=l.length;!function t(n){oe.each(n,function(n,i){var o=oe.type(i);"function"===o?e.unique&&d.has(i)||l.push(i):i&&i.length&&"string"!==o&&t(i)})}(arguments),t?o=l.length:n&&(a=i,u(n))}return this},remove:function(){return l&&oe.each(arguments,function(e,n){for(var i;(i=oe.inArray(n,l,i))>-1;)l.splice(i,1),t&&(o>=i&&o--,s>=i&&s--)}),this},has:function(e){return e?oe.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=c=n=void 0,this},disabled:function(){return!l},lock:function(){return c=void 0,n||d.disable(),this},locked:function(){return!c},fireWith:function(e,n){return!l||i&&!c||(n=n||[],n=[e,n.slice?n.slice():n],t?c.push(n):u(n)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},oe.extend({Deferred:function(e){var t=[["resolve","done",oe.Callbacks("once memory"),"resolved"],["reject","fail",oe.Callbacks("once memory"),"rejected"],["notify","progress",oe.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return oe.Deferred(function(n){oe.each(t,function(t,r){var s=oe.isFunction(e[t])&&e[t];o[r[1]](function(){var e=s&&s.apply(this,arguments);e&&oe.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[r[0]+"With"](this===i?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?oe.extend(e,i):i}},o={};return i.pipe=i.then,oe.each(t,function(e,r){var s=r[2],a=r[3];i[r[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),o[r[0]]=function(){return o[r[0]+"With"](this===o?i:this,arguments),this},o[r[0]+"With"]=s.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,i,o=0,r=V.call(arguments),s=r.length,a=1!==s||e&&oe.isFunction(e.promise)?s:0,l=1===a?e:oe.Deferred(),c=function(e,n,i){return function(o){n[e]=this,i[e]=arguments.length>1?V.call(arguments):o,i===t?l.notifyWith(n,i):--a||l.resolveWith(n,i)}};if(s>1)for(t=new Array(s),n=new Array(s),i=new Array(s);s>o;o++)r[o]&&oe.isFunction(r[o].promise)?r[o].promise().done(c(o,i,r)).fail(l.reject).progress(c(o,n,t)):--a;return a||l.resolveWith(i,r),l.promise()}});var xe;oe.fn.ready=function(e){return oe.ready.promise().done(e),this},oe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?oe.readyWait++:oe.ready(!0)},ready:function(e){if(e===!0?!--oe.readyWait:!oe.isReady){if(!he.body)return setTimeout(oe.ready);oe.isReady=!0,e!==!0&&--oe.readyWait>0||(xe.resolveWith(he,[oe]),oe.fn.triggerHandler&&(oe(he).triggerHandler("ready"),oe(he).off("ready")))}}}),oe.ready.promise=function(t){if(!xe)if(xe=oe.Deferred(),"complete"===he.readyState)setTimeout(oe.ready);else if(he.addEventListener)he.addEventListener("DOMContentLoaded",a,!1),e.addEventListener("load",a,!1);else{he.attachEvent("onreadystatechange",a),e.attachEvent("onload",a);var n=!1;try{n=null==e.frameElement&&he.documentElement}catch(e){}n&&n.doScroll&&!function e(){if(!oe.isReady){try{n.doScroll("left")}catch(t){return setTimeout(e,50)}s(),oe.ready()}}()}return xe.promise(t)};var we,Ce="undefined";for(we in oe(ne))break;ne.ownLast="0"!==we,ne.inlineBlockNeedsLayout=!1,oe(function(){var e,t,n,i;n=he.getElementsByTagName("body")[0],n&&n.style&&(t=he.createElement("div"),i=he.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==Ce&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ne.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(i))}),function(){var e=he.createElement("div");if(null==ne.deleteExpando){ne.deleteExpando=!0;try{delete e.test}catch(e){ne.deleteExpando=!1}}e=null}(),oe.acceptData=function(e){var t=oe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)};var Te=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Ee=/([A-Z])/g;oe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?oe.cache[e[oe.expando]]:e[oe.expando],!!e&&!c(e)},data:function(e,t,n){return u(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return u(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),oe.fn.extend({data:function(e,t){var n,i,o,r=this[0],s=r&&r.attributes;if(void 0===e){if(this.length&&(o=oe.data(r),1===r.nodeType&&!oe._data(r,"parsedAttrs"))){for(n=s.length;n--;)s[n]&&(i=s[n].name,0===i.indexOf("data-")&&(i=oe.camelCase(i.slice(5)),l(r,i,o[i])));oe._data(r,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){oe.data(this,e)}):arguments.length>1?this.each(function(){oe.data(this,e,t)}):r?l(r,e,oe.data(r,e)):void 0},removeData:function(e){return this.each(function(){oe.removeData(this,e)})}}),oe.extend({queue:function(e,t,n){var i;return e?(t=(t||"fx")+"queue",i=oe._data(e,t),n&&(!i||oe.isArray(n)?i=oe._data(e,t,oe.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=oe.queue(e,t),i=n.length,o=n.shift(),r=oe._queueHooks(e,t),s=function(){oe.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===t&&n.unshift("inprogress"),delete r.stop,o.call(e,s,r)),!i&&r&&r.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return oe._data(e,n)||oe._data(e,n,{empty:oe.Callbacks("once memory").add(function(){oe._removeData(e,t+"queue"),oe._removeData(e,n)})})}}),oe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?oe.queue(this[0],e):void 0===t?this:this.each(function(){var n=oe.queue(this,e,t);oe._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&oe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){oe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,o=oe.Deferred(),r=this,s=this.length,a=function(){--i||o.resolveWith(r,[r])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)n=oe._data(r[s],e+"queueHooks"),n&&n.empty&&(i++,n.empty.add(a));return a(),o.promise(t)}});var Se=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ke=["Top","Right","Bottom","Left"],Ne=function(e,t){return e=t||e,"none"===oe.css(e,"display")||!oe.contains(e.ownerDocument,e)},De=oe.access=function(e,t,n,i,o,r,s){var a=0,l=e.length,c=null==n;if("object"===oe.type(n)){o=!0;for(a in n)oe.access(e,t,a,n[a],!0,r,s)}else if(void 0!==i&&(o=!0,oe.isFunction(i)||(s=!0),c&&(s?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(oe(e),n)})),t))for(;l>a;a++)t(e[a],n,s?i:i.call(e[a],a,t(e[a],n)));return o?e:c?t.call(e):l?t(e[0],n):r},$e=/^(?:checkbox|radio)$/i;!function(){var e=he.createElement("input"),t=he.createElement("div"),n=he.createDocumentFragment();if(t.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ne.leadingWhitespace=3===t.firstChild.nodeType,ne.tbody=!t.getElementsByTagName("tbody").length,ne.htmlSerialize=!!t.getElementsByTagName("link").length,ne.html5Clone="<:nav></:nav>"!==he.createElement("nav").cloneNode(!0).outerHTML,e.type="checkbox",e.checked=!0,n.appendChild(e),ne.appendChecked=e.checked,t.innerHTML="<textarea>x</textarea>",ne.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,n.appendChild(t),t.innerHTML="<input type='radio' checked='checked' name='t'/>",ne.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,ne.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){ne.noCloneEvent=!1}),t.cloneNode(!0).click()),null==ne.deleteExpando){ne.deleteExpando=!0;try{delete t.test}catch(e){ne.deleteExpando=!1}}}(),function(){var t,n,i=he.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(ne[t+"Bubbles"]=n in e)||(i.setAttribute(n,"t"),ne[t+"Bubbles"]=i.attributes[n].expando===!1);i=null}();var je=/^(?:input|select|textarea)$/i,Le=/^key/,Oe=/^(?:mouse|pointer|contextmenu)|click/,Ie=/^(?:focusinfocus|focusoutblur)$/,Be=/^([^.]*)(?:\.(.+)|)$/;oe.event={global:{},add:function(e,t,n,i,o){var r,s,a,l,c,u,d,f,p,h,g,m=oe._data(e);if(m){for(n.handler&&(l=n,n=l.handler,o=l.selector),n.guid||(n.guid=oe.guid++),(s=m.events)||(s=m.events={}),(u=m.handle)||(u=m.handle=function(e){return typeof oe===Ce||e&&oe.event.triggered===e.type?void 0:oe.event.dispatch.apply(u.elem,arguments)},u.elem=e),t=(t||"").match(be)||[""],a=t.length;a--;)r=Be.exec(t[a])||[],p=g=r[1],h=(r[2]||"").split(".").sort(),p&&(c=oe.event.special[p]||{},p=(o?c.delegateType:c.bindType)||p,c=oe.event.special[p]||{},d=oe.extend({type:p,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&oe.expr.match.needsContext.test(o),namespace:h.join(".")},l),(f=s[p])||(f=s[p]=[],f.delegateCount=0,c.setup&&c.setup.call(e,i,h,u)!==!1||(e.addEventListener?e.addEventListener(p,u,!1):e.attachEvent&&e.attachEvent("on"+p,u))),c.add&&(c.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,d):f.push(d),oe.event.global[p]=!0);e=null}},remove:function(e,t,n,i,o){var r,s,a,l,c,u,d,f,p,h,g,m=oe.hasData(e)&&oe._data(e);if(m&&(u=m.events)){for(t=(t||"").match(be)||[""],c=t.length;c--;)if(a=Be.exec(t[c])||[],p=g=a[1],h=(a[2]||"").split(".").sort(),p){for(d=oe.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,f=u[p]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=r=f.length;r--;)s=f[r],!o&&g!==s.origType||n&&n.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(f.splice(r,1),s.selector&&f.delegateCount--,d.remove&&d.remove.call(e,s));l&&!f.length&&(d.teardown&&d.teardown.call(e,h,m.handle)!==!1||oe.removeEvent(e,p,m.handle),delete u[p])}else for(p in u)oe.event.remove(e,p+t[c],n,i,!0);oe.isEmptyObject(u)&&(delete m.handle,oe._removeData(e,"events"))}},trigger:function(t,n,i,o){var r,s,a,l,c,u,d,f=[i||he],p=te.call(t,"type")?t.type:t,h=te.call(t,"namespace")?t.namespace.split("."):[];if(a=u=i=i||he,3!==i.nodeType&&8!==i.nodeType&&!Ie.test(p+oe.event.triggered)&&(p.indexOf(".")>=0&&(h=p.split("."),p=h.shift(),h.sort()),s=p.indexOf(":")<0&&"on"+p,t=t[oe.expando]?t:new oe.Event(p,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=h.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:oe.makeArray(n,[t]),c=oe.event.special[p]||{},o||!c.trigger||c.trigger.apply(i,n)!==!1)){if(!o&&!c.noBubble&&!oe.isWindow(i)){for(l=c.delegateType||p,Ie.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),u=a;u===(i.ownerDocument||he)&&f.push(u.defaultView||u.parentWindow||e)}for(d=0;(a=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:c.bindType||p,r=(oe._data(a,"events")||{})[t.type]&&oe._data(a,"handle"),r&&r.apply(a,n),r=s&&a[s],r&&r.apply&&oe.acceptData(a)&&(t.result=r.apply(a,n),t.result===!1&&t.preventDefault());if(t.type=p,!o&&!t.isDefaultPrevented()&&(!c._default||c._default.apply(f.pop(),n)===!1)&&oe.acceptData(i)&&s&&i[p]&&!oe.isWindow(i)){u=i[s],u&&(i[s]=null),oe.event.triggered=p;try{i[p]()}catch(e){}oe.event.triggered=void 0,u&&(i[s]=u)}return t.result}},dispatch:function(e){e=oe.event.fix(e);var t,n,i,o,r,s=[],a=V.call(arguments),l=(oe._data(this,"events")||{})[e.type]||[],c=oe.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=oe.event.handlers.call(this,e,l),t=0;(o=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(i=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,n=((oe.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,a),void 0!==n&&(e.result=n)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,o,r,s=[],a=t.delegateCount,l=e.target;if(a&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],r=0;a>r;r++)i=t[r],n=i.selector+" ",void 0===o[n]&&(o[n]=i.needsContext?oe(n,this).index(l)>=0:oe.find(n,this,null,[l]).length),o[n]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},fix:function(e){if(e[oe.expando])return e;var t,n,i,o=e.type,r=e,s=this.fixHooks[o];for(s||(this.fixHooks[o]=s=Oe.test(o)?this.mouseHooks:Le.test(o)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,e=new oe.Event(r),t=i.length;t--;)n=i[t],e[n]=r[n];return e.target||(e.target=r.srcElement||he),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,i,o,r=t.button,s=t.fromElement;return null==e.pageX&&null!=t.clientX&&(i=e.target.ownerDocument||he,o=i.documentElement,n=i.body,e.pageX=t.clientX+(o&&o.scrollLeft||n&&n.scrollLeft||0)-(o&&o.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(o&&o.scrollTop||n&&n.scrollTop||0)-(o&&o.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?t.toElement:s),e.which||void 0===r||(e.which=1&r?1:2&r?3:4&r?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==h()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===h()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return oe.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(e){return oe.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,i){var o=oe.extend(new oe.Event,n,{type:e,isSimulated:!0,originalEvent:{}});i?oe.event.trigger(o,null,t):oe.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},oe.removeEvent=he.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var i="on"+t;e.detachEvent&&(typeof e[i]===Ce&&(e[i]=null),e.detachEvent(i,n))},oe.Event=function(e,t){return this instanceof oe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?f:p):this.type=e,t&&oe.extend(this,t),this.timeStamp=e&&e.timeStamp||oe.now(),void(this[oe.expando]=!0)):new oe.Event(e,t)},oe.Event.prototype={isDefaultPrevented:p,isPropagationStopped:p,isImmediatePropagationStopped:p,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=f,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=f,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=f,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},oe.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){oe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,o=e.relatedTarget,r=e.handleObj;return(!o||o!==i&&!oe.contains(i,o))&&(e.type=r.origType,n=r.handler.apply(this,arguments),e.type=t),n}}}),ne.submitBubbles||(oe.event.special.submit={setup:function(){return!oe.nodeName(this,"form")&&void oe.event.add(this,"click._submit keypress._submit",function(e){var t=e.target,n=oe.nodeName(t,"input")||oe.nodeName(t,"button")?t.form:void 0;n&&!oe._data(n,"submitBubbles")&&(oe.event.add(n,"submit._submit",function(e){e._submit_bubble=!0}),oe._data(n,"submitBubbles",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&oe.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return!oe.nodeName(this,"form")&&void oe.event.remove(this,"._submit")}}),ne.changeBubbles||(oe.event.special.change={setup:function(){return je.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(oe.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),oe.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),oe.event.simulate("change",this,e,!0)})),!1):void oe.event.add(this,"beforeactivate._change",function(e){var t=e.target;je.test(t.nodeName)&&!oe._data(t,"changeBubbles")&&(oe.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||oe.event.simulate("change",this.parentNode,e,!0)}),oe._data(t,"changeBubbles",!0))})},handle:function(e){var t=e.target;return this!==t||e.isSimulated||e.isTrigger||"radio"!==t.type&&"checkbox"!==t.type?e.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return oe.event.remove(this,"._change"),!je.test(this.nodeName)}}),ne.focusinBubbles||oe.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){oe.event.simulate(t,e.target,oe.event.fix(e),!0)};oe.event.special[t]={setup:function(){var i=this.ownerDocument||this,o=oe._data(i,t);o||i.addEventListener(e,n,!0),oe._data(i,t,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=oe._data(i,t)-1;o?oe._data(i,t,o):(i.removeEventListener(e,n,!0),oe._removeData(i,t))}}}),oe.fn.extend({on:function(e,t,n,i,o){var r,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=void 0);for(r in e)this.on(r,t,n,e[r],o);return this}if(null==n&&null==i?(i=t,n=t=void 0):null==i&&("string"==typeof t?(i=n,n=void 0):(i=n,n=t,t=void 0)),i===!1)i=p;else if(!i)return this;return 1===o&&(s=i,i=function(e){return oe().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=oe.guid++)),this.each(function(){oe.event.add(this,e,i,n,t)})},one:function(e,t,n,i){return this.on(e,t,n,i,1)},off:function(e,t,n){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,oe(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=void 0),n===!1&&(n=p),this.each(function(){oe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){oe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?oe.event.trigger(e,t,n,!0):void 0}});var Re="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",He=/ jQuery\d+="(?:null|\d+)"/g,Me=new RegExp("<(?:"+Re+")[\\s/>]","i"),Fe=/^\s+/,Pe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ze=/<([\w:]+)/,qe=/<tbody/i,_e=/<|&#?\w+;/,We=/<(?:script|style|link)/i,Ue=/checked\s*(?:[^=]|=\s*.checked.)/i,Qe=/^$|\/(?:java|ecma)script/i,Ge=/^true\/(.*)/,Xe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ve={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ne.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Ye=g(he),Ze=Ye.appendChild(he.createElement("div"));Ve.optgroup=Ve.option,Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td,oe.extend({clone:function(e,t,n){var i,o,r,s,a,l=oe.contains(e.ownerDocument,e);if(ne.html5Clone||oe.isXMLDoc(e)||!Me.test("<"+e.nodeName+">")?r=e.cloneNode(!0):(Ze.innerHTML=e.outerHTML,Ze.removeChild(r=Ze.firstChild)),!(ne.noCloneEvent&&ne.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||oe.isXMLDoc(e)))for(i=m(r),a=m(e),s=0;null!=(o=a[s]);++s)i[s]&&C(o,i[s]);if(t)if(n)for(a=a||m(e),i=i||m(r),s=0;null!=(o=a[s]);s++)w(o,i[s]);else w(e,r);return i=m(r,"script"),i.length>0&&x(i,!l&&m(e,"script")),i=a=o=null,r},buildFragment:function(e,t,n,i){for(var o,r,s,a,l,c,u,d=e.length,f=g(t),p=[],h=0;d>h;h++)if(r=e[h],r||0===r)if("object"===oe.type(r))oe.merge(p,r.nodeType?[r]:r);else if(_e.test(r)){for(a=a||f.appendChild(t.createElement("div")),l=(ze.exec(r)||["",""])[1].toLowerCase(),u=Ve[l]||Ve._default,a.innerHTML=u[1]+r.replace(Pe,"<$1></$2>")+u[2],o=u[0];o--;)a=a.lastChild;if(!ne.leadingWhitespace&&Fe.test(r)&&p.push(t.createTextNode(Fe.exec(r)[0])),!ne.tbody)for(r="table"!==l||qe.test(r)?"<table>"!==u[1]||qe.test(r)?0:a:a.firstChild,o=r&&r.childNodes.length;o--;)oe.nodeName(c=r.childNodes[o],"tbody")&&!c.childNodes.length&&r.removeChild(c);for(oe.merge(p,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=f.lastChild}else p.push(t.createTextNode(r));for(a&&f.removeChild(a), -ne.appendChecked||oe.grep(m(p,"input"),v),h=0;r=p[h++];)if((!i||-1===oe.inArray(r,i))&&(s=oe.contains(r.ownerDocument,r),a=m(f.appendChild(r),"script"),s&&x(a),n))for(o=0;r=a[o++];)Qe.test(r.type||"")&&n.push(r);return a=null,f},cleanData:function(e,t){for(var n,i,o,r,s=0,a=oe.expando,l=oe.cache,c=ne.deleteExpando,u=oe.event.special;null!=(n=e[s]);s++)if((t||oe.acceptData(n))&&(o=n[a],r=o&&l[o])){if(r.events)for(i in r.events)u[i]?oe.event.remove(n,i):oe.removeEvent(n,i,r.handle);l[o]&&(delete l[o],c?delete n[a]:typeof n.removeAttribute!==Ce?n.removeAttribute(a):n[a]=null,X.push(o))}}}),oe.fn.extend({text:function(e){return De(this,function(e){return void 0===e?oe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||he).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=y(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=y(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,i=e?oe.filter(e,this):this,o=0;null!=(n=i[o]);o++)t||1!==n.nodeType||oe.cleanData(m(n)),n.parentNode&&(t&&oe.contains(n.ownerDocument,n)&&x(m(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&oe.cleanData(m(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&oe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return oe.clone(this,e,t)})},html:function(e){return De(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(He,""):void 0;if(!("string"!=typeof e||We.test(e)||!ne.htmlSerialize&&Me.test(e)||!ne.leadingWhitespace&&Fe.test(e)||Ve[(ze.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Pe,"<$1></$2>");try{for(;i>n;n++)t=this[n]||{},1===t.nodeType&&(oe.cleanData(m(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,function(t){e=this.parentNode,oe.cleanData(m(this)),e&&e.replaceChild(t,this)}),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=Y.apply([],e);var n,i,o,r,s,a,l=0,c=this.length,u=this,d=c-1,f=e[0],p=oe.isFunction(f);if(p||c>1&&"string"==typeof f&&!ne.checkClone&&Ue.test(f))return this.each(function(n){var i=u.eq(n);p&&(e[0]=f.call(this,n,i.html())),i.domManip(e,t)});if(c&&(a=oe.buildFragment(e,this[0].ownerDocument,!1,this),n=a.firstChild,1===a.childNodes.length&&(a=n),n)){for(r=oe.map(m(a,"script"),b),o=r.length;c>l;l++)i=a,l!==d&&(i=oe.clone(i,!0,!0),o&&oe.merge(r,m(i,"script"))),t.call(this[l],i,l);if(o)for(s=r[r.length-1].ownerDocument,oe.map(r,A),l=0;o>l;l++)i=r[l],Qe.test(i.type||"")&&!oe._data(i,"globalEval")&&oe.contains(s,i)&&(i.src?oe._evalUrl&&oe._evalUrl(i.src):oe.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Xe,"")));a=n=null}return this}}),oe.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){oe.fn[e]=function(e){for(var n,i=0,o=[],r=oe(e),s=r.length-1;s>=i;i++)n=i===s?this:this.clone(!0),oe(r[i])[t](n),Z.apply(o,n.get());return this.pushStack(o)}});var Je,Ke={};!function(){var e;ne.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,i;return n=he.getElementsByTagName("body")[0],n&&n.style?(t=he.createElement("div"),i=he.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==Ce&&(t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",t.appendChild(he.createElement("div")).style.width="5px",e=3!==t.offsetWidth),n.removeChild(i),e):void 0}}();var et,tt,nt=/^margin/,it=new RegExp("^("+Se+")(?!px)[a-z%]+$","i"),ot=/^(top|right|bottom|left)$/;e.getComputedStyle?(et=function(t){return t.ownerDocument.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):e.getComputedStyle(t,null)},tt=function(e,t,n){var i,o,r,s,a=e.style;return n=n||et(e),s=n?n.getPropertyValue(t)||n[t]:void 0,n&&(""!==s||oe.contains(e.ownerDocument,e)||(s=oe.style(e,t)),it.test(s)&&nt.test(t)&&(i=a.width,o=a.minWidth,r=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=i,a.minWidth=o,a.maxWidth=r)),void 0===s?s:s+""}):he.documentElement.currentStyle&&(et=function(e){return e.currentStyle},tt=function(e,t,n){var i,o,r,s,a=e.style;return n=n||et(e),s=n?n[t]:void 0,null==s&&a&&a[t]&&(s=a[t]),it.test(s)&&!ot.test(t)&&(i=a.left,o=e.runtimeStyle,r=o&&o.left,r&&(o.left=e.currentStyle.left),a.left="fontSize"===t?"1em":s,s=a.pixelLeft+"px",a.left=i,r&&(o.left=r)),void 0===s?s:s+""||"auto"}),!function(){function t(){var t,n,i,o;n=he.getElementsByTagName("body")[0],n&&n.style&&(t=he.createElement("div"),i=he.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),t.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=s=!1,l=!0,e.getComputedStyle&&(r="1%"!==(e.getComputedStyle(t,null)||{}).top,s="4px"===(e.getComputedStyle(t,null)||{width:"4px"}).width,o=t.appendChild(he.createElement("div")),o.style.cssText=t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",o.style.marginRight=o.style.width="0",t.style.width="1px",l=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight),t.removeChild(o)),t.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=t.getElementsByTagName("td"),o[0].style.cssText="margin:0;border:0;padding:0;display:none",a=0===o[0].offsetHeight,a&&(o[0].style.display="",o[1].style.display="none",a=0===o[0].offsetHeight),n.removeChild(i))}var n,i,o,r,s,a,l;n=he.createElement("div"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",o=n.getElementsByTagName("a")[0],(i=o&&o.style)&&(i.cssText="float:left;opacity:.5",ne.opacity="0.5"===i.opacity,ne.cssFloat=!!i.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",ne.clearCloneStyle="content-box"===n.style.backgroundClip,ne.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,oe.extend(ne,{reliableHiddenOffsets:function(){return null==a&&t(),a},boxSizingReliable:function(){return null==s&&t(),s},pixelPosition:function(){return null==r&&t(),r},reliableMarginRight:function(){return null==l&&t(),l}}))}(),oe.swap=function(e,t,n,i){var o,r,s={};for(r in t)s[r]=e.style[r],e.style[r]=t[r];o=n.apply(e,i||[]);for(r in t)e.style[r]=s[r];return o};var rt=/alpha\([^)]*\)/i,st=/opacity\s*=\s*([^)]*)/,at=/^(none|table(?!-c[ea]).+)/,lt=new RegExp("^("+Se+")(.*)$","i"),ct=new RegExp("^([+-])=("+Se+")","i"),ut={position:"absolute",visibility:"hidden",display:"block"},dt={letterSpacing:"0",fontWeight:"400"},ft=["Webkit","O","Moz","ms"];oe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=tt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:ne.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,r,s,a=oe.camelCase(t),l=e.style;if(t=oe.cssProps[a]||(oe.cssProps[a]=k(l,a)),s=oe.cssHooks[t]||oe.cssHooks[a],void 0===n)return s&&"get"in s&&void 0!==(o=s.get(e,!1,i))?o:l[t];if(r=typeof n,"string"===r&&(o=ct.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(oe.css(e,t)),r="number"),null!=n&&n===n&&("number"!==r||oe.cssNumber[a]||(n+="px"),ne.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),!(s&&"set"in s&&void 0===(n=s.set(e,n,i)))))try{l[t]=n}catch(e){}}},css:function(e,t,n,i){var o,r,s,a=oe.camelCase(t);return t=oe.cssProps[a]||(oe.cssProps[a]=k(e.style,a)),s=oe.cssHooks[t]||oe.cssHooks[a],s&&"get"in s&&(r=s.get(e,!0,n)),void 0===r&&(r=tt(e,t,i)),"normal"===r&&t in dt&&(r=dt[t]),""===n||n?(o=parseFloat(r),n===!0||oe.isNumeric(o)?o||0:r):r}}),oe.each(["height","width"],function(e,t){oe.cssHooks[t]={get:function(e,n,i){return n?at.test(oe.css(e,"display"))&&0===e.offsetWidth?oe.swap(e,ut,function(){return j(e,t,i)}):j(e,t,i):void 0},set:function(e,n,i){var o=i&&et(e);return D(e,n,i?$(e,t,i,ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,o),o):0)}}}),ne.opacity||(oe.cssHooks.opacity={get:function(e,t){return st.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,i=e.currentStyle,o=oe.isNumeric(t)?"alpha(opacity="+100*t+")":"",r=i&&i.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===oe.trim(r.replace(rt,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||i&&!i.filter)||(n.filter=rt.test(r)?r.replace(rt,o):r+" "+o)}}),oe.cssHooks.marginRight=S(ne.reliableMarginRight,function(e,t){return t?oe.swap(e,{display:"inline-block"},tt,[e,"marginRight"]):void 0}),oe.each({margin:"",padding:"",border:"Width"},function(e,t){oe.cssHooks[e+t]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[e+ke[i]+t]=r[i]||r[i-2]||r[0];return o}},nt.test(e)||(oe.cssHooks[e+t].set=D)}),oe.fn.extend({css:function(e,t){return De(this,function(e,t,n){var i,o,r={},s=0;if(oe.isArray(t)){for(i=et(e),o=t.length;o>s;s++)r[t[s]]=oe.css(e,t[s],!1,i);return r}return void 0!==n?oe.style(e,t,n):oe.css(e,t)},e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Ne(this)?oe(this).show():oe(this).hide()})}}),oe.Tween=L,L.prototype={constructor:L,init:function(e,t,n,i,o,r){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=r||(oe.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return e&&e.get?e.get(this):L.propHooks._default.get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=oe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=oe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){oe.fx.step[e.prop]?oe.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[oe.cssProps[e.prop]]||oe.cssHooks[e.prop])?oe.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},oe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},oe.fx=L.prototype.init,oe.fx.step={};var pt,ht,gt=/^(?:toggle|show|hide)$/,mt=new RegExp("^(?:([+-])=|)("+Se+")([a-z%]*)$","i"),vt=/queueHooks$/,yt=[R],bt={"*":[function(e,t){var n=this.createTween(e,t),i=n.cur(),o=mt.exec(t),r=o&&o[3]||(oe.cssNumber[e]?"":"px"),s=(oe.cssNumber[e]||"px"!==r&&+i)&&mt.exec(oe.css(n.elem,e)),a=1,l=20;if(s&&s[3]!==r){r=r||s[3],o=o||[],s=+i||1;do a=a||".5",s/=a,oe.style(n.elem,e,s+r);while(a!==(a=n.cur()/i)&&1!==a&&--l)}return o&&(s=n.start=+s||+i||0,n.unit=r,n.end=o[1]?s+(o[1]+1)*o[2]:+o[2]),n}]};oe.Animation=oe.extend(M,{tweener:function(e,t){oe.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,i=0,o=e.length;o>i;i++)n=e[i],bt[n]=bt[n]||[],bt[n].unshift(t)},prefilter:function(e,t){t?yt.unshift(e):yt.push(e)}}),oe.speed=function(e,t,n){var i=e&&"object"==typeof e?oe.extend({},e):{complete:n||!n&&t||oe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!oe.isFunction(t)&&t};return i.duration=oe.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in oe.fx.speeds?oe.fx.speeds[i.duration]:oe.fx.speeds._default,(null==i.queue||i.queue===!0)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){oe.isFunction(i.old)&&i.old.call(this),i.queue&&oe.dequeue(this,i.queue)},i},oe.fn.extend({fadeTo:function(e,t,n,i){return this.filter(Ne).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var o=oe.isEmptyObject(e),r=oe.speed(t,n,i),s=function(){var t=M(this,oe.extend({},e),r);(o||oe._data(this,"finish"))&&t.stop(!0)};return s.finish=s,o||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,o=null!=e&&e+"queueHooks",r=oe.timers,s=oe._data(this);if(o)s[o]&&s[o].stop&&i(s[o]);else for(o in s)s[o]&&s[o].stop&&vt.test(o)&&i(s[o]);for(o=r.length;o--;)r[o].elem!==this||null!=e&&r[o].queue!==e||(r[o].anim.stop(n),t=!1,r.splice(o,1));(t||!n)&&oe.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=oe._data(this),i=n[e+"queue"],o=n[e+"queueHooks"],r=oe.timers,s=i?i.length:0;for(n.finish=!0,oe.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=r.length;t--;)r[t].elem===this&&r[t].queue===e&&(r[t].anim.stop(!0),r.splice(t,1));for(t=0;s>t;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish})}}),oe.each(["toggle","show","hide"],function(e,t){var n=oe.fn[t];oe.fn[t]=function(e,i,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,i,o)}}),oe.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){oe.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}}),oe.timers=[],oe.fx.tick=function(){var e,t=oe.timers,n=0;for(pt=oe.now();n<t.length;n++)e=t[n],e()||t[n]!==e||t.splice(n--,1);t.length||oe.fx.stop(),pt=void 0},oe.fx.timer=function(e){oe.timers.push(e),e()?oe.fx.start():oe.timers.pop()},oe.fx.interval=13,oe.fx.start=function(){ht||(ht=setInterval(oe.fx.tick,oe.fx.interval))},oe.fx.stop=function(){clearInterval(ht),ht=null},oe.fx.speeds={slow:600,fast:200,_default:400},oe.fn.delay=function(e,t){return e=oe.fx?oe.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var i=setTimeout(t,e);n.stop=function(){clearTimeout(i)}})},function(){var e,t,n,i,o;t=he.createElement("div"),t.setAttribute("className","t"),t.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=t.getElementsByTagName("a")[0],n=he.createElement("select"),o=n.appendChild(he.createElement("option")),e=t.getElementsByTagName("input")[0],i.style.cssText="top:1px",ne.getSetAttribute="t"!==t.className,ne.style=/top/.test(i.getAttribute("style")),ne.hrefNormalized="/a"===i.getAttribute("href"),ne.checkOn=!!e.value,ne.optSelected=o.selected,ne.enctype=!!he.createElement("form").enctype,n.disabled=!0,ne.optDisabled=!o.disabled,e=he.createElement("input"),e.setAttribute("value",""),ne.input=""===e.getAttribute("value"),e.value="t",e.setAttribute("type","radio"),ne.radioValue="t"===e.value}();var At=/\r/g;oe.fn.extend({val:function(e){var t,n,i,o=this[0];return arguments.length?(i=oe.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,oe(this).val()):e,null==o?o="":"number"==typeof o?o+="":oe.isArray(o)&&(o=oe.map(o,function(e){return null==e?"":e+""})),t=oe.valHooks[this.type]||oe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))})):o?(t=oe.valHooks[o.type]||oe.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(At,""):null==n?"":n)):void 0}}),oe.extend({valHooks:{option:{get:function(e){var t=oe.find.attr(e,"value");return null!=t?t:oe.trim(oe.text(e))}},select:{get:function(e){for(var t,n,i=e.options,o=e.selectedIndex,r="select-one"===e.type||0>o,s=r?null:[],a=r?o+1:i.length,l=0>o?a:r?o:0;a>l;l++)if(n=i[l],!(!n.selected&&l!==o||(ne.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&oe.nodeName(n.parentNode,"optgroup"))){if(t=oe(n).val(),r)return t;s.push(t)}return s},set:function(e,t){for(var n,i,o=e.options,r=oe.makeArray(t),s=o.length;s--;)if(i=o[s],oe.inArray(oe.valHooks.option.get(i),r)>=0)try{i.selected=n=!0}catch(e){i.scrollHeight}else i.selected=!1;return n||(e.selectedIndex=-1),o}}}}),oe.each(["radio","checkbox"],function(){oe.valHooks[this]={set:function(e,t){return oe.isArray(t)?e.checked=oe.inArray(oe(e).val(),t)>=0:void 0}},ne.checkOn||(oe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var xt,wt,Ct=oe.expr.attrHandle,Tt=/^(?:checked|selected)$/i,Et=ne.getSetAttribute,St=ne.input;oe.fn.extend({attr:function(e,t){return De(this,oe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){oe.removeAttr(this,e)})}}),oe.extend({attr:function(e,t,n){var i,o,r=e.nodeType;if(e&&3!==r&&8!==r&&2!==r)return typeof e.getAttribute===Ce?oe.prop(e,t,n):(1===r&&oe.isXMLDoc(e)||(t=t.toLowerCase(),i=oe.attrHooks[t]||(oe.expr.match.bool.test(t)?wt:xt)),void 0===n?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=oe.find.attr(e,t),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void oe.removeAttr(e,t))},removeAttr:function(e,t){var n,i,o=0,r=t&&t.match(be);if(r&&1===e.nodeType)for(;n=r[o++];)i=oe.propFix[n]||n,oe.expr.match.bool.test(n)?St&&Et||!Tt.test(n)?e[i]=!1:e[oe.camelCase("default-"+n)]=e[i]=!1:oe.attr(e,n,""),e.removeAttribute(Et?n:i)},attrHooks:{type:{set:function(e,t){if(!ne.radioValue&&"radio"===t&&oe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),wt={set:function(e,t,n){return t===!1?oe.removeAttr(e,n):St&&Et||!Tt.test(n)?e.setAttribute(!Et&&oe.propFix[n]||n,n):e[oe.camelCase("default-"+n)]=e[n]=!0,n}},oe.each(oe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=Ct[t]||oe.find.attr;Ct[t]=St&&Et||!Tt.test(t)?function(e,t,i){var o,r;return i||(r=Ct[t],Ct[t]=o,o=null!=n(e,t,i)?t.toLowerCase():null,Ct[t]=r),o}:function(e,t,n){return n?void 0:e[oe.camelCase("default-"+t)]?t.toLowerCase():null}}),St&&Et||(oe.attrHooks.value={set:function(e,t,n){return oe.nodeName(e,"input")?void(e.defaultValue=t):xt&&xt.set(e,t,n)}}),Et||(xt={set:function(e,t,n){var i=e.getAttributeNode(n);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(n)),i.value=t+="","value"===n||t===e.getAttribute(n)?t:void 0}},Ct.id=Ct.name=Ct.coords=function(e,t,n){var i;return n?void 0:(i=e.getAttributeNode(t))&&""!==i.value?i.value:null},oe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:void 0},set:xt.set},oe.attrHooks.contenteditable={set:function(e,t,n){xt.set(e,""!==t&&t,n)}},oe.each(["width","height"],function(e,t){oe.attrHooks[t]={set:function(e,n){return""===n?(e.setAttribute(t,"auto"),n):void 0}}})),ne.style||(oe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var kt=/^(?:input|select|textarea|button|object)$/i,Nt=/^(?:a|area)$/i;oe.fn.extend({prop:function(e,t){return De(this,oe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=oe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(e){}})}}),oe.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var i,o,r,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return r=1!==s||!oe.isXMLDoc(e),r&&(t=oe.propFix[t]||t,o=oe.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:e[t]=n:o&&"get"in o&&null!==(i=o.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=oe.find.attr(e,"tabindex");return t?parseInt(t,10):kt.test(e.nodeName)||Nt.test(e.nodeName)&&e.href?0:-1}}}}),ne.hrefNormalized||oe.each(["href","src"],function(e,t){oe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),ne.optSelected||(oe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),oe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){oe.propFix[this.toLowerCase()]=this}),ne.enctype||(oe.propFix.enctype="encoding");var Dt=/[\t\r\n\f]/g;oe.fn.extend({addClass:function(e){var t,n,i,o,r,s,a=0,l=this.length,c="string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).addClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(be)||[];l>a;a++)if(n=this[a],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Dt," "):" ")){for(r=0;o=t[r++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");s=oe.trim(i),n.className!==s&&(n.className=s)}return this},removeClass:function(e){var t,n,i,o,r,s,a=0,l=this.length,c=0===arguments.length||"string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).removeClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(be)||[];l>a;a++)if(n=this[a],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Dt," "):"")){for(r=0;o=t[r++];)for(;i.indexOf(" "+o+" ")>=0;)i=i.replace(" "+o+" "," ");s=e?oe.trim(i):"",n.className!==s&&(n.className=s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(oe.isFunction(e)?function(n){oe(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,i=0,o=oe(this),r=e.match(be)||[];t=r[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===Ce||"boolean"===n)&&(this.className&&oe._data(this,"__className__",this.className),this.className=this.className||e===!1?"":oe._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,i=this.length;i>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Dt," ").indexOf(t)>=0)return!0;return!1}}),oe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){oe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),oe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var $t=oe.now(),jt=/\?/,Lt=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;oe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,i=null,o=oe.trim(t+"");return o&&!oe.trim(o.replace(Lt,function(e,t,o,r){return n&&t&&(i=0),0===i?e:(n=o||t,i+=!r-!o,"")}))?Function("return "+o)():oe.error("Invalid JSON: "+t)},oe.parseXML=function(t){var n,i;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(i=new DOMParser,n=i.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(e){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||oe.error("Invalid XML: "+t),n};var Ot,It,Bt=/#.*$/,Rt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Mt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Pt=/^\/\//,zt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,qt={},_t={},Wt="*/".concat("*");try{It=location.href}catch(e){It=he.createElement("a"),It.href="",It=It.href}Ot=zt.exec(It.toLowerCase())||[],oe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:It,type:"GET",isLocal:Mt.test(Ot[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Wt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":oe.parseJSON,"text xml":oe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?z(z(e,oe.ajaxSettings),t):z(oe.ajaxSettings,e)},ajaxPrefilter:F(qt),ajaxTransport:F(_t),ajax:function(e,t){function n(e,t,n,i){var o,u,v,y,A,w=t;2!==b&&(b=2,a&&clearTimeout(a),c=void 0,s=i||"",x.readyState=e>0?4:0,o=e>=200&&300>e||304===e,n&&(y=q(d,x,n)),y=_(d,y,x,o),o?(d.ifModified&&(A=x.getResponseHeader("Last-Modified"),A&&(oe.lastModified[r]=A),A=x.getResponseHeader("etag"),A&&(oe.etag[r]=A)),204===e||"HEAD"===d.type?w="nocontent":304===e?w="notmodified":(w=y.state,u=y.data,v=y.error,o=!v)):(v=w,(e||!w)&&(w="error",0>e&&(e=0))),x.status=e,x.statusText=(t||w)+"",o?h.resolveWith(f,[u,w,x]):h.rejectWith(f,[x,w,v]),x.statusCode(m),m=void 0,l&&p.trigger(o?"ajaxSuccess":"ajaxError",[x,d,o?u:v]),g.fireWith(f,[x,w]),l&&(p.trigger("ajaxComplete",[x,d]),--oe.active||oe.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,r,s,a,l,c,u,d=oe.ajaxSetup({},t),f=d.context||d,p=d.context&&(f.nodeType||f.jquery)?oe(f):oe.event,h=oe.Deferred(),g=oe.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,A="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!u)for(u={};t=Ht.exec(s);)u[t[1].toLowerCase()]=t[2];t=u[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else x.always(e[x.status]);return this},abort:function(e){var t=e||A;return c&&c.abort(t),n(0,t),this}};if(h.promise(x).complete=g.add,x.success=x.done,x.error=x.fail,d.url=((e||d.url||It)+"").replace(Bt,"").replace(Pt,Ot[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=oe.trim(d.dataType||"*").toLowerCase().match(be)||[""],null==d.crossDomain&&(i=zt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===Ot[1]&&i[2]===Ot[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(Ot[3]||("http:"===Ot[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=oe.param(d.data,d.traditional)),P(qt,d,t,x),2===b)return x;l=oe.event&&d.global,l&&0===oe.active++&&oe.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(jt.test(r)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=Rt.test(r)?r.replace(Rt,"$1_="+$t++):r+(jt.test(r)?"&":"?")+"_="+$t++)),d.ifModified&&(oe.lastModified[r]&&x.setRequestHeader("If-Modified-Since",oe.lastModified[r]),oe.etag[r]&&x.setRequestHeader("If-None-Match",oe.etag[r])),(d.data&&d.hasContent&&d.contentType!==!1||t.contentType)&&x.setRequestHeader("Content-Type",d.contentType),x.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Wt+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)x.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(f,x,d)===!1||2===b))return x.abort();A="abort";for(o in{success:1,error:1,complete:1})x[o](d[o]);if(c=P(_t,d,t,x)){x.readyState=1,l&&p.trigger("ajaxSend",[x,d]),d.async&&d.timeout>0&&(a=setTimeout(function(){x.abort("timeout")},d.timeout));try{b=1,c.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return x},getJSON:function(e,t,n){return oe.get(e,t,n,"json")},getScript:function(e,t){return oe.get(e,void 0,t,"script")}}),oe.each(["get","post"],function(e,t){oe[t]=function(e,n,i,o){return oe.isFunction(n)&&(o=o||i,i=n,n=void 0),oe.ajax({url:e,type:t,dataType:o,data:n,success:i})}}),oe._evalUrl=function(e){return oe.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},oe.fn.extend({wrapAll:function(e){if(oe.isFunction(e))return this.each(function(t){oe(this).wrapAll(e.call(this,t))});if(this[0]){var t=oe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return this.each(oe.isFunction(e)?function(t){oe(this).wrapInner(e.call(this,t))}:function(){var t=oe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=oe.isFunction(e);return this.each(function(n){oe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){oe.nodeName(this,"body")||oe(this).replaceWith(this.childNodes)}).end()}}),oe.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!ne.reliableHiddenOffsets()&&"none"===(e.style&&e.style.display||oe.css(e,"display"))},oe.expr.filters.visible=function(e){return!oe.expr.filters.hidden(e)};var Ut=/%20/g,Qt=/\[\]$/,Gt=/\r?\n/g,Xt=/^(?:submit|button|image|reset|file)$/i,Vt=/^(?:input|select|textarea|keygen)/i;oe.param=function(e,t){var n,i=[],o=function(e,t){t=oe.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=oe.ajaxSettings&&oe.ajaxSettings.traditional),oe.isArray(e)||e.jquery&&!oe.isPlainObject(e))oe.each(e,function(){o(this.name,this.value)});else for(n in e)W(n,e[n],t,o);return i.join("&").replace(Ut,"+")},oe.fn.extend({serialize:function(){return oe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=oe.prop(this,"elements");return e?oe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!oe(this).is(":disabled")&&Vt.test(this.nodeName)&&!Xt.test(e)&&(this.checked||!$e.test(e))}).map(function(e,t){var n=oe(this).val();return null==n?null:oe.isArray(n)?oe.map(n,function(e){return{name:t.name,value:e.replace(Gt,"\r\n")}}):{name:t.name,value:n.replace(Gt,"\r\n")}}).get()}}),oe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&U()||Q()}:U;var Yt=0,Zt={},Jt=oe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent("onunload",function(){for(var e in Zt)Zt[e](void 0,!0)}),ne.cors=!!Jt&&"withCredentials"in Jt,Jt=ne.ajax=!!Jt,Jt&&oe.ajaxTransport(function(e){if(!e.crossDomain||ne.cors){var t;return{send:function(n,i){var o,r=e.xhr(),s=++Yt;if(r.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)r[o]=e.xhrFields[o];e.mimeType&&r.overrideMimeType&&r.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&r.setRequestHeader(o,n[o]+"");r.send(e.hasContent&&e.data||null),t=function(n,o){var a,l,c;if(t&&(o||4===r.readyState))if(delete Zt[s],t=void 0,r.onreadystatechange=oe.noop,o)4!==r.readyState&&r.abort();else{c={},a=r.status,"string"==typeof r.responseText&&(c.text=r.responseText);try{l=r.statusText}catch(e){l=""}a||!e.isLocal||e.crossDomain?1223===a&&(a=204):a=c.text?200:404}c&&i(a,l,c,r.getAllResponseHeaders())},e.async?4===r.readyState?setTimeout(t):r.onreadystatechange=Zt[s]=t:t()},abort:function(){t&&t(void 0,!0)}}}}),oe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/ -},converters:{"text script":function(e){return oe.globalEval(e),e}}}),oe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),oe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=he.head||oe("head")[0]||he.documentElement;return{send:function(i,o){t=he.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||o(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var Kt=[],en=/(=)\?(?=&|$)|\?\?/;oe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||oe.expando+"_"+$t++;return this[e]=!0,e}}),oe.ajaxPrefilter("json jsonp",function(t,n,i){var o,r,s,a=t.jsonp!==!1&&(en.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&en.test(t.data)&&"data");return a||"jsonp"===t.dataTypes[0]?(o=t.jsonpCallback=oe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,a?t[a]=t[a].replace(en,"$1"+o):t.jsonp!==!1&&(t.url+=(jt.test(t.url)?"&":"?")+t.jsonp+"="+o),t.converters["script json"]=function(){return s||oe.error(o+" was not called"),s[0]},t.dataTypes[0]="json",r=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=r,t[o]&&(t.jsonpCallback=n.jsonpCallback,Kt.push(o)),s&&oe.isFunction(r)&&r(s[0]),s=r=void 0}),"script"):void 0}),oe.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||he;var i=de.exec(e),o=!n&&[];return i?[t.createElement(i[1])]:(i=oe.buildFragment([e],t,o),o&&o.length&&oe(o).remove(),oe.merge([],i.childNodes))};var tn=oe.fn.load;oe.fn.load=function(e,t,n){if("string"!=typeof e&&tn)return tn.apply(this,arguments);var i,o,r,s=this,a=e.indexOf(" ");return a>=0&&(i=oe.trim(e.slice(a,e.length)),e=e.slice(0,a)),oe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),s.length>0&&oe.ajax({url:e,type:r,dataType:"html",data:t}).done(function(e){o=arguments,s.html(i?oe("<div>").append(oe.parseHTML(e)).find(i):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},oe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){oe.fn[t]=function(e){return this.on(t,e)}}),oe.expr.filters.animated=function(e){return oe.grep(oe.timers,function(t){return e===t.elem}).length};var nn=e.document.documentElement;oe.offset={setOffset:function(e,t,n){var i,o,r,s,a,l,c,u=oe.css(e,"position"),d=oe(e),f={};"static"===u&&(e.style.position="relative"),a=d.offset(),r=oe.css(e,"top"),l=oe.css(e,"left"),c=("absolute"===u||"fixed"===u)&&oe.inArray("auto",[r,l])>-1,c?(i=d.position(),s=i.top,o=i.left):(s=parseFloat(r)||0,o=parseFloat(l)||0),oe.isFunction(t)&&(t=t.call(e,n,a)),null!=t.top&&(f.top=t.top-a.top+s),null!=t.left&&(f.left=t.left-a.left+o),"using"in t?t.using.call(e,f):d.css(f)}},oe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){oe.offset.setOffset(this,e,t)});var t,n,i={top:0,left:0},o=this[0],r=o&&o.ownerDocument;return r?(t=r.documentElement,oe.contains(t,o)?(typeof o.getBoundingClientRect!==Ce&&(i=o.getBoundingClientRect()),n=G(r),{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var e,t,n={top:0,left:0},i=this[0];return"fixed"===oe.css(i,"position")?t=i.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),oe.nodeName(e[0],"html")||(n=e.offset()),n.top+=oe.css(e[0],"borderTopWidth",!0),n.left+=oe.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-oe.css(i,"marginTop",!0),left:t.left-n.left-oe.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||nn;e&&!oe.nodeName(e,"html")&&"static"===oe.css(e,"position");)e=e.offsetParent;return e||nn})}}),oe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);oe.fn[e]=function(i){return De(this,function(e,i,o){var r=G(e);return void 0===o?r?t in r?r[t]:r.document.documentElement[i]:e[i]:void(r?r.scrollTo(n?oe(r).scrollLeft():o,n?o:oe(r).scrollTop()):e[i]=o)},e,i,arguments.length,null)}}),oe.each(["top","left"],function(e,t){oe.cssHooks[t]=S(ne.pixelPosition,function(e,n){return n?(n=tt(e,t),it.test(n)?oe(e).position()[t]+"px":n):void 0})}),oe.each({Height:"height",Width:"width"},function(e,t){oe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,i){oe.fn[i]=function(i,o){var r=arguments.length&&(n||"boolean"!=typeof i),s=n||(i===!0||o===!0?"margin":"border");return De(this,function(t,n,i){var o;return oe.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?oe.css(t,n,s):oe.style(t,n,i,s)},t,r?i:void 0,r,null)}})}),oe.fn.size=function(){return this.length},oe.fn.andSelf=oe.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return oe});var on=e.jQuery,rn=e.$;return oe.noConflict=function(t){return e.$===oe&&(e.$=rn),t&&e.jQuery===oe&&(e.jQuery=on),oe},typeof t===Ce&&(e.jQuery=e.$=oe),oe}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(e){"use strict";var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(e){"use strict";function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}e.fn.emulateTransitionEnd=function(t){var n=!1,i=this;e(this).one("bsTransitionEnd",function(){n=!0});var o=function(){n||e(i).trigger(e.support.transition.end)};return setTimeout(o,t),this},e(function(){e.support.transition=t(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){return e(t.target).is(this)?t.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var n=e(this),o=n.data("bs.alert");o||n.data("bs.alert",o=new i(this)),"string"==typeof t&&o[t].call(n)})}var n='[data-dismiss="alert"]',i=function(t){e(t).on("click",n,this.close)};i.VERSION="3.3.5",i.TRANSITION_DURATION=150,i.prototype.close=function(t){function n(){s.detach().trigger("closed.bs.alert").remove()}var o=e(this),r=o.attr("data-target");r||(r=o.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var s=e(r);t&&t.preventDefault(),s.length||(s=o.closest(".alert")),s.trigger(t=e.Event("close.bs.alert")),t.isDefaultPrevented()||(s.removeClass("in"),e.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var o=e.fn.alert;e.fn.alert=t,e.fn.alert.Constructor=i,e.fn.alert.noConflict=function(){return e.fn.alert=o,this},e(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.button"),r="object"==typeof t&&t;o||i.data("bs.button",o=new n(this,r)),"toggle"==t?o.toggle():t&&o.setState(t)})}var n=function(t,i){this.$element=e(t),this.options=e.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.5",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var n="disabled",i=this.$element,o=i.is("input")?"val":"html",r=i.data();t+="Text",null==r.resetText&&i.data("resetText",i[o]()),setTimeout(e.proxy(function(){i[o](null==r[t]?this.options[t]:r[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n))},this),0)},n.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(e=!1),t.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(e=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),e&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=e.fn.button;e.fn.button=t,e.fn.button.Constructor=n,e.fn.button.noConflict=function(){return e.fn.button=i,this},e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=e(n.target);i.hasClass("btn")||(i=i.closest(".btn")),t.call(i,"toggle"),e(n.target).is('input[type="radio"]')||e(n.target).is('input[type="checkbox"]')||n.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){e(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.carousel"),r=e.extend({},n.DEFAULTS,i.data(),"object"==typeof t&&t),s="string"==typeof t?t:r.slide;o||i.data("bs.carousel",o=new n(this,r)),"number"==typeof t?o.to(t):s?o[s]():r.interval&&o.pause().cycle()})}var n=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",e.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",e.proxy(this.pause,this)).on("mouseleave.bs.carousel",e.proxy(this.cycle,this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},n.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(e){return this.$items=e.parent().children(".item"),this.$items.index(e||this.$active)},n.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t),i="prev"==e&&0===n||"next"==e&&n==this.$items.length-1;if(i&&!this.options.wrap)return t;var o="prev"==e?-1:1,r=(n+o)%this.$items.length;return this.$items.eq(r)},n.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){t.to(e)}):n==e?this.pause().cycle():this.slide(e>n?"next":"prev",this.$items.eq(e))},n.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){return this.sliding?void 0:this.slide("next")},n.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},n.prototype.slide=function(t,i){var o=this.$element.find(".item.active"),r=i||this.getItemForDirection(t,o),s=this.interval,a="next"==t?"left":"right",l=this;if(r.hasClass("active"))return this.sliding=!1;var c=r[0],u=e.Event("slide.bs.carousel",{relatedTarget:c,direction:a});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=e(this.$indicators.children()[this.getItemIndex(r)]);d&&d.addClass("active")}var f=e.Event("slid.bs.carousel",{relatedTarget:c,direction:a});return e.support.transition&&this.$element.hasClass("slide")?(r.addClass(t),r[0].offsetWidth,o.addClass(a),r.addClass(a),o.one("bsTransitionEnd",function(){r.removeClass([t,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(f)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(o.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(f)),s&&this.cycle(),this}};var i=e.fn.carousel;e.fn.carousel=t,e.fn.carousel.Constructor=n,e.fn.carousel.noConflict=function(){return e.fn.carousel=i,this};var o=function(n){var i,o=e(this),r=e(o.attr("data-target")||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var s=e.extend({},r.data(),o.data()),a=o.attr("data-slide-to");a&&(s.interval=!1),t.call(r,s),a&&r.data("bs.carousel").to(a),n.preventDefault()}};e(document).on("click.bs.carousel.data-api","[data-slide]",o).on("click.bs.carousel.data-api","[data-slide-to]",o),e(window).on("load",function(){e('[data-ride="carousel"]').each(function(){var n=e(this);t.call(n,n.data())})})}(jQuery),+function(e){"use strict";function t(t){var n,i=t.attr("data-target")||(n=t.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return e(i)}function n(t){return this.each(function(){var n=e(this),o=n.data("bs.collapse"),r=e.extend({},i.DEFAULTS,n.data(),"object"==typeof t&&t);!o&&r.toggle&&/show|hide/.test(t)&&(r.toggle=!1),o||n.data("bs.collapse",o=new i(this,r)),"string"==typeof t&&o[t]()})}var i=function(t,n){this.$element=e(t),this.options=e.extend({},i.DEFAULTS,n),this.$trigger=e('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.5",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var e=this.$element.hasClass("width");return e?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,o=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(o&&o.length&&(t=o.data("bs.collapse"),t&&t.transitioning))){var r=e.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){o&&o.length&&(n.call(o,"hide"),t||o.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return a.call(this);var l=e.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",e.proxy(a,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=e.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return e.support.transition?void this.$element[n](0).one("bsTransitionEnd",e.proxy(o,this)).emulateTransitionEnd(i.TRANSITION_DURATION):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return e(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(e.proxy(function(n,i){var o=e(i);this.addAriaAndCollapsedClass(t(o),o)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass("in");e.attr("aria-expanded",n),t.toggleClass("collapsed",!n).attr("aria-expanded",n)};var o=e.fn.collapse;e.fn.collapse=n,e.fn.collapse.Constructor=i,e.fn.collapse.noConflict=function(){return e.fn.collapse=o,this},e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var o=e(this);o.attr("data-target")||i.preventDefault();var r=t(o),s=r.data("bs.collapse"),a=s?"toggle":o.data();n.call(r,a)})}(jQuery),+function(e){"use strict";function t(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&e(n);return i&&i.length?i:t.parent()}function n(n){n&&3===n.which||(e(o).remove(),e(r).each(function(){var i=e(this),o=t(i),r={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&e.contains(o[0],n.target)||(o.trigger(n=e.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),o.removeClass("open").trigger("hidden.bs.dropdown",r))))}))}function i(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new s(this)),"string"==typeof t&&i[t].call(n)})}var o=".dropdown-backdrop",r='[data-toggle="dropdown"]',s=function(t){e(t).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.5",s.prototype.toggle=function(i){var o=e(this);if(!o.is(".disabled, :disabled")){var r=t(o),s=r.hasClass("open");if(n(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",n);var a={relatedTarget:this};if(r.trigger(i=e.Event("show.bs.dropdown",a)),i.isDefaultPrevented())return;o.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger("shown.bs.dropdown",a)}return!1}},s.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=e(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var o=t(i),s=o.hasClass("open");if(!s&&27!=n.which||s&&27==n.which)return 27==n.which&&o.find(r).trigger("focus"),i.trigger("click");var a=" li:not(.disabled):visible a",l=o.find(".dropdown-menu"+a);if(l.length){var c=l.index(n.target);38==n.which&&c>0&&c--,40==n.which&&c<l.length-1&&c++,~c||(c=0),l.eq(c).trigger("focus")}}}};var a=e.fn.dropdown;e.fn.dropdown=i,e.fn.dropdown.Constructor=s,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=a,this},e(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",r,s.prototype.toggle).on("keydown.bs.dropdown.data-api",r,s.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",s.prototype.keydown)}(jQuery),+function(e){"use strict";function t(t,i){return this.each(function(){var o=e(this),r=o.data("bs.modal"),s=e.extend({},n.DEFAULTS,o.data(),"object"==typeof t&&t);r||o.data("bs.modal",r=new n(this,s)),"string"==typeof t?r[t](i):s.show&&r.show(i)})}var n=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,e.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},n.prototype.show=function(t){var i=this,o=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',e.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(t){e(t.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var o=e.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),o&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t});o?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},n.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),e.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",e.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",e.proxy(function(e){27==e.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?e(window).on("resize.bs.modal",e.proxy(this.handleUpdate,this)):e(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.$body.removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(t){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=e.support.transition&&o;if(this.$backdrop=e(document.createElement("div")).addClass("modal-backdrop "+o).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",e.proxy(function(e){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(e.target===e.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;r?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),t&&t()};e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):s()}else t&&t()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",e+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var e=document.createElement("div");e.className="modal-scrollbar-measure",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var i=e.fn.modal;e.fn.modal=t,e.fn.modal.Constructor=n,e.fn.modal.noConflict=function(){return e.fn.modal=i,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=e(this),o=i.attr("href"),r=e(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),s=r.data("bs.modal")?"toggle":e.extend({remote:!/#/.test(o)&&o},r.data(),i.data());i.is("a")&&n.preventDefault(),r.one("show.bs.modal",function(e){e.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),t.call(r,s,this)})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tooltip"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.tooltip",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(t,n,i){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&e(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),r=o.length;r--;){var s=o[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",l="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},n.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,i){n[e]!=i&&(t[e]=i)}),t},n.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},n.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),n.isInStateTrue()?void 0:(clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide())},n.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var i=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!i)return;var o=this,r=this.tip(),s=this.getUID(this.type);this.setContent(),r.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(a);c&&(a=a.replace(l,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=r[0].offsetWidth,f=r[0].offsetHeight;if(c){var p=a,h=this.getPosition(this.$viewport);a="bottom"==a&&u.bottom+f>h.bottom?"top":"top"==a&&u.top-f<h.top?"bottom":"right"==a&&u.right+d>h.width?"left":"left"==a&&u.left-d<h.left?"right":a,r.removeClass(p).addClass(a)}var g=this.getCalculatedOffset(a,u,d,f);this.applyPlacement(g,a);var m=function(){var e=o.hoverState;o.$element.trigger("shown.bs."+o.type),o.hoverState=null,"out"==e&&o.leave(o)};e.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(n.TRANSITION_DURATION):m()}},n.prototype.applyPlacement=function(t,n){var i=this.tip(),o=i[0].offsetWidth,r=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,e.offset.setOffset(i[0],e.extend({using:function(e){i.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=r&&(t.top=t.top+r-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),f=d?2*u.left-o+l:2*u.top-r+c,p=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(f,i[0][p],d)},n.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},n.prototype.hide=function(t){function i(){"in"!=o.hoverState&&r.detach(),o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),t&&t()}var o=this,r=e(this.$tip),s=e.Event("hide.bs."+this.type);return this.$element.trigger(s),s.isDefaultPrevented()?void 0:(r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i(),this.hoverState=null,this)},n.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(t){t=t||this.$element;var n=t[0],i="BODY"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=e.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var r=i?{top:0,left:0}:t.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},a=i?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},o,s,a,r)},n.prototype.getCalculatedOffset=function(e,t,n,i){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-i,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-i/2,left:t.left-n}:{top:t.top+t.height/2-i/2,left:t.left+t.width}},n.prototype.getViewportAdjustedDelta=function(e,t,n,i){ -var o={top:0,left:0};if(!this.$viewport)return o;var r=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(e)){var a=t.top-r-s.scroll,l=t.top+r-s.scroll+i;a<s.top?o.top=s.top-a:l>s.top+s.height&&(o.top=s.top+s.height-l)}else{var c=t.left-r,u=t.left+r+n;c<s.left?o.left=s.left-c:u>s.right&&(o.left=s.left+s.width-u)}return o},n.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||("function"==typeof n.title?n.title.call(t[0]):n.title)},n.prototype.getUID=function(e){do e+=~~(1e6*Math.random());while(document.getElementById(e));return e},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(t){var n=this;t&&(n=e(t.currentTarget).data("bs."+this.type),n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide(function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null})};var i=e.fn.tooltip;e.fn.tooltip=t,e.fn.tooltip.Constructor=n,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=i,this}}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.popover"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.popover",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.5",n.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),n.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=e.fn.popover;e.fn.popover=t,e.fn.popover.Constructor=n,e.fn.popover.noConflict=function(){return e.fn.popover=i,this}}(jQuery),+function(e){"use strict";function t(n,i){this.$body=e(document.body),this.$scrollElement=e(e(n).is(document.body)?window:n),this.options=e.extend({},t.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=e(this),o=i.data("bs.scrollspy"),r="object"==typeof n&&n;o||i.data("bs.scrollspy",o=new t(this,r)),"string"==typeof n&&o[n]()})}t.VERSION="3.3.5",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=e(this),o=t.data("target")||t.attr("href"),r=/^#./.test(o)&&e(o);return r&&r.length&&r.is(":visible")&&[[r[n]().top+i,o]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,r=this.targets,s=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=i)return s!=(e=r[r.length-1])&&this.activate(e);if(s&&t<o[0])return this.activeTarget=null,this.clear();for(e=o.length;e--;)s!=r[e]&&t>=o[e]&&(void 0===o[e+1]||t<o[e+1])&&this.activate(r[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=e(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=i,this},e(window).on("load.bs.scrollspy.data-api",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);n.call(t,t.data())})})}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tab");o||i.data("bs.tab",o=new n(this)),"string"==typeof t&&o[t]()})}var n=function(t){this.element=e(t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=t.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=n.find(".active:last a"),r=e.Event("hide.bs.tab",{relatedTarget:t[0]}),s=e.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(r),t.trigger(s),!s.isDefaultPrevented()&&!r.isDefaultPrevented()){var a=e(i);this.activate(t.closest("li"),n),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},n.prototype.activate=function(t,i,o){function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),o&&o()}var s=i.find("> .active"),a=o&&e.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&a?s.one("bsTransitionEnd",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),s.removeClass("in")};var i=e.fn.tab;e.fn.tab=t,e.fn.tab.Constructor=n,e.fn.tab.noConflict=function(){return e.fn.tab=i,this};var o=function(n){n.preventDefault(),t.call(e(this),"show")};e(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',o).on("click.bs.tab.data-api",'[data-toggle="pill"]',o)}(jQuery),+function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.affix"),r="object"==typeof t&&t;o||i.data("bs.affix",o=new n(this,r)),"string"==typeof t&&o[t]()})}var n=function(t,i){this.options=e.extend({},n.DEFAULTS,i),this.$target=e(this.options.target).on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.5",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(e,t,n,i){var o=this.$target.scrollTop(),r=this.$element.offset(),s=this.$target.height();if(null!=n&&"top"==this.affixed)return n>o&&"top";if("bottom"==this.affixed)return null!=n?!(o+this.unpin<=r.top)&&"bottom":!(e-i>=o+s)&&"bottom";var a=null==this.affixed,l=a?o:r.top,c=a?s:t;return null!=n&&n>=o?"top":null!=i&&l+c>=e-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var e=this.$target.scrollTop(),t=this.$element.offset();return this.pinnedOffset=t.top-e},n.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),i=this.options.offset,o=i.top,r=i.bottom,s=Math.max(e(document).height(),e(document.body).height());"object"!=typeof i&&(r=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var a=this.getState(s,t,o,r);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var l="affix"+(a?"-"+a:""),c=e.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-t-r})}};var i=e.fn.affix;e.fn.affix=t,e.fn.affix.Constructor=n,e.fn.affix.noConflict=function(){return e.fn.affix=i,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var n=e(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),t.call(n,i)})})}(jQuery),!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){(function(t){function i(e,t,n,i){var s=o(n.substr(n.lastIndexOf(e.domain)),e);s&&r({mode:null,el:i,flags:s,engineSettings:t})}function o(e,t){for(var n={theme:T(R.settings.themes.gray,null),stylesheets:t.stylesheets,holderURL:[]},i=!1,o=String.fromCharCode(11),r=e.replace(/([^\\])\//g,"$1"+o).split(o),s=/%[0-9a-f]{2}/gi,a=r.length,l=0;a>l;l++){var c=r[l];if(c.match(s))try{c=decodeURIComponent(c)}catch(e){c=r[l]}var u=!1;if(R.flags.dimensions.match(c))i=!0,n.dimensions=R.flags.dimensions.output(c),u=!0;else if(R.flags.fluid.match(c))i=!0,n.dimensions=R.flags.fluid.output(c),n.fluid=!0,u=!0;else if(R.flags.textmode.match(c))n.textmode=R.flags.textmode.output(c),u=!0;else if(R.flags.colors.match(c)){var d=R.flags.colors.output(c);n.theme=T(n.theme,d),u=!0}else if(t.themes[c])t.themes.hasOwnProperty(c)&&(n.theme=T(t.themes[c],null)),u=!0;else if(R.flags.font.match(c))n.font=R.flags.font.output(c),u=!0;else if(R.flags.auto.match(c))n.auto=!0,u=!0;else if(R.flags.text.match(c))n.text=R.flags.text.output(c),u=!0;else if(R.flags.size.match(c))n.size=R.flags.size.output(c),u=!0;else if(R.flags.random.match(c)){null==R.vars.cache.themeKeys&&(R.vars.cache.themeKeys=Object.keys(t.themes));var f=R.vars.cache.themeKeys[0|Math.random()*R.vars.cache.themeKeys.length];n.theme=T(t.themes[f],null),u=!0}u&&n.holderURL.push(c)}return n.holderURL.unshift(t.domain),n.holderURL=n.holderURL.join("/"),!!i&&n}function r(e){var t=e.mode,n=e.el,i=e.flags,o=e.engineSettings,r=i.dimensions,a=i.theme,l=r.width+"x"+r.height;if(t=null==t?i.fluid?"fluid":"image":t,null!=i.text&&(a.text=i.text,"object"===n.nodeName.toLowerCase())){for(var d=a.text.split("\\n"),f=0;f<d.length;f++)d[f]=S(d[f]);a.text=d.join("\\n")}var p=i.holderURL,h=T(o,null);if(i.font&&(a.font=i.font,!h.noFontFallback&&"img"===n.nodeName.toLowerCase()&&R.setup.supportsCanvas&&"svg"===h.renderer&&(h=T(h,{renderer:"canvas"}))),i.font&&"canvas"==h.renderer&&(h.reRender=!0),"background"==t)null==n.getAttribute("data-background-src")&&g(n,{"data-background-src":p});else{var m={};m[R.vars.dataAttr]=p,g(n,m)}i.theme=a,n.holderData={flags:i,engineSettings:h},("image"==t||"fluid"==t)&&g(n,{alt:a.text?a.text+" ["+l+"]":l});var v={mode:t,el:n,holderSettings:{dimensions:r,theme:a,flags:i},engineSettings:h};"image"==t?("html"!=h.renderer&&i.auto||(n.style.width=r.width+"px",n.style.height=r.height+"px"),"html"==h.renderer?n.style.backgroundColor=a.background:(s(v),"exact"==i.textmode&&(n.holderData.resizeUpdate=!0,R.vars.resizableImages.push(n),c(n)))):"background"==t&&"html"!=h.renderer?s(v):"fluid"==t&&(n.holderData.resizeUpdate=!0,"%"==r.height.slice(-1)?n.style.height=r.height:null!=i.auto&&i.auto||(n.style.height=r.height+"px"),"%"==r.width.slice(-1)?n.style.width=r.width:null!=i.auto&&i.auto||(n.style.width=r.width+"px"),("inline"==n.style.display||""===n.style.display||"none"==n.style.display)&&(n.style.display="block"),u(n),"html"==h.renderer?n.style.backgroundColor=a.background:(R.vars.resizableImages.push(n),c(n)))}function s(e){function n(){var t=null;switch(l.renderer){case"canvas":t=M(u,e);break;case"svg":t=F(u,e);break;default:throw"Holder: invalid renderer: "+l.renderer}return t}var i=null,o=e.mode,r=e.holderSettings,s=e.el,l=e.engineSettings;switch(l.renderer){case"svg":if(!R.setup.supportsSVG)return;break;case"canvas":if(!R.setup.supportsCanvas)return;break;default:return}var c={width:r.dimensions.width,height:r.dimensions.height,theme:r.theme,flags:r.flags},u=a(c);if(i=n(),null==i)throw"Holder: couldn't render placeholder";"background"==o?(s.style.backgroundImage="url("+i+")",s.style.backgroundSize=c.width+"px "+c.height+"px"):("img"===s.nodeName.toLowerCase()?g(s,{src:i}):"object"===s.nodeName.toLowerCase()&&(g(s,{data:i}),g(s,{type:"image/svg+xml"})),l.reRender&&t.setTimeout(function(){var e=n();if(null==e)throw"Holder: couldn't render placeholder";"img"===s.nodeName.toLowerCase()?g(s,{src:e}):"object"===s.nodeName.toLowerCase()&&(g(s,{data:e}),g(s,{type:"image/svg+xml"}))},100)),g(s,{"data-holder-rendered":!0})}function a(e){function t(e,t,n,i){t.width=n,t.height=i,e.width=Math.max(e.width,t.width),e.height+=t.height,e.add(t)}var n=R.defaults.size;switch(parseFloat(e.theme.size)?n=e.theme.size:parseFloat(e.flags.size)&&(n=e.flags.size),e.font={family:e.theme.font?e.theme.font:"Arial, Helvetica, Open Sans, sans-serif",size:l(e.width,e.height,n),units:e.theme.units?e.theme.units:R.defaults.units,weight:e.theme.fontweight?e.theme.fontweight:"bold"},e.text=e.theme.text?e.theme.text:Math.floor(e.width)+"x"+Math.floor(e.height),e.flags.textmode){case"literal":e.text=e.flags.dimensions.width+"x"+e.flags.dimensions.height;break;case"exact":if(!e.flags.exactDimensions)break;e.text=Math.floor(e.flags.exactDimensions.width)+"x"+Math.floor(e.flags.exactDimensions.height)}var i=new w({width:e.width,height:e.height}),o=i.Shape,r=new o.Rect("holderBg",{fill:e.theme.background});r.resize(e.width,e.height),i.root.add(r);var s=new o.Group("holderTextGroup",{text:e.text,align:"center",font:e.font,fill:e.theme.foreground});s.moveTo(null,null,1),i.root.add(s);var a=s.textPositionData=H(i);if(!a)throw"Holder: staging fallback not supported yet.";s.properties.leading=a.boundingBox.height;var c=null,u=null;if(a.lineCount>1){var d=0,f=0,p=e.width*R.setup.lineWrapRatio,h=0;u=new o.Group("line"+h);for(var g=0;g<a.words.length;g++){var m=a.words[g];c=new o.Text(m.text);var v="\\n"==m.text;(d+m.width>=p||v===!0)&&(t(s,u,d,s.properties.leading),d=0,f+=s.properties.leading,h+=1,u=new o.Group("line"+h),u.y=f),v!==!0&&(c.moveTo(d,0),d+=a.spaceWidth+m.width,u.add(c))}t(s,u,d,s.properties.leading);for(var y in s.children)u=s.children[y],u.moveTo((s.width-u.width)/2,null,null);s.moveTo((e.width-s.width)/2,(e.height-s.height)/2,null),(e.height-s.height)/2<0&&s.moveTo(null,0,null)}else c=new o.Text(e.text),u=new o.Group("line0"),u.add(c),s.add(u),s.moveTo((e.width-a.boundingBox.width)/2,(e.height-a.boundingBox.height)/2,null);return i}function l(e,t,n){var i=parseInt(e,10),o=parseInt(t,10),r=Math.max(i,o),s=Math.min(i,o),a=.8*Math.min(s,r*R.defaults.scale);return Math.round(Math.max(n,a))}function c(e){var t;t=null==e||null==e.nodeType?R.vars.resizableImages:[e];for(var n=0,i=t.length;i>n;n++){var o=t[n];if(o.holderData){var r=o.holderData.flags,a=$(o);if(a){if(!o.holderData.resizeUpdate)continue;if(r.fluid&&r.auto){var l=o.holderData.fluidConfig;switch(l.mode){case"width":a.height=a.width/l.ratio;break;case"height":a.width=a.height*l.ratio}}var c={mode:"image",holderSettings:{dimensions:a,theme:r.theme,flags:r},el:o,engineSettings:o.holderData.engineSettings};"exact"==r.textmode&&(r.exactDimensions=a,c.holderSettings.dimensions=r.dimensions),s(c)}else p(o)}}}function u(e){if(e.holderData){var t=$(e);if(t){var n=e.holderData.flags,i={fluidHeight:"%"==n.dimensions.height.slice(-1),fluidWidth:"%"==n.dimensions.width.slice(-1),mode:null,initialDimensions:t};i.fluidWidth&&!i.fluidHeight?(i.mode="width",i.ratio=i.initialDimensions.width/parseFloat(n.dimensions.height)):!i.fluidWidth&&i.fluidHeight&&(i.mode="height",i.ratio=parseFloat(n.dimensions.width)/i.initialDimensions.height),e.holderData.fluidConfig=i}else p(e)}}function d(){for(var e,n=[],i=Object.keys(R.vars.invisibleImages),o=0,r=i.length;r>o;o++)e=R.vars.invisibleImages[i[o]],$(e)&&"img"==e.nodeName.toLowerCase()&&(n.push(e),delete R.vars.invisibleImages[i[o]]);n.length&&B.run({images:n}),t.requestAnimationFrame(d)}function f(){R.vars.visibilityCheckStarted||(t.requestAnimationFrame(d),R.vars.visibilityCheckStarted=!0)}function p(e){e.holderData.invisibleId||(R.vars.invisibleId+=1,R.vars.invisibleImages["i"+R.vars.invisibleId]=e,e.holderData.invisibleId=R.vars.invisibleId)}function h(e,t){return null==t?document.createElement(e):document.createElementNS(t,e)}function g(e,t){for(var n in t)e.setAttribute(n,t[n])}function m(e,t,n){var i,o;null==e?(e=h("svg",j),i=h("defs",j),o=h("style",j),g(o,{type:"text/css"}),i.appendChild(o),e.appendChild(i)):o=e.querySelector("style"),e.webkitMatchesSelector&&e.setAttribute("xmlns",j);for(var r=0;r<e.childNodes.length;r++)e.childNodes[r].nodeType===L&&e.removeChild(e.childNodes[r]);for(;o.childNodes.length;)o.removeChild(o.childNodes[0]);return g(e,{width:t,height:n,viewBox:"0 0 "+t+" "+n,preserveAspectRatio:"none"}),e}function v(e,n){if(t.XMLSerializer){var i=new XMLSerializer,o="",r=n.stylesheets;if(n.svgXMLStylesheet){for(var s=y(),a=r.length-1;a>=0;a--){var l=s.createProcessingInstruction("xml-stylesheet",'href="'+r[a]+'" rel="stylesheet"');s.insertBefore(l,s.firstChild)}var c=s.createProcessingInstruction("xml",'version="1.0" encoding="UTF-8" standalone="yes"');s.insertBefore(c,s.firstChild),s.removeChild(s.documentElement),o=i.serializeToString(s)}var u=i.serializeToString(e);return u=u.replace(/\&(\#[0-9]{2,}\;)/g,"&$1"),o+u}}function y(){return t.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 0}function b(e){R.vars.debounceTimer||e.call(this),R.vars.debounceTimer&&t.clearTimeout(R.vars.debounceTimer),R.vars.debounceTimer=t.setTimeout(function(){R.vars.debounceTimer=null,e.call(this)},R.setup.debounce)}function A(){b(function(){c(null)})}var x=n(1),w=n(2),C=n(3),T=C.extend,E=C.cssProps,S=C.encodeHtmlEntity,k=C.decodeHtmlEntity,N=C.imageExists,D=C.getNodeArray,$=C.dimensionCheck,j="http://www.w3.org/2000/svg",L=8,O="2.6.0",I="\nCreated with Holder.js "+O+".\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n",B={version:O,addTheme:function(e,t){return null!=e&&null!=t&&(R.settings.themes[e]=t),delete R.vars.cache.themeKeys,this},addImage:function(e,t){var n=document.querySelectorAll(t);if(n.length)for(var i=0,o=n.length;o>i;i++){var r=h("img"),s={};s[R.vars.dataAttr]=e,g(r,s),n[i].appendChild(r)}return this},setResizeUpdate:function(e,t){e.holderData&&(e.holderData.resizeUpdate=!!t,e.holderData.resizeUpdate&&c(e))},run:function(e){e=e||{};var n={},s=T(R.settings,e);R.vars.preempted=!0,R.vars.dataAttr=s.dataAttr||R.vars.dataAttr,n.renderer=s.renderer?s.renderer:R.setup.renderer,-1===R.setup.renderers.join(",").indexOf(n.renderer)&&(n.renderer=R.setup.supportsSVG?"svg":R.setup.supportsCanvas?"canvas":"html");var a=D(s.images),l=D(s.bgnodes),c=D(s.stylenodes),u=D(s.objects);n.stylesheets=[],n.svgXMLStylesheet=!0,n.noFontFallback=!!s.noFontFallback&&s.noFontFallback;for(var d=0;d<c.length;d++){var f=c[d];if(f.attributes.rel&&f.attributes.href&&"stylesheet"==f.attributes.rel.value){var p=f.attributes.href.value,g=h("a");g.href=p;var m=g.protocol+"//"+g.host+g.pathname+g.search;n.stylesheets.push(m)}}for(d=0;d<l.length;d++)if(t.getComputedStyle){var v=t.getComputedStyle(l[d],null).getPropertyValue("background-image"),y=l[d].getAttribute("data-background-src"),b=null;b=null==y?v:y;var A=null,x="?"+s.domain+"/";if(0===b.indexOf(x))A=b.slice(1);else if(-1!=b.indexOf(x)){var w=b.substr(b.indexOf(x)).slice(1),C=w.match(/([^\"]*)"?\)/);null!=C&&(A=C[1])}if(null!=A){var E=o(A,s);E&&r({mode:"background",el:l[d],flags:E,engineSettings:n})}}for(d=0;d<u.length;d++){var S=u[d],k={};try{k.data=S.getAttribute("data"),k.dataSrc=S.getAttribute(R.vars.dataAttr)}catch(e){}var $=null!=k.data&&0===k.data.indexOf(s.domain),j=null!=k.dataSrc&&0===k.dataSrc.indexOf(s.domain);$?i(s,n,k.data,S):j&&i(s,n,k.dataSrc,S)}for(d=0;d<a.length;d++){var L=a[d],O={};try{O.src=L.getAttribute("src"),O.dataSrc=L.getAttribute(R.vars.dataAttr),O.rendered=L.getAttribute("data-holder-rendered")}catch(e){}var I=null!=O.src,B=null!=O.dataSrc&&0===O.dataSrc.indexOf(s.domain),H=null!=O.rendered&&"true"==O.rendered;I?0===O.src.indexOf(s.domain)?i(s,n,O.src,L):B&&(H?i(s,n,O.dataSrc,L):!function(e,t,n,o,r){N(e,function(e){e||i(t,n,o,r)})}(O.src,s,n,O.dataSrc,L)):B&&i(s,n,O.dataSrc,L)}return this}},R={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body .holderjs",stylenodes:"head link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(e){var t=this.regex.exec(e);return{width:+t[1],height:+t[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(e){var t=this.regex.exec(e);return{width:t[1],height:t[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function(e){var t=this.regex.exec(e);return{foreground:"#"+t[2],background:"#"+t[1]}}},text:{regex:/text\:(.*)/,output:function(e){return this.regex.exec(e)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(e){return this.regex.exec(e)[1]}}}},H=function(){var e=null,t=null,n=null;return function(i){var o=i.root;if(R.setup.supportsSVG){var r=!1,s=function(e){return document.createTextNode(e)};(null==e||e.parentNode!==document.body)&&(r=!0),e=m(e,o.properties.width,o.properties.height),e.style.display="block",r&&(t=h("text",j),n=s(null),g(t,{x:0}),t.appendChild(n),e.appendChild(t),document.body.appendChild(e),e.style.visibility="hidden",e.style.position="absolute",e.style.top="-100%",e.style.left="-100%");var a=o.children.holderTextGroup,l=a.properties;g(t,{y:l.font.size,style:E({"font-weight":l.font.weight,"font-size":l.font.size+l.font.units,"font-family":l.font.family})}),n.nodeValue=l.text;var c=t.getBBox(),u=Math.ceil(c.width/(o.properties.width*R.setup.lineWrapRatio)),d=l.text.split(" "),f=l.text.match(/\\n/g);u+=null==f?0:f.length,n.nodeValue=l.text.replace(/[ ]+/g,"");var p=t.getComputedTextLength(),v=c.width-p,y=Math.round(v/Math.max(1,d.length-1)),b=[];if(u>1){n.nodeValue="";for(var A=0;A<d.length;A++)if(0!==d[A].length){n.nodeValue=k(d[A]);var x=t.getBBox();b.push({text:d[A],width:x.width})}}return e.style.display="none",{spaceWidth:y,lineCount:u,boundingBox:c,words:b}}return!1}}(),M=function(){var e=h("canvas"),t=null;return function(n){null==t&&(t=e.getContext("2d"));var i=n.root;e.width=R.dpr(i.properties.width),e.height=R.dpr(i.properties.height),t.textBaseline="middle",t.fillStyle=i.children.holderBg.properties.fill,t.fillRect(0,0,R.dpr(i.children.holderBg.width),R.dpr(i.children.holderBg.height));var o=i.children.holderTextGroup;o.properties,t.font=o.properties.font.weight+" "+R.dpr(o.properties.font.size)+o.properties.font.units+" "+o.properties.font.family+", monospace",t.fillStyle=o.properties.fill;for(var r in o.children){var s=o.children[r];for(var a in s.children){var l=s.children[a],c=R.dpr(o.x+s.x+l.x),u=R.dpr(o.y+s.y+l.y+o.properties.leading/2);t.fillText(l.properties.text,c,u)}}return e.toDataURL("image/png")}}(),F=function(){if(t.XMLSerializer){var e=y(),n=m(null,0,0),i=h("rect",j);return n.appendChild(i),function(t,o){var r=t.root;m(n,r.properties.width,r.properties.height);for(var s=n.querySelectorAll("g"),a=0;a<s.length;a++)s[a].parentNode.removeChild(s[a]);var l=o.holderSettings.flags.holderURL,c="holder_"+(Number(new Date)+32768+(0|32768*Math.random())).toString(16),u=h("g",j),d=r.children.holderTextGroup,f=d.properties,p=h("g",j),y=d.textPositionData,b="#"+c+" text { "+E({fill:f.fill,"font-weight":f.font.weight,"font-family":f.font.family+", monospace","font-size":f.font.size+f.font.units})+" } ",A=e.createComment("\nSource URL: "+l+I),x=e.createCDATASection(b),w=n.querySelector("style");g(u,{id:c}),n.insertBefore(A,n.firstChild),w.appendChild(x),u.appendChild(i),u.appendChild(p),n.appendChild(u),g(i,{width:r.children.holderBg.width,height:r.children.holderBg.height,fill:r.children.holderBg.properties.fill}),d.y+=.8*y.boundingBox.height;for(var C in d.children){var T=d.children[C];for(var S in T.children){var k=T.children[S],N=d.x+T.x+k.x,D=d.y+T.y+k.y,$=h("text",j),L=document.createTextNode(null);g($,{x:N,y:D}),L.nodeValue=k.properties.text,$.appendChild(L),p.appendChild($)}}var O="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(v(n,o.engineSettings))));return O}}}();for(var P in R.flags)R.flags.hasOwnProperty(P)&&(R.flags[P].match=function(e){return e.match(this.regex)});R.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},R.dpr=function(e){return e*R.setup.ratio},R.vars={preempted:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var e=1,n=1,i=h("canvas"),o=null;i.getContext&&-1!=i.toDataURL("image/png").indexOf("data:image/png")&&(R.setup.renderer="canvas",o=i.getContext("2d"),R.setup.supportsCanvas=!0),R.setup.supportsCanvas&&(e=t.devicePixelRatio||1,n=o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),R.setup.ratio=e/n,document.createElementNS&&document.createElementNS(j,"svg").createSVGRect&&(R.setup.renderer="svg",R.setup.supportsSVG=!0)}(),f(),x&&x(function(){R.vars.preempted||B.run(),t.addEventListener?(t.addEventListener("resize",A,!1),t.addEventListener("orientationchange",A,!1)):t.attachEvent("onresize",A),"object"==typeof t.Turbolinks&&t.document.addEventListener("page:change",function(){B.run()})}),e.exports=B}).call(t,function(){return this}())},function(e){function t(e){function t(e){if(!x){if(!s.body)return o(t);for(x=!0;e=w.shift();)o(e)}}function n(e){(b||e.type===l||s[f]===d)&&(i(),t())}function i(){b?(s[y](m,n,c),e[y](l,n,c)):(s[h](v,n),e[h](u,n))}function o(e,t){setTimeout(e,+t>=0?t:1)}function r(e){x?o(e):w.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function e(){document.removeEventListener("DOMContentLoaded",e,!1),document.readyState="complete"},!1),document.readyState="loading");var s=e.document,a=s.documentElement,l="load",c=!1,u="on"+l,d="complete",f="readyState",p="attachEvent",h="detachEvent",g="addEventListener",m="DOMContentLoaded",v="onreadystatechange",y="removeEventListener",b=g in s,A=c,x=c,w=[];if(s[f]===d)o(t);else if(b)s[g](m,n,c),e[g](l,n,c);else{s[p](v,n),e[p](u,n);try{A=null==e.frameElement&&a}catch(e){}A&&A.doScroll&&!function e(){if(!x){try{A.doScroll("left")}catch(t){return o(e,50)}i(),t()}}()}return r.version="1.4.0",r.isReady=function(){return x},r}e.exports="undefined"!=typeof window&&t(window)},function(e,t,n){var i=n(4),o=function(e){function t(e,t){for(var n in t)e[n]=t[n];return e}var n=1,o=i.defclass({constructor:function(e){n++,this.parent=null,this.children={},this.id=n,this.name="n"+n,null!=e&&(this.name=e),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(e,t){null!=e&&(this.width=e),null!=t&&(this.height=t)},moveTo:function(e,t,n){this.x=null!=e?e:this.x,this.y=null!=t?t:this.y,this.z=null!=n?n:this.z},add:function(e){var t=e.name;if(null!=this.children[t])throw"SceneGraph: child with that name already exists: "+t;this.children[t]=e,e.parent=this}}),r=i(o,function(t){this.constructor=function(){t.constructor.call(this,"root"),this.properties=e}}),s=i(o,function(e){function n(n,i){if(e.constructor.call(this,n),this.properties={fill:"#000"},null!=i)t(this.properties,i);else if(null!=n&&"string"!=typeof n)throw"SceneGraph: invalid node name"}this.Group=i.extend(this,{constructor:n,type:"group"}),this.Rect=i.extend(this,{constructor:n,type:"rect"}),this.Text=i.extend(this,{constructor:function(e){n.call(this),this.properties.text=e},type:"text"})}),a=new r;return this.Shape=s,this.root=a,this};e.exports=o},function(e,t){(function(e){t.extend=function(e,t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);if(null!=t)for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);return n},t.cssProps=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+":"+e[n]);return t.join(";")},t.encodeHtmlEntity=function(e){for(var t=[],n=0,i=e.length-1;i>=0;i--)n=e.charCodeAt(i),t.unshift(n>128?["&#",n,";"].join(""):e[i]);return t.join("")},t.getNodeArray=function(t){var n=null;return"string"==typeof t?n=document.querySelectorAll(t):e.NodeList&&t instanceof e.NodeList?n=t:e.Node&&t instanceof e.Node?n=[t]:e.HTMLCollection&&t instanceof e.HTMLCollection?n=t:t instanceof Array?n=t:null===t&&(n=[]),n},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t}}).call(t,function(){return this}())},function(e){var t=function(){},n=Array.prototype.slice,i=function(e,i){var o=t.prototype="function"==typeof e?e.prototype:e,r=new t,s=i.apply(r,n.call(arguments,2).concat(o));if("object"==typeof s)for(var a in s)r[a]=s[a];if(!r.hasOwnProperty("constructor"))return r;var l=r.constructor;return l.prototype=r,l};i.defclass=function(e){var t=e.constructor;return t.prototype=e,t},i.extend=function(e,t){return i(e,function(e){return this.uber=e,t})},e.exports=i}])}),!function(e){"use strict";function t(e){return e.replace(/,/g,".").replace(/[^0-9\.]/g,"")}function n(e){return parseFloat(t(e))>=10}var i,o={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},r={},s=0,a={},l=0,c={},u=null,d=null,f=function(){var e,t,n,i,o="ZeroClipboard.swf"; -if(document.currentScript&&(i=document.currentScript.src));else{var r=document.getElementsByTagName("script");if("readyState"in r[0])for(e=r.length;e--&&("interactive"!==r[e].readyState||!(i=r[e].src)););else if("loading"===document.readyState)i=r[r.length-1].src;else{for(e=r.length;e--;){if(n=r[e].src,!n){t=null;break}if(n=n.split("#")[0].split("?")[0],n=n.slice(0,n.lastIndexOf("/")+1),null==t)t=n;else if(t!==n){t=null;break}}null!==t&&(i=t)}}return i&&(i=i.split("#")[0].split("?")[0],o=i.slice(0,i.lastIndexOf("/")+1)+o),o}(),p=function(){var e=/\-([a-z])/g,t=function(e,t){return t.toUpperCase()};return function(n){return n.replace(e,t)}}(),h=function(t,n){var i,o,r;return e.getComputedStyle?i=e.getComputedStyle(t,null).getPropertyValue(n):(o=p(n),i=t.currentStyle?t.currentStyle[o]:t.style[o]),"cursor"!==n||i&&"auto"!==i||(r=t.tagName.toLowerCase(),"a"!==r)?i:"pointer"},g=function(t){t||(t=e.event);var n;this!==e?n=this:t.target?n=t.target:t.srcElement&&(n=t.srcElement),R.activate(n)},m=function(e,t,n){e&&1===e.nodeType&&(e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n))},v=function(e,t,n){e&&1===e.nodeType&&(e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent&&e.detachEvent("on"+t,n))},y=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)||e.classList.add(t),e;if(t&&"string"==typeof t){var n=(t||"").split(/\s+/);if(1===e.nodeType)if(e.className){for(var i=" "+e.className+" ",o=e.className,r=0,s=n.length;s>r;r++)i.indexOf(" "+n[r]+" ")<0&&(o+=" "+n[r]);e.className=o.replace(/^\s+|\s+$/g,"")}else e.className=t}return e},b=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)&&e.classList.remove(t),e;if(t&&"string"==typeof t||void 0===t){var n=(t||"").split(/\s+/);if(1===e.nodeType&&e.className)if(t){for(var i=(" "+e.className+" ").replace(/[\n\t]/g," "),o=0,r=n.length;r>o;o++)i=i.replace(" "+n[o]+" "," ");e.className=i.replace(/^\s+|\s+$/g,"")}else e.className=""}return e},A=function(){var e,t,n,i=1;return"function"==typeof document.body.getBoundingClientRect&&(e=document.body.getBoundingClientRect(),t=e.right-e.left,n=document.body.offsetWidth,i=Math.round(t/n*100)/100),i},x=function(t,n){var i={left:0,top:0,width:0,height:0,zIndex:k(n)-1};if(t.getBoundingClientRect){var o,r,s,a=t.getBoundingClientRect();"pageXOffset"in e&&"pageYOffset"in e?(o=e.pageXOffset,r=e.pageYOffset):(s=A(),o=Math.round(document.documentElement.scrollLeft/s),r=Math.round(document.documentElement.scrollTop/s));var l=document.documentElement.clientLeft||0,c=document.documentElement.clientTop||0;i.left=a.left+o-l,i.top=a.top+r-c,i.width="width"in a?a.width:a.right-a.left,i.height="height"in a?a.height:a.bottom-a.top}return i},w=function(e,t){var n=null==t||t&&t.cacheBust===!0&&t.useNoCache===!0;return n?(-1===e.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},C=function(t){var n,i,o,r=[],s=[],a=[];if(t.trustedOrigins&&("string"==typeof t.trustedOrigins?s.push(t.trustedOrigins):"object"==typeof t.trustedOrigins&&"length"in t.trustedOrigins&&(s=s.concat(t.trustedOrigins))),t.trustedDomains&&("string"==typeof t.trustedDomains?s.push(t.trustedDomains):"object"==typeof t.trustedDomains&&"length"in t.trustedDomains&&(s=s.concat(t.trustedDomains))),s.length)for(n=0,i=s.length;i>n;n++)if(s.hasOwnProperty(n)&&s[n]&&"string"==typeof s[n]){if(o=$(s[n]),!o)continue;if("*"===o){a=[o];break}a.push.apply(a,[o,"//"+o,e.location.protocol+"//"+o])}return a.length&&r.push("trustedOrigins="+encodeURIComponent(a.join(","))),"string"==typeof t.jsModuleId&&t.jsModuleId&&r.push("jsModuleId="+encodeURIComponent(t.jsModuleId)),r.join("&")},T=function(e,t,n){if("function"==typeof t.indexOf)return t.indexOf(e,n);var i,o=t.length;for("undefined"==typeof n?n=0:0>n&&(n=o+n),i=n;o>i;i++)if(t.hasOwnProperty(i)&&t[i]===e)return i;return-1},E=function(e){if("string"==typeof e)throw new TypeError("ZeroClipboard doesn't accept query strings.");return e.length?e:[e]},S=function(t,n,i,o){o?e.setTimeout(function(){t.apply(n,i)},0):t.apply(n,i)},k=function(e){var t,n;return e&&("number"==typeof e&&e>0?t=e:"string"==typeof e&&(n=parseInt(e,10))&&!isNaN(n)&&n>0&&(t=n)),t||("number"==typeof F.zIndex&&F.zIndex>0?t=F.zIndex:"string"==typeof F.zIndex&&(n=parseInt(F.zIndex,10))&&!isNaN(n)&&n>0&&(t=n)),t||0},N=function(e,t){if(e&&t!==!1&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var n="`"+e+"` is deprecated. See docs for more info:\n https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(n):console.log(n)}},D=function(){var e,t,n,i,o,r,s=arguments[0]||{};for(e=1,t=arguments.length;t>e;e++)if(null!=(n=arguments[e]))for(i in n)if(n.hasOwnProperty(i)){if(o=s[i],r=n[i],s===r)continue;void 0!==r&&(s[i]=r)}return s},$=function(e){if(null==e||""===e)return null;if(e=e.replace(/^\s+|\s+$/g,""),""===e)return null;var t=e.indexOf("//");e=-1===t?e:e.slice(t+2);var n=e.indexOf("/");return e=-1===n?e:-1===t||0===n?null:e.slice(0,n),e&&".swf"===e.slice(-4).toLowerCase()?null:e||null},j=function(){var e=function(e,t){var n,i,o;if(null!=e&&"*"!==t[0]&&("string"==typeof e&&(e=[e]),"object"==typeof e&&"length"in e))for(n=0,i=e.length;i>n;n++)if(e.hasOwnProperty(n)&&(o=$(e[n]))){if("*"===o){t.length=0,t.push("*");break}-1===T(o,t)&&t.push(o)}},t={always:"always",samedomain:"sameDomain",never:"never"};return function(n,i){var o,r=i.allowScriptAccess;if("string"==typeof r&&(o=r.toLowerCase())&&/^always|samedomain|never$/.test(o))return t[o];var s=$(i.moviePath);null===s&&(s=n);var a=[];e(i.trustedOrigins,a),e(i.trustedDomains,a);var l=a.length;if(l>0){if(1===l&&"*"===a[0])return"always";if(-1!==T(n,a))return 1===l&&n===s?"sameDomain":"always"}return"never"}}(),L=function(e){if(null==e)return[];if(Object.keys)return Object.keys(e);var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},O=function(e){if(e)for(var t in e)e.hasOwnProperty(t)&&delete e[t];return e},I=function(){try{return document.activeElement}catch(e){}return null},B=function(){var e=!1;if("boolean"==typeof o.disabled)e=o.disabled===!1;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(e=!0)}catch(e){}!e&&navigator.mimeTypes["application/x-shockwave-flash"]&&(e=!0)}return e},R=function(e,t){return this instanceof R?(this.id=""+s++,a[this.id]={instance:this,elements:[],handlers:{}},e&&this.clip(e),"undefined"!=typeof t&&(N("new ZeroClipboard(elements, options)",F.debug),R.config(t)),this.options=R.config(),"boolean"!=typeof o.disabled&&(o.disabled=!B()),void(o.disabled===!1&&o.outdated!==!0&&null===o.bridge&&(o.outdated=!1,o.ready=!1,P()))):new R(e,t)};R.prototype.setText=function(e){return e&&""!==e&&(r["text/plain"]=e,o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setText?o.bridge.setText(e):o.ready=!1),this},R.prototype.setSize=function(e,t){return o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e,t):o.ready=!1,this};var H=function(e){o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setHandCursor?o.bridge.setHandCursor(e):o.ready=!1};R.prototype.destroy=function(){this.unclip(),this.off(),delete a[this.id]};var M=function(){var e,t,n,i=[],o=L(a);for(e=0,t=o.length;t>e;e++)n=a[o[e]].instance,n&&n instanceof R&&i.push(n);return i};R.version="1.3.5";var F={swfPath:f,trustedDomains:e.location.host?[e.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};R.config=function(e){if("object"==typeof e&&null!==e&&D(F,e),"string"!=typeof e||!e){var t={};for(var n in F)F.hasOwnProperty(n)&&(t[n]="object"==typeof F[n]&&null!==F[n]?"length"in F[n]?F[n].slice(0):D({},F[n]):F[n]);return t}return F.hasOwnProperty(e)?F[e]:void 0},R.destroy=function(){R.deactivate();for(var e in a)if(a.hasOwnProperty(e)&&a[e]){var t=a[e].instance;t&&"function"==typeof t.destroy&&t.destroy()}var n=z(o.bridge);n&&n.parentNode&&(n.parentNode.removeChild(n),o.ready=null,o.bridge=null)},R.activate=function(e){i&&(b(i,F.hoverClass),b(i,F.activeClass)),i=e,y(e,F.hoverClass),q();var t=F.title||e.getAttribute("title");if(t){var n=z(o.bridge);n&&n.setAttribute("title",t)}var r=F.forceHandCursor===!0||"pointer"===h(e,"cursor");H(r)},R.deactivate=function(){var e=z(o.bridge);e&&(e.style.left="0px",e.style.top="-9999px",e.removeAttribute("title")),i&&(b(i,F.hoverClass),b(i,F.activeClass),i=null)};var P=function(){var t,n,i=document.getElementById("global-zeroclipboard-html-bridge");if(!i){var r=R.config();r.jsModuleId="string"==typeof u&&u||"string"==typeof d&&d||null;var s=j(e.location.host,F),a=C(r),l=F.moviePath+w(F.moviePath,F),c=' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%"> <param name="movie" value="'+l+'"/> <param name="allowScriptAccess" value="'+s+'"/> <param name="scale" value="exactfit"/> <param name="loop" value="false"/> <param name="menu" value="false"/> <param name="quality" value="best" /> <param name="bgcolor" value="#ffffff"/> <param name="wmode" value="transparent"/> <param name="flashvars" value="'+a+'"/> <embed src="'+l+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="100%" height="100%" name="global-zeroclipboard-flash-bridge" allowScriptAccess="'+s+'" allowFullScreen="false" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+a+'" scale="exactfit"> </embed> </object>';i=document.createElement("div"),i.id="global-zeroclipboard-html-bridge",i.setAttribute("class","global-zeroclipboard-container"),i.style.position="absolute",i.style.left="0px",i.style.top="-9999px",i.style.width="15px",i.style.height="15px",i.style.zIndex=""+k(F.zIndex),document.body.appendChild(i),i.innerHTML=c}t=document["global-zeroclipboard-flash-bridge"],t&&(n=t.length)&&(t=t[n-1]),o.bridge=t||i.children[0].lastElementChild},z=function(e){for(var t=/^OBJECT|EMBED$/,n=e&&e.parentNode;n&&t.test(n.nodeName)&&n.parentNode;)n=n.parentNode;return n||null},q=function(){if(i){var e=x(i,F.zIndex),t=z(o.bridge);t&&(t.style.top=e.top+"px",t.style.left=e.left+"px",t.style.width=e.width+"px",t.style.height=e.height+"px",t.style.zIndex=e.zIndex+1),o.ready===!0&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e.width,e.height):o.ready=!1}return this};R.prototype.on=function(e,t){var n,i,r,s={},l=a[this.id]&&a[this.id].handlers;if("string"==typeof e&&e)r=e.toLowerCase().split(/\s+/);else if("object"==typeof e&&e&&"undefined"==typeof t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.on(n,e[n]);if(r&&r.length){for(n=0,i=r.length;i>n;n++)e=r[n].replace(/^on/,""),s[e]=!0,l[e]||(l[e]=[]),l[e].push(t);s.noflash&&o.disabled&&U.call(this,"noflash",{}),s.wrongflash&&o.outdated&&U.call(this,"wrongflash",{flashVersion:o.version}),s.load&&o.ready&&U.call(this,"load",{flashVersion:o.version})}return this},R.prototype.off=function(e,t){var n,i,o,r,s,l=a[this.id]&&a[this.id].handlers;if(0===arguments.length)r=L(l);else if("string"==typeof e&&e)r=e.split(/\s+/);else if("object"==typeof e&&e&&"undefined"==typeof t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.off(n,e[n]);if(r&&r.length)for(n=0,i=r.length;i>n;n++)if(e=r[n].toLowerCase().replace(/^on/,""),s=l[e],s&&s.length)if(t)for(o=T(t,s);-1!==o;)s.splice(o,1),o=T(t,s,o);else l[e].length=0;return this},R.prototype.handlers=function(e){var t,n=null,i=a[this.id]&&a[this.id].handlers;if(i){if("string"==typeof e&&e)return i[e]?i[e].slice(0):null;n={};for(t in i)i.hasOwnProperty(t)&&i[t]&&(n[t]=i[t].slice(0))}return n};var _=function(t,n,i,o){var r=a[this.id]&&a[this.id].handlers[t];if(r&&r.length){var s,l,c,u=n||this;for(s=0,l=r.length;l>s;s++)c=r[s],n=u,"string"==typeof c&&"function"==typeof e[c]&&(c=e[c]),"object"==typeof c&&c&&"function"==typeof c.handleEvent&&(n=c,c=c.handleEvent),"function"==typeof c&&S(c,n,i,o)}return this};R.prototype.clip=function(e){e=E(e);for(var t=0;t<e.length;t++)if(e.hasOwnProperty(t)&&e[t]&&1===e[t].nodeType){e[t].zcClippingId?-1===T(this.id,c[e[t].zcClippingId])&&c[e[t].zcClippingId].push(this.id):(e[t].zcClippingId="zcClippingId_"+l++,c[e[t].zcClippingId]=[this.id],F.autoActivate===!0&&m(e[t],"mouseover",g));var n=a[this.id].elements;-1===T(e[t],n)&&n.push(e[t])}return this},R.prototype.unclip=function(e){var t=a[this.id];if(t){var n,i=t.elements;e="undefined"==typeof e?i.slice(0):E(e);for(var o=e.length;o--;)if(e.hasOwnProperty(o)&&e[o]&&1===e[o].nodeType){for(n=0;-1!==(n=T(e[o],i,n));)i.splice(n,1);var r=c[e[o].zcClippingId];if(r){for(n=0;-1!==(n=T(this.id,r,n));)r.splice(n,1);0===r.length&&(F.autoActivate===!0&&v(e[o],"mouseover",g),delete e[o].zcClippingId)}}}return this},R.prototype.elements=function(){var e=a[this.id];return e&&e.elements?e.elements.slice(0):[]};var W=function(e){var t,n,i,o,r,s=[];if(e&&1===e.nodeType&&(t=e.zcClippingId)&&c.hasOwnProperty(t)&&(n=c[t],n&&n.length))for(i=0,o=n.length;o>i;i++)r=a[n[i]].instance,r&&r instanceof R&&s.push(r);return s};F.hoverClass="zeroclipboard-is-hover",F.activeClass="zeroclipboard-is-active",F.trustedOrigins=null,F.allowScriptAccess=null,F.useNoCache=!0,F.moviePath="ZeroClipboard.swf",R.detectFlashSupport=function(){return N("ZeroClipboard.detectFlashSupport",F.debug),B()},R.dispatch=function(e,t){if("string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");if(n)for(var o=i&&F.autoActivate===!0?W(i):M(),r=0,s=o.length;s>r;r++)U.call(o[r],n,t)}},R.prototype.setHandCursor=function(e){return N("ZeroClipboard.prototype.setHandCursor",F.debug),e="boolean"==typeof e?e:!!e,H(e),F.forceHandCursor=e,this},R.prototype.reposition=function(){return N("ZeroClipboard.prototype.reposition",F.debug),q()},R.prototype.receiveEvent=function(e,t){if(N("ZeroClipboard.prototype.receiveEvent",F.debug),"string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");n&&U.call(this,n,t)}},R.prototype.setCurrent=function(e){return N("ZeroClipboard.prototype.setCurrent",F.debug),R.activate(e),this},R.prototype.resetBridge=function(){return N("ZeroClipboard.prototype.resetBridge",F.debug),R.deactivate(),this},R.prototype.setTitle=function(e){if(N("ZeroClipboard.prototype.setTitle",F.debug),e=e||F.title||i&&i.getAttribute("title")){var t=z(o.bridge);t&&t.setAttribute("title",e)}return this},R.setDefaults=function(e){N("ZeroClipboard.setDefaults",F.debug),R.config(e)},R.prototype.addEventListener=function(e,t){return N("ZeroClipboard.prototype.addEventListener",F.debug),this.on(e,t)},R.prototype.removeEventListener=function(e,t){return N("ZeroClipboard.prototype.removeEventListener",F.debug),this.off(e,t)},R.prototype.ready=function(){return N("ZeroClipboard.prototype.ready",F.debug),o.ready===!0};var U=function(e,s){e=e.toLowerCase().replace(/^on/,"");var a=s&&s.flashVersion&&t(s.flashVersion)||null,l=i,c=!0;switch(e){case"load":if(a){if(!n(a))return void U.call(this,"onWrongFlash",{flashVersion:a});o.outdated=!1,o.ready=!0,o.version=a}break;case"wrongflash":a&&!n(a)&&(o.outdated=!0,o.ready=!1,o.version=a);break;case"mouseover":y(l,F.hoverClass);break;case"mouseout":F.autoActivate===!0&&R.deactivate();break;case"mousedown":y(l,F.activeClass);break;case"mouseup":b(l,F.activeClass);break;case"datarequested":if(l){var u=l.getAttribute("data-clipboard-target"),d=u?document.getElementById(u):null;if(d){var f=d.value||d.textContent||d.innerText;f&&this.setText(f)}else{var p=l.getAttribute("data-clipboard-text");p&&this.setText(p)}}c=!1;break;case"complete":O(r),l&&l!==I()&&l.focus&&l.focus()}var h=l,g=[this,s];return _.call(this,e,h,g,c)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(e,t,n){return u=n&&n.id||null,R}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof e.require?(d=module.id||null,module.exports=R):e.ZeroClipboard=R}(function(){return this}());var anchors=new AnchorJS;!function(e){"use strict";e(function(){var t=e(window),n=e(document.body);n.scrollspy({target:".docs-sidebar"}),t.on("load",function(){n.scrollspy("refresh")}),e(".docs-container [href=#]").click(function(e){e.preventDefault()}),setTimeout(function(){var t=e(".docs-sidebar");t.affix({offset:{top:function(){var n=t.offset().top,i=parseInt(t.children(0).css("margin-top"),10),o=e(".docs-nav").height();return this.top=n-o-i},bottom:function(){return this.bottom=e(".docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){e(".bs-top").affix()},100),function(){var t=e("#bs-theme-stylesheet"),n=e(".docs-theme-toggle"),i=function(){t.attr("href",t.attr("data-href")),n.text("禁用主题预览"),localStorage.setItem("previewTheme",!0)};localStorage.getItem("previewTheme")&&i(),n.click(function(){var e=t.attr("href");e&&0!==e.indexOf("data")?(t.attr("href",""),n.text("主题预览"),localStorage.removeItem("previewTheme")):i()})}(),e(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),e(".popover-demo").popover({selector:'[data-toggle="popover"]',container:"body"}),e(".tooltip-test").tooltip(),e(".popover-test").popover(),e(".docs-popover").popover(),e("#loading-example-btn").on("click",function(){var t=e(this);t.button("loading"),setTimeout(function(){t.button("reset")},3e3)}),e("#exampleModal").on("show.bs.modal",function(t){var n=e(t.relatedTarget),i=n.data("whatever"),o=e(this);o.find(".modal-title").text("New message to "+i),o.find(".modal-body input").val(i)}),e(".docs-activate-animated-progressbar").on("click",function(){e(this).siblings(".progress").find(".progress-bar-striped").toggleClass("active")}),ZeroClipboard.config({moviePath:"source/ZeroClipboard.swf",hoverClass:"btn-clipboard-hover"}),e(".highlight").each(function(){var t='<div class="zero-clipboard"><span class="btn-clipboard">复制</span></div>';e(this).before(t)});var i=new ZeroClipboard(e(".btn-clipboard")),o=e("#global-zeroclipboard-html-bridge");i.on("load",function(){o.data("placement","top").attr("title","复制到剪贴板").tooltip(),i.on("dataRequested",function(t){var n=e(this).parent().nextAll(".highlight").first();t.setText(n.text())}),i.on("complete",function(){o.attr("title","复制成功!").tooltip("fixTitle").tooltip("show").attr("title","复制到剪贴板").tooltip("fixTitle")})}),i.on("noflash wrongflash",function(){e(".zero-clipboard").remove(),ZeroClipboard.destroy()})})}(jQuery),function(){"use strict";anchors.options.placement="left",anchors.add(".docs-section > h1, .docs-section > h2, .docs-section > h3, .docs-section > h4, .docs-section > h5")}(); \ No newline at end of file +function AnchorJS(e){"use strict";this.options=e||{},this._applyRemainingDefaultOptions=function(e){this.options.icon=this.options.hasOwnProperty("icon")?e.icon:"",this.options.visible=this.options.hasOwnProperty("visible")?e.visible:"hover",this.options.placement=this.options.hasOwnProperty("placement")?e.placement:"right",this.options.class=this.options.hasOwnProperty("class")?e.class:""},this._applyRemainingDefaultOptions(e),this.add=function(e){var t,n,i,o,r,a,s,l,c,u,d,f,h,p;if(this._applyRemainingDefaultOptions(this.options),e){if("string"!=typeof e)throw new Error("The selector provided to AnchorJS was invalid.")}else e="h1, h2, h3, h4, h5, h6";if(t=document.querySelectorAll(e),0===t.length)return!1;for(this._addBaselineStyles(),n=document.querySelectorAll("[id]"),i=[].map.call(n,function(e){return e.id}),r=0;r<t.length;r++){if(t[r].hasAttribute("id"))o=t[r].getAttribute("id");else{a=t[r].textContent,s=a.replace(/[^\w\s-]/gi,"").replace(/\s+/g,"-").replace(/-{2,}/g,"-").substring(0,32).replace(/^-+|-+$/gm,"").toLowerCase(),u=s,c=0;do{void 0!==l&&(u=s+"-"+c),l=i.indexOf(u),c+=1}while(-1!==l);l=void 0,i.push(u),t[r].setAttribute("id",u),o=u}d=o.replace(/-/g," "),f='<a class="anchorjs-link '+this.options.class+'" href="#'+o+'" aria-label="Anchor link for: '+d+'" data-anchorjs-icon="'+this.options.icon+'"></a>',h=document.createElement("div"),h.innerHTML=f,p=h.childNodes,"always"===this.options.visible&&(p[0].style.opacity="1"),""===this.options.icon&&(p[0].style.fontFamily="anchorjs-icons",p[0].style.fontStyle="normal",p[0].style.fontVariant="normal",p[0].style.fontWeight="normal"),"left"===this.options.placement?(p[0].style.position="absolute",p[0].style.marginLeft="-1em",p[0].style.paddingRight="0.5em",t[r].insertBefore(p[0],t[r].firstChild)):(p[0].style.paddingLeft="0.375em",t[r].appendChild(p[0]))}return this},this.remove=function(e){for(var t,n=document.querySelectorAll(e),i=0;i<n.length;i++)(t=n[i].querySelector(".anchorjs-link"))&&n[i].removeChild(t);return this},this._addBaselineStyles=function(){if(null===document.head.querySelector("style.anchorjs")){var e,t=document.createElement("style");t.className="anchorjs",t.appendChild(document.createTextNode("")),e=document.head.querySelector('[rel="stylesheet"], style'),void 0===e?document.head.appendChild(t):document.head.insertBefore(t,e),t.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",t.sheet.cssRules.length),t.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",t.sheet.cssRules.length),t.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",t.sheet.cssRules.length),t.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; font-style: normal; font-weight: normal; src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype"); }',t.sheet.cssRules.length)}}}if(function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t="length"in e&&e.length,n=oe.type(e);return"function"!==n&&!oe.isWindow(e)&&(!(1!==e.nodeType||!t)||("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e))}function i(e,t,n){if(oe.isFunction(t))return oe.grep(e,function(e,i){return!!t.call(e,i,e)!==n});if(t.nodeType)return oe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(fe.test(t))return oe.filter(t,e,n);t=oe.filter(t,e)}return oe.grep(e,function(e){return oe.inArray(e,t)>=0!==n})}function o(e,t){do{e=e[t]}while(e&&1!==e.nodeType);return e}function r(e){var t=be[e]={};return oe.each(e.match(ye)||[],function(e,n){t[n]=!0}),t}function a(){pe.addEventListener?(pe.removeEventListener("DOMContentLoaded",s,!1),e.removeEventListener("load",s,!1)):(pe.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(pe.addEventListener||"load"===event.type||"complete"===pe.readyState)&&(a(),oe.ready())}function l(e,t,n){if(void 0===n&&1===e.nodeType){var i="data-"+t.replace(Te,"-$1").toLowerCase();if("string"==typeof(n=e.getAttribute(i))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Ce.test(n)?oe.parseJSON(n):n)}catch(e){}oe.data(e,t,n)}else n=void 0}return n}function c(e){var t;for(t in e)if(("data"!==t||!oe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(e,t,n,i){if(oe.acceptData(e)){var o,r,a=oe.expando,s=e.nodeType,l=s?oe.cache:e,c=s?e[a]:e[a]&&a;if(c&&l[c]&&(i||l[c].data)||void 0!==n||"string"!=typeof t)return c||(c=s?e[a]=X.pop()||oe.guid++:a),l[c]||(l[c]=s?{}:{toJSON:oe.noop}),("object"==typeof t||"function"==typeof t)&&(i?l[c]=oe.extend(l[c],t):l[c].data=oe.extend(l[c].data,t)),r=l[c],i||(r.data||(r.data={}),r=r.data),void 0!==n&&(r[oe.camelCase(t)]=n),"string"==typeof t?null==(o=r[t])&&(o=r[oe.camelCase(t)]):o=r,o}}function d(e,t,n){if(oe.acceptData(e)){var i,o,r=e.nodeType,a=r?oe.cache:e,s=r?e[oe.expando]:oe.expando;if(a[s]){if(t&&(i=n?a[s]:a[s].data)){oe.isArray(t)?t=t.concat(oe.map(t,oe.camelCase)):t in i?t=[t]:(t=oe.camelCase(t),t=t in i?[t]:t.split(" ")),o=t.length;for(;o--;)delete i[t[o]];if(n?!c(i):!oe.isEmptyObject(i))return}(n||(delete a[s].data,c(a[s])))&&(r?oe.cleanData([e],!0):ne.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}function f(){return!0}function h(){return!1}function p(){try{return pe.activeElement}catch(e){}}function g(e){var t=Be.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function m(e,t){var n,i,o=0,r=typeof e.getElementsByTagName!==we?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==we?e.querySelectorAll(t||"*"):void 0;if(!r)for(r=[],n=e.childNodes||e;null!=(i=n[o]);o++)!t||oe.nodeName(i,t)?r.push(i):oe.merge(r,m(i,t));return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function v(e){De.test(e.type)&&(e.defaultChecked=e.checked)}function y(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==oe.find.attr(e,"type"))+"/"+e.type,e}function A(e){var t=Qe.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function x(e,t){for(var n,i=0;null!=(n=e[i]);i++)oe._data(n,"globalEval",!t||oe._data(t[i],"globalEval"))}function w(e,t){if(1===t.nodeType&&oe.hasData(e)){var n,i,o,r=oe._data(e),a=oe._data(t,r),s=r.events;if(s){delete a.handle,a.events={};for(n in s)for(i=0,o=s[n].length;o>i;i++)oe.event.add(t,n,s[n][i])}a.data&&(a.data=oe.extend({},a.data))}}function C(e,t){var n,i,o;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!ne.noCloneEvent&&t[oe.expando]){o=oe._data(t);for(i in o.events)oe.removeEvent(t,i,o.handle);t.removeAttribute(oe.expando)}"script"===n&&t.text!==e.text?(b(t).text=e.text,A(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),ne.html5Clone&&e.innerHTML&&!oe.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&De.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function T(t,n){var i,o=oe(n.createElement(t)).appendTo(n.body),r=e.getDefaultComputedStyle&&(i=e.getDefaultComputedStyle(o[0]))?i.display:oe.css(o[0],"display");return o.detach(),r}function E(e){var t=pe,n=Je[e];return n||(n=T(e,t),"none"!==n&&n||(Ze=(Ze||oe("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement),t=(Ze[0].contentWindow||Ze[0].contentDocument).document,t.write(),t.close(),n=T(e,t),Ze.detach()),Je[e]=n),n}function k(e,t){return{get:function(){var n=e();if(null!=n)return n?void delete this.get:(this.get=t).apply(this,arguments)}}}function S(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=t,o=dt.length;o--;)if((t=dt[o]+n)in e)return t;return i}function N(e,t){for(var n,i,o,r=[],a=0,s=e.length;s>a;a++)i=e[a],i.style&&(r[a]=oe._data(i,"olddisplay"),n=i.style.display,t?(r[a]||"none"!==n||(i.style.display=""),""===i.style.display&&Se(i)&&(r[a]=oe._data(i,"olddisplay",E(i.nodeName)))):(o=Se(i),(n&&"none"!==n||!o)&&oe._data(i,"olddisplay",o?n:oe.css(i,"display"))));for(a=0;s>a;a++)i=e[a],i.style&&(t&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=t?r[a]||"":"none"));return e}function D(e,t,n){var i=st.exec(t);return i?Math.max(0,i[1]-(n||0))+(i[2]||"px"):t}function j(e,t,n,i,o){for(var r=n===(i?"border":"content")?4:"width"===t?1:0,a=0;4>r;r+=2)"margin"===n&&(a+=oe.css(e,n+ke[r],!0,o)),i?("content"===n&&(a-=oe.css(e,"padding"+ke[r],!0,o)),"margin"!==n&&(a-=oe.css(e,"border"+ke[r]+"Width",!0,o))):(a+=oe.css(e,"padding"+ke[r],!0,o),"padding"!==n&&(a+=oe.css(e,"border"+ke[r]+"Width",!0,o)));return a}function $(e,t,n){var i=!0,o="width"===t?e.offsetWidth:e.offsetHeight,r=Ke(e),a=ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,r);if(0>=o||null==o){if(o=et(e,t,r),(0>o||null==o)&&(o=e.style[t]),nt.test(o))return o;i=a&&(ne.boxSizingReliable()||o===e.style[t]),o=parseFloat(o)||0}return o+j(e,t,n||(a?"border":"content"),i,r)+"px"}function L(e,t,n,i,o){return new L.prototype.init(e,t,n,i,o)}function O(){return setTimeout(function(){ft=void 0}),ft=oe.now()}function I(e,t){var n,i={height:e},o=0;for(t=t?1:0;4>o;o+=2-t)n=ke[o],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function B(e,t,n){for(var i,o=(yt[t]||[]).concat(yt["*"]),r=0,a=o.length;a>r;r++)if(i=o[r].call(n,t,e))return i}function R(e,t,n){var i,o,r,a,s,l,c,u=this,d={},f=e.style,h=e.nodeType&&Se(e),p=oe._data(e,"fxshow");n.queue||(s=oe._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,oe.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[f.overflow,f.overflowX,f.overflowY],c=oe.css(e,"display"),"inline"===("none"===c?oe._data(e,"olddisplay")||E(e.nodeName):c)&&"none"===oe.css(e,"float")&&(ne.inlineBlockNeedsLayout&&"inline"!==E(e.nodeName)?f.zoom=1:f.display="inline-block")),n.overflow&&(f.overflow="hidden",ne.shrinkWrapBlocks()||u.always(function(){f.overflow=n.overflow[0],f.overflowX=n.overflow[1],f.overflowY=n.overflow[2]}));for(i in t)if(o=t[i],pt.exec(o)){if(delete t[i],r=r||"toggle"===o,o===(h?"hide":"show")){if("show"!==o||!p||void 0===p[i])continue;h=!0}d[i]=p&&p[i]||oe.style(e,i)}else c=void 0;if(oe.isEmptyObject(d))"inline"===("none"===c?E(e.nodeName):c)&&(f.display=c);else{p?"hidden"in p&&(h=p.hidden):p=oe._data(e,"fxshow",{}),r&&(p.hidden=!h),h?oe(e).show():u.done(function(){oe(e).hide()}),u.done(function(){var t;oe._removeData(e,"fxshow");for(t in d)oe.style(e,t,d[t])});for(i in d)a=B(h?p[i]:0,i,u),i in p||(p[i]=a.start,h&&(a.end=a.start,a.start="width"===i||"height"===i?1:0))}}function H(e,t){var n,i,o,r,a;for(n in e)if(i=oe.camelCase(n),o=t[i],r=e[n],oe.isArray(r)&&(o=r[1],r=e[n]=r[0]),n!==i&&(e[i]=r,delete e[n]),(a=oe.cssHooks[i])&&"expand"in a){r=a.expand(r),delete e[i];for(n in r)n in e||(e[n]=r[n],t[n]=o)}else t[i]=o}function M(e,t,n){var i,o,r=0,a=vt.length,s=oe.Deferred().always(function(){delete l.elem}),l=function(){if(o)return!1;for(var t=ft||O(),n=Math.max(0,c.startTime+c.duration-t),i=n/c.duration||0,r=1-i,a=0,l=c.tweens.length;l>a;a++)c.tweens[a].run(r);return s.notifyWith(e,[c,r,n]),1>r&&l?n:(s.resolveWith(e,[c]),!1)},c=s.promise({elem:e,props:oe.extend({},t),opts:oe.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:ft||O(),duration:n.duration,tweens:[],createTween:function(t,n){var i=oe.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(i),i},stop:function(t){var n=0,i=t?c.tweens.length:0;if(o)return this;for(o=!0;i>n;n++)c.tweens[n].run(1);return t?s.resolveWith(e,[c,t]):s.rejectWith(e,[c,t]),this}}),u=c.props;for(H(u,c.opts.specialEasing);a>r;r++)if(i=vt[r].call(c,e,u,c.opts))return i;return oe.map(u,B,c),oe.isFunction(c.opts.start)&&c.opts.start.call(e,c),oe.fx.timer(oe.extend(l,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function F(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,o=0,r=t.toLowerCase().match(ye)||[];if(oe.isFunction(n))for(;i=r[o++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function P(e,t,n,i){function o(s){var l;return r[s]=!0,oe.each(e[s]||[],function(e,s){var c=s(t,n,i);return"string"!=typeof c||a||r[c]?a?!(l=c):void 0:(t.dataTypes.unshift(c),o(c),!1)}),l}var r={},a=e===_t;return o(t.dataTypes[0])||!r["*"]&&o("*")}function z(e,t){var n,i,o=oe.ajaxSettings.flatOptions||{};for(i in t)void 0!==t[i]&&((o[i]?e:n||(n={}))[i]=t[i]);return n&&oe.extend(!0,e,n),e}function _(e,t,n){for(var i,o,r,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===o&&(o=e.mimeType||t.getResponseHeader("Content-Type"));if(o)for(a in s)if(s[a]&&s[a].test(o)){l.unshift(a);break}if(l[0]in n)r=l[0];else{for(a in n){if(!l[0]||e.converters[a+" "+l[0]]){r=a;break}i||(i=a)}r=r||i}return r?(r!==l[0]&&l.unshift(r),n[r]):void 0}function q(e,t,n,i){var o,r,a,s,l,c={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(r=u.shift();r;)if(e.responseFields[r]&&(n[e.responseFields[r]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=r,r=u.shift())if("*"===r)r=l;else if("*"!==l&&l!==r){if(!(a=c[l+" "+r]||c["* "+r]))for(o in c)if(s=o.split(" "),s[1]===r&&(a=c[l+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[o]:!0!==c[o]&&(r=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+r}}}return{state:"success",data:t}}function W(e,t,n,i){var o;if(oe.isArray(t))oe.each(t,function(t,o){n||Ut.test(e)?i(e,o):W(e+"["+("object"==typeof o?t:"")+"]",o,n,i)});else if(n||"object"!==oe.type(t))i(e,t);else for(o in t)W(e+"["+o+"]",t[o],n,i)}function U(){try{return new e.XMLHttpRequest}catch(e){}}function Q(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function G(e){return oe.isWindow(e)?e:9===e.nodeType&&(e.defaultView||e.parentWindow)}var X=[],V=X.slice,Y=X.concat,Z=X.push,J=X.indexOf,K={},ee=K.toString,te=K.hasOwnProperty,ne={},ie="1.11.3",oe=function(e,t){return new oe.fn.init(e,t)},re=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ae=/^-ms-/,se=/-([\da-z])/gi,le=function(e,t){return t.toUpperCase()};oe.fn=oe.prototype={jquery:ie,constructor:oe,selector:"",length:0,toArray:function(){return V.call(this)},get:function(e){return null!=e?0>e?this[e+this.length]:this[e]:V.call(this)},pushStack:function(e){var t=oe.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return oe.each(this,e,t)},map:function(e){return this.pushStack(oe.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(V.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:Z,sort:X.sort,splice:X.splice},oe.extend=oe.fn.extend=function(){var e,t,n,i,o,r,a=arguments[0]||{},s=1,l=arguments.length,c=!1;for("boolean"==typeof a&&(c=a,a=arguments[s]||{},s++),"object"==typeof a||oe.isFunction(a)||(a={}),s===l&&(a=this,s--);l>s;s++)if(null!=(o=arguments[s]))for(i in o)e=a[i],n=o[i],a!==n&&(c&&n&&(oe.isPlainObject(n)||(t=oe.isArray(n)))?(t?(t=!1,r=e&&oe.isArray(e)?e:[]):r=e&&oe.isPlainObject(e)?e:{},a[i]=oe.extend(c,r,n)):void 0!==n&&(a[i]=n));return a},oe.extend({expando:"jQuery"+(ie+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return"function"===oe.type(e)},isArray:Array.isArray||function(e){return"array"===oe.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!oe.isArray(e)&&e-parseFloat(e)+1>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==oe.type(e)||e.nodeType||oe.isWindow(e))return!1;try{if(e.constructor&&!te.call(e,"constructor")&&!te.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(ne.ownLast)for(t in e)return te.call(e,t);for(t in e);return void 0===t||te.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?K[ee.call(e)]||"object":typeof e},globalEval:function(t){t&&oe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ae,"ms-").replace(se,le)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,i){var o=0,r=e.length,a=n(e);if(i){if(a)for(;r>o&&!1!==t.apply(e[o],i);o++);else for(o in e)if(!1===t.apply(e[o],i))break}else if(a)for(;r>o&&!1!==t.call(e[o],o,e[o]);o++);else for(o in e)if(!1===t.call(e[o],o,e[o]))break;return e},trim:function(e){return null==e?"":(e+"").replace(re,"")},makeArray:function(e,t){var i=t||[];return null!=e&&(n(Object(e))?oe.merge(i,"string"==typeof e?[e]:e):Z.call(i,e)),i},inArray:function(e,t,n){var i;if(t){if(J)return J.call(t,e,n);for(i=t.length,n=n?0>n?Math.max(0,i+n):n:0;i>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,t){for(var n=+t.length,i=0,o=e.length;n>i;)e[o++]=t[i++];if(n!==n)for(;void 0!==t[i];)e[o++]=t[i++];return e.length=o,e},grep:function(e,t,n){for(var i=[],o=0,r=e.length,a=!n;r>o;o++)!t(e[o],o)!==a&&i.push(e[o]);return i},map:function(e,t,i){var o,r=0,a=e.length,s=n(e),l=[];if(s)for(;a>r;r++)null!=(o=t(e[r],r,i))&&l.push(o);else for(r in e)null!=(o=t(e[r],r,i))&&l.push(o);return Y.apply([],l)},guid:1,proxy:function(e,t){var n,i,o;return"string"==typeof t&&(o=e[t],t=e,e=o),oe.isFunction(e)?(n=V.call(arguments,2),i=function(){return e.apply(t||this,n.concat(V.call(arguments)))},i.guid=e.guid=e.guid||oe.guid++,i):void 0},now:function(){return+new Date},support:ne}),oe.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){K["[object "+t+"]"]=t.toLowerCase()});var ce=function(e){function t(e,t,n,i){var o,r,a,s,c,d,f,h,p,g;if((t?t.ownerDocument||t:M)!==j&&D(t),t=t||j,n=n||[],s=t.nodeType,"string"!=typeof e||!e||1!==s&&9!==s&&11!==s)return n;if(!i&&L){if(11!==s&&(o=me.exec(e)))if(a=o[1]){if(9===s){if(!(r=t.getElementById(a))||!r.parentNode)return n;if(r.id===a)return n.push(r),n}else if(t.ownerDocument&&(r=t.ownerDocument.getElementById(a))&&R(t,r)&&r.id===a)return n.push(r),n}else{if(o[2])return Y.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&b.getElementsByClassName)return Y.apply(n,t.getElementsByClassName(a)),n}if(b.qsa&&(!O||!O.test(e))){if(h=f=H,p=t,g=1!==s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(d=C(e),(f=t.getAttribute("id"))?h=f.replace(ye,"\\$&"):t.setAttribute("id",h),h="[id='"+h+"'] ",c=d.length;c--;)d[c]=h+u(d[c]);p=ve.test(e)&&l(t.parentNode)||t,g=d.join(",")}if(g)try{return Y.apply(n,p.querySelectorAll(g)),n}catch(e){}finally{f||t.removeAttribute("id")}}}return E(e.replace(ae,"$1"),t,n,i)}function n(){function e(n,i){return t.push(n+" ")>A.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[H]=!0,e}function o(e){var t=j.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function r(e,t){for(var n=e.split("|"),i=e.length;i--;)A.attrHandle[n[i]]=t}function a(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||U)-(~e.sourceIndex||U);if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return i(function(t){return t=+t,i(function(n,i){for(var o,r=e([],n.length,t),a=r.length;a--;)n[o=r[a]]&&(n[o]=!(i[o]=n[o]))})})}function l(e){return e&&void 0!==e.getElementsByTagName&&e}function c(){}function u(e){for(var t=0,n=e.length,i="";n>t;t++)i+=e[t].value;return i}function d(e,t,n){var i=t.dir,o=n&&"parentNode"===i,r=P++;return t.first?function(t,n,r){for(;t=t[i];)if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,a){var s,l,c=[F,r];if(a){for(;t=t[i];)if((1===t.nodeType||o)&&e(t,n,a))return!0}else for(;t=t[i];)if(1===t.nodeType||o){if(l=t[H]||(t[H]={}),(s=l[i])&&s[0]===F&&s[1]===r)return c[2]=s[2];if(l[i]=c,c[2]=e(t,n,a))return!0}}}function f(e){return e.length>1?function(t,n,i){for(var o=e.length;o--;)if(!e[o](t,n,i))return!1;return!0}:e[0]}function h(e,n,i){for(var o=0,r=n.length;r>o;o++)t(e,n[o],i);return i}function p(e,t,n,i,o){for(var r,a=[],s=0,l=e.length,c=null!=t;l>s;s++)(r=e[s])&&(!n||n(r,i,o))&&(a.push(r),c&&t.push(s));return a}function g(e,t,n,o,r,a){return o&&!o[H]&&(o=g(o)),r&&!r[H]&&(r=g(r,a)),i(function(i,a,s,l){var c,u,d,f=[],g=[],m=a.length,v=i||h(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?v:p(v,f,e,s,l),b=n?r||(i?e:m||o)?[]:a:y;if(n&&n(y,b,s,l),o)for(c=p(b,g),o(c,[],s,l),u=c.length;u--;)(d=c[u])&&(b[g[u]]=!(y[g[u]]=d));if(i){if(r||e){if(r){for(c=[],u=b.length;u--;)(d=b[u])&&c.push(y[u]=d);r(null,b=[],c,l)}for(u=b.length;u--;)(d=b[u])&&(c=r?J(i,d):f[u])>-1&&(i[c]=!(a[c]=d))}}else b=p(b===a?b.splice(m,b.length):b),r?r(null,a,b,l):Y.apply(a,b)})}function m(e){for(var t,n,i,o=e.length,r=A.relative[e[0].type],a=r||A.relative[" "],s=r?1:0,l=d(function(e){return e===t},a,!0),c=d(function(e){return J(t,e)>-1},a,!0),h=[function(e,n,i){var o=!r&&(i||n!==k)||((t=n).nodeType?l(e,n,i):c(e,n,i));return t=null,o}];o>s;s++)if(n=A.relative[e[s].type])h=[d(f(h),n)];else{if(n=A.filter[e[s].type].apply(null,e[s].matches),n[H]){for(i=++s;o>i&&!A.relative[e[i].type];i++);return g(s>1&&f(h),s>1&&u(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ae,"$1"),n,i>s&&m(e.slice(s,i)),o>i&&m(e=e.slice(i)),o>i&&u(e))}h.push(n)}return f(h)}function v(e,n){var o=n.length>0,r=e.length>0,a=function(i,a,s,l,c){var u,d,f,h=0,g="0",m=i&&[],v=[],y=k,b=i||r&&A.find.TAG("*",c),x=F+=null==y?1:Math.random()||.1,w=b.length;for(c&&(k=a!==j&&a);g!==w&&null!=(u=b[g]);g++){if(r&&u){for(d=0;f=e[d++];)if(f(u,a,s)){l.push(u);break}c&&(F=x)}o&&((u=!f&&u)&&h--,i&&m.push(u))}if(h+=g,o&&g!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(i){if(h>0)for(;g--;)m[g]||v[g]||(v[g]=X.call(l));v=p(v)}Y.apply(l,v),c&&!i&&v.length>0&&h+n.length>1&&t.uniqueSort(l)}return c&&(F=x,k=y),m};return o?i(a):a}var y,b,A,x,w,C,T,E,k,S,N,D,j,$,L,O,I,B,R,H="sizzle"+1*new Date,M=e.document,F=0,P=0,z=n(),_=n(),q=n(),W=function(e,t){return e===t&&(N=!0),0},U=1<<31,Q={}.hasOwnProperty,G=[],X=G.pop,V=G.push,Y=G.push,Z=G.slice,J=function(e,t){for(var n=0,i=e.length;i>n;n++)if(e[n]===t)return n;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ee="[\\x20\\t\\r\\n\\f]",te="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ne=te.replace("w","w#"),ie="\\["+ee+"*("+te+")(?:"+ee+"*([*^$|!~]?=)"+ee+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ne+"))|)"+ee+"*\\]",oe=":("+te+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ie+")*)|.*)\\)|)",re=new RegExp(ee+"+","g"),ae=new RegExp("^"+ee+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ee+"+$","g"),se=new RegExp("^"+ee+"*,"+ee+"*"),le=new RegExp("^"+ee+"*([>+~]|"+ee+")"+ee+"*"),ce=new RegExp("="+ee+"*([^\\]'\"]*?)"+ee+"*\\]","g"),ue=new RegExp(oe),de=new RegExp("^"+ne+"$"),fe={ID:new RegExp("^#("+te+")"),CLASS:new RegExp("^\\.("+te+")"),TAG:new RegExp("^("+te.replace("w","w*")+")"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ee+"*(even|odd|(([+-]|)(\\d*)n|)"+ee+"*(?:([+-]|)"+ee+"*(\\d+)|))"+ee+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+ee+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ee+"*((?:-\\d)?\\d*)"+ee+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,pe=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,me=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,ye=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ee+"?|("+ee+")|.)","ig"),Ae=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},xe=function(){D()};try{Y.apply(G=Z.call(M.childNodes),M.childNodes),G[M.childNodes.length].nodeType}catch(e){Y={apply:G.length?function(e,t){V.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}b=t.support={},w=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},D=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:M;return i!==j&&9===i.nodeType&&i.documentElement?(j=i,$=i.documentElement,n=i.defaultView,n&&n!==n.top&&(n.addEventListener?n.addEventListener("unload",xe,!1):n.attachEvent&&n.attachEvent("onunload",xe)),L=!w(i),b.attributes=o(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByTagName=o(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),b.getElementsByClassName=ge.test(i.getElementsByClassName),b.getById=o(function(e){return $.appendChild(e).id=H,!i.getElementsByName||!i.getElementsByName(H).length}),b.getById?(A.find.ID=function(e,t){if(void 0!==t.getElementById&&L){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},A.filter.ID=function(e){var t=e.replace(be,Ae);return function(e){return e.getAttribute("id")===t}}):(delete A.find.ID,A.filter.ID=function(e){var t=e.replace(be,Ae);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),A.find.TAG=b.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):b.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],o=0,r=t.getElementsByTagName(e);if("*"===e){for(;n=r[o++];)1===n.nodeType&&i.push(n);return i}return r},A.find.CLASS=b.getElementsByClassName&&function(e,t){return L?t.getElementsByClassName(e):void 0},I=[],O=[],(b.qsa=ge.test(i.querySelectorAll))&&(o(function(e){$.appendChild(e).innerHTML="<a id='"+H+"'></a><select id='"+H+"-\f]' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ee+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||O.push("\\["+ee+"*(?:value|"+K+")"),e.querySelectorAll("[id~="+H+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+H+"+*").length||O.push(".#.+[+~]")}),o(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ee+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(b.matchesSelector=ge.test(B=$.matches||$.webkitMatchesSelector||$.mozMatchesSelector||$.oMatchesSelector||$.msMatchesSelector))&&o(function(e){b.disconnectedMatch=B.call(e,"div"),B.call(e,"[s!='']:x"),I.push("!=",oe)}),O=O.length&&new RegExp(O.join("|")),I=I.length&&new RegExp(I.join("|")),t=ge.test($.compareDocumentPosition),R=t||ge.test($.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},W=t?function(e,t){if(e===t)return N=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!b.sortDetached&&t.compareDocumentPosition(e)===n?e===i||e.ownerDocument===M&&R(M,e)?-1:t===i||t.ownerDocument===M&&R(M,t)?1:S?J(S,e)-J(S,t):0:4&n?-1:1)}:function(e,t){if(e===t)return N=!0,0;var n,o=0,r=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!r||!s)return e===i?-1:t===i?1:r?-1:s?1:S?J(S,e)-J(S,t):0;if(r===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[o]===c[o];)o++;return o?a(l[o],c[o]):l[o]===M?-1:c[o]===M?1:0},i):j},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==j&&D(e),n=n.replace(ce,"='$1']"),!(!b.matchesSelector||!L||I&&I.test(n)||O&&O.test(n)))try{var i=B.call(e,n);if(i||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,j,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==j&&D(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==j&&D(e);var n=A.attrHandle[t.toLowerCase()],i=n&&Q.call(A.attrHandle,t.toLowerCase())?n(e,t,!L):void 0;return void 0!==i?i:b.attributes||!L?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,o=0;if(N=!b.detectDuplicates,S=!b.sortStable&&e.slice(0),e.sort(W),N){for(;t=e[o++];)t===e[o]&&(i=n.push(o));for(;i--;)e.splice(n[i],1)}return S=null,e},x=t.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=x(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=x(t);return n},A=t.selectors={cacheLength:50,createPseudo:i,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,Ae),e[3]=(e[3]||e[4]||e[5]||"").replace(be,Ae),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ue.test(n)&&(t=C(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t), +e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,Ae).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ee+")"+e+"("+ee+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(o){var r=t.attr(o,e);return null==r?"!="===n:!n||(r+="","="===n?r===i:"!="===n?r!==i:"^="===n?i&&0===r.indexOf(i):"*="===n?i&&r.indexOf(i)>-1:"$="===n?i&&r.slice(-i.length)===i:"~="===n?(" "+r.replace(re," ")+" ").indexOf(i)>-1:"|="===n&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,o){var r="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,g=r!==a?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(m){if(r){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?m.firstChild:m.lastChild],a&&y){for(u=m[H]||(m[H]={}),c=u[e]||[],h=c[0]===F&&c[1],f=c[0]===F&&c[2],d=h&&m.childNodes[h];d=++h&&d&&d[g]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[F,h,f];break}}else if(y&&(c=(t[H]||(t[H]={}))[e])&&c[0]===F)f=c[1];else for(;(d=++h&&d&&d[g]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[H]||(d[H]={}))[e]=[F,f]),d!==t)););return(f-=o)===i||f%i==0&&f/i>=0}}},PSEUDO:function(e,n){var o,r=A.pseudos[e]||A.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return r[H]?r(n):r.length>1?(o=[e,e,"",n],A.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,o=r(e,n),a=o.length;a--;)i=J(e,o[a]),e[i]=!(t[i]=o[a])}):function(e){return r(e,0,o)}):r}},pseudos:{not:i(function(e){var t=[],n=[],o=T(e.replace(ae,"$1"));return o[H]?i(function(e,t,n,i){for(var r,a=o(e,null,i,[]),s=e.length;s--;)(r=a[s])&&(e[s]=!(t[s]=r))}):function(e,i,r){return t[0]=e,o(t,null,r,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(be,Ae),function(t){return(t.textContent||t.innerText||x(t)).indexOf(e)>-1}}),lang:i(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,Ae).toLowerCase(),function(t){var n;do{if(n=L?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===$},focus:function(e){return e===j.activeElement&&(!j.hasFocus||j.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!A.pseudos.empty(e)},header:function(e){return pe.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:s(function(){return[0]}),last:s(function(e,t){return[t-1]}),eq:s(function(e,t,n){return[0>n?n+t:n]}),even:s(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:s(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:s(function(e,t,n){for(var i=0>n?n+t:n;--i>=0;)e.push(i);return e}),gt:s(function(e,t,n){for(var i=0>n?n+t:n;++i<t;)e.push(i);return e})}},A.pseudos.nth=A.pseudos.eq;for(y in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})A.pseudos[y]=function(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}(y);for(y in{submit:!0,reset:!0})A.pseudos[y]=function(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}(y);return c.prototype=A.filters=A.pseudos,A.setFilters=new c,C=t.tokenize=function(e,n){var i,o,r,a,s,l,c,u=_[e+" "];if(u)return n?0:u.slice(0);for(s=e,l=[],c=A.preFilter;s;){(!i||(o=se.exec(s)))&&(o&&(s=s.slice(o[0].length)||s),l.push(r=[])),i=!1,(o=le.exec(s))&&(i=o.shift(),r.push({value:i,type:o[0].replace(ae," ")}),s=s.slice(i.length));for(a in A.filter)!(o=fe[a].exec(s))||c[a]&&!(o=c[a](o))||(i=o.shift(),r.push({value:i,type:a,matches:o}),s=s.slice(i.length));if(!i)break}return n?s.length:s?t.error(e):_(e,l).slice(0)},T=t.compile=function(e,t){var n,i=[],o=[],r=q[e+" "];if(!r){for(t||(t=C(e)),n=t.length;n--;)r=m(t[n]),r[H]?i.push(r):o.push(r);r=q(e,v(o,i)),r.selector=e}return r},E=t.select=function(e,t,n,i){var o,r,a,s,c,d="function"==typeof e&&e,f=!i&&C(e=d.selector||e);if(n=n||[],1===f.length){if(r=f[0]=f[0].slice(0),r.length>2&&"ID"===(a=r[0]).type&&b.getById&&9===t.nodeType&&L&&A.relative[r[1].type]){if(!(t=(A.find.ID(a.matches[0].replace(be,Ae),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(r.shift().value.length)}for(o=fe.needsContext.test(e)?0:r.length;o--&&(a=r[o],!A.relative[s=a.type]);)if((c=A.find[s])&&(i=c(a.matches[0].replace(be,Ae),ve.test(r[0].type)&&l(t.parentNode)||t))){if(r.splice(o,1),!(e=i.length&&u(r)))return Y.apply(n,i),n;break}}return(d||T(e,f))(i,t,!L,n,ve.test(e)&&l(t.parentNode)||t),n},b.sortStable=H.split("").sort(W).join("")===H,b.detectDuplicates=!!N,D(),b.sortDetached=o(function(e){return 1&e.compareDocumentPosition(j.createElement("div"))}),o(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||r("type|href|height|width",function(e,t,n){return n?void 0:e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),b.attributes&&o(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||r("value",function(e,t,n){return n||"input"!==e.nodeName.toLowerCase()?void 0:e.defaultValue}),o(function(e){return null==e.getAttribute("disabled")})||r(K,function(e,t,n){var i;return n?void 0:!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(e);oe.find=ce,oe.expr=ce.selectors,oe.expr[":"]=oe.expr.pseudos,oe.unique=ce.uniqueSort,oe.text=ce.getText,oe.isXMLDoc=ce.isXML,oe.contains=ce.contains;var ue=oe.expr.match.needsContext,de=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,fe=/^.[^:#\[\.,]*$/;oe.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?oe.find.matchesSelector(i,e)?[i]:[]:oe.find.matches(e,oe.grep(t,function(e){return 1===e.nodeType}))},oe.fn.extend({find:function(e){var t,n=[],i=this,o=i.length;if("string"!=typeof e)return this.pushStack(oe(e).filter(function(){for(t=0;o>t;t++)if(oe.contains(i[t],this))return!0}));for(t=0;o>t;t++)oe.find(e,i[t],n);return n=this.pushStack(o>1?oe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(i(this,e||[],!1))},not:function(e){return this.pushStack(i(this,e||[],!0))},is:function(e){return!!i(this,"string"==typeof e&&ue.test(e)?oe(e):e||[],!1).length}});var he,pe=e.document,ge=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(oe.fn.init=function(e,t){var n,i;if(!e)return this;if("string"==typeof e){if(!(n="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ge.exec(e))||!n[1]&&t)return!t||t.jquery?(t||he).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof oe?t[0]:t,oe.merge(this,oe.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:pe,!0)),de.test(n[1])&&oe.isPlainObject(t))for(n in t)oe.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}if((i=pe.getElementById(n[2]))&&i.parentNode){if(i.id!==n[2])return he.find(e);this.length=1,this[0]=i}return this.context=pe,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):oe.isFunction(e)?void 0!==he.ready?he.ready(e):e(oe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),oe.makeArray(e,this))}).prototype=oe.fn,he=oe(pe);var me=/^(?:parents|prev(?:Until|All))/,ve={children:!0,contents:!0,next:!0,prev:!0};oe.extend({dir:function(e,t,n){for(var i=[],o=e[t];o&&9!==o.nodeType&&(void 0===n||1!==o.nodeType||!oe(o).is(n));)1===o.nodeType&&i.push(o),o=o[t];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}}),oe.fn.extend({has:function(e){var t,n=oe(e,this),i=n.length;return this.filter(function(){for(t=0;i>t;t++)if(oe.contains(this,n[t]))return!0})},closest:function(e,t){for(var n,i=0,o=this.length,r=[],a=ue.test(e)||"string"!=typeof e?oe(e,t||this.context):0;o>i;i++)for(n=this[i];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&oe.find.matchesSelector(n,e))){r.push(n);break}return this.pushStack(r.length>1?oe.unique(r):r)},index:function(e){return e?"string"==typeof e?oe.inArray(this[0],oe(e)):oe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(oe.unique(oe.merge(this.get(),oe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),oe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return oe.dir(e,"parentNode")},parentsUntil:function(e,t,n){return oe.dir(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return oe.dir(e,"nextSibling")},prevAll:function(e){return oe.dir(e,"previousSibling")},nextUntil:function(e,t,n){return oe.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return oe.dir(e,"previousSibling",n)},siblings:function(e){return oe.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return oe.sibling(e.firstChild)},contents:function(e){return oe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:oe.merge([],e.childNodes)}},function(e,t){oe.fn[e]=function(n,i){var o=oe.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(o=oe.filter(i,o)),this.length>1&&(ve[e]||(o=oe.unique(o)),me.test(e)&&(o=o.reverse())),this.pushStack(o)}});var ye=/\S+/g,be={};oe.Callbacks=function(e){e="string"==typeof e?be[e]||r(e):oe.extend({},e);var t,n,i,o,a,s,l=[],c=!e.once&&[],u=function(r){for(n=e.memory&&r,i=!0,a=s||0,s=0,o=l.length,t=!0;l&&o>a;a++)if(!1===l[a].apply(r[0],r[1])&&e.stopOnFalse){n=!1;break}t=!1,l&&(c?c.length&&u(c.shift()):n?l=[]:d.disable())},d={add:function(){if(l){var i=l.length;!function t(n){oe.each(n,function(n,i){var o=oe.type(i);"function"===o?e.unique&&d.has(i)||l.push(i):i&&i.length&&"string"!==o&&t(i)})}(arguments),t?o=l.length:n&&(s=i,u(n))}return this},remove:function(){return l&&oe.each(arguments,function(e,n){for(var i;(i=oe.inArray(n,l,i))>-1;)l.splice(i,1),t&&(o>=i&&o--,a>=i&&a--)}),this},has:function(e){return e?oe.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=c=n=void 0,this},disabled:function(){return!l},lock:function(){return c=void 0,n||d.disable(),this},locked:function(){return!c},fireWith:function(e,n){return!l||i&&!c||(n=n||[],n=[e,n.slice?n.slice():n],t?c.push(n):u(n)),this},fire:function(){return d.fireWith(this,arguments),this},fired:function(){return!!i}};return d},oe.extend({Deferred:function(e){var t=[["resolve","done",oe.Callbacks("once memory"),"resolved"],["reject","fail",oe.Callbacks("once memory"),"rejected"],["notify","progress",oe.Callbacks("memory")]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},then:function(){var e=arguments;return oe.Deferred(function(n){oe.each(t,function(t,r){var a=oe.isFunction(e[t])&&e[t];o[r[1]](function(){var e=a&&a.apply(this,arguments);e&&oe.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[r[0]+"With"](this===i?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?oe.extend(e,i):i}},o={};return i.pipe=i.then,oe.each(t,function(e,r){var a=r[2],s=r[3];i[r[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),o[r[0]]=function(){return o[r[0]+"With"](this===o?i:this,arguments),this},o[r[0]+"With"]=a.fireWith}),i.promise(o),e&&e.call(o,o),o},when:function(e){var t,n,i,o=0,r=V.call(arguments),a=r.length,s=1!==a||e&&oe.isFunction(e.promise)?a:0,l=1===s?e:oe.Deferred(),c=function(e,n,i){return function(o){n[e]=this,i[e]=arguments.length>1?V.call(arguments):o,i===t?l.notifyWith(n,i):--s||l.resolveWith(n,i)}};if(a>1)for(t=new Array(a),n=new Array(a),i=new Array(a);a>o;o++)r[o]&&oe.isFunction(r[o].promise)?r[o].promise().done(c(o,i,r)).fail(l.reject).progress(c(o,n,t)):--s;return s||l.resolveWith(i,r),l.promise()}});var Ae;oe.fn.ready=function(e){return oe.ready.promise().done(e),this},oe.extend({isReady:!1,readyWait:1,holdReady:function(e){e?oe.readyWait++:oe.ready(!0)},ready:function(e){if(!0===e?!--oe.readyWait:!oe.isReady){if(!pe.body)return setTimeout(oe.ready);oe.isReady=!0,!0!==e&&--oe.readyWait>0||(Ae.resolveWith(pe,[oe]),oe.fn.triggerHandler&&(oe(pe).triggerHandler("ready"),oe(pe).off("ready")))}}}),oe.ready.promise=function(t){if(!Ae)if(Ae=oe.Deferred(),"complete"===pe.readyState)setTimeout(oe.ready);else if(pe.addEventListener)pe.addEventListener("DOMContentLoaded",s,!1),e.addEventListener("load",s,!1);else{pe.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&pe.documentElement}catch(e){}n&&n.doScroll&&function e(){if(!oe.isReady){try{n.doScroll("left")}catch(t){return setTimeout(e,50)}a(),oe.ready()}}()}return Ae.promise(t)};var xe,we="undefined";for(xe in oe(ne))break;ne.ownLast="0"!==xe,ne.inlineBlockNeedsLayout=!1,oe(function(){var e,t,n,i;(n=pe.getElementsByTagName("body")[0])&&n.style&&(t=pe.createElement("div"),i=pe.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==we&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ne.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(i))}),function(){var e=pe.createElement("div");if(null==ne.deleteExpando){ne.deleteExpando=!0;try{delete e.test}catch(e){ne.deleteExpando=!1}}e=null}(),oe.acceptData=function(e){var t=oe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||!0!==t&&e.getAttribute("classid")===t)};var Ce=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Te=/([A-Z])/g;oe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return!!(e=e.nodeType?oe.cache[e[oe.expando]]:e[oe.expando])&&!c(e)},data:function(e,t,n){return u(e,t,n)},removeData:function(e,t){return d(e,t)},_data:function(e,t,n){return u(e,t,n,!0)},_removeData:function(e,t){return d(e,t,!0)}}),oe.fn.extend({data:function(e,t){var n,i,o,r=this[0],a=r&&r.attributes;if(void 0===e){if(this.length&&(o=oe.data(r),1===r.nodeType&&!oe._data(r,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(i=a[n].name,0===i.indexOf("data-")&&(i=oe.camelCase(i.slice(5)),l(r,i,o[i])));oe._data(r,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){oe.data(this,e)}):arguments.length>1?this.each(function(){oe.data(this,e,t)}):r?l(r,e,oe.data(r,e)):void 0},removeData:function(e){return this.each(function(){oe.removeData(this,e)})}}),oe.extend({queue:function(e,t,n){var i;return e?(t=(t||"fx")+"queue",i=oe._data(e,t),n&&(!i||oe.isArray(n)?i=oe._data(e,t,oe.makeArray(n)):i.push(n)),i||[]):void 0},dequeue:function(e,t){t=t||"fx";var n=oe.queue(e,t),i=n.length,o=n.shift(),r=oe._queueHooks(e,t),a=function(){oe.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),i--),o&&("fx"===t&&n.unshift("inprogress"),delete r.stop,o.call(e,a,r)),!i&&r&&r.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return oe._data(e,n)||oe._data(e,n,{empty:oe.Callbacks("once memory").add(function(){oe._removeData(e,t+"queue"),oe._removeData(e,n)})})}}),oe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?oe.queue(this[0],e):void 0===t?this:this.each(function(){var n=oe.queue(this,e,t);oe._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&oe.dequeue(this,e)})},dequeue:function(e){return this.each(function(){oe.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,i=1,o=oe.Deferred(),r=this,a=this.length,s=function(){--i||o.resolveWith(r,[r])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=oe._data(r[a],e+"queueHooks"))&&n.empty&&(i++,n.empty.add(s));return s(),o.promise(t)}});var Ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ke=["Top","Right","Bottom","Left"],Se=function(e,t){return e=t||e,"none"===oe.css(e,"display")||!oe.contains(e.ownerDocument,e)},Ne=oe.access=function(e,t,n,i,o,r,a){var s=0,l=e.length,c=null==n;if("object"===oe.type(n)){o=!0;for(s in n)oe.access(e,t,s,n[s],!0,r,a)}else if(void 0!==i&&(o=!0,oe.isFunction(i)||(a=!0),c&&(a?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(oe(e),n)})),t))for(;l>s;s++)t(e[s],n,a?i:i.call(e[s],s,t(e[s],n)));return o?e:c?t.call(e):l?t(e[0],n):r},De=/^(?:checkbox|radio)$/i;!function(){var e=pe.createElement("input"),t=pe.createElement("div"),n=pe.createDocumentFragment();if(t.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ne.leadingWhitespace=3===t.firstChild.nodeType,ne.tbody=!t.getElementsByTagName("tbody").length,ne.htmlSerialize=!!t.getElementsByTagName("link").length,ne.html5Clone="<:nav></:nav>"!==pe.createElement("nav").cloneNode(!0).outerHTML,e.type="checkbox",e.checked=!0,n.appendChild(e),ne.appendChecked=e.checked,t.innerHTML="<textarea>x</textarea>",ne.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,n.appendChild(t),t.innerHTML="<input type='radio' checked='checked' name='t'/>",ne.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,ne.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){ne.noCloneEvent=!1}),t.cloneNode(!0).click()),null==ne.deleteExpando){ne.deleteExpando=!0;try{delete t.test}catch(e){ne.deleteExpando=!1}}}(),function(){var t,n,i=pe.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(ne[t+"Bubbles"]=n in e)||(i.setAttribute(n,"t"),ne[t+"Bubbles"]=!1===i.attributes[n].expando);i=null}();var je=/^(?:input|select|textarea)$/i,$e=/^key/,Le=/^(?:mouse|pointer|contextmenu)|click/,Oe=/^(?:focusinfocus|focusoutblur)$/,Ie=/^([^.]*)(?:\.(.+)|)$/;oe.event={global:{},add:function(e,t,n,i,o){var r,a,s,l,c,u,d,f,h,p,g,m=oe._data(e);if(m){for(n.handler&&(l=n,n=l.handler,o=l.selector),n.guid||(n.guid=oe.guid++),(a=m.events)||(a=m.events={}),(u=m.handle)||(u=m.handle=function(e){return typeof oe===we||e&&oe.event.triggered===e.type?void 0:oe.event.dispatch.apply(u.elem,arguments)},u.elem=e),t=(t||"").match(ye)||[""],s=t.length;s--;)r=Ie.exec(t[s])||[],h=g=r[1],p=(r[2]||"").split(".").sort(),h&&(c=oe.event.special[h]||{},h=(o?c.delegateType:c.bindType)||h,c=oe.event.special[h]||{},d=oe.extend({type:h,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&oe.expr.match.needsContext.test(o),namespace:p.join(".")},l),(f=a[h])||(f=a[h]=[],f.delegateCount=0,c.setup&&!1!==c.setup.call(e,i,p,u)||(e.addEventListener?e.addEventListener(h,u,!1):e.attachEvent&&e.attachEvent("on"+h,u))),c.add&&(c.add.call(e,d),d.handler.guid||(d.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,d):f.push(d),oe.event.global[h]=!0);e=null}},remove:function(e,t,n,i,o){var r,a,s,l,c,u,d,f,h,p,g,m=oe.hasData(e)&&oe._data(e);if(m&&(u=m.events)){for(t=(t||"").match(ye)||[""],c=t.length;c--;)if(s=Ie.exec(t[c])||[],h=g=s[1],p=(s[2]||"").split(".").sort(),h){for(d=oe.event.special[h]||{},h=(i?d.delegateType:d.bindType)||h,f=u[h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=r=f.length;r--;)a=f[r],!o&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||i&&i!==a.selector&&("**"!==i||!a.selector)||(f.splice(r,1),a.selector&&f.delegateCount--,d.remove&&d.remove.call(e,a));l&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,p,m.handle)||oe.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)oe.event.remove(e,h+t[c],n,i,!0);oe.isEmptyObject(u)&&(delete m.handle,oe._removeData(e,"events"))}},trigger:function(t,n,i,o){var r,a,s,l,c,u,d,f=[i||pe],h=te.call(t,"type")?t.type:t,p=te.call(t,"namespace")?t.namespace.split("."):[];if(s=u=i=i||pe,3!==i.nodeType&&8!==i.nodeType&&!Oe.test(h+oe.event.triggered)&&(h.indexOf(".")>=0&&(p=h.split("."),h=p.shift(),p.sort()),a=h.indexOf(":")<0&&"on"+h,t=t[oe.expando]?t:new oe.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=p.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:oe.makeArray(n,[t]),c=oe.event.special[h]||{},o||!c.trigger||!1!==c.trigger.apply(i,n))){if(!o&&!c.noBubble&&!oe.isWindow(i)){for(l=c.delegateType||h,Oe.test(l+h)||(s=s.parentNode);s;s=s.parentNode)f.push(s),u=s;u===(i.ownerDocument||pe)&&f.push(u.defaultView||u.parentWindow||e)}for(d=0;(s=f[d++])&&!t.isPropagationStopped();)t.type=d>1?l:c.bindType||h,r=(oe._data(s,"events")||{})[t.type]&&oe._data(s,"handle"),r&&r.apply(s,n),(r=a&&s[a])&&r.apply&&oe.acceptData(s)&&(t.result=r.apply(s,n),!1===t.result&&t.preventDefault());if(t.type=h,!o&&!t.isDefaultPrevented()&&(!c._default||!1===c._default.apply(f.pop(),n))&&oe.acceptData(i)&&a&&i[h]&&!oe.isWindow(i)){u=i[a],u&&(i[a]=null),oe.event.triggered=h;try{i[h]()}catch(e){}oe.event.triggered=void 0,u&&(i[a]=u)}return t.result}},dispatch:function(e){e=oe.event.fix(e);var t,n,i,o,r,a=[],s=V.call(arguments),l=(oe._data(this,"events")||{})[e.type]||[],c=oe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(a=oe.event.handlers.call(this,e,l),t=0;(o=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(i=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,void 0!==(n=((oe.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,s))&&!1===(e.result=n)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,i,o,r,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(!0!==l.disabled||"click"!==e.type)){for(o=[],r=0;s>r;r++)i=t[r],n=i.selector+" ",void 0===o[n]&&(o[n]=i.needsContext?oe(n,this).index(l)>=0:oe.find(n,this,null,[l]).length),o[n]&&o.push(i);o.length&&a.push({elem:l,handlers:o})}return s<t.length&&a.push({elem:this,handlers:t.slice(s)}),a},fix:function(e){if(e[oe.expando])return e;var t,n,i,o=e.type,r=e,a=this.fixHooks[o];for(a||(this.fixHooks[o]=a=Le.test(o)?this.mouseHooks:$e.test(o)?this.keyHooks:{}),i=a.props?this.props.concat(a.props):this.props,e=new oe.Event(r),t=i.length;t--;)n=i[t],e[n]=r[n];return e.target||(e.target=r.srcElement||pe),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,a.filter?a.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,i,o,r=t.button,a=t.fromElement;return null==e.pageX&&null!=t.clientX&&(i=e.target.ownerDocument||pe,o=i.documentElement,n=i.body,e.pageX=t.clientX+(o&&o.scrollLeft||n&&n.scrollLeft||0)-(o&&o.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(o&&o.scrollTop||n&&n.scrollTop||0)-(o&&o.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?t.toElement:a),e.which||void 0===r||(e.which=1&r?1:2&r?3:4&r?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==p()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===p()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return oe.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(e){return oe.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,i){var o=oe.extend(new oe.Event,n,{type:e,isSimulated:!0,originalEvent:{}});i?oe.event.trigger(o,null,t):oe.event.dispatch.call(t,o),o.isDefaultPrevented()&&n.preventDefault()}},oe.removeEvent=pe.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var i="on"+t;e.detachEvent&&(typeof e[i]===we&&(e[i]=null),e.detachEvent(i,n))},oe.Event=function(e,t){return this instanceof oe.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?f:h):this.type=e,t&&oe.extend(this,t),this.timeStamp=e&&e.timeStamp||oe.now(),void(this[oe.expando]=!0)):new oe.Event(e,t)},oe.Event.prototype={isDefaultPrevented:h,isPropagationStopped:h,isImmediatePropagationStopped:h,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=f,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=f,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=f,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}},oe.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){oe.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,i=this,o=e.relatedTarget,r=e.handleObj;return(!o||o!==i&&!oe.contains(i,o))&&(e.type=r.origType,n=r.handler.apply(this,arguments),e.type=t),n}}}),ne.submitBubbles||(oe.event.special.submit={setup:function(){return!oe.nodeName(this,"form")&&void oe.event.add(this,"click._submit keypress._submit",function(e){var t=e.target,n=oe.nodeName(t,"input")||oe.nodeName(t,"button")?t.form:void 0;n&&!oe._data(n,"submitBubbles")&&(oe.event.add(n,"submit._submit",function(e){e._submit_bubble=!0}),oe._data(n,"submitBubbles",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&oe.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return!oe.nodeName(this,"form")&&void oe.event.remove(this,"._submit")}}),ne.changeBubbles||(oe.event.special.change={setup:function(){return je.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(oe.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),oe.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),oe.event.simulate("change",this,e,!0)})),!1):void oe.event.add(this,"beforeactivate._change",function(e){var t=e.target;je.test(t.nodeName)&&!oe._data(t,"changeBubbles")&&(oe.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||oe.event.simulate("change",this.parentNode,e,!0)}),oe._data(t,"changeBubbles",!0))})},handle:function(e){var t=e.target;return this!==t||e.isSimulated||e.isTrigger||"radio"!==t.type&&"checkbox"!==t.type?e.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return oe.event.remove(this,"._change"),!je.test(this.nodeName)}}),ne.focusinBubbles||oe.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){oe.event.simulate(t,e.target,oe.event.fix(e),!0)};oe.event.special[t]={setup:function(){var i=this.ownerDocument||this,o=oe._data(i,t);o||i.addEventListener(e,n,!0),oe._data(i,t,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=oe._data(i,t)-1;o?oe._data(i,t,o):(i.removeEventListener(e,n,!0),oe._removeData(i,t))}}}),oe.fn.extend({on:function(e,t,n,i,o){var r,a;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=void 0);for(r in e)this.on(r,t,n,e[r],o);return this}if(null==n&&null==i?(i=t,n=t=void 0):null==i&&("string"==typeof t?(i=n,n=void 0):(i=n,n=t,t=void 0)),!1===i)i=h;else if(!i)return this;return 1===o&&(a=i,i=function(e){return oe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=oe.guid++)),this.each(function(){oe.event.add(this,e,i,n,t)})},one:function(e,t,n,i){return this.on(e,t,n,i,1)},off:function(e,t,n){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,oe(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return(!1===t||"function"==typeof t)&&(n=t,t=void 0),!1===n&&(n=h),this.each(function(){oe.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){oe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?oe.event.trigger(e,t,n,!0):void 0}});var Be="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Re=/ jQuery\d+="(?:null|\d+)"/g,He=new RegExp("<(?:"+Be+")[\\s/>]","i"),Me=/^\s+/,Fe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Pe=/<([\w:]+)/,ze=/<tbody/i,_e=/<|&#?\w+;/,qe=/<(?:script|style|link)/i,We=/checked\s*(?:[^=]|=\s*.checked.)/i,Ue=/^$|\/(?:java|ecma)script/i,Qe=/^true\/(.*)/,Ge=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Xe={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ne.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Ve=g(pe),Ye=Ve.appendChild(pe.createElement("div"));Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td,oe.extend({clone:function(e,t,n){var i,o,r,a,s,l=oe.contains(e.ownerDocument,e);if(ne.html5Clone||oe.isXMLDoc(e)||!He.test("<"+e.nodeName+">")?r=e.cloneNode(!0):(Ye.innerHTML=e.outerHTML,Ye.removeChild(r=Ye.firstChild)),!(ne.noCloneEvent&&ne.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||oe.isXMLDoc(e)))for(i=m(r),s=m(e),a=0;null!=(o=s[a]);++a)i[a]&&C(o,i[a]);if(t)if(n)for(s=s||m(e),i=i||m(r),a=0;null!=(o=s[a]);a++)w(o,i[a]);else w(e,r);return i=m(r,"script"),i.length>0&&x(i,!l&&m(e,"script")),i=s=o=null,r},buildFragment:function(e,t,n,i){for(var o,r,a,s,l,c,u,d=e.length,f=g(t),h=[],p=0;d>p;p++)if((r=e[p])||0===r)if("object"===oe.type(r))oe.merge(h,r.nodeType?[r]:r);else if(_e.test(r)){for(s=s||f.appendChild(t.createElement("div")),l=(Pe.exec(r)||["",""])[1].toLowerCase(),u=Xe[l]||Xe._default,s.innerHTML=u[1]+r.replace(Fe,"<$1></$2>")+u[2],o=u[0];o--;)s=s.lastChild;if(!ne.leadingWhitespace&&Me.test(r)&&h.push(t.createTextNode(Me.exec(r)[0])),!ne.tbody)for(r="table"!==l||ze.test(r)?"<table>"!==u[1]||ze.test(r)?0:s:s.firstChild,o=r&&r.childNodes.length;o--;)oe.nodeName(c=r.childNodes[o],"tbody")&&!c.childNodes.length&&r.removeChild(c);for(oe.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=f.lastChild}else h.push(t.createTextNode(r));for(s&&f.removeChild(s),ne.appendChecked||oe.grep(m(h,"input"),v), +p=0;r=h[p++];)if((!i||-1===oe.inArray(r,i))&&(a=oe.contains(r.ownerDocument,r),s=m(f.appendChild(r),"script"),a&&x(s),n))for(o=0;r=s[o++];)Ue.test(r.type||"")&&n.push(r);return s=null,f},cleanData:function(e,t){for(var n,i,o,r,a=0,s=oe.expando,l=oe.cache,c=ne.deleteExpando,u=oe.event.special;null!=(n=e[a]);a++)if((t||oe.acceptData(n))&&(o=n[s],r=o&&l[o])){if(r.events)for(i in r.events)u[i]?oe.event.remove(n,i):oe.removeEvent(n,i,r.handle);l[o]&&(delete l[o],c?delete n[s]:typeof n.removeAttribute!==we?n.removeAttribute(s):n[s]=null,X.push(o))}}}),oe.fn.extend({text:function(e){return Ne(this,function(e){return void 0===e?oe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||pe).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){y(this,e).appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=y(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,i=e?oe.filter(e,this):this,o=0;null!=(n=i[o]);o++)t||1!==n.nodeType||oe.cleanData(m(n)),n.parentNode&&(t&&oe.contains(n.ownerDocument,n)&&x(m(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&oe.cleanData(m(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&oe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return oe.clone(this,e,t)})},html:function(e){return Ne(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Re,""):void 0;if(!("string"!=typeof e||qe.test(e)||!ne.htmlSerialize&&He.test(e)||!ne.leadingWhitespace&&Me.test(e)||Xe[(Pe.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Fe,"<$1></$2>");try{for(;i>n;n++)t=this[n]||{},1===t.nodeType&&(oe.cleanData(m(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,function(t){e=this.parentNode,oe.cleanData(m(this)),e&&e.replaceChild(t,this)}),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t){e=Y.apply([],e);var n,i,o,r,a,s,l=0,c=this.length,u=this,d=c-1,f=e[0],h=oe.isFunction(f);if(h||c>1&&"string"==typeof f&&!ne.checkClone&&We.test(f))return this.each(function(n){var i=u.eq(n);h&&(e[0]=f.call(this,n,i.html())),i.domManip(e,t)});if(c&&(s=oe.buildFragment(e,this[0].ownerDocument,!1,this),n=s.firstChild,1===s.childNodes.length&&(s=n),n)){for(r=oe.map(m(s,"script"),b),o=r.length;c>l;l++)i=s,l!==d&&(i=oe.clone(i,!0,!0),o&&oe.merge(r,m(i,"script"))),t.call(this[l],i,l);if(o)for(a=r[r.length-1].ownerDocument,oe.map(r,A),l=0;o>l;l++)i=r[l],Ue.test(i.type||"")&&!oe._data(i,"globalEval")&&oe.contains(a,i)&&(i.src?oe._evalUrl&&oe._evalUrl(i.src):oe.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Ge,"")));s=n=null}return this}}),oe.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){oe.fn[e]=function(e){for(var n,i=0,o=[],r=oe(e),a=r.length-1;a>=i;i++)n=i===a?this:this.clone(!0),oe(r[i])[t](n),Z.apply(o,n.get());return this.pushStack(o)}});var Ze,Je={};!function(){var e;ne.shrinkWrapBlocks=function(){if(null!=e)return e;e=!1;var t,n,i;return n=pe.getElementsByTagName("body")[0],n&&n.style?(t=pe.createElement("div"),i=pe.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),typeof t.style.zoom!==we&&(t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",t.appendChild(pe.createElement("div")).style.width="5px",e=3!==t.offsetWidth),n.removeChild(i),e):void 0}}();var Ke,et,tt=/^margin/,nt=new RegExp("^("+Ee+")(?!px)[a-z%]+$","i"),it=/^(top|right|bottom|left)$/;e.getComputedStyle?(Ke=function(t){return t.ownerDocument.defaultView.opener?t.ownerDocument.defaultView.getComputedStyle(t,null):e.getComputedStyle(t,null)},et=function(e,t,n){var i,o,r,a,s=e.style;return n=n||Ke(e),a=n?n.getPropertyValue(t)||n[t]:void 0,n&&(""!==a||oe.contains(e.ownerDocument,e)||(a=oe.style(e,t)),nt.test(a)&&tt.test(t)&&(i=s.width,o=s.minWidth,r=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=i,s.minWidth=o,s.maxWidth=r)),void 0===a?a:a+""}):pe.documentElement.currentStyle&&(Ke=function(e){return e.currentStyle},et=function(e,t,n){var i,o,r,a,s=e.style;return n=n||Ke(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),nt.test(a)&&!it.test(t)&&(i=s.left,o=e.runtimeStyle,r=o&&o.left,r&&(o.left=e.currentStyle.left),s.left="fontSize"===t?"1em":a,a=s.pixelLeft+"px",s.left=i,r&&(o.left=r)),void 0===a?a:a+""||"auto"}),!function(){function t(){var t,n,i,o;(n=pe.getElementsByTagName("body")[0])&&n.style&&(t=pe.createElement("div"),i=pe.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(i).appendChild(t),t.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=a=!1,l=!0,e.getComputedStyle&&(r="1%"!==(e.getComputedStyle(t,null)||{}).top,a="4px"===(e.getComputedStyle(t,null)||{width:"4px"}).width,o=t.appendChild(pe.createElement("div")),o.style.cssText=t.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",o.style.marginRight=o.style.width="0",t.style.width="1px",l=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight),t.removeChild(o)),t.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=t.getElementsByTagName("td"),o[0].style.cssText="margin:0;border:0;padding:0;display:none",s=0===o[0].offsetHeight,s&&(o[0].style.display="",o[1].style.display="none",s=0===o[0].offsetHeight),n.removeChild(i))}var n,i,o,r,a,s,l;n=pe.createElement("div"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",o=n.getElementsByTagName("a")[0],(i=o&&o.style)&&(i.cssText="float:left;opacity:.5",ne.opacity="0.5"===i.opacity,ne.cssFloat=!!i.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",ne.clearCloneStyle="content-box"===n.style.backgroundClip,ne.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,oe.extend(ne,{reliableHiddenOffsets:function(){return null==s&&t(),s},boxSizingReliable:function(){return null==a&&t(),a},pixelPosition:function(){return null==r&&t(),r},reliableMarginRight:function(){return null==l&&t(),l}}))}(),oe.swap=function(e,t,n,i){var o,r,a={};for(r in t)a[r]=e.style[r],e.style[r]=t[r];o=n.apply(e,i||[]);for(r in t)e.style[r]=a[r];return o};var ot=/alpha\([^)]*\)/i,rt=/opacity\s*=\s*([^)]*)/,at=/^(none|table(?!-c[ea]).+)/,st=new RegExp("^("+Ee+")(.*)$","i"),lt=new RegExp("^([+-])=("+Ee+")","i"),ct={position:"absolute",visibility:"hidden",display:"block"},ut={letterSpacing:"0",fontWeight:"400"},dt=["Webkit","O","Moz","ms"];oe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=et(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:ne.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,r,a,s=oe.camelCase(t),l=e.style;if(t=oe.cssProps[s]||(oe.cssProps[s]=S(l,s)),a=oe.cssHooks[t]||oe.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(o=a.get(e,!1,i))?o:l[t];if(r=typeof n,"string"===r&&(o=lt.exec(n))&&(n=(o[1]+1)*o[2]+parseFloat(oe.css(e,t)),r="number"),null!=n&&n===n&&("number"!==r||oe.cssNumber[s]||(n+="px"),ne.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),!(a&&"set"in a&&void 0===(n=a.set(e,n,i)))))try{l[t]=n}catch(e){}}},css:function(e,t,n,i){var o,r,a,s=oe.camelCase(t);return t=oe.cssProps[s]||(oe.cssProps[s]=S(e.style,s)),a=oe.cssHooks[t]||oe.cssHooks[s],a&&"get"in a&&(r=a.get(e,!0,n)),void 0===r&&(r=et(e,t,i)),"normal"===r&&t in ut&&(r=ut[t]),""===n||n?(o=parseFloat(r),!0===n||oe.isNumeric(o)?o||0:r):r}}),oe.each(["height","width"],function(e,t){oe.cssHooks[t]={get:function(e,n,i){return n?at.test(oe.css(e,"display"))&&0===e.offsetWidth?oe.swap(e,ct,function(){return $(e,t,i)}):$(e,t,i):void 0},set:function(e,n,i){var o=i&&Ke(e);return D(e,n,i?j(e,t,i,ne.boxSizing&&"border-box"===oe.css(e,"boxSizing",!1,o),o):0)}}}),ne.opacity||(oe.cssHooks.opacity={get:function(e,t){return rt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,i=e.currentStyle,o=oe.isNumeric(t)?"alpha(opacity="+100*t+")":"",r=i&&i.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===oe.trim(r.replace(ot,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||i&&!i.filter)||(n.filter=ot.test(r)?r.replace(ot,o):r+" "+o)}}),oe.cssHooks.marginRight=k(ne.reliableMarginRight,function(e,t){return t?oe.swap(e,{display:"inline-block"},et,[e,"marginRight"]):void 0}),oe.each({margin:"",padding:"",border:"Width"},function(e,t){oe.cssHooks[e+t]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[e+ke[i]+t]=r[i]||r[i-2]||r[0];return o}},tt.test(e)||(oe.cssHooks[e+t].set=D)}),oe.fn.extend({css:function(e,t){return Ne(this,function(e,t,n){var i,o,r={},a=0;if(oe.isArray(t)){for(i=Ke(e),o=t.length;o>a;a++)r[t[a]]=oe.css(e,t[a],!1,i);return r}return void 0!==n?oe.style(e,t,n):oe.css(e,t)},e,t,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Se(this)?oe(this).show():oe(this).hide()})}}),oe.Tween=L,L.prototype={constructor:L,init:function(e,t,n,i,o,r){this.elem=e,this.prop=n,this.easing=o||"swing",this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=r||(oe.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return e&&e.get?e.get(this):L.propHooks._default.get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=oe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=oe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){oe.fx.step[e.prop]?oe.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[oe.cssProps[e.prop]]||oe.cssHooks[e.prop])?oe.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},oe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},oe.fx=L.prototype.init,oe.fx.step={};var ft,ht,pt=/^(?:toggle|show|hide)$/,gt=new RegExp("^(?:([+-])=|)("+Ee+")([a-z%]*)$","i"),mt=/queueHooks$/,vt=[R],yt={"*":[function(e,t){var n=this.createTween(e,t),i=n.cur(),o=gt.exec(t),r=o&&o[3]||(oe.cssNumber[e]?"":"px"),a=(oe.cssNumber[e]||"px"!==r&&+i)&>.exec(oe.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==r){r=r||a[3],o=o||[],a=+i||1;do{s=s||".5",a/=s,oe.style(n.elem,e,a+r)}while(s!==(s=n.cur()/i)&&1!==s&&--l)}return o&&(a=n.start=+a||+i||0,n.unit=r,n.end=o[1]?a+(o[1]+1)*o[2]:+o[2]),n}]};oe.Animation=oe.extend(M,{tweener:function(e,t){oe.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,i=0,o=e.length;o>i;i++)n=e[i],yt[n]=yt[n]||[],yt[n].unshift(t)},prefilter:function(e,t){t?vt.unshift(e):vt.push(e)}}),oe.speed=function(e,t,n){var i=e&&"object"==typeof e?oe.extend({},e):{complete:n||!n&&t||oe.isFunction(e)&&e,duration:e,easing:n&&t||t&&!oe.isFunction(t)&&t};return i.duration=oe.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in oe.fx.speeds?oe.fx.speeds[i.duration]:oe.fx.speeds._default,(null==i.queue||!0===i.queue)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){oe.isFunction(i.old)&&i.old.call(this),i.queue&&oe.dequeue(this,i.queue)},i},oe.fn.extend({fadeTo:function(e,t,n,i){return this.filter(Se).css("opacity",0).show().end().animate({opacity:t},e,n,i)},animate:function(e,t,n,i){var o=oe.isEmptyObject(e),r=oe.speed(t,n,i),a=function(){var t=M(this,oe.extend({},e),r);(o||oe._data(this,"finish"))&&t.stop(!0)};return a.finish=a,o||!1===r.queue?this.each(a):this.queue(r.queue,a)},stop:function(e,t,n){var i=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,o=null!=e&&e+"queueHooks",r=oe.timers,a=oe._data(this);if(o)a[o]&&a[o].stop&&i(a[o]);else for(o in a)a[o]&&a[o].stop&&mt.test(o)&&i(a[o]);for(o=r.length;o--;)r[o].elem!==this||null!=e&&r[o].queue!==e||(r[o].anim.stop(n),t=!1,r.splice(o,1));(t||!n)&&oe.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=oe._data(this),i=n[e+"queue"],o=n[e+"queueHooks"],r=oe.timers,a=i?i.length:0;for(n.finish=!0,oe.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=r.length;t--;)r[t].elem===this&&r[t].queue===e&&(r[t].anim.stop(!0),r.splice(t,1));for(t=0;a>t;t++)i[t]&&i[t].finish&&i[t].finish.call(this);delete n.finish})}}),oe.each(["toggle","show","hide"],function(e,t){var n=oe.fn[t];oe.fn[t]=function(e,i,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,i,o)}}),oe.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){oe.fn[e]=function(e,n,i){return this.animate(t,e,n,i)}}),oe.timers=[],oe.fx.tick=function(){var e,t=oe.timers,n=0;for(ft=oe.now();n<t.length;n++)(e=t[n])()||t[n]!==e||t.splice(n--,1);t.length||oe.fx.stop(),ft=void 0},oe.fx.timer=function(e){oe.timers.push(e),e()?oe.fx.start():oe.timers.pop()},oe.fx.interval=13,oe.fx.start=function(){ht||(ht=setInterval(oe.fx.tick,oe.fx.interval))},oe.fx.stop=function(){clearInterval(ht),ht=null},oe.fx.speeds={slow:600,fast:200,_default:400},oe.fn.delay=function(e,t){return e=oe.fx?oe.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var i=setTimeout(t,e);n.stop=function(){clearTimeout(i)}})},function(){var e,t,n,i,o;t=pe.createElement("div"),t.setAttribute("className","t"),t.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=t.getElementsByTagName("a")[0],n=pe.createElement("select"),o=n.appendChild(pe.createElement("option")),e=t.getElementsByTagName("input")[0],i.style.cssText="top:1px",ne.getSetAttribute="t"!==t.className,ne.style=/top/.test(i.getAttribute("style")),ne.hrefNormalized="/a"===i.getAttribute("href"),ne.checkOn=!!e.value,ne.optSelected=o.selected,ne.enctype=!!pe.createElement("form").enctype,n.disabled=!0,ne.optDisabled=!o.disabled,e=pe.createElement("input"),e.setAttribute("value",""),ne.input=""===e.getAttribute("value"),e.value="t",e.setAttribute("type","radio"),ne.radioValue="t"===e.value}();var bt=/\r/g;oe.fn.extend({val:function(e){var t,n,i,o=this[0];return arguments.length?(i=oe.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,oe(this).val()):e,null==o?o="":"number"==typeof o?o+="":oe.isArray(o)&&(o=oe.map(o,function(e){return null==e?"":e+""})),(t=oe.valHooks[this.type]||oe.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))})):o?(t=oe.valHooks[o.type]||oe.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(bt,""):null==n?"":n)):void 0}}),oe.extend({valHooks:{option:{get:function(e){var t=oe.find.attr(e,"value");return null!=t?t:oe.trim(oe.text(e))}},select:{get:function(e){for(var t,n,i=e.options,o=e.selectedIndex,r="select-one"===e.type||0>o,a=r?null:[],s=r?o+1:i.length,l=0>o?s:r?o:0;s>l;l++)if(n=i[l],!(!n.selected&&l!==o||(ne.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&oe.nodeName(n.parentNode,"optgroup"))){if(t=oe(n).val(),r)return t;a.push(t)}return a},set:function(e,t){for(var n,i,o=e.options,r=oe.makeArray(t),a=o.length;a--;)if(i=o[a],oe.inArray(oe.valHooks.option.get(i),r)>=0)try{i.selected=n=!0}catch(e){i.scrollHeight}else i.selected=!1;return n||(e.selectedIndex=-1),o}}}}),oe.each(["radio","checkbox"],function(){oe.valHooks[this]={set:function(e,t){return oe.isArray(t)?e.checked=oe.inArray(oe(e).val(),t)>=0:void 0}},ne.checkOn||(oe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var At,xt,wt=oe.expr.attrHandle,Ct=/^(?:checked|selected)$/i,Tt=ne.getSetAttribute,Et=ne.input;oe.fn.extend({attr:function(e,t){return Ne(this,oe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){oe.removeAttr(this,e)})}}),oe.extend({attr:function(e,t,n){var i,o,r=e.nodeType;if(e&&3!==r&&8!==r&&2!==r)return typeof e.getAttribute===we?oe.prop(e,t,n):(1===r&&oe.isXMLDoc(e)||(t=t.toLowerCase(),i=oe.attrHooks[t]||(oe.expr.match.bool.test(t)?xt:At)),void 0===n?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=oe.find.attr(e,t),null==o?void 0:o):null!==n?i&&"set"in i&&void 0!==(o=i.set(e,n,t))?o:(e.setAttribute(t,n+""),n):void oe.removeAttr(e,t))},removeAttr:function(e,t){var n,i,o=0,r=t&&t.match(ye);if(r&&1===e.nodeType)for(;n=r[o++];)i=oe.propFix[n]||n,oe.expr.match.bool.test(n)?Et&&Tt||!Ct.test(n)?e[i]=!1:e[oe.camelCase("default-"+n)]=e[i]=!1:oe.attr(e,n,""),e.removeAttribute(Tt?n:i)},attrHooks:{type:{set:function(e,t){if(!ne.radioValue&&"radio"===t&&oe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),xt={set:function(e,t,n){return!1===t?oe.removeAttr(e,n):Et&&Tt||!Ct.test(n)?e.setAttribute(!Tt&&oe.propFix[n]||n,n):e[oe.camelCase("default-"+n)]=e[n]=!0,n}},oe.each(oe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=wt[t]||oe.find.attr;wt[t]=Et&&Tt||!Ct.test(t)?function(e,t,i){var o,r;return i||(r=wt[t],wt[t]=o,o=null!=n(e,t,i)?t.toLowerCase():null,wt[t]=r),o}:function(e,t,n){return n?void 0:e[oe.camelCase("default-"+t)]?t.toLowerCase():null}}),Et&&Tt||(oe.attrHooks.value={set:function(e,t,n){return oe.nodeName(e,"input")?void(e.defaultValue=t):At&&At.set(e,t,n)}}),Tt||(At={set:function(e,t,n){var i=e.getAttributeNode(n);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(n)),i.value=t+="","value"===n||t===e.getAttribute(n)?t:void 0}},wt.id=wt.name=wt.coords=function(e,t,n){var i;return n?void 0:(i=e.getAttributeNode(t))&&""!==i.value?i.value:null},oe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:void 0},set:At.set},oe.attrHooks.contenteditable={set:function(e,t,n){At.set(e,""!==t&&t,n)}},oe.each(["width","height"],function(e,t){oe.attrHooks[t]={set:function(e,n){return""===n?(e.setAttribute(t,"auto"),n):void 0}}})),ne.style||(oe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var kt=/^(?:input|select|textarea|button|object)$/i,St=/^(?:a|area)$/i;oe.fn.extend({prop:function(e,t){return Ne(this,oe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=oe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(e){}})}}),oe.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,t,n){var i,o,r,a=e.nodeType;if(e&&3!==a&&8!==a&&2!==a)return r=1!==a||!oe.isXMLDoc(e),r&&(t=oe.propFix[t]||t,o=oe.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(e,n,t))?i:e[t]=n:o&&"get"in o&&null!==(i=o.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=oe.find.attr(e,"tabindex");return t?parseInt(t,10):kt.test(e.nodeName)||St.test(e.nodeName)&&e.href?0:-1}}}}),ne.hrefNormalized||oe.each(["href","src"],function(e,t){oe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),ne.optSelected||(oe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),oe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){oe.propFix[this.toLowerCase()]=this}),ne.enctype||(oe.propFix.enctype="encoding");var Nt=/[\t\r\n\f]/g;oe.fn.extend({addClass:function(e){var t,n,i,o,r,a,s=0,l=this.length,c="string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).addClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(ye)||[];l>s;s++)if(n=this[s],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Nt," "):" ")){for(r=0;o=t[r++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");a=oe.trim(i),n.className!==a&&(n.className=a)}return this},removeClass:function(e){var t,n,i,o,r,a,s=0,l=this.length,c=0===arguments.length||"string"==typeof e&&e;if(oe.isFunction(e))return this.each(function(t){oe(this).removeClass(e.call(this,t,this.className))});if(c)for(t=(e||"").match(ye)||[];l>s;s++)if(n=this[s],i=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Nt," "):"")){for(r=0;o=t[r++];)for(;i.indexOf(" "+o+" ")>=0;)i=i.replace(" "+o+" "," ");a=e?oe.trim(i):"",n.className!==a&&(n.className=a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):this.each(oe.isFunction(e)?function(n){oe(this).toggleClass(e.call(this,n,this.className,t),t)}:function(){if("string"===n)for(var t,i=0,o=oe(this),r=e.match(ye)||[];t=r[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else(n===we||"boolean"===n)&&(this.className&&oe._data(this,"__className__",this.className),this.className=this.className||!1===e?"":oe._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,i=this.length;i>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Nt," ").indexOf(t)>=0)return!0;return!1}}),oe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){oe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),oe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var Dt=oe.now(),jt=/\?/,$t=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;oe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,i=null,o=oe.trim(t+"");return o&&!oe.trim(o.replace($t,function(e,t,o,r){return n&&t&&(i=0),0===i?e:(n=o||t,i+=!r-!o,"")}))?Function("return "+o)():oe.error("Invalid JSON: "+t)},oe.parseXML=function(t){var n,i;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(i=new DOMParser,n=i.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(e){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||oe.error("Invalid XML: "+t),n};var Lt,Ot,It=/#.*$/,Bt=/([?&])_=[^&]*/,Rt=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Ft=/^\/\//,Pt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,zt={},_t={},qt="*/".concat("*");try{Ot=location.href}catch(e){Ot=pe.createElement("a"),Ot.href="",Ot=Ot.href}Lt=Pt.exec(Ot.toLowerCase())||[],oe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ot,type:"GET",isLocal:Ht.test(Lt[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":qt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":oe.parseJSON,"text xml":oe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?z(z(e,oe.ajaxSettings),t):z(oe.ajaxSettings,e)},ajaxPrefilter:F(zt),ajaxTransport:F(_t),ajax:function(e,t){function n(e,t,n,i){var o,u,v,y,A,w=t;2!==b&&(b=2,s&&clearTimeout(s),c=void 0,a=i||"",x.readyState=e>0?4:0,o=e>=200&&300>e||304===e,n&&(y=_(d,x,n)),y=q(d,y,x,o),o?(d.ifModified&&(A=x.getResponseHeader("Last-Modified"),A&&(oe.lastModified[r]=A),(A=x.getResponseHeader("etag"))&&(oe.etag[r]=A)),204===e||"HEAD"===d.type?w="nocontent":304===e?w="notmodified":(w=y.state,u=y.data,v=y.error,o=!v)):(v=w,(e||!w)&&(w="error",0>e&&(e=0))),x.status=e,x.statusText=(t||w)+"",o?p.resolveWith(f,[u,w,x]):p.rejectWith(f,[x,w,v]),x.statusCode(m),m=void 0,l&&h.trigger(o?"ajaxSuccess":"ajaxError",[x,d,o?u:v]),g.fireWith(f,[x,w]),l&&(h.trigger("ajaxComplete",[x,d]),--oe.active||oe.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,r,a,s,l,c,u,d=oe.ajaxSetup({},t),f=d.context||d,h=d.context&&(f.nodeType||f.jquery)?oe(f):oe.event,p=oe.Deferred(),g=oe.Callbacks("once memory"),m=d.statusCode||{},v={},y={},b=0,A="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!u)for(u={};t=Rt.exec(a);)u[t[1].toLowerCase()]=t[2];t=u[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else x.always(e[x.status]);return this},abort:function(e){var t=e||A;return c&&c.abort(t),n(0,t),this}};if(p.promise(x).complete=g.add,x.success=x.done,x.error=x.fail,d.url=((e||d.url||Ot)+"").replace(It,"").replace(Ft,Lt[1]+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=oe.trim(d.dataType||"*").toLowerCase().match(ye)||[""],null==d.crossDomain&&(i=Pt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===Lt[1]&&i[2]===Lt[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(Lt[3]||("http:"===Lt[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=oe.param(d.data,d.traditional)),P(zt,d,t,x),2===b)return x;l=oe.event&&d.global,l&&0==oe.active++&&oe.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Mt.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(jt.test(r)?"&":"?")+d.data,delete d.data),!1===d.cache&&(d.url=Bt.test(r)?r.replace(Bt,"$1_="+Dt++):r+(jt.test(r)?"&":"?")+"_="+Dt++)),d.ifModified&&(oe.lastModified[r]&&x.setRequestHeader("If-Modified-Since",oe.lastModified[r]),oe.etag[r]&&x.setRequestHeader("If-None-Match",oe.etag[r])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&x.setRequestHeader("Content-Type",d.contentType),x.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+qt+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)x.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(!1===d.beforeSend.call(f,x,d)||2===b))return x.abort();A="abort";for(o in{success:1,error:1,complete:1})x[o](d[o]);if(c=P(_t,d,t,x)){x.readyState=1,l&&h.trigger("ajaxSend",[x,d]),d.async&&d.timeout>0&&(s=setTimeout(function(){x.abort("timeout")},d.timeout));try{b=1,c.send(v,n)}catch(e){if(!(2>b))throw e;n(-1,e)}}else n(-1,"No Transport");return x},getJSON:function(e,t,n){return oe.get(e,t,n,"json")},getScript:function(e,t){return oe.get(e,void 0,t,"script")}}),oe.each(["get","post"],function(e,t){oe[t]=function(e,n,i,o){return oe.isFunction(n)&&(o=o||i,i=n,n=void 0),oe.ajax({url:e,type:t,dataType:o,data:n,success:i})}}),oe._evalUrl=function(e){return oe.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},oe.fn.extend({wrapAll:function(e){if(oe.isFunction(e))return this.each(function(t){oe(this).wrapAll(e.call(this,t))});if(this[0]){var t=oe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return this.each(oe.isFunction(e)?function(t){oe(this).wrapInner(e.call(this,t))}:function(){var t=oe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=oe.isFunction(e);return this.each(function(n){oe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){oe.nodeName(this,"body")||oe(this).replaceWith(this.childNodes)}).end()}}),oe.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!ne.reliableHiddenOffsets()&&"none"===(e.style&&e.style.display||oe.css(e,"display"))},oe.expr.filters.visible=function(e){return!oe.expr.filters.hidden(e)};var Wt=/%20/g,Ut=/\[\]$/,Qt=/\r?\n/g,Gt=/^(?:submit|button|image|reset|file)$/i,Xt=/^(?:input|select|textarea|keygen)/i;oe.param=function(e,t){var n,i=[],o=function(e,t){t=oe.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=oe.ajaxSettings&&oe.ajaxSettings.traditional),oe.isArray(e)||e.jquery&&!oe.isPlainObject(e))oe.each(e,function(){o(this.name,this.value)});else for(n in e)W(n,e[n],t,o);return i.join("&").replace(Wt,"+")},oe.fn.extend({serialize:function(){return oe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=oe.prop(this,"elements");return e?oe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!oe(this).is(":disabled")&&Xt.test(this.nodeName)&&!Gt.test(e)&&(this.checked||!De.test(e))}).map(function(e,t){var n=oe(this).val();return null==n?null:oe.isArray(n)?oe.map(n,function(e){return{name:t.name,value:e.replace(Qt,"\r\n")}}):{name:t.name,value:n.replace(Qt,"\r\n")}}).get()}}),oe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&U()||Q()}:U;var Vt=0,Yt={},Zt=oe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent("onunload",function(){for(var e in Yt)Yt[e](void 0,!0)}),ne.cors=!!Zt&&"withCredentials"in Zt,(Zt=ne.ajax=!!Zt)&&oe.ajaxTransport(function(e){if(!e.crossDomain||ne.cors){var t;return{send:function(n,i){var o,r=e.xhr(),a=++Vt;if(r.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)r[o]=e.xhrFields[o];e.mimeType&&r.overrideMimeType&&r.overrideMimeType(e.mimeType),e.crossDomain||n["X-Requested-With"]||(n["X-Requested-With"]="XMLHttpRequest");for(o in n)void 0!==n[o]&&r.setRequestHeader(o,n[o]+"");r.send(e.hasContent&&e.data||null),t=function(n,o){var s,l,c;if(t&&(o||4===r.readyState))if(delete Yt[a],t=void 0,r.onreadystatechange=oe.noop,o)4!==r.readyState&&r.abort();else{c={},s=r.status,"string"==typeof r.responseText&&(c.text=r.responseText);try{l=r.statusText}catch(e){l=""}s||!e.isLocal||e.crossDomain?1223===s&&(s=204):s=c.text?200:404}c&&i(s,l,c,r.getAllResponseHeaders())},e.async?4===r.readyState?setTimeout(t):r.onreadystatechange=Yt[a]=t:t()},abort:function(){t&&t(void 0,!0)}}}}),oe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){ +return oe.globalEval(e),e}}}),oe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),oe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=pe.head||oe("head")[0]||pe.documentElement;return{send:function(i,o){t=pe.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||o(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var Jt=[],Kt=/(=)\?(?=&|$)|\?\?/;oe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Jt.pop()||oe.expando+"_"+Dt++;return this[e]=!0,e}}),oe.ajaxPrefilter("json jsonp",function(t,n,i){var o,r,a,s=!1!==t.jsonp&&(Kt.test(t.url)?"url":"string"==typeof t.data&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Kt.test(t.data)&&"data");return s||"jsonp"===t.dataTypes[0]?(o=t.jsonpCallback=oe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Kt,"$1"+o):!1!==t.jsonp&&(t.url+=(jt.test(t.url)?"&":"?")+t.jsonp+"="+o),t.converters["script json"]=function(){return a||oe.error(o+" was not called"),a[0]},t.dataTypes[0]="json",r=e[o],e[o]=function(){a=arguments},i.always(function(){e[o]=r,t[o]&&(t.jsonpCallback=n.jsonpCallback,Jt.push(o)),a&&oe.isFunction(r)&&r(a[0]),a=r=void 0}),"script"):void 0}),oe.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||pe;var i=de.exec(e),o=!n&&[];return i?[t.createElement(i[1])]:(i=oe.buildFragment([e],t,o),o&&o.length&&oe(o).remove(),oe.merge([],i.childNodes))};var en=oe.fn.load;oe.fn.load=function(e,t,n){if("string"!=typeof e&&en)return en.apply(this,arguments);var i,o,r,a=this,s=e.indexOf(" ");return s>=0&&(i=oe.trim(e.slice(s,e.length)),e=e.slice(0,s)),oe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(r="POST"),a.length>0&&oe.ajax({url:e,type:r,dataType:"html",data:t}).done(function(e){o=arguments,a.html(i?oe("<div>").append(oe.parseHTML(e)).find(i):e)}).complete(n&&function(e,t){a.each(n,o||[e.responseText,t,e])}),this},oe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){oe.fn[t]=function(e){return this.on(t,e)}}),oe.expr.filters.animated=function(e){return oe.grep(oe.timers,function(t){return e===t.elem}).length};var tn=e.document.documentElement;oe.offset={setOffset:function(e,t,n){var i,o,r,a,s,l,c,u=oe.css(e,"position"),d=oe(e),f={};"static"===u&&(e.style.position="relative"),s=d.offset(),r=oe.css(e,"top"),l=oe.css(e,"left"),c=("absolute"===u||"fixed"===u)&&oe.inArray("auto",[r,l])>-1,c?(i=d.position(),a=i.top,o=i.left):(a=parseFloat(r)||0,o=parseFloat(l)||0),oe.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):d.css(f)}},oe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){oe.offset.setOffset(this,e,t)});var t,n,i={top:0,left:0},o=this[0],r=o&&o.ownerDocument;return r?(t=r.documentElement,oe.contains(t,o)?(typeof o.getBoundingClientRect!==we&&(i=o.getBoundingClientRect()),n=G(r),{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var e,t,n={top:0,left:0},i=this[0];return"fixed"===oe.css(i,"position")?t=i.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),oe.nodeName(e[0],"html")||(n=e.offset()),n.top+=oe.css(e[0],"borderTopWidth",!0),n.left+=oe.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-oe.css(i,"marginTop",!0),left:t.left-n.left-oe.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||tn;e&&!oe.nodeName(e,"html")&&"static"===oe.css(e,"position");)e=e.offsetParent;return e||tn})}}),oe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);oe.fn[e]=function(i){return Ne(this,function(e,i,o){var r=G(e);return void 0===o?r?t in r?r[t]:r.document.documentElement[i]:e[i]:void(r?r.scrollTo(n?oe(r).scrollLeft():o,n?o:oe(r).scrollTop()):e[i]=o)},e,i,arguments.length,null)}}),oe.each(["top","left"],function(e,t){oe.cssHooks[t]=k(ne.pixelPosition,function(e,n){return n?(n=et(e,t),nt.test(n)?oe(e).position()[t]+"px":n):void 0})}),oe.each({Height:"height",Width:"width"},function(e,t){oe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,i){oe.fn[i]=function(i,o){var r=arguments.length&&(n||"boolean"!=typeof i),a=n||(!0===i||!0===o?"margin":"border");return Ne(this,function(t,n,i){var o;return oe.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?oe.css(t,n,a):oe.style(t,n,i,a)},t,r?i:void 0,r,null)}})}),oe.fn.size=function(){return this.length},oe.fn.andSelf=oe.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return oe});var nn=e.jQuery,on=e.$;return oe.noConflict=function(t){return e.$===oe&&(e.$=on),t&&e.jQuery===oe&&(e.jQuery=nn),oe},typeof t===we&&(e.jQuery=e.$=oe),oe}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(e){"use strict";var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1==t[0]&&9==t[1]&&t[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),function(e){"use strict";function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(void 0!==e.style[n])return{end:t[n]};return!1}e.fn.emulateTransitionEnd=function(t){var n=!1,i=this;e(this).one("bsTransitionEnd",function(){n=!0});var o=function(){n||e(i).trigger(e.support.transition.end)};return setTimeout(o,t),this},e(function(){e.support.transition=t(),e.support.transition&&(e.event.special.bsTransitionEnd={bindType:e.support.transition.end,delegateType:e.support.transition.end,handle:function(t){return e(t.target).is(this)?t.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var n=e(this),o=n.data("bs.alert");o||n.data("bs.alert",o=new i(this)),"string"==typeof t&&o[t].call(n)})}var n='[data-dismiss="alert"]',i=function(t){e(t).on("click",n,this.close)};i.VERSION="3.3.5",i.TRANSITION_DURATION=150,i.prototype.close=function(t){function n(){a.detach().trigger("closed.bs.alert").remove()}var o=e(this),r=o.attr("data-target");r||(r=o.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var a=e(r);t&&t.preventDefault(),a.length||(a=o.closest(".alert")),a.trigger(t=e.Event("close.bs.alert")),t.isDefaultPrevented()||(a.removeClass("in"),e.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var o=e.fn.alert;e.fn.alert=t,e.fn.alert.Constructor=i,e.fn.alert.noConflict=function(){return e.fn.alert=o,this},e(document).on("click.bs.alert.data-api",n,i.prototype.close)}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.button"),r="object"==typeof t&&t;o||i.data("bs.button",o=new n(this,r)),"toggle"==t?o.toggle():t&&o.setState(t)})}var n=function(t,i){this.$element=e(t),this.options=e.extend({},n.DEFAULTS,i),this.isLoading=!1};n.VERSION="3.3.5",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var n="disabled",i=this.$element,o=i.is("input")?"val":"html",r=i.data();t+="Text",null==r.resetText&&i.data("resetText",i[o]()),setTimeout(e.proxy(function(){i[o](null==r[t]?this.options[t]:r[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(n).attr(n,n)):this.isLoading&&(this.isLoading=!1,i.removeClass(n).removeAttr(n))},this),0)},n.prototype.toggle=function(){var e=!0,t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var n=this.$element.find("input");"radio"==n.prop("type")?(n.prop("checked")&&(e=!1),t.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==n.prop("type")&&(n.prop("checked")!==this.$element.hasClass("active")&&(e=!1),this.$element.toggleClass("active")),n.prop("checked",this.$element.hasClass("active")),e&&n.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var i=e.fn.button;e.fn.button=t,e.fn.button.Constructor=n,e.fn.button.noConflict=function(){return e.fn.button=i,this},e(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(n){var i=e(n.target);i.hasClass("btn")||(i=i.closest(".btn")),t.call(i,"toggle"),e(n.target).is('input[type="radio"]')||e(n.target).is('input[type="checkbox"]')||n.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){e(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.carousel"),r=e.extend({},n.DEFAULTS,i.data(),"object"==typeof t&&t),a="string"==typeof t?t:r.slide;o||i.data("bs.carousel",o=new n(this,r)),"number"==typeof t?o.to(t):a?o[a]():r.interval&&o.pause().cycle()})}var n=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",e.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",e.proxy(this.pause,this)).on("mouseleave.bs.carousel",e.proxy(this.cycle,this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},n.prototype.keydown=function(e){if(!/input|textarea/i.test(e.target.tagName)){switch(e.which){case 37:this.prev();break;case 39:this.next();break;default:return}e.preventDefault()}},n.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(e){return this.$items=e.parent().children(".item"),this.$items.index(e||this.$active)},n.prototype.getItemForDirection=function(e,t){var n=this.getItemIndex(t);if(("prev"==e&&0===n||"next"==e&&n==this.$items.length-1)&&!this.options.wrap)return t;var i="prev"==e?-1:1,o=(n+i)%this.$items.length;return this.$items.eq(o)},n.prototype.to=function(e){var t=this,n=this.getItemIndex(this.$active=this.$element.find(".item.active"));return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){t.to(e)}):n==e?this.pause().cycle():this.slide(e>n?"next":"prev",this.$items.eq(e))},n.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){return this.sliding?void 0:this.slide("next")},n.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},n.prototype.slide=function(t,i){var o=this.$element.find(".item.active"),r=i||this.getItemForDirection(t,o),a=this.interval,s="next"==t?"left":"right",l=this;if(r.hasClass("active"))return this.sliding=!1;var c=r[0],u=e.Event("slide.bs.carousel",{relatedTarget:c,direction:s});if(this.$element.trigger(u),!u.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var d=e(this.$indicators.children()[this.getItemIndex(r)]);d&&d.addClass("active")}var f=e.Event("slid.bs.carousel",{relatedTarget:c,direction:s});return e.support.transition&&this.$element.hasClass("slide")?(r.addClass(t),r[0].offsetWidth,o.addClass(s),r.addClass(s),o.one("bsTransitionEnd",function(){r.removeClass([t,s].join(" ")).addClass("active"),o.removeClass(["active",s].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(f)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(o.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(f)),a&&this.cycle(),this}};var i=e.fn.carousel;e.fn.carousel=t,e.fn.carousel.Constructor=n,e.fn.carousel.noConflict=function(){return e.fn.carousel=i,this};var o=function(n){var i,o=e(this),r=e(o.attr("data-target")||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var a=e.extend({},r.data(),o.data()),s=o.attr("data-slide-to");s&&(a.interval=!1),t.call(r,a),s&&r.data("bs.carousel").to(s),n.preventDefault()}};e(document).on("click.bs.carousel.data-api","[data-slide]",o).on("click.bs.carousel.data-api","[data-slide-to]",o),e(window).on("load",function(){e('[data-ride="carousel"]').each(function(){var n=e(this);t.call(n,n.data())})})}(jQuery),function(e){"use strict";function t(t){var n,i=t.attr("data-target")||(n=t.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"");return e(i)}function n(t){return this.each(function(){var n=e(this),o=n.data("bs.collapse"),r=e.extend({},i.DEFAULTS,n.data(),"object"==typeof t&&t);!o&&r.toggle&&/show|hide/.test(t)&&(r.toggle=!1),o||n.data("bs.collapse",o=new i(this,r)),"string"==typeof t&&o[t]()})}var i=function(t,n){this.$element=e(t),this.options=e.extend({},i.DEFAULTS,n),this.$trigger=e('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.5",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,o=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(o&&o.length&&(t=o.data("bs.collapse"))&&t.transitioning)){var r=e.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){o&&o.length&&(n.call(o,"hide"),t||o.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var s=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!e.support.transition)return s.call(this);var l=e.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",e.proxy(s,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[a](this.$element[0][l])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=e.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return e.support.transition?void this.$element[n](0).one("bsTransitionEnd",e.proxy(o,this)).emulateTransitionEnd(i.TRANSITION_DURATION):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return e(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(e.proxy(function(n,i){var o=e(i);this.addAriaAndCollapsedClass(t(o),o)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(e,t){var n=e.hasClass("in");e.attr("aria-expanded",n),t.toggleClass("collapsed",!n).attr("aria-expanded",n)};var o=e.fn.collapse;e.fn.collapse=n,e.fn.collapse.Constructor=i,e.fn.collapse.noConflict=function(){return e.fn.collapse=o,this},e(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var o=e(this);o.attr("data-target")||i.preventDefault();var r=t(o),a=r.data("bs.collapse"),s=a?"toggle":o.data();n.call(r,s)})}(jQuery),function(e){"use strict";function t(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var i=n&&e(n);return i&&i.length?i:t.parent()}function n(n){n&&3===n.which||(e(o).remove(),e(r).each(function(){var i=e(this),o=t(i),r={relatedTarget:this};o.hasClass("open")&&(n&&"click"==n.type&&/input|textarea/i.test(n.target.tagName)&&e.contains(o[0],n.target)||(o.trigger(n=e.Event("hide.bs.dropdown",r)),n.isDefaultPrevented()||(i.attr("aria-expanded","false"),o.removeClass("open").trigger("hidden.bs.dropdown",r))))}))}function i(t){return this.each(function(){var n=e(this),i=n.data("bs.dropdown");i||n.data("bs.dropdown",i=new a(this)),"string"==typeof t&&i[t].call(n)})}var o=".dropdown-backdrop",r='[data-toggle="dropdown"]',a=function(t){e(t).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.5",a.prototype.toggle=function(i){var o=e(this);if(!o.is(".disabled, :disabled")){var r=t(o),a=r.hasClass("open");if(n(),!a){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&e(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(e(this)).on("click",n);var s={relatedTarget:this};if(r.trigger(i=e.Event("show.bs.dropdown",s)),i.isDefaultPrevented())return;o.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger("shown.bs.dropdown",s)}return!1}},a.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var i=e(this);if(n.preventDefault(),n.stopPropagation(),!i.is(".disabled, :disabled")){var o=t(i),a=o.hasClass("open");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&o.find(r).trigger("focus"),i.trigger("click");var s=o.find(".dropdown-menu li:not(.disabled):visible a");if(s.length){var l=s.index(n.target);38==n.which&&l>0&&l--,40==n.which&&l<s.length-1&&l++,~l||(l=0),s.eq(l).trigger("focus")}}}};var s=e.fn.dropdown;e.fn.dropdown=i,e.fn.dropdown.Constructor=a,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.bs.dropdown.data-api",n).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",r,a.prototype.toggle).on("keydown.bs.dropdown.data-api",r,a.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",a.prototype.keydown)}(jQuery),function(e){"use strict";function t(t,i){return this.each(function(){var o=e(this),r=o.data("bs.modal"),a=e.extend({},n.DEFAULTS,o.data(),"object"==typeof t&&t);r||o.data("bs.modal",r=new n(this,a)),"string"==typeof t?r[t](i):a.show&&r.show(i)})}var n=function(t,n){this.options=n,this.$body=e(document.body),this.$element=e(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,e.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};n.VERSION="3.3.5",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(e){return this.isShown?this.hide():this.show(e)},n.prototype.show=function(t){var i=this,o=e.Event("show.bs.modal",{relatedTarget:t});this.$element.trigger(o),this.isShown||o.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',e.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(t){e(t.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var o=e.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),o&&i.$element[0].offsetWidth,i.$element.addClass("in"),i.enforceFocus();var r=e.Event("shown.bs.modal",{relatedTarget:t});o?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(n.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},n.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),e(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),e.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",e.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]===e.target||this.$element.has(e.target).length||this.$element.trigger("focus")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",e.proxy(function(e){27==e.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},n.prototype.resize=function(){this.isShown?e(window).on("resize.bs.modal",e.proxy(this.handleUpdate,this)):e(window).off("resize.bs.modal")},n.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.$body.removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.$element.trigger("hidden.bs.modal")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(t){var i=this,o=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=e.support.transition&&o;if(this.$backdrop=e(document.createElement("div")).addClass("modal-backdrop "+o).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",e.proxy(function(e){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(e.target===e.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;r?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){i.removeBackdrop(),t&&t()};e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):a()}else t&&t()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var e=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&e?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!e?this.scrollbarWidth:""})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},n.prototype.checkScrollbar=function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth<e,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",e+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var e=document.createElement("div");e.className="modal-scrollbar-measure",this.$body.append(e);var t=e.offsetWidth-e.clientWidth;return this.$body[0].removeChild(e),t};var i=e.fn.modal;e.fn.modal=t,e.fn.modal.Constructor=n,e.fn.modal.noConflict=function(){return e.fn.modal=i,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(n){var i=e(this),o=i.attr("href"),r=e(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),a=r.data("bs.modal")?"toggle":e.extend({remote:!/#/.test(o)&&o},r.data(),i.data());i.is("a")&&n.preventDefault(),r.one("show.bs.modal",function(e){e.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),t.call(r,a,this)})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tooltip"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.tooltip",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",e,t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},n.prototype.init=function(t,n,i){if(this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&e(e.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),r=o.length;r--;){var a=o[r];if("click"==a)this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if("manual"!=a){var s="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t},n.prototype.getDelegateOptions=function(){var t={},n=this.getDefaults();return this._options&&e.each(this._options,function(e,i){n[e]!=i&&(t[e]=i)}),t},n.prototype.enter=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusin"==t.type?"focus":"hover"]=!0),n.tip().hasClass("in")||"in"==n.hoverState?void(n.hoverState="in"):(clearTimeout(n.timeout),n.hoverState="in",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var e in this.inState)if(this.inState[e])return!0;return!1},n.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget).data("bs."+this.type);return n||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n)),t instanceof e.Event&&(n.inState["focusout"==t.type?"focus":"hover"]=!1),n.isInStateTrue()?void 0:(clearTimeout(n.timeout),n.hoverState="out",n.options.delay&&n.options.delay.hide?void(n.timeout=setTimeout(function(){"out"==n.hoverState&&n.hide()},n.options.delay.hide)):n.hide())},n.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var i=e.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!i)return;var o=this,r=this.tip(),a=this.getUID(this.type);this.setContent(),r.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&r.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,c=l.test(s);c&&(s=s.replace(l,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var u=this.getPosition(),d=r[0].offsetWidth,f=r[0].offsetHeight;if(c){var h=s,p=this.getPosition(this.$viewport);s="bottom"==s&&u.bottom+f>p.bottom?"top":"top"==s&&u.top-f<p.top?"bottom":"right"==s&&u.right+d>p.width?"left":"left"==s&&u.left-d<p.left?"right":s,r.removeClass(h).addClass(s)}var g=this.getCalculatedOffset(s,u,d,f);this.applyPlacement(g,s);var m=function(){var e=o.hoverState;o.$element.trigger("shown.bs."+o.type),o.hoverState=null,"out"==e&&o.leave(o)};e.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",m).emulateTransitionEnd(n.TRANSITION_DURATION):m()}},n.prototype.applyPlacement=function(t,n){var i=this.tip(),o=i[0].offsetWidth,r=i[0].offsetHeight,a=parseInt(i.css("margin-top"),10),s=parseInt(i.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),t.top+=a,t.left+=s,e.offset.setOffset(i[0],e.extend({using:function(e){i.css({top:Math.round(e.top),left:Math.round(e.left)})}},t),0),i.addClass("in");var l=i[0].offsetWidth,c=i[0].offsetHeight;"top"==n&&c!=r&&(t.top=t.top+r-c);var u=this.getViewportAdjustedDelta(n,t,l,c);u.left?t.left+=u.left:t.top+=u.top;var d=/top|bottom/.test(n),f=d?2*u.left-o+l:2*u.top-r+c,h=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(f,i[0][h],d)},n.prototype.replaceArrow=function(e,t,n){this.arrow().css(n?"left":"top",50*(1-e/t)+"%").css(n?"top":"left","")},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},n.prototype.hide=function(t){function i(){"in"!=o.hoverState&&r.detach(),o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),t&&t()}var o=this,r=e(this.$tip),a=e.Event("hide.bs."+this.type);return this.$element.trigger(a),a.isDefaultPrevented()?void 0:(r.removeClass("in"),e.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(n.TRANSITION_DURATION):i(),this.hoverState=null,this)},n.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||"string"!=typeof e.attr("data-original-title"))&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(t){t=t||this.$element;var n=t[0],i="BODY"==n.tagName,o=n.getBoundingClientRect();null==o.width&&(o=e.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var r=i?{top:0,left:0}:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},s=i?{width:e(window).width(),height:e(window).height()}:null;return e.extend({},o,a,s,r)},n.prototype.getCalculatedOffset=function(e,t,n,i){return"bottom"==e?{top:t.top+t.height,left:t.left+t.width/2-n/2}:"top"==e?{top:t.top-i,left:t.left+t.width/2-n/2}:"left"==e?{top:t.top+t.height/2-i/2,left:t.left-n}:{top:t.top+t.height/2-i/2,left:t.left+t.width}},n.prototype.getViewportAdjustedDelta=function(e,t,n,i){var o={top:0,left:0};if(!this.$viewport)return o +;var r=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(e)){var s=t.top-r-a.scroll,l=t.top+r-a.scroll+i;s<a.top?o.top=a.top-s:l>a.top+a.height&&(o.top=a.top+a.height-l)}else{var c=t.left-r,u=t.left+r+n;c<a.left?o.left=a.left-c:u>a.right&&(o.left=a.left+a.width-u)}return o},n.prototype.getTitle=function(){var e=this.$element,t=this.options;return e.attr("data-original-title")||("function"==typeof t.title?t.title.call(e[0]):t.title)},n.prototype.getUID=function(e){do{e+=~~(1e6*Math.random())}while(document.getElementById(e));return e},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=e(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(t){var n=this;t&&((n=e(t.currentTarget).data("bs."+this.type))||(n=new this.constructor(t.currentTarget,this.getDelegateOptions()),e(t.currentTarget).data("bs."+this.type,n))),t?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass("in")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var e=this;clearTimeout(this.timeout),this.hide(function(){e.$element.off("."+e.type).removeData("bs."+e.type),e.$tip&&e.$tip.detach(),e.$tip=null,e.$arrow=null,e.$viewport=null})};var i=e.fn.tooltip;e.fn.tooltip=t,e.fn.tooltip.Constructor=n,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=i,this}}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.popover"),r="object"==typeof t&&t;(o||!/destroy|hide/.test(t))&&(o||i.data("bs.popover",o=new n(this,r)),"string"==typeof t&&o[t]())})}var n=function(e,t){this.init("popover",e,t)};if(!e.fn.tooltip)throw new Error("Popover requires tooltip.js");n.VERSION="3.3.5",n.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),n.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof n?"html":"append":"text"](n),e.removeClass("fade top bottom left right in"),e.find(".popover-title").html()||e.find(".popover-title").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var e=this.$element,t=this.options;return e.attr("data-content")||("function"==typeof t.content?t.content.call(e[0]):t.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=e.fn.popover;e.fn.popover=t,e.fn.popover.Constructor=n,e.fn.popover.noConflict=function(){return e.fn.popover=i,this}}(jQuery),function(e){"use strict";function t(n,i){this.$body=e(document.body),this.$scrollElement=e(e(n).is(document.body)?window:n),this.options=e.extend({},t.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var i=e(this),o=i.data("bs.scrollspy"),r="object"==typeof n&&n;o||i.data("bs.scrollspy",o=new t(this,r)),"string"==typeof n&&o[n]()})}t.VERSION="3.3.5",t.DEFAULTS={offset:10},t.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},t.prototype.refresh=function(){var t=this,n="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),e.isWindow(this.$scrollElement[0])||(n="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=e(this),o=t.data("target")||t.attr("href"),r=/^#./.test(o)&&e(o);return r&&r.length&&r.is(":visible")&&[[r[n]().top+i,o]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},t.prototype.process=function(){var e,t=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),i=this.options.offset+n-this.$scrollElement.height(),o=this.offsets,r=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),t>=i)return a!=(e=r[r.length-1])&&this.activate(e);if(a&&t<o[0])return this.activeTarget=null,this.clear();for(e=o.length;e--;)a!=r[e]&&t>=o[e]&&(void 0===o[e+1]||t<o[e+1])&&this.activate(r[e])},t.prototype.activate=function(t){this.activeTarget=t,this.clear();var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=e(n).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},t.prototype.clear=function(){e(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=e.fn.scrollspy;e.fn.scrollspy=n,e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=i,this},e(window).on("load.bs.scrollspy.data-api",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);n.call(t,t.data())})})}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.tab");o||i.data("bs.tab",o=new n(this)),"string"==typeof t&&o[t]()})}var n=function(t){this.element=e(t)};n.VERSION="3.3.5",n.TRANSITION_DURATION=150,n.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=t.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=n.find(".active:last a"),r=e.Event("hide.bs.tab",{relatedTarget:t[0]}),a=e.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(r),t.trigger(a),!a.isDefaultPrevented()&&!r.isDefaultPrevented()){var s=e(i);this.activate(t.closest("li"),n),this.activate(s,s.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},n.prototype.activate=function(t,i,o){function r(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),o&&o()}var a=i.find("> .active"),s=o&&e.support.transition&&(a.length&&a.hasClass("fade")||!!i.find("> .fade").length);a.length&&s?a.one("bsTransitionEnd",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),a.removeClass("in")};var i=e.fn.tab;e.fn.tab=t,e.fn.tab.Constructor=n,e.fn.tab.noConflict=function(){return e.fn.tab=i,this};var o=function(n){n.preventDefault(),t.call(e(this),"show")};e(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',o).on("click.bs.tab.data-api",'[data-toggle="pill"]',o)}(jQuery),function(e){"use strict";function t(t){return this.each(function(){var i=e(this),o=i.data("bs.affix"),r="object"==typeof t&&t;o||i.data("bs.affix",o=new n(this,r)),"string"==typeof t&&o[t]()})}var n=function(t,i){this.options=e.extend({},n.DEFAULTS,i),this.$target=e(this.options.target).on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION="3.3.5",n.RESET="affix affix-top affix-bottom",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(e,t,n,i){var o=this.$target.scrollTop(),r=this.$element.offset(),a=this.$target.height();if(null!=n&&"top"==this.affixed)return n>o&&"top";if("bottom"==this.affixed)return null!=n?!(o+this.unpin<=r.top)&&"bottom":!(e-i>=o+a)&&"bottom";var s=null==this.affixed,l=s?o:r.top,c=s?a:t;return null!=n&&n>=o?"top":null!=i&&l+c>=e-i&&"bottom"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass("affix");var e=this.$target.scrollTop(),t=this.$element.offset();return this.pinnedOffset=t.top-e},n.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),i=this.options.offset,o=i.top,r=i.bottom,a=Math.max(e(document).height(),e(document.body).height());"object"!=typeof i&&(r=o=i),"function"==typeof o&&(o=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var s=this.getState(a,t,o,r);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var l="affix"+(s?"-"+s:""),c=e.Event(l+".bs.affix");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:a-t-r})}};var i=e.fn.affix;e.fn.affix=t,e.fn.affix.Constructor=n,e.fn.affix.noConflict=function(){return e.fn.affix=i,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var n=e(this),i=n.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),t.call(n,i)})})}(jQuery),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){(function(t){function i(e,t,n,i){var a=o(n.substr(n.lastIndexOf(e.domain)),e);a&&r({mode:null,el:i,flags:a,engineSettings:t})}function o(e,t){for(var n={theme:C(I.settings.themes.gray,null),stylesheets:t.stylesheets,holderURL:[]},i=!1,o=String.fromCharCode(11),r=e.replace(/([^\\])\//g,"$1"+o).split(o),a=/%[0-9a-f]{2}/gi,s=r.length,l=0;s>l;l++){var c=r[l];if(c.match(a))try{c=decodeURIComponent(c)}catch(e){c=r[l]}var u=!1;if(I.flags.dimensions.match(c))i=!0,n.dimensions=I.flags.dimensions.output(c),u=!0;else if(I.flags.fluid.match(c))i=!0,n.dimensions=I.flags.fluid.output(c),n.fluid=!0,u=!0;else if(I.flags.textmode.match(c))n.textmode=I.flags.textmode.output(c),u=!0;else if(I.flags.colors.match(c)){var d=I.flags.colors.output(c);n.theme=C(n.theme,d),u=!0}else if(t.themes[c])t.themes.hasOwnProperty(c)&&(n.theme=C(t.themes[c],null)),u=!0;else if(I.flags.font.match(c))n.font=I.flags.font.output(c),u=!0;else if(I.flags.auto.match(c))n.auto=!0,u=!0;else if(I.flags.text.match(c))n.text=I.flags.text.output(c),u=!0;else if(I.flags.size.match(c))n.size=I.flags.size.output(c),u=!0;else if(I.flags.random.match(c)){null==I.vars.cache.themeKeys&&(I.vars.cache.themeKeys=Object.keys(t.themes));var f=I.vars.cache.themeKeys[0|Math.random()*I.vars.cache.themeKeys.length];n.theme=C(t.themes[f],null),u=!0}u&&n.holderURL.push(c)}return n.holderURL.unshift(t.domain),n.holderURL=n.holderURL.join("/"),!!i&&n}function r(e){var t=e.mode,n=e.el,i=e.flags,o=e.engineSettings,r=i.dimensions,s=i.theme,l=r.width+"x"+r.height;if(t=null==t?i.fluid?"fluid":"image":t,null!=i.text&&(s.text=i.text,"object"===n.nodeName.toLowerCase())){for(var d=s.text.split("\\n"),f=0;f<d.length;f++)d[f]=E(d[f]);s.text=d.join("\\n")}var h=i.holderURL,g=C(o,null);if(i.font&&(s.font=i.font,!g.noFontFallback&&"img"===n.nodeName.toLowerCase()&&I.setup.supportsCanvas&&"svg"===g.renderer&&(g=C(g,{renderer:"canvas"}))),i.font&&"canvas"==g.renderer&&(g.reRender=!0),"background"==t)null==n.getAttribute("data-background-src")&&p(n,{"data-background-src":h});else{var m={};m[I.vars.dataAttr]=h,p(n,m)}i.theme=s,n.holderData={flags:i,engineSettings:g},("image"==t||"fluid"==t)&&p(n,{alt:s.text?s.text+" ["+l+"]":l});var v={mode:t,el:n,holderSettings:{dimensions:r,theme:s,flags:i},engineSettings:g};"image"==t?("html"!=g.renderer&&i.auto||(n.style.width=r.width+"px",n.style.height=r.height+"px"),"html"==g.renderer?n.style.backgroundColor=s.background:(a(v),"exact"==i.textmode&&(n.holderData.resizeUpdate=!0,I.vars.resizableImages.push(n),c(n)))):"background"==t&&"html"!=g.renderer?a(v):"fluid"==t&&(n.holderData.resizeUpdate=!0,"%"==r.height.slice(-1)?n.style.height=r.height:null!=i.auto&&i.auto||(n.style.height=r.height+"px"),"%"==r.width.slice(-1)?n.style.width=r.width:null!=i.auto&&i.auto||(n.style.width=r.width+"px"),("inline"==n.style.display||""===n.style.display||"none"==n.style.display)&&(n.style.display="block"),u(n),"html"==g.renderer?n.style.backgroundColor=s.background:(I.vars.resizableImages.push(n),c(n)))}function a(e){function n(){var t=null;switch(l.renderer){case"canvas":t=R(u,e);break;case"svg":t=H(u,e);break;default:throw"Holder: invalid renderer: "+l.renderer}return t}var i=null,o=e.mode,r=e.holderSettings,a=e.el,l=e.engineSettings;switch(l.renderer){case"svg":if(!I.setup.supportsSVG)return;break;case"canvas":if(!I.setup.supportsCanvas)return;break;default:return}var c={width:r.dimensions.width,height:r.dimensions.height,theme:r.theme,flags:r.flags},u=s(c);if(null==(i=n()))throw"Holder: couldn't render placeholder";"background"==o?(a.style.backgroundImage="url("+i+")",a.style.backgroundSize=c.width+"px "+c.height+"px"):("img"===a.nodeName.toLowerCase()?p(a,{src:i}):"object"===a.nodeName.toLowerCase()&&(p(a,{data:i}),p(a,{type:"image/svg+xml"})),l.reRender&&t.setTimeout(function(){var e=n();if(null==e)throw"Holder: couldn't render placeholder";"img"===a.nodeName.toLowerCase()?p(a,{src:e}):"object"===a.nodeName.toLowerCase()&&(p(a,{data:e}),p(a,{type:"image/svg+xml"}))},100)),p(a,{"data-holder-rendered":!0})}function s(e){function t(e,t,n,i){t.width=n,t.height=i,e.width=Math.max(e.width,t.width),e.height+=t.height,e.add(t)}var n=I.defaults.size;switch(parseFloat(e.theme.size)?n=e.theme.size:parseFloat(e.flags.size)&&(n=e.flags.size),e.font={family:e.theme.font?e.theme.font:"Arial, Helvetica, Open Sans, sans-serif",size:l(e.width,e.height,n),units:e.theme.units?e.theme.units:I.defaults.units,weight:e.theme.fontweight?e.theme.fontweight:"bold"},e.text=e.theme.text?e.theme.text:Math.floor(e.width)+"x"+Math.floor(e.height),e.flags.textmode){case"literal":e.text=e.flags.dimensions.width+"x"+e.flags.dimensions.height;break;case"exact":if(!e.flags.exactDimensions)break;e.text=Math.floor(e.flags.exactDimensions.width)+"x"+Math.floor(e.flags.exactDimensions.height)}var i=new x({width:e.width,height:e.height}),o=i.Shape,r=new o.Rect("holderBg",{fill:e.theme.background});r.resize(e.width,e.height),i.root.add(r);var a=new o.Group("holderTextGroup",{text:e.text,align:"center",font:e.font,fill:e.theme.foreground});a.moveTo(null,null,1),i.root.add(a);var s=a.textPositionData=B(i);if(!s)throw"Holder: staging fallback not supported yet.";a.properties.leading=s.boundingBox.height;var c=null,u=null;if(s.lineCount>1){var d=0,f=0,h=e.width*I.setup.lineWrapRatio,p=0;u=new o.Group("line"+p);for(var g=0;g<s.words.length;g++){var m=s.words[g];c=new o.Text(m.text);var v="\\n"==m.text;(d+m.width>=h||!0===v)&&(t(a,u,d,a.properties.leading),d=0,f+=a.properties.leading,p+=1,u=new o.Group("line"+p),u.y=f),!0!==v&&(c.moveTo(d,0),d+=s.spaceWidth+m.width,u.add(c))}t(a,u,d,a.properties.leading);for(var y in a.children)u=a.children[y],u.moveTo((a.width-u.width)/2,null,null);a.moveTo((e.width-a.width)/2,(e.height-a.height)/2,null),(e.height-a.height)/2<0&&a.moveTo(null,0,null)}else c=new o.Text(e.text),u=new o.Group("line0"),u.add(c),a.add(u),a.moveTo((e.width-s.boundingBox.width)/2,(e.height-s.boundingBox.height)/2,null);return i}function l(e,t,n){var i=parseInt(e,10),o=parseInt(t,10),r=Math.max(i,o),a=Math.min(i,o),s=.8*Math.min(a,r*I.defaults.scale);return Math.round(Math.max(n,s))}function c(e){var t;t=null==e||null==e.nodeType?I.vars.resizableImages:[e];for(var n=0,i=t.length;i>n;n++){var o=t[n];if(o.holderData){var r=o.holderData.flags,s=D(o);if(s){if(!o.holderData.resizeUpdate)continue;if(r.fluid&&r.auto){var l=o.holderData.fluidConfig;switch(l.mode){case"width":s.height=s.width/l.ratio;break;case"height":s.width=s.height*l.ratio}}var c={mode:"image",holderSettings:{dimensions:s,theme:r.theme,flags:r},el:o,engineSettings:o.holderData.engineSettings};"exact"==r.textmode&&(r.exactDimensions=s,c.holderSettings.dimensions=r.dimensions),a(c)}else f(o)}}}function u(e){if(e.holderData){var t=D(e);if(t){var n=e.holderData.flags,i={fluidHeight:"%"==n.dimensions.height.slice(-1),fluidWidth:"%"==n.dimensions.width.slice(-1),mode:null,initialDimensions:t};i.fluidWidth&&!i.fluidHeight?(i.mode="width",i.ratio=i.initialDimensions.width/parseFloat(n.dimensions.height)):!i.fluidWidth&&i.fluidHeight&&(i.mode="height",i.ratio=parseFloat(n.dimensions.width)/i.initialDimensions.height),e.holderData.fluidConfig=i}else f(e)}}function d(){for(var e,n=[],i=Object.keys(I.vars.invisibleImages),o=0,r=i.length;r>o;o++)e=I.vars.invisibleImages[i[o]],D(e)&&"img"==e.nodeName.toLowerCase()&&(n.push(e),delete I.vars.invisibleImages[i[o]]);n.length&&O.run({images:n}),t.requestAnimationFrame(d)}function f(e){e.holderData.invisibleId||(I.vars.invisibleId+=1,I.vars.invisibleImages["i"+I.vars.invisibleId]=e,e.holderData.invisibleId=I.vars.invisibleId)}function h(e,t){return null==t?document.createElement(e):document.createElementNS(t,e)}function p(e,t){for(var n in t)e.setAttribute(n,t[n])}function g(e,t,n){var i,o;null==e?(e=h("svg",j),i=h("defs",j),o=h("style",j),p(o,{type:"text/css"}),i.appendChild(o),e.appendChild(i)):o=e.querySelector("style"),e.webkitMatchesSelector&&e.setAttribute("xmlns",j);for(var r=0;r<e.childNodes.length;r++)e.childNodes[r].nodeType===$&&e.removeChild(e.childNodes[r]);for(;o.childNodes.length;)o.removeChild(o.childNodes[0]);return p(e,{width:t,height:n,viewBox:"0 0 "+t+" "+n,preserveAspectRatio:"none"}),e}function m(e,n){if(t.XMLSerializer){var i=new XMLSerializer,o="",r=n.stylesheets;if(n.svgXMLStylesheet){for(var a=v(),s=r.length-1;s>=0;s--){var l=a.createProcessingInstruction("xml-stylesheet",'href="'+r[s]+'" rel="stylesheet"');a.insertBefore(l,a.firstChild)}var c=a.createProcessingInstruction("xml",'version="1.0" encoding="UTF-8" standalone="yes"');a.insertBefore(c,a.firstChild),a.removeChild(a.documentElement),o=i.serializeToString(a)}var u=i.serializeToString(e);return u=u.replace(/\&(\#[0-9]{2,}\;)/g,"&$1"),o+u}}function v(){return t.DOMParser?(new DOMParser).parseFromString("<xml />","application/xml"):void 0}function y(e){I.vars.debounceTimer||e.call(this),I.vars.debounceTimer&&t.clearTimeout(I.vars.debounceTimer),I.vars.debounceTimer=t.setTimeout(function(){I.vars.debounceTimer=null,e.call(this)},I.setup.debounce)}function b(){y(function(){c(null)})}var A=n(1),x=n(2),w=n(3),C=w.extend,T=w.cssProps,E=w.encodeHtmlEntity,k=w.decodeHtmlEntity,S=w.imageExists,N=w.getNodeArray,D=w.dimensionCheck,j="http://www.w3.org/2000/svg",$=8,L="2.6.0",O={version:L,addTheme:function(e,t){return null!=e&&null!=t&&(I.settings.themes[e]=t),delete I.vars.cache.themeKeys,this},addImage:function(e,t){var n=document.querySelectorAll(t);if(n.length)for(var i=0,o=n.length;o>i;i++){var r=h("img"),a={};a[I.vars.dataAttr]=e,p(r,a),n[i].appendChild(r)}return this},setResizeUpdate:function(e,t){e.holderData&&(e.holderData.resizeUpdate=!!t,e.holderData.resizeUpdate&&c(e))},run:function(e){e=e||{};var n={},a=C(I.settings,e);I.vars.preempted=!0,I.vars.dataAttr=a.dataAttr||I.vars.dataAttr,n.renderer=a.renderer?a.renderer:I.setup.renderer,-1===I.setup.renderers.join(",").indexOf(n.renderer)&&(n.renderer=I.setup.supportsSVG?"svg":I.setup.supportsCanvas?"canvas":"html");var s=N(a.images),l=N(a.bgnodes),c=N(a.stylenodes),u=N(a.objects);n.stylesheets=[],n.svgXMLStylesheet=!0,n.noFontFallback=!!a.noFontFallback&&a.noFontFallback;for(var d=0;d<c.length;d++){var f=c[d];if(f.attributes.rel&&f.attributes.href&&"stylesheet"==f.attributes.rel.value){var p=f.attributes.href.value,g=h("a");g.href=p;var m=g.protocol+"//"+g.host+g.pathname+g.search;n.stylesheets.push(m)}}for(d=0;d<l.length;d++)if(t.getComputedStyle){var v=t.getComputedStyle(l[d],null).getPropertyValue("background-image"),y=l[d].getAttribute("data-background-src"),b=null;b=null==y?v:y;var A=null,x="?"+a.domain+"/";if(0===b.indexOf(x))A=b.slice(1);else if(-1!=b.indexOf(x)){var w=b.substr(b.indexOf(x)).slice(1),T=w.match(/([^\"]*)"?\)/);null!=T&&(A=T[1])}if(null!=A){var E=o(A,a);E&&r({mode:"background",el:l[d],flags:E,engineSettings:n})}}for(d=0;d<u.length;d++){var k=u[d],D={};try{D.data=k.getAttribute("data"),D.dataSrc=k.getAttribute(I.vars.dataAttr)}catch(e){}var j=null!=D.data&&0===D.data.indexOf(a.domain),$=null!=D.dataSrc&&0===D.dataSrc.indexOf(a.domain);j?i(a,n,D.data,k):$&&i(a,n,D.dataSrc,k)}for(d=0;d<s.length;d++){var L=s[d],O={};try{O.src=L.getAttribute("src"),O.dataSrc=L.getAttribute(I.vars.dataAttr),O.rendered=L.getAttribute("data-holder-rendered")}catch(e){}var B=null!=O.src,R=null!=O.dataSrc&&0===O.dataSrc.indexOf(a.domain),H=null!=O.rendered&&"true"==O.rendered;B?0===O.src.indexOf(a.domain)?i(a,n,O.src,L):R&&(H?i(a,n,O.dataSrc,L):function(e,t,n,o,r){S(e,function(e){e||i(t,n,o,r)})}(O.src,a,n,O.dataSrc,L)):R&&i(a,n,O.dataSrc,L)}return this}},I={settings:{domain:"holder.js",images:"img",objects:"object",bgnodes:"body .holderjs",stylenodes:"head link.holderjs",stylesheets:[],themes:{gray:{background:"#EEEEEE",foreground:"#AAAAAA"},social:{background:"#3a5a97",foreground:"#FFFFFF"},industrial:{background:"#434A52",foreground:"#C2F200"},sky:{background:"#0D8FDB",foreground:"#FFFFFF"},vine:{background:"#39DBAC",foreground:"#1E292C"},lava:{background:"#F8591A",foreground:"#1C2846"}}},defaults:{size:10,units:"pt",scale:1/16},flags:{dimensions:{regex:/^(\d+)x(\d+)$/,output:function(e){var t=this.regex.exec(e);return{width:+t[1],height:+t[2]}}},fluid:{regex:/^([0-9]+%?)x([0-9]+%?)$/,output:function(e){var t=this.regex.exec(e);return{width:t[1],height:t[2]}}},colors:{regex:/(?:#|\^)([0-9a-f]{3,})\:(?:#|\^)([0-9a-f]{3,})/i,output:function(e){var t=this.regex.exec(e);return{foreground:"#"+t[2],background:"#"+t[1]}}},text:{regex:/text\:(.*)/,output:function(e){return this.regex.exec(e)[1].replace("\\/","/")}},font:{regex:/font\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},auto:{regex:/^auto$/},textmode:{regex:/textmode\:(.*)/,output:function(e){return this.regex.exec(e)[1]}},random:{regex:/^random$/},size:{regex:/size\:(\d+)/,output:function(e){return this.regex.exec(e)[1]}}}},B=function(){var e=null,t=null,n=null;return function(i){var o=i.root;if(I.setup.supportsSVG){var r=!1;(null==e||e.parentNode!==document.body)&&(r=!0),e=g(e,o.properties.width,o.properties.height),e.style.display="block",r&&(t=h("text",j),n=function(e){return document.createTextNode(e)}(null),p(t,{x:0}),t.appendChild(n),e.appendChild(t),document.body.appendChild(e),e.style.visibility="hidden",e.style.position="absolute",e.style.top="-100%",e.style.left="-100%");var a=o.children.holderTextGroup,s=a.properties;p(t,{y:s.font.size,style:T({"font-weight":s.font.weight,"font-size":s.font.size+s.font.units,"font-family":s.font.family})}),n.nodeValue=s.text;var l=t.getBBox(),c=Math.ceil(l.width/(o.properties.width*I.setup.lineWrapRatio)),u=s.text.split(" "),d=s.text.match(/\\n/g);c+=null==d?0:d.length,n.nodeValue=s.text.replace(/[ ]+/g,"");var f=t.getComputedTextLength(),m=l.width-f,v=Math.round(m/Math.max(1,u.length-1)),y=[];if(c>1){n.nodeValue="";for(var b=0;b<u.length;b++)if(0!==u[b].length){n.nodeValue=k(u[b]);var A=t.getBBox();y.push({text:u[b],width:A.width})}}return e.style.display="none",{spaceWidth:v,lineCount:c,boundingBox:l,words:y}}return!1}}(),R=function(){var e=h("canvas"),t=null;return function(n){null==t&&(t=e.getContext("2d"));var i=n.root;e.width=I.dpr(i.properties.width),e.height=I.dpr(i.properties.height),t.textBaseline="middle",t.fillStyle=i.children.holderBg.properties.fill,t.fillRect(0,0,I.dpr(i.children.holderBg.width),I.dpr(i.children.holderBg.height));var o=i.children.holderTextGroup;o.properties,t.font=o.properties.font.weight+" "+I.dpr(o.properties.font.size)+o.properties.font.units+" "+o.properties.font.family+", monospace",t.fillStyle=o.properties.fill;for(var r in o.children){var a=o.children[r];for(var s in a.children){var l=a.children[s],c=I.dpr(o.x+a.x+l.x),u=I.dpr(o.y+a.y+l.y+o.properties.leading/2);t.fillText(l.properties.text,c,u)}}return e.toDataURL("image/png")}}(),H=function(){if(t.XMLSerializer){var e=v(),n=g(null,0,0),i=h("rect",j);return n.appendChild(i),function(t,o){var r=t.root;g(n,r.properties.width,r.properties.height);for(var a=n.querySelectorAll("g"),s=0;s<a.length;s++)a[s].parentNode.removeChild(a[s]);var l=o.holderSettings.flags.holderURL,c="holder_"+(Number(new Date)+32768+(0|32768*Math.random())).toString(16),u=h("g",j),d=r.children.holderTextGroup,f=d.properties,v=h("g",j),y=d.textPositionData,b="#"+c+" text { "+T({fill:f.fill,"font-weight":f.font.weight,"font-family":f.font.family+", monospace","font-size":f.font.size+f.font.units})+" } ",A=e.createComment("\nSource URL: "+l+"\nCreated with Holder.js 2.6.0.\nLearn more at http://holderjs.com\n(c) 2012-2015 Ivan Malopinsky - http://imsky.co\n"),x=e.createCDATASection(b),w=n.querySelector("style");p(u,{id:c}),n.insertBefore(A,n.firstChild),w.appendChild(x),u.appendChild(i),u.appendChild(v),n.appendChild(u),p(i,{width:r.children.holderBg.width,height:r.children.holderBg.height,fill:r.children.holderBg.properties.fill}),d.y+=.8*y.boundingBox.height;for(var C in d.children){var E=d.children[C];for(var k in E.children){var S=E.children[k],N=d.x+E.x+S.x,D=d.y+E.y+S.y,$=h("text",j),L=document.createTextNode(null);p($,{x:N,y:D}),L.nodeValue=S.properties.text,$.appendChild(L),v.appendChild($)}}return"data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(m(n,o.engineSettings))))}}}();for(var M in I.flags)I.flags.hasOwnProperty(M)&&(I.flags[M].match=function(e){return e.match(this.regex)});I.setup={renderer:"html",debounce:100,ratio:1,supportsCanvas:!1,supportsSVG:!1,lineWrapRatio:.9,renderers:["html","canvas","svg"]},I.dpr=function(e){return e*I.setup.ratio},I.vars={preempted:!1,resizableImages:[],invisibleImages:{},invisibleId:0,visibilityCheckStarted:!1,debounceTimer:null,cache:{},dataAttr:"data-src"},function(){var e=1,n=1,i=h("canvas"),o=null;i.getContext&&-1!=i.toDataURL("image/png").indexOf("data:image/png")&&(I.setup.renderer="canvas",o=i.getContext("2d"),I.setup.supportsCanvas=!0),I.setup.supportsCanvas&&(e=t.devicePixelRatio||1,n=o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),I.setup.ratio=e/n,document.createElementNS&&document.createElementNS(j,"svg").createSVGRect&&(I.setup.renderer="svg",I.setup.supportsSVG=!0)}(),function(){I.vars.visibilityCheckStarted||(t.requestAnimationFrame(d),I.vars.visibilityCheckStarted=!0)}(),A&&A(function(){I.vars.preempted||O.run(),t.addEventListener?(t.addEventListener("resize",b,!1),t.addEventListener("orientationchange",b,!1)):t.attachEvent("onresize",b),"object"==typeof t.Turbolinks&&t.document.addEventListener("page:change",function(){O.run()})}),e.exports=O}).call(t,function(){return this}())},function(e){e.exports="undefined"!=typeof window&&function(e){function t(e){if(!x){if(!a.body)return o(t);for(x=!0;e=w.shift();)o(e)}}function n(e){(b||e.type===l||a[f]===d)&&(i(),t())}function i(){b?(a[y](m,n,c),e[y](l,n,c)):(a[p](v,n),e[p](u,n))}function o(e,t){setTimeout(e,+t>=0?t:1)}function r(e){x?o(e):w.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function e(){document.removeEventListener("DOMContentLoaded",e,!1),document.readyState="complete"},!1),document.readyState="loading");var a=e.document,s=a.documentElement,l="load",c=!1,u="on"+l,d="complete",f="readyState",h="attachEvent",p="detachEvent",g="addEventListener",m="DOMContentLoaded",v="onreadystatechange",y="removeEventListener",b=g in a,A=c,x=c,w=[];if(a[f]===d)o(t);else if(b)a[g](m,n,c),e[g](l,n,c);else{a[h](v,n),e[h](u,n);try{A=null==e.frameElement&&s}catch(e){}A&&A.doScroll&&function e(){if(!x){try{A.doScroll("left")}catch(t){return o(e,50)}i(),t()}}()}return r.version="1.4.0",r.isReady=function(){return x},r}(window)},function(e,t,n){var i=n(4),o=function(e){function t(e,t){for(var n in t)e[n]=t[n];return e}var n=1,o=i.defclass({constructor:function(e){n++,this.parent=null,this.children={},this.id=n,this.name="n"+n,null!=e&&(this.name=e),this.x=0,this.y=0,this.z=0,this.width=0,this.height=0},resize:function(e,t){null!=e&&(this.width=e),null!=t&&(this.height=t)},moveTo:function(e,t,n){this.x=null!=e?e:this.x,this.y=null!=t?t:this.y,this.z=null!=n?n:this.z},add:function(e){var t=e.name;if(null!=this.children[t])throw"SceneGraph: child with that name already exists: "+t;this.children[t]=e,e.parent=this}}),r=i(o,function(t){this.constructor=function(){t.constructor.call(this,"root"),this.properties=e}}),a=i(o,function(e){function n(n,i){if(e.constructor.call(this,n),this.properties={fill:"#000"},null!=i)t(this.properties,i);else if(null!=n&&"string"!=typeof n)throw"SceneGraph: invalid node name"}this.Group=i.extend(this,{constructor:n,type:"group"}),this.Rect=i.extend(this,{constructor:n,type:"rect"}),this.Text=i.extend(this,{constructor:function(e){n.call(this),this.properties.text=e},type:"text"})}),s=new r;return this.Shape=a,this.root=s,this};e.exports=o},function(e,t){(function(e){t.extend=function(e,t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);if(null!=t)for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);return n},t.cssProps=function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+":"+e[n]);return t.join(";")},t.encodeHtmlEntity=function(e){for(var t=[],n=0,i=e.length-1;i>=0;i--)n=e.charCodeAt(i),t.unshift(n>128?["&#",n,";"].join(""):e[i]);return t.join("")},t.getNodeArray=function(t){var n=null;return"string"==typeof t?n=document.querySelectorAll(t):e.NodeList&&t instanceof e.NodeList?n=t:e.Node&&t instanceof e.Node?n=[t]:e.HTMLCollection&&t instanceof e.HTMLCollection?n=t:t instanceof Array?n=t:null===t&&(n=[]),n},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t}}).call(t,function(){return this}())},function(e){var t=function(){},n=Array.prototype.slice,i=function(e,i){var o=t.prototype="function"==typeof e?e.prototype:e,r=new t,a=i.apply(r,n.call(arguments,2).concat(o));if("object"==typeof a)for(var s in a)r[s]=a[s];if(!r.hasOwnProperty("constructor"))return r;var l=r.constructor;return l.prototype=r,l};i.defclass=function(e){var t=e.constructor;return t.prototype=e,t},i.extend=function(e,t){return i(e,function(e){return this.uber=e,t})},e.exports=i}])}),function(e){"use strict";function t(e){return e.replace(/,/g,".").replace(/[^0-9\.]/g,"")}function n(e){return parseFloat(t(e))>=10}var i,o={bridge:null,version:"0.0.0",disabled:null,outdated:null,ready:null},r={},a=0,s={},l=0,c={},u=null,d=null,f=function(){var e,t,n,i,o="ZeroClipboard.swf" +;if(document.currentScript&&(i=document.currentScript.src));else{var r=document.getElementsByTagName("script");if("readyState"in r[0])for(e=r.length;e--&&("interactive"!==r[e].readyState||!(i=r[e].src)););else if("loading"===document.readyState)i=r[r.length-1].src;else{for(e=r.length;e--;){if(!(n=r[e].src)){t=null;break}if(n=n.split("#")[0].split("?")[0],n=n.slice(0,n.lastIndexOf("/")+1),null==t)t=n;else if(t!==n){t=null;break}}null!==t&&(i=t)}}return i&&(i=i.split("#")[0].split("?")[0],o=i.slice(0,i.lastIndexOf("/")+1)+o),o}(),h=function(){var e=/\-([a-z])/g,t=function(e,t){return t.toUpperCase()};return function(n){return n.replace(e,t)}}(),p=function(t,n){var i,o;return e.getComputedStyle?i=e.getComputedStyle(t,null).getPropertyValue(n):(o=h(n),i=t.currentStyle?t.currentStyle[o]:t.style[o]),"cursor"!==n||i&&"auto"!==i||"a"!==t.tagName.toLowerCase()?i:"pointer"},g=function(t){t||(t=e.event);var n;this!==e?n=this:t.target?n=t.target:t.srcElement&&(n=t.srcElement),R.activate(n)},m=function(e,t,n){e&&1===e.nodeType&&(e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n))},v=function(e,t,n){e&&1===e.nodeType&&(e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent&&e.detachEvent("on"+t,n))},y=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)||e.classList.add(t),e;if(t&&"string"==typeof t){var n=(t||"").split(/\s+/);if(1===e.nodeType)if(e.className){for(var i=" "+e.className+" ",o=e.className,r=0,a=n.length;a>r;r++)i.indexOf(" "+n[r]+" ")<0&&(o+=" "+n[r]);e.className=o.replace(/^\s+|\s+$/g,"")}else e.className=t}return e},b=function(e,t){if(!e||1!==e.nodeType)return e;if(e.classList)return e.classList.contains(t)&&e.classList.remove(t),e;if(t&&"string"==typeof t||void 0===t){var n=(t||"").split(/\s+/);if(1===e.nodeType&&e.className)if(t){for(var i=(" "+e.className+" ").replace(/[\n\t]/g," "),o=0,r=n.length;r>o;o++)i=i.replace(" "+n[o]+" "," ");e.className=i.replace(/^\s+|\s+$/g,"")}else e.className=""}return e},A=function(){var e,t,n,i=1;return"function"==typeof document.body.getBoundingClientRect&&(e=document.body.getBoundingClientRect(),t=e.right-e.left,n=document.body.offsetWidth,i=Math.round(t/n*100)/100),i},x=function(t,n){var i={left:0,top:0,width:0,height:0,zIndex:S(n)-1};if(t.getBoundingClientRect){var o,r,a,s=t.getBoundingClientRect();"pageXOffset"in e&&"pageYOffset"in e?(o=e.pageXOffset,r=e.pageYOffset):(a=A(),o=Math.round(document.documentElement.scrollLeft/a),r=Math.round(document.documentElement.scrollTop/a));var l=document.documentElement.clientLeft||0,c=document.documentElement.clientTop||0;i.left=s.left+o-l,i.top=s.top+r-c,i.width="width"in s?s.width:s.right-s.left,i.height="height"in s?s.height:s.bottom-s.top}return i},w=function(e,t){return null==t||t&&!0===t.cacheBust&&!0===t.useNoCache?(-1===e.indexOf("?")?"?":"&")+"noCache="+(new Date).getTime():""},C=function(t){var n,i,o,r=[],a=[],s=[];if(t.trustedOrigins&&("string"==typeof t.trustedOrigins?a.push(t.trustedOrigins):"object"==typeof t.trustedOrigins&&"length"in t.trustedOrigins&&(a=a.concat(t.trustedOrigins))),t.trustedDomains&&("string"==typeof t.trustedDomains?a.push(t.trustedDomains):"object"==typeof t.trustedDomains&&"length"in t.trustedDomains&&(a=a.concat(t.trustedDomains))),a.length)for(n=0,i=a.length;i>n;n++)if(a.hasOwnProperty(n)&&a[n]&&"string"==typeof a[n]){if(!(o=j(a[n])))continue;if("*"===o){s=[o];break}s.push.apply(s,[o,"//"+o,e.location.protocol+"//"+o])}return s.length&&r.push("trustedOrigins="+encodeURIComponent(s.join(","))),"string"==typeof t.jsModuleId&&t.jsModuleId&&r.push("jsModuleId="+encodeURIComponent(t.jsModuleId)),r.join("&")},T=function(e,t,n){if("function"==typeof t.indexOf)return t.indexOf(e,n);var i,o=t.length;for(void 0===n?n=0:0>n&&(n=o+n),i=n;o>i;i++)if(t.hasOwnProperty(i)&&t[i]===e)return i;return-1},E=function(e){if("string"==typeof e)throw new TypeError("ZeroClipboard doesn't accept query strings.");return e.length?e:[e]},k=function(t,n,i,o){o?e.setTimeout(function(){t.apply(n,i)},0):t.apply(n,i)},S=function(e){var t,n;return e&&("number"==typeof e&&e>0?t=e:"string"==typeof e&&(n=parseInt(e,10))&&!isNaN(n)&&n>0&&(t=n)),t||("number"==typeof F.zIndex&&F.zIndex>0?t=F.zIndex:"string"==typeof F.zIndex&&(n=parseInt(F.zIndex,10))&&!isNaN(n)&&n>0&&(t=n)),t||0},N=function(e,t){if(e&&!1!==t&&"undefined"!=typeof console&&console&&(console.warn||console.log)){var n="`"+e+"` is deprecated. See docs for more info:\n https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";console.warn?console.warn(n):console.log(n)}},D=function(){var e,t,n,i,o,r=arguments[0]||{};for(e=1,t=arguments.length;t>e;e++)if(null!=(n=arguments[e]))for(i in n)if(n.hasOwnProperty(i)){if(r[i],o=n[i],r===o)continue;void 0!==o&&(r[i]=o)}return r},j=function(e){if(null==e||""===e)return null;if(""===(e=e.replace(/^\s+|\s+$/g,"")))return null;var t=e.indexOf("//");e=-1===t?e:e.slice(t+2);var n=e.indexOf("/");return e=-1===n?e:-1===t||0===n?null:e.slice(0,n),e&&".swf"===e.slice(-4).toLowerCase()?null:e||null},$=function(){var e=function(e,t){var n,i,o;if(null!=e&&"*"!==t[0]&&("string"==typeof e&&(e=[e]),"object"==typeof e&&"length"in e))for(n=0,i=e.length;i>n;n++)if(e.hasOwnProperty(n)&&(o=j(e[n]))){if("*"===o){t.length=0,t.push("*");break}-1===T(o,t)&&t.push(o)}},t={always:"always",samedomain:"sameDomain",never:"never"};return function(n,i){var o,r=i.allowScriptAccess;if("string"==typeof r&&(o=r.toLowerCase())&&/^always|samedomain|never$/.test(o))return t[o];var a=j(i.moviePath);null===a&&(a=n);var s=[];e(i.trustedOrigins,s),e(i.trustedDomains,s);var l=s.length;if(l>0){if(1===l&&"*"===s[0])return"always";if(-1!==T(n,s))return 1===l&&n===a?"sameDomain":"always"}return"never"}}(),L=function(e){if(null==e)return[];if(Object.keys)return Object.keys(e);var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t},O=function(e){if(e)for(var t in e)e.hasOwnProperty(t)&&delete e[t];return e},I=function(){try{return document.activeElement}catch(e){}return null},B=function(){var e=!1;if("boolean"==typeof o.disabled)e=!1===o.disabled;else{if("function"==typeof ActiveXObject)try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(e=!0)}catch(e){}!e&&navigator.mimeTypes["application/x-shockwave-flash"]&&(e=!0)}return e},R=function(e,t){return this instanceof R?(this.id=""+a++,s[this.id]={instance:this,elements:[],handlers:{}},e&&this.clip(e),void 0!==t&&(N("new ZeroClipboard(elements, options)",F.debug),R.config(t)),this.options=R.config(),"boolean"!=typeof o.disabled&&(o.disabled=!B()),void(!1===o.disabled&&!0!==o.outdated&&null===o.bridge&&(o.outdated=!1,o.ready=!1,P()))):new R(e,t)};R.prototype.setText=function(e){return e&&""!==e&&(r["text/plain"]=e,!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setText?o.bridge.setText(e):o.ready=!1),this},R.prototype.setSize=function(e,t){return!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e,t):o.ready=!1,this};var H=function(e){!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setHandCursor?o.bridge.setHandCursor(e):o.ready=!1};R.prototype.destroy=function(){this.unclip(),this.off(),delete s[this.id]};var M=function(){var e,t,n,i=[],o=L(s);for(e=0,t=o.length;t>e;e++)(n=s[o[e]].instance)&&n instanceof R&&i.push(n);return i};R.version="1.3.5";var F={swfPath:f,trustedDomains:e.location.host?[e.location.host]:[],cacheBust:!0,forceHandCursor:!1,zIndex:999999999,debug:!0,title:null,autoActivate:!0};R.config=function(e){if("object"==typeof e&&null!==e&&D(F,e),"string"!=typeof e||!e){var t={};for(var n in F)F.hasOwnProperty(n)&&(t[n]="object"==typeof F[n]&&null!==F[n]?"length"in F[n]?F[n].slice(0):D({},F[n]):F[n]);return t}return F.hasOwnProperty(e)?F[e]:void 0},R.destroy=function(){R.deactivate();for(var e in s)if(s.hasOwnProperty(e)&&s[e]){var t=s[e].instance;t&&"function"==typeof t.destroy&&t.destroy()}var n=z(o.bridge);n&&n.parentNode&&(n.parentNode.removeChild(n),o.ready=null,o.bridge=null)},R.activate=function(e){i&&(b(i,F.hoverClass),b(i,F.activeClass)),i=e,y(e,F.hoverClass),_();var t=F.title||e.getAttribute("title");if(t){var n=z(o.bridge);n&&n.setAttribute("title",t)}var r=!0===F.forceHandCursor||"pointer"===p(e,"cursor");H(r)},R.deactivate=function(){var e=z(o.bridge);e&&(e.style.left="0px",e.style.top="-9999px",e.removeAttribute("title")),i&&(b(i,F.hoverClass),b(i,F.activeClass),i=null)};var P=function(){var t,n,i=document.getElementById("global-zeroclipboard-html-bridge");if(!i){var r=R.config();r.jsModuleId="string"==typeof u&&u||"string"==typeof d&&d||null;var a=$(e.location.host,F),s=C(r),l=F.moviePath+w(F.moviePath,F),c=' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%"> <param name="movie" value="'+l+'"/> <param name="allowScriptAccess" value="'+a+'"/> <param name="scale" value="exactfit"/> <param name="loop" value="false"/> <param name="menu" value="false"/> <param name="quality" value="best" /> <param name="bgcolor" value="#ffffff"/> <param name="wmode" value="transparent"/> <param name="flashvars" value="'+s+'"/> <embed src="'+l+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="100%" height="100%" name="global-zeroclipboard-flash-bridge" allowScriptAccess="'+a+'" allowFullScreen="false" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+s+'" scale="exactfit"> </embed> </object>';i=document.createElement("div"),i.id="global-zeroclipboard-html-bridge",i.setAttribute("class","global-zeroclipboard-container"),i.style.position="absolute",i.style.left="0px",i.style.top="-9999px",i.style.width="15px",i.style.height="15px",i.style.zIndex=""+S(F.zIndex),document.body.appendChild(i),i.innerHTML=c}t=document["global-zeroclipboard-flash-bridge"],t&&(n=t.length)&&(t=t[n-1]),o.bridge=t||i.children[0].lastElementChild},z=function(e){for(var t=/^OBJECT|EMBED$/,n=e&&e.parentNode;n&&t.test(n.nodeName)&&n.parentNode;)n=n.parentNode;return n||null},_=function(){if(i){var e=x(i,F.zIndex),t=z(o.bridge);t&&(t.style.top=e.top+"px",t.style.left=e.left+"px",t.style.width=e.width+"px",t.style.height=e.height+"px",t.style.zIndex=e.zIndex+1),!0===o.ready&&o.bridge&&"function"==typeof o.bridge.setSize?o.bridge.setSize(e.width,e.height):o.ready=!1}return this};R.prototype.on=function(e,t){var n,i,r,a={},l=s[this.id]&&s[this.id].handlers;if("string"==typeof e&&e)r=e.toLowerCase().split(/\s+/);else if("object"==typeof e&&e&&void 0===t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.on(n,e[n]);if(r&&r.length){for(n=0,i=r.length;i>n;n++)e=r[n].replace(/^on/,""),a[e]=!0,l[e]||(l[e]=[]),l[e].push(t);a.noflash&&o.disabled&&U.call(this,"noflash",{}),a.wrongflash&&o.outdated&&U.call(this,"wrongflash",{flashVersion:o.version}),a.load&&o.ready&&U.call(this,"load",{flashVersion:o.version})}return this},R.prototype.off=function(e,t){var n,i,o,r,a,l=s[this.id]&&s[this.id].handlers;if(0===arguments.length)r=L(l);else if("string"==typeof e&&e)r=e.split(/\s+/);else if("object"==typeof e&&e&&void 0===t)for(n in e)e.hasOwnProperty(n)&&"string"==typeof n&&n&&"function"==typeof e[n]&&this.off(n,e[n]);if(r&&r.length)for(n=0,i=r.length;i>n;n++)if(e=r[n].toLowerCase().replace(/^on/,""),(a=l[e])&&a.length)if(t)for(o=T(t,a);-1!==o;)a.splice(o,1),o=T(t,a,o);else l[e].length=0;return this},R.prototype.handlers=function(e){var t,n=null,i=s[this.id]&&s[this.id].handlers;if(i){if("string"==typeof e&&e)return i[e]?i[e].slice(0):null;n={};for(t in i)i.hasOwnProperty(t)&&i[t]&&(n[t]=i[t].slice(0))}return n};var q=function(t,n,i,o){var r=s[this.id]&&s[this.id].handlers[t];if(r&&r.length){var a,l,c,u=n||this;for(a=0,l=r.length;l>a;a++)c=r[a],n=u,"string"==typeof c&&"function"==typeof e[c]&&(c=e[c]),"object"==typeof c&&c&&"function"==typeof c.handleEvent&&(n=c,c=c.handleEvent),"function"==typeof c&&k(c,n,i,o)}return this};R.prototype.clip=function(e){e=E(e);for(var t=0;t<e.length;t++)if(e.hasOwnProperty(t)&&e[t]&&1===e[t].nodeType){e[t].zcClippingId?-1===T(this.id,c[e[t].zcClippingId])&&c[e[t].zcClippingId].push(this.id):(e[t].zcClippingId="zcClippingId_"+l++,c[e[t].zcClippingId]=[this.id],!0===F.autoActivate&&m(e[t],"mouseover",g));var n=s[this.id].elements;-1===T(e[t],n)&&n.push(e[t])}return this},R.prototype.unclip=function(e){var t=s[this.id];if(t){var n,i=t.elements;e=void 0===e?i.slice(0):E(e);for(var o=e.length;o--;)if(e.hasOwnProperty(o)&&e[o]&&1===e[o].nodeType){for(n=0;-1!==(n=T(e[o],i,n));)i.splice(n,1);var r=c[e[o].zcClippingId];if(r){for(n=0;-1!==(n=T(this.id,r,n));)r.splice(n,1);0===r.length&&(!0===F.autoActivate&&v(e[o],"mouseover",g),delete e[o].zcClippingId)}}}return this},R.prototype.elements=function(){var e=s[this.id];return e&&e.elements?e.elements.slice(0):[]};var W=function(e){var t,n,i,o,r,a=[];if(e&&1===e.nodeType&&(t=e.zcClippingId)&&c.hasOwnProperty(t)&&(n=c[t])&&n.length)for(i=0,o=n.length;o>i;i++)(r=s[n[i]].instance)&&r instanceof R&&a.push(r);return a};F.hoverClass="zeroclipboard-is-hover",F.activeClass="zeroclipboard-is-active",F.trustedOrigins=null,F.allowScriptAccess=null,F.useNoCache=!0,F.moviePath="ZeroClipboard.swf",R.detectFlashSupport=function(){return N("ZeroClipboard.detectFlashSupport",F.debug),B()},R.dispatch=function(e,t){if("string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");if(n)for(var o=i&&!0===F.autoActivate?W(i):M(),r=0,a=o.length;a>r;r++)U.call(o[r],n,t)}},R.prototype.setHandCursor=function(e){return N("ZeroClipboard.prototype.setHandCursor",F.debug),e="boolean"==typeof e?e:!!e,H(e),F.forceHandCursor=e,this},R.prototype.reposition=function(){return N("ZeroClipboard.prototype.reposition",F.debug),_()},R.prototype.receiveEvent=function(e,t){if(N("ZeroClipboard.prototype.receiveEvent",F.debug),"string"==typeof e&&e){var n=e.toLowerCase().replace(/^on/,"");n&&U.call(this,n,t)}},R.prototype.setCurrent=function(e){return N("ZeroClipboard.prototype.setCurrent",F.debug),R.activate(e),this},R.prototype.resetBridge=function(){return N("ZeroClipboard.prototype.resetBridge",F.debug),R.deactivate(),this},R.prototype.setTitle=function(e){if(N("ZeroClipboard.prototype.setTitle",F.debug),e=e||F.title||i&&i.getAttribute("title")){var t=z(o.bridge);t&&t.setAttribute("title",e)}return this},R.setDefaults=function(e){N("ZeroClipboard.setDefaults",F.debug),R.config(e)},R.prototype.addEventListener=function(e,t){return N("ZeroClipboard.prototype.addEventListener",F.debug),this.on(e,t)},R.prototype.removeEventListener=function(e,t){return N("ZeroClipboard.prototype.removeEventListener",F.debug),this.off(e,t)},R.prototype.ready=function(){return N("ZeroClipboard.prototype.ready",F.debug),!0===o.ready};var U=function(e,a){e=e.toLowerCase().replace(/^on/,"");var s=a&&a.flashVersion&&t(a.flashVersion)||null,l=i,c=!0;switch(e){case"load":if(s){if(!n(s))return void U.call(this,"onWrongFlash",{flashVersion:s});o.outdated=!1,o.ready=!0,o.version=s}break;case"wrongflash":s&&!n(s)&&(o.outdated=!0,o.ready=!1,o.version=s);break;case"mouseover":y(l,F.hoverClass);break;case"mouseout":!0===F.autoActivate&&R.deactivate();break;case"mousedown":y(l,F.activeClass);break;case"mouseup":b(l,F.activeClass);break;case"datarequested":if(l){var u=l.getAttribute("data-clipboard-target"),d=u?document.getElementById(u):null;if(d){var f=d.value||d.textContent||d.innerText;f&&this.setText(f)}else{var h=l.getAttribute("data-clipboard-text");h&&this.setText(h)}}c=!1;break;case"complete":O(r),l&&l!==I()&&l.focus&&l.focus()}return q.call(this,e,l,[this,a],c)};"function"==typeof define&&define.amd?define(["require","exports","module"],function(e,t,n){return u=n&&n.id||null,R}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports&&"function"==typeof e.require?(d=module.id||null,module.exports=R):e.ZeroClipboard=R}(function(){return this}());var anchors=new AnchorJS;!function(e){"use strict";e(function(){var t=e(window),n=e(document.body);n.scrollspy({target:".docs-sidebar"}),t.on("load",function(){n.scrollspy("refresh")}),e(".docs-container [href=#]").click(function(e){e.preventDefault()}),setTimeout(function(){var t=e(".docs-sidebar");t.affix({offset:{top:function(){var n=t.offset().top,i=parseInt(t.children(0).css("margin-top"),10),o=e(".docs-nav").height();return this.top=n-o-i},bottom:function(){return this.bottom=e(".docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){e(".bs-top").affix()},100),function(){var t=e("#bs-theme-stylesheet"),n=e(".docs-theme-toggle"),i=function(){t.attr("href",t.attr("data-href")),n.text("禁用主题预览"),localStorage.setItem("previewTheme",!0)};localStorage.getItem("previewTheme")&&i(),n.click(function(){var e=t.attr("href");e&&0!==e.indexOf("data")?(t.attr("href",""),n.text("主题预览"),localStorage.removeItem("previewTheme")):i()})}(),e(".tooltip-demo").tooltip({selector:'[data-toggle="tooltip"]',container:"body"}),e(".popover-demo").popover({selector:'[data-toggle="popover"]',container:"body"}),e(".tooltip-test").tooltip(),e(".popover-test").popover(),e(".docs-popover").popover(),e("#loading-example-btn").on("click",function(){var t=e(this);t.button("loading"),setTimeout(function(){t.button("reset")},3e3)}),e("#exampleModal").on("show.bs.modal",function(t){var n=e(t.relatedTarget),i=n.data("whatever"),o=e(this);o.find(".modal-title").text("New message to "+i),o.find(".modal-body input").val(i)}),e(".docs-activate-animated-progressbar").on("click",function(){e(this).siblings(".progress").find(".progress-bar-striped").toggleClass("active")}),ZeroClipboard.config({moviePath:"source/ZeroClipboard.swf",hoverClass:"btn-clipboard-hover"}),e(".highlight").each(function(){e(this).before('<div class="zero-clipboard"><span class="btn-clipboard">复制</span></div>')});var i=new ZeroClipboard(e(".btn-clipboard")),o=e("#global-zeroclipboard-html-bridge");i.on("load",function(){o.data("placement","top").attr("title","复制到剪贴板").tooltip(),i.on("dataRequested",function(t){var n=e(this).parent().nextAll(".highlight").first();t.setText(n.text())}),i.on("complete",function(){o.attr("title","复制成功!").tooltip("fixTitle").tooltip("show").attr("title","复制到剪贴板").tooltip("fixTitle")})}),i.on("noflash wrongflash",function(){e(".zero-clipboard").remove(),ZeroClipboard.destroy()})})}(jQuery),function(){"use strict";anchors.options.placement="left",anchors.add(".docs-section > h1, .docs-section > h2, .docs-section > h3, .docs-section > h4, .docs-section > h5")}(),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e;return function e(t,n,i){function o(a,s){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!s&&l)return l(a,!0);if(r)return r(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){return o(t[a][1][e]||e)},u,u.exports,e,t,n,i)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<i.length;a++)o(i[a]);return o}({1:[function(e,t,n){function i(e,t){for(;e&&e.nodeType!==o;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}var o=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=i},{}],2:[function(e,t,n){function i(e,t,n,i,r){var a=o.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function o(e,t,n,i){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&i.call(e,n)}}var r=e("./closest");t.exports=i},{"./closest":1}],3:[function(e,t,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},{}],4:[function(e,t,n){function i(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!s.string(t))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(e))return o(e,t,n);if(s.nodeList(e))return r(e,t,n);if(s.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function o(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function r(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var s=e("./is"),l=e("delegate");t.exports=i},{"./is":3,delegate:2}],5:[function(e,t,n){function i(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var i=window.getSelection(),o=document.createRange();o.selectNodeContents(e),i.removeAllRanges(),i.addRange(o),t=i.toString()}return t}t.exports=i},{}],6:[function(e,t,n){function i(){}i.prototype={on:function(e,t,n){var i=this.e||(this.e={});return(i[e]||(i[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function i(){o.off(e,i),t.apply(n,arguments)}var o=this;return i._=t,this.on(e,i,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),i=0,o=n.length;for(i;i<o;i++)n[i].fn.apply(n[i].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),i=n[e],o=[];if(i&&t)for(var r=0,a=i.length;r<a;r++)i[r].fn!==t&&i[r].fn._!==t&&o.push(i[r]);return o.length?n[e]=o:delete n[e],this}},t.exports=i},{}],7:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","select"],r);else if(void 0!==i)r(n,t("select"));else{var a={exports:{}};r(a,o.select),o.clipboardAction=a.exports}}(this,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(e){return e&&e.__esModule?e:{default:e}}(t),o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),a=function(){function e(t){n(this,e),this.resolveOptions(t),this.initSelection()}return r(e,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":o(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=a})},{select:5}],8:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if(void 0!==i)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=a.exports}}(this,function(e,t,n,i){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var c=o(t),u=o(n),d=o(i),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),p=function(e){function t(e,n){r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.resolveOptions(n),i.listenClick(e),i}return s(t,e),h(t,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===f(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,d.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new c.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return l("action",e)}},{key:"defaultTarget",value:function(e){var t=l("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return l("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}(u.default);e.exports=p})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}); \ No newline at end of file diff --git a/static/doc/static/server/controllers/base.js.html b/static/doc/static/server/controllers/base.js.html index 960f78ff..743b44d8 100644 --- a/static/doc/static/server/controllers/base.js.html +++ b/static/doc/static/server/controllers/base.js.html @@ -106,6 +106,9 @@ class baseController { return this.$user.role; } + getUsername() { + return this.$user.username; + } /** * * @param {*} id type对应的id diff --git a/static/doc/static/server/controllers/follow.js.html b/static/doc/static/server/controllers/follow.js.html index d97c8319..3548a736 100644 --- a/static/doc/static/server/controllers/follow.js.html +++ b/static/doc/static/server/controllers/follow.js.html @@ -114,7 +114,7 @@ class followController extends baseController { /** * 添加关注 * @interface /follow/add - * @method POST + * @method GET * @category follow * @foldnumber 10 * @param {Number} uid 用户id @@ -131,7 +131,8 @@ class followController extends baseController { uid: 'number', projectid: 'number', projectname: 'string', - icon: 'string' + icon: 'string', + color: 'string' }); if (!params.uid) { @@ -153,17 +154,22 @@ class followController extends baseController { if (!params.icon) { return ctx.body = yapi.commons.resReturn(null, 400, '项目图标标志不能为空'); } + if (!params.color) { + return ctx.body = yapi.commons.resReturn(null, 400, '项目颜色不能为空'); + } let data = { uid: params.uid, projectid: params.projectid, projectname: params.projectname, - icon: params.icon + icon: params.icon, + color: params.color + }; try { let result = await this.Model.save(data); - result = yapi.commons.fieldSelect(result, ['_id', 'uid', 'projectid', 'projectname', 'icon']); + result = yapi.commons.fieldSelect(result, ['_id', 'uid', 'projectid', 'projectname', 'icon', 'color']); ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); diff --git a/static/doc/static/server/controllers/log.js.html b/static/doc/static/server/controllers/log.js.html index 688233b8..5a0d2b5f 100644 --- a/static/doc/static/server/controllers/log.js.html +++ b/static/doc/static/server/controllers/log.js.html @@ -59,7 +59,7 @@ class logController extends baseController { * @method GET * @category log * @foldnumber 10 - * @param {Number} uid 用户id, 不能为空 + * @param {Number} typeid 动态类型id, 不能为空 * @param {Number} [page] 分页页码 * @param {Number} [limit] 分页大小 * @returns {Object} @@ -69,15 +69,17 @@ class logController extends baseController { async list(ctx) { let typeid = ctx.request.query.typeid, page = ctx.request.query.page || 1, - limit = ctx.request.query.limit || 10; - + limit = ctx.request.query.limit || 10, + type = ctx.request.query.type; if (!typeid) { return ctx.body = yapi.commons.resReturn(null, 400, 'typeid不能为空'); } - + if(!type) { + return ctx.body = yapi.commons.resReturn(null, 400, 'type不能为空'); + } try { - let result = await this.Model.listWithPaging(typeid, page, limit); - let count = await this.Model.listCount(typeid); + let result = await this.Model.listWithPaging(typeid,type, page, limit); + let count = await this.Model.listCount(typeid,type); ctx.body = yapi.commons.resReturn({ total: Math.ceil(count / limit), diff --git a/static/doc/static/server/controllers/project.js.html b/static/doc/static/server/controllers/project.js.html index b6b4168d..e22d55da 100644 --- a/static/doc/static/server/controllers/project.js.html +++ b/static/doc/static/server/controllers/project.js.html @@ -32,6 +32,7 @@ import interfaceModel from '../models/interface.js'; import groupModel from '../models/group'; import commons from '../utils/commons.js'; import userModel from '../models/user.js'; +import logModel from '../models/log.js'; import Mock from 'mockjs'; const send = require('koa-send'); @@ -41,6 +42,7 @@ class projectController extends baseController { super(ctx); this.Model = yapi.getInst(projectModel); this.groupModel = yapi.getInst(groupModel); + this.logModel = yapi.getInst(logModel); } handleBasepath(basepath) { @@ -146,6 +148,14 @@ class projectController extends baseController { try { let result = await this.Model.save(data); + let username = this.getUsername(); + await this.logModel.save({ + content: `用户${username}添加了项目${params.name}`, + type: 'project', + uid: this.getUid(), + username: username, + typeid: params.group_id + }); ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); @@ -189,6 +199,14 @@ class projectController extends baseController { try { let result = await this.Model.addMember(params.id, userdata); + let username = this.getUsername(); + await this.logModel.save({ + content: `用户${username}添加了项目成员${userdata.username}`, + type: 'project', + uid: this.getUid(), + username: username, + typeid: params.id + }); ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); @@ -226,6 +244,19 @@ class projectController extends baseController { try { let result = await this.Model.delMember(params.id, params.member_uid); + let username = this.getUsername(); + let project = await this.Model.get(params.id); + for(let i in project.members){ + if(i.uid === params.member_uid){ + await this.logModel.save({ + content: `用户${username}删除了项目${project.name}中的成员${i.username}`, + type: 'project', + uid: this.getUid(), + username: username, + typeid: params.id + }); + } + } ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); @@ -392,6 +423,21 @@ class projectController extends baseController { try { let result = await groupInst.changeMemberRole(params.id, params.member_uid, params.role); + + let username = this.getUsername(); + let project = await this.Model.get(params.id); + for(let i in project.members){ + if(i.uid === params.member_uid){ + await this.logModel.save({ + content: `用户${username}修改了项目${project.name}中成员${i.username}的角色为${params.role}`, + type: 'project', + uid: this.getUid(), + username: username, + typeid: params.id + }); + } + } + ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); @@ -483,6 +529,16 @@ class projectController extends baseController { if (params.env) data.env = params.env; let result = await this.Model.up(id, data); + + let username = this.getUsername(); + await this.logModel.save({ + content: `用户${username}更新了项目${params.name}`, + type: 'project', + uid: this.getUid(), + username: username, + typeid: id + }); + ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); @@ -550,6 +606,7 @@ class projectController extends baseController { * @method GET * @category project * @foldnumber 10 + * @author wenbo.dong * @param {String} project_id */ async download(ctx) { From 5c91366f3a25bebb39ee89a82498bf70e8a5d920 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 16:30:30 +0800 Subject: [PATCH 05/14] fix: col list bug --- .../Interface/InterfaceList/mockEditor.js | 13 ++++++++----- package.json | 1 + server/controllers/interfaceCol.js | 3 +-- server/models/interface.js | 18 ++++++++++++++++-- server/models/project.js | 2 +- server_dist/controllers/interfaceCol.js | 19 +++++++++---------- server_dist/models/interface.js | 18 ++++++++++++++++-- server_dist/models/project.js | 2 +- static/dev.html | 2 +- 9 files changed, 54 insertions(+), 24 deletions(-) diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js index fd0bc4b9..90332287 100644 --- a/client/containers/Project/Interface/InterfaceList/mockEditor.js +++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js @@ -1,9 +1,11 @@ var ace = require('brace'), Mock = require('mockjs') -require('brace/mode/json'); +require('brace/mode/javascript'); require('brace/theme/xcode'); require("brace/ext/language_tools.js"); -require("brace/snippets/json.js") +require("brace/snippets/javascript.js"); + +var json5 = require('json5'); var langTools = ace.acequire("ace/ext/language_tools"), editor, @@ -70,7 +72,7 @@ function run(options) { editor = ace.edit(container) editor.$blockScrolling = Infinity; - editor.getSession().setMode('ace/mode/json'); + editor.getSession().setMode('ace/mode/javascript'); editor.setTheme('ace/theme/xcode'); editor.setOptions({ enableBasicAutocompletion: true, @@ -85,7 +87,7 @@ function run(options) { if (typeof data === 'string') { editor.setValue(data); } else if (typeof data === 'object') { - editor.setValue(JSON.stringify(data, null, " ")) + editor.setValue(json5.stringify(data, null, " ")) } }, editor: editor @@ -122,7 +124,8 @@ function run(options) { function handleJson(json) { var curData = mockEditor.curData; try { - var obj = JSON.parse(json); + var obj = json5.parse(json); + curData.text = json; curData.format = true; curData.jsonData = obj; curData.mockData = Mock.mock(obj); diff --git a/package.json b/package.json index 8d42c00d..b148cc87 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "gulp-babel": "^6.1.2", "gulp-watch": "^4.3.11", "json2html": "0.0.8", + "json5": "^0.5.1", "jsoneditor": "^5.9.3", "jsonwebtoken": "^7.4.1", "koa": "^2.0.0", diff --git a/server/controllers/interfaceCol.js b/server/controllers/interfaceCol.js index 33e43ea0..6e372b2e 100644 --- a/server/controllers/interfaceCol.js +++ b/server/controllers/interfaceCol.js @@ -23,8 +23,7 @@ class interfaceColController extends baseController{ async list(ctx){ try { let id = ctx.query.project_id; - let inst = this.colModel(interfaceColModel); - let result = await inst.list(id); + let result = await this.colModel.list(id); ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); diff --git a/server/models/interface.js b/server/models/interface.js index 174cfb9f..441e7125 100644 --- a/server/models/interface.js +++ b/server/models/interface.js @@ -33,7 +33,7 @@ class interfaceModel extends baseModel { }], req_body_type: { type: String, - enum: ['form', 'json', 'text', 'xml'] + enum: ['form', 'json', 'text', 'file'] }, req_body_form: [{ name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: { @@ -42,12 +42,26 @@ class interfaceModel extends baseModel { default: "1" } }], + req_body_json_doc: [{ + json_path: String, desc: String,required:{ + type:String, + enum: ["1", "0"], + default: "1" + } + }], req_body_other: String, res_body_type: { type: String, enum: ['json', 'text', 'xml'] }, - res_body: String + res_body: String, + res_body_json_doc: [{ + json_path: String, desc: String,required:{ + type:String, + enum: ["1", "0"], + default: "1" + } + }] }; } diff --git a/server/models/project.js b/server/models/project.js index ea3676d9..578589a3 100644 --- a/server/models/project.js +++ b/server/models/project.js @@ -60,7 +60,7 @@ class projectModel extends baseModel { list(group_id, auth) { let params = {group_id: group_id} if(!auth) params.project_type = 'public'; - return this.model.find(params).sort({ _id: -1 }).exec(); + return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec(); } listWithPaging(group_id, page, limit) { diff --git a/server_dist/controllers/interfaceCol.js b/server_dist/controllers/interfaceCol.js index 2ec941c0..712693a3 100644 --- a/server_dist/controllers/interfaceCol.js +++ b/server_dist/controllers/interfaceCol.js @@ -75,36 +75,35 @@ var interfaceColController = function (_baseController) { key: 'list', value: function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) { - var id, inst, result; + var id, result; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; id = ctx.query.project_id; - inst = this.colModel(_interfaceCol2.default); - _context.next = 5; - return inst.list(id); + _context.next = 4; + return this.colModel.list(id); - case 5: + case 4: result = _context.sent; ctx.body = _yapi2.default.commons.resReturn(result); - _context.next = 12; + _context.next = 11; break; - case 9: - _context.prev = 9; + case 8: + _context.prev = 8; _context.t0 = _context['catch'](0); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message); - case 12: + case 11: case 'end': return _context.stop(); } } - }, _callee, this, [[0, 9]]); + }, _callee, this, [[0, 8]]); })); function list(_x) { diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js index 44434ca6..de19d3f0 100644 --- a/server_dist/models/interface.js +++ b/server_dist/models/interface.js @@ -72,7 +72,7 @@ var interfaceModel = function (_baseModel) { }], req_body_type: { type: String, - enum: ['form', 'json', 'text', 'xml'] + enum: ['form', 'json', 'text', 'file'] }, req_body_form: [{ name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: { @@ -81,12 +81,26 @@ var interfaceModel = function (_baseModel) { default: "1" } }], + req_body_json_doc: [{ + json_path: String, desc: String, required: { + type: String, + enum: ["1", "0"], + default: "1" + } + }], req_body_other: String, res_body_type: { type: String, enum: ['json', 'text', 'xml'] }, - res_body: String + res_body: String, + res_body_json_doc: [{ + json_path: String, desc: String, required: { + type: String, + enum: ["1", "0"], + default: "1" + } + }] }; } }, { diff --git a/server_dist/models/project.js b/server_dist/models/project.js index 39c8b360..d0f30aa0 100644 --- a/server_dist/models/project.js +++ b/server_dist/models/project.js @@ -101,7 +101,7 @@ var projectModel = function (_baseModel) { value: function list(group_id, auth) { var params = { group_id: group_id }; if (!auth) params.project_type = 'public'; - return this.model.find(params).sort({ _id: -1 }).exec(); + return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec(); } }, { key: 'listWithPaging', diff --git a/static/dev.html b/static/dev.html index ad5fe2e7..e4f5b538 100644 --- a/static/dev.html +++ b/static/dev.html @@ -18,7 +18,7 @@ <script src="/lib/snippets-json.js"></script> <script src="/lib/ext-language.tools.js"></script> <script src="/lib/mode-json-1.2.8.js"></script> -<!-- <script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> --> +<script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script> From 231c6036292c5427775c3539b39e21b0ada9b305 Mon Sep 17 00:00:00 2001 From: zwjamnsss <zwjamnsss@gmail.com> Date: Mon, 14 Aug 2017 17:32:17 +0800 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E9=9B=86?= =?UTF-8?q?=E5=90=88=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InterfaceCol/InterfaceColMenu.js | 123 +++++++++++++++++- client/reducer/modules/interfaceCol.js | 63 +++++++++ client/reducer/modules/reducer.js | 2 + server/controllers/interfaceCol.js | 76 +++++------ server_dist/controllers/interfaceCol.js | 44 +++---- 5 files changed, 247 insertions(+), 61 deletions(-) create mode 100644 client/reducer/modules/interfaceCol.js diff --git a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js index 3b103640..dcddedbd 100644 --- a/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js +++ b/client/containers/Project/Interface/InterfaceCol/InterfaceColMenu.js @@ -1,10 +1,131 @@ import React, { Component } from 'react' +import { connect } from 'react-redux'; +import { withRouter } from 'react-router' +import PropTypes from 'prop-types' +import { fetchInterfaceColList, fetchInterfaceCaseList } from '../../../../reducer/modules/interfaceCol' +import { autobind } from 'core-decorators'; +import axios from 'axios'; +import { Menu, Input, Icon, Tag, Modal, Row, Col, message, Tooltip } from 'antd'; + +const SubMenu = Menu.SubMenu; +const { TextArea } = Input; + +@connect( + state => { + return { + interfaceColList: state.interfaceCol.interfaceColList + } + }, + { + fetchInterfaceColList, + fetchInterfaceCaseList + } +) +@withRouter export default class InterfaceColMenu extends Component { + + static propTypes = { + match: PropTypes.object, + interfaceColList: PropTypes.array, + fetchInterfaceColList: PropTypes.func, + fetchInterfaceCaseList: PropTypes.func + } + + state = { + addColModalVisible: false, + addColName: '', + addColDesc: '' + } + constructor(props) { super(props) } + componentWillMount() { + this.props.fetchInterfaceColList(this.props.match.params.id) + } + + @autobind + async addCol() { + const { addColName: name, addColDesc: desc } = this.state; + const project_id = this.props.match.params.id + const res = await axios.post('/api/col/add_col', { name, desc, project_id }) + if (!res.data.errcode) { + this.setState({ + addColModalVisible: false + }); + message.success('添加集合成功'); + await this.props.fetchInterfaceColList(project_id); + } + } + + @autobind + async selectCol(key, e, col) { + if (!col.interfaceCaseList) { + await this.props.fetchInterfaceCaseList(col._id) + } + } + render() { - return <h1>hello colContent</h1> + return ( + <div> + <div className="interface-filter"> + <Input placeholder="Filter by name" style={{ width: "70%" }} /> + <Tooltip placement="bottom" title="添加集合"> + <Tag color="#108ee9" style={{ marginLeft: "15px" }} onClick={() => this.setState({addColModalVisible: true})} ><Icon type="plus" /></Tag> + </Tooltip> + </div> + <Menu + onClick={this.handleClick} + style={{ width: 240 }} + defaultSelectedKeys={['1']} + defaultOpenKeys={['sub0']} + mode="inline" + > + { + this.props.interfaceColList.map((col, index) => ( + <SubMenu + key={`sub${index}`} + title={<span><Icon type="folder-open" /><span>{col.name}</span></span>} + onTitleClick={(key, e) => this.selectCol(key, e, col)} + > + { + col.interfaceCaseList && col.interfaceCaseList.map((interfaceCase, index) => ( + <Menu.Item key={index}>{interfaceCase.name}</Menu.Item> + )) + } + </SubMenu> + )) + } + </Menu> + <Modal + title="添加集合" + visible={this.state.addColModalVisible} + onOk={this.addCol} + onCancel={() => { this.setState({ addColModalVisible: false }) }} + className="add-col-modal" + > + <Row gutter={6} className="modal-input"> + <Col span="5"><div className="label">集合名:</div></Col> + <Col span="15"> + <Input + placeholder="请输入集合名称" + value={this.state.addColName} + onChange={e => this.setState({addColName: e.target.value})}></Input> + </Col> + </Row> + <Row gutter={6} className="modal-input"> + <Col span="5"><div className="label">简介:</div></Col> + <Col span="15"> + <TextArea + rows={3} + placeholder="请输入集合描述" + value={this.state.addColDesc} + onChange={e => this.setState({addColDesc: e.target.value})}></TextArea> + </Col> + </Row> + </Modal> + </div> + ) } } diff --git a/client/reducer/modules/interfaceCol.js b/client/reducer/modules/interfaceCol.js new file mode 100644 index 00000000..3e1a0bec --- /dev/null +++ b/client/reducer/modules/interfaceCol.js @@ -0,0 +1,63 @@ +import axios from 'axios' +// Actions +const FETCH_INTERFACE_COL_LIST = 'yapi/interfaceCol/FETCH_INTERFACE_COL_LIST'; +const FETCH_INTERFACE_CASE_LIST = 'yapi/interfaceCol/FETCH_INTERFACE_CASE_LIST'; + +// Reducer +const initialState = { + interfaceColList: [{ + _id: 0, + name: '', + uid: 0, + project_id: 0, + desc: '', + add_time: 0, + up_time: 0, + interfaceCaseList: [ + {} + ] + }], + isShowCol: true, + currInterfaceColId: 0, + currInterfaceCaseId: 0 +} + +export default (state = initialState, action) => { + switch (action.type) { + case FETCH_INTERFACE_COL_LIST: + return { + ...state, + interfaceColList: action.payload.data.data + } + case FETCH_INTERFACE_CASE_LIST: { + const interfaceCaseList = state.interfaceColList.map(col => { + if (col._id === state.currInterfaceColId) { + return col.interfaceCaseList = action.payload.data.data; + } + return col; + }) + return { + ...state, + interfaceCaseList + } + } + default: + return state + } +} + + +// Action Creators +export function fetchInterfaceColList (projectId) { + return { + type: FETCH_INTERFACE_COL_LIST, + payload: axios.get('/api/col/list?project_id=' + projectId) + } +} + +export function fetchInterfaceCaseList(colId){ + return { + type: FETCH_INTERFACE_CASE_LIST, + payload: axios.get('/api/col/case_list?col_id=' + colId) + } +} diff --git a/client/reducer/modules/reducer.js b/client/reducer/modules/reducer.js index c3623d73..267a2e6b 100644 --- a/client/reducer/modules/reducer.js +++ b/client/reducer/modules/reducer.js @@ -3,6 +3,7 @@ import user from './user.js' import group from './group.js' import project from './project.js' import inter from './interface.js' +import interfaceCol from './interfaceCol.js' import news from './news.js' import addInterface from './addInterface.js' import menu from './menu.js' @@ -11,6 +12,7 @@ export default combineReducers({ group, user, inter, + interfaceCol, project, news, addInterface, diff --git a/server/controllers/interfaceCol.js b/server/controllers/interfaceCol.js index 33e43ea0..a563f4be 100644 --- a/server/controllers/interfaceCol.js +++ b/server/controllers/interfaceCol.js @@ -17,13 +17,13 @@ class interfaceColController extends baseController{ * @category col * @foldnumber 10 * @param {String} project_id email名称,不能为空 - * @returns {Object} - * @example + * @returns {Object} + * @example */ async list(ctx){ try { let id = ctx.query.project_id; - let inst = this.colModel(interfaceColModel); + let inst = yapi.getInst(interfaceColModel); let result = await inst.list(id); ctx.body = yapi.commons.resReturn(result); } catch (e) { @@ -40,8 +40,8 @@ class interfaceColController extends baseController{ * @param {Number} project_id * @param {String} name * @param {String} desc - * @returns {Object} - * @example + * @returns {Object} + * @example */ async addCol(ctx){ @@ -52,14 +52,14 @@ class interfaceColController extends baseController{ project_id: 'number', desc: 'string' }); - + if (!params.project_id) { - return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); } if(!params.name){ - return ctx.body = yapi.commons.resReturn(null, 400, '名称不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, '名称不能为空'); } - + let result = await this.colModel.save({ name: params.name, project_id: params.project_id, @@ -82,8 +82,8 @@ class interfaceColController extends baseController{ * @category col * @foldnumber 10 * @param {String} col_id 接口集id - * @returns {Object} - * @example + * @returns {Object} + * @example */ async getCaseList(ctx){ @@ -106,17 +106,17 @@ class interfaceColController extends baseController{ * @param {String} casename * @param {Number} col_id * @param {Number} project_id - * @param {String} env + * @param {String} env * @param {String} domain * @param {String} path * @param {String} method * @param {Object} req_query * @param {Object} req_headers * @param {String} req_body_type - * @param {Array} req_body_form + * @param {Array} req_body_form * @param {String} req_body_other - * @returns {Object} - * @example + * @returns {Object} + * @example */ async addCase(ctx){ @@ -130,23 +130,23 @@ class interfaceColController extends baseController{ domain: 'string', method: 'string' }); - + if (!params.project_id) { - return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); } if (!params.col_id) { - return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); } if (!params.env) { - return ctx.body = yapi.commons.resReturn(null, 400, '缺少环境配置'); + return ctx.body = yapi.commons.resReturn(null, 400, '缺少环境配置'); } if (!params.path) { - return ctx.body = yapi.commons.resReturn(null, 400, 'path 不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, 'path 不能为空'); } - - + + if(!params.casename){ - return ctx.body = yapi.commons.resReturn(null, 400, '用例名称不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, '用例名称不能为空'); } params.uid = this.getUid(); @@ -154,7 +154,7 @@ class interfaceColController extends baseController{ params.add_time = yapi.commons.time(); params.up_time = yapi.commons.time(); let result = await this.caseModel.save(params); - + ctx.body = yapi.commons.resReturn(result); }catch(e){ @@ -169,8 +169,8 @@ class interfaceColController extends baseController{ * @category col * @foldnumber 10 * @param {String} caseid - * @returns {Object} - * @example + * @returns {Object} + * @example */ async getCase(ctx){ @@ -191,8 +191,8 @@ class interfaceColController extends baseController{ * @foldnumber 10 * @param {String} name * @param {String} desc - * @returns {Object} - * @example + * @returns {Object} + * @example */ async upCol(ctx){ @@ -216,8 +216,8 @@ class interfaceColController extends baseController{ * @category col * @foldnumber 10 * @param {Array} [id, index] - * @returns {Object} - * @example + * @returns {Object} + * @example */ async upCaseIndex(ctx){ @@ -232,9 +232,9 @@ class interfaceColController extends baseController{ yapi.commons.log(err.message, 'error') }) } - + }) - + return ctx.body = yapi.commons.resReturn('success') }catch(e){ ctx.body = yapi.commons.resReturn(null, 400, e.message) @@ -247,9 +247,9 @@ class interfaceColController extends baseController{ * @method GET * @category col * @foldnumber 10 - * @param {String} - * @returns {Object} - * @example + * @param {String} + * @returns {Object} + * @example */ async delCol(ctx){ @@ -277,8 +277,8 @@ class interfaceColController extends baseController{ } /** - * - * @param {*} ctx + * + * @param {*} ctx */ async delCase(ctx){ @@ -308,4 +308,4 @@ class interfaceColController extends baseController{ } -module.exports = interfaceColController \ No newline at end of file +module.exports = interfaceColController diff --git a/server_dist/controllers/interfaceCol.js b/server_dist/controllers/interfaceCol.js index 2ec941c0..b46076b7 100644 --- a/server_dist/controllers/interfaceCol.js +++ b/server_dist/controllers/interfaceCol.js @@ -66,8 +66,8 @@ var interfaceColController = function (_baseController) { * @category col * @foldnumber 10 * @param {String} project_id email名称,不能为空 - * @returns {Object} - * @example + * @returns {Object} + * @example */ @@ -82,7 +82,7 @@ var interfaceColController = function (_baseController) { case 0: _context.prev = 0; id = ctx.query.project_id; - inst = this.colModel(_interfaceCol2.default); + inst = _yapi2.default.getInst(_interfaceCol2.default); _context.next = 5; return inst.list(id); @@ -123,8 +123,8 @@ var interfaceColController = function (_baseController) { * @param {Number} project_id * @param {String} name * @param {String} desc - * @returns {Object} - * @example + * @returns {Object} + * @example */ }, { @@ -207,8 +207,8 @@ var interfaceColController = function (_baseController) { * @category col * @foldnumber 10 * @param {String} col_id 接口集id - * @returns {Object} - * @example + * @returns {Object} + * @example */ }, { @@ -263,17 +263,17 @@ var interfaceColController = function (_baseController) { * @param {String} casename * @param {Number} col_id * @param {Number} project_id - * @param {String} env + * @param {String} env * @param {String} domain * @param {String} path * @param {String} method * @param {Object} req_query * @param {Object} req_headers * @param {String} req_body_type - * @param {Array} req_body_form + * @param {Array} req_body_form * @param {String} req_body_other - * @returns {Object} - * @example + * @returns {Object} + * @example */ }, { @@ -382,8 +382,8 @@ var interfaceColController = function (_baseController) { * @category col * @foldnumber 10 * @param {String} caseid - * @returns {Object} - * @example + * @returns {Object} + * @example */ }, { @@ -436,8 +436,8 @@ var interfaceColController = function (_baseController) { * @foldnumber 10 * @param {String} name * @param {String} desc - * @returns {Object} - * @example + * @returns {Object} + * @example */ }, { @@ -493,8 +493,8 @@ var interfaceColController = function (_baseController) { * @category col * @foldnumber 10 * @param {Array} [id, index] - * @returns {Object} - * @example + * @returns {Object} + * @example */ }, { @@ -551,9 +551,9 @@ var interfaceColController = function (_baseController) { * @method GET * @category col * @foldnumber 10 - * @param {String} - * @returns {Object} - * @example + * @param {String} + * @returns {Object} + * @example */ }, { @@ -625,8 +625,8 @@ var interfaceColController = function (_baseController) { }() /** - * - * @param {*} ctx + * + * @param {*} ctx */ }, { From ff0f9b575c0746101da7b7f5b96623f1ea3cf937 Mon Sep 17 00:00:00 2001 From: zwjamnsss <zwjamnsss@gmail.com> Date: Mon, 14 Aug 2017 19:23:20 +0800 Subject: [PATCH 07/14] =?UTF-8?q?feat:=20run=20=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Project/Interface/InterfaceList/Run.js | 514 +++++++++++++++++- .../Project/Interface/InterfaceList/Run.scss | 18 + 2 files changed, 528 insertions(+), 4 deletions(-) create mode 100644 client/containers/Project/Interface/InterfaceList/Run.scss diff --git a/client/containers/Project/Interface/InterfaceList/Run.js b/client/containers/Project/Interface/InterfaceList/Run.js index 3aa0a3ae..b71db814 100644 --- a/client/containers/Project/Interface/InterfaceList/Run.js +++ b/client/containers/Project/Interface/InterfaceList/Run.js @@ -1,5 +1,511 @@ -import React from 'react' +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { connect } from 'react-redux' +import { Button, Input, Select, Card, Alert, Spin, Icon, message } from 'antd' +import { autobind } from 'core-decorators'; +import crossRequest from 'cross-request'; +import { withRouter } from 'react-router'; +import axios from 'axios'; +import URL from 'url'; -export default () => { - return <h1>接口Run</h1> -} \ No newline at end of file +// import { +// } from '../../../reducer/modules/group.js' + +import './Run.scss' + +const { TextArea } = Input; +const InputGroup = Input.Group; +const Option = Select.Option; + +@connect( + state => ({ + reqParams: state.addInterface.reqParams, + method: state.addInterface.method, + url: state.addInterface.url, + seqGroup: state.addInterface.seqGroup, + interfaceName: state.addInterface.interfaceName, + interfaceProject: state.addInterface.project + }) +) +@withRouter +export default class InterfaceTest extends Component { + + static propTypes = { + reqParams: PropTypes.string, + method: PropTypes.string, + url: PropTypes.string, + interfaceName: PropTypes.string, + seqGroup: PropTypes.array, + match: PropTypes.object, + interfaceProject: PropTypes.object + } + + state = { + res: '', + method: 'GET', + domains: [], + pathname: '', + query: {}, + params: {}, + paramsNotJson: false, + headers: {}, + currDomain: '', + paramsType: 'from' + } + + constructor(props) { + super(props) + } + + componentWillMount() { + this.getInterfaceState() + } + + componentWillReceiveProps(nextProps) { + this.getInterfaceState(nextProps) + } + + @autobind + getInterfaceState(nextProps) { + const props = nextProps || this.props; + const { method, url, seqGroup, interfaceProject } = props; + const { prd_host, basepath, protocol, env } = interfaceProject; + const pathname = (basepath + url).replace(/\/+/g, '/'); + + const domains = {prd: protocol + '://' + prd_host}; + env.forEach(item => { + domains[item.name] = item.domain; + }) + + const query = []; + let params = []; + let reqParams = this.props.reqParams ? this.props.reqParams : '{}'; + let paramsNotJson = false; + try { + reqParams = JSON.parse(reqParams); + // paramsNotJson = false; + } catch (e) { + // paramsNotJson = true; + reqParams = {}; + message.error('请求参数不是 JSON 格式'); + } + if (method === 'GET') { + Object.keys(reqParams).forEach(key => { + const value = typeof reqParams[key] === 'object' ? JSON.stringify(reqParams[key]) : reqParams[key].toString(); + query.push({key, value}) + }) + } else if (method === 'POST') { + // params = reqParams; + Object.keys(reqParams).forEach(key => { + const value = typeof reqParams[key] === 'object' ? JSON.stringify(reqParams[key]) : reqParams[key].toString(); + query.push({key, value, type: 'text'}) + }) + } + + const headers = [] + let contentTypeIndex = -1; + seqGroup.forEach((headerItem, index) => { + if (headerItem.name) { + // TODO 'Content-Type' 排除大小写不同格式影响 + if (headerItem.name === 'Content-Type'){ + contentTypeIndex = index; + headerItem.value = headerItem.value || 'application/x-www-form-urlencoded'; + } + headers.push({name: headerItem.name, value: headerItem.value}); + } + }) + if (contentTypeIndex === -1) { + headers.push({name: 'Content-Type', value: 'application/x-www-form-urlencoded'}); + } + + this.setState({ + method, + domains, + pathname, + query, + params, + paramsNotJson, + headers, + currDomain: domains.prd, + loading: false, + paramsType: 'form' + }); + } + + @autobind + requestInterface() { + const { headers, params, currDomain, method, pathname, query } = this.state; + const urlObj = URL.parse(currDomain); + + const href = URL.format({ + protocol: urlObj.protocol || 'http', + host: urlObj.host, + pathname, + query: this.getQueryObj(query) + }); + + this.setState({ loading: true }) + + crossRequest({ + url: href, + method, + headers: this.getHeadersObj(headers), + data: this.arrToObj(params), + files: this.getFiles(params), + success: (res) => { + try { + res = JSON.parse(res) + } catch (e) { + null + } + this.setState({res}) + this.setState({ loading: false }) + }, + error: (err) => { + this.setState({res: err || '请求失败'}) + this.setState({ loading: false }) + } + }) + } + + @autobind + changeDomain(value) { + this.setState({ currDomain: value }); + } + + @autobind + selectDomain(value) { + this.setState({ currDomain: value }); + } + + @autobind + changeHeader(e, index, isName) { + const headers = JSON.parse(JSON.stringify(this.state.headers)); + const v = e.target.value; + if (isName) { + headers[index].name = v; + } else { + headers[index].value = v; + } + this.setState({ headers }); + } + @autobind + addHeader() { + const { headers } = this.state; + this.setState({headers: headers.concat([{name: '', value: ''}])}) + } + @autobind + deleteHeader(index) { + const { headers } = this.state; + this.setState({headers: headers.filter((item, i) => +index !== +i)}); + } + @autobind + setContentType(type) { + const headersObj = this.getHeadersObj(this.state.headers); + headersObj['Content-Type'] = type; + this.setState({headers: this.objToArr(headersObj, 'name')}) + } + + @autobind + changeQuery(e, index, isKey) { + const query = JSON.parse(JSON.stringify(this.state.query)); + const v = e.target.value; + if (isKey) { + query[index].key = v; + } else { + query[index].value = v; + } + this.setState({ query }); + } + @autobind + addQuery() { + const { query } = this.state; + this.setState({query: query.concat([{key: '', value: ''}])}) + } + @autobind + deleteQuery(index) { + const { query } = this.state; + this.setState({query: query.filter((item, i) => +index !== +i)}); + } + + @autobind + changeParams(e, index, type) { + const params = JSON.parse(JSON.stringify(this.state.params)); + switch (type) { + case 'key': + params[index].key = e.target.value + break; + case 'type': + params[index].type = e + break; + case 'value': + if (params[index].type === 'file') { + params[index].value = e.target.id + } else { + params[index].value = e.target.value + } + break; + default: + break; + } + if (type === 'type' && e === 'file') { + this.setContentType('multipart/form-data') + } + this.setState({ params }); + } + @autobind + addParams() { + const { params } = this.state; + this.setState({params: params.concat([{key: '', value: '', type: 'text'}])}) + } + @autobind + deleteParams(index) { + const { params } = this.state; + this.setState({params: params.filter((item, i) => +index !== +i)}); + } + + @autobind + changeMethod(value) { + this.setState({ method: value }); + } + + @autobind + changePath(e) { + const path = e.target.value; + const urlObj = URL.parse(path, true); + this.setState({ + query: this.objToArr(urlObj.query), + pathname: urlObj.pathname + }) + } + + @autobind + changeParamsType(value) { + this.setState({paramsType: value}) + } + + hasCrossRequestPlugin() { + const dom = document.getElementById('y-request'); + return dom.getAttribute('key') === 'yapi'; + } + + objToArr(obj, key, value) { + const keyName = key || 'key'; + const valueName = value || 'value'; + const arr = [] + Object.keys(obj).forEach((_key) => { + if (_key) { + arr.push({[keyName]: _key, [valueName]: obj[_key]}); + } + }) + return arr; + } + arrToObj(arr) { + const obj = {}; + arr.forEach(item => { + if (item.key && item.type !== 'file') { + obj[item.key] = item.value || ''; + } + }) + return obj; + } + getFiles(params) { + const files = {}; + params.forEach(item => { + if (item.key && item.type === 'file') { + files[item.key] = item.value + } + }) + return files; + } + getQueryObj(query) { + const queryObj = {}; + query.forEach(item => { + if (item.key) { + queryObj[item.key] = item.value || ''; + } + }) + return queryObj; + } + getHeadersObj(headers) { + const headersObj = {}; + headers.forEach(item => { + if (item.name && item.value) { + headersObj[item.name] = item.value; + } + }) + return headersObj; + } + + @autobind + fileChange(e, index) { + console.log(e) + console.log(index) + } + + render () { + + const { interfaceName } = this.props; + const { method, domains, pathname, query, headers, params, currDomain, paramsType } = this.state; + const hasPlugin = this.hasCrossRequestPlugin(); + const search = decodeURIComponent(URL.format({query: this.getQueryObj(query)})); + + console.log(axios) + window.axios = axios + + + return ( + <div className="interface-test"> + <div style={{padding: '0 20%'}}> + { hasPlugin ? '' : + <Alert + message={ + <div> + 温馨提示:当前正在使用接口测试服务,请安装我们为您免费提供的 + <a + target="blank" + href="https://chrome.google.com/webstore/detail/cross-request/cmnlfmgbjmaciiopcgodlhpiklaghbok?hl=en-US" + > + 测试增强插件 [点击获取]! + </a> + </div> + } + type="warning" + /> + } + </div> + <div className="interface-name">{interfaceName}</div> + + {/* url */} + <div className="req-part"> + <div className="req-row href"> + <InputGroup compact style={{display: 'inline-block', width: 680, border: 0, background: '#fff', marginBottom: -4}}> + <Input value="Method" disabled style={{display: 'inline-block', width: 80, border: 0, background: '#fff'}} /> + <Input value="Domain" disabled style={{display: 'inline-block', width: 300, border: 0, background: '#fff'}} /> + <Input value="Basepath + Url + [Query]" disabled style={{display: 'inline-block', width: 300, border: 0, background: '#fff'}} /> + </InputGroup> + <InputGroup compact style={{display: 'inline-block', width: 680}}> + <Select value={method} style={{display: 'inline-block', width: 80}} onChange={this.changeMethod} > + <Option value="GET">GET</Option> + <Option value="POST">POST</Option> + </Select> + <Select value={currDomain} mode="combobox" filterOption={() => true} style={{display: 'inline-block', width: 300}} onChange={this.changeDomain} onSelect={this.selectDomain}> + { + Object.keys(domains).map((key, index) => (<Option value={domains[key]} key={index}>{key + ':' + domains[key]}</Option>)) + } + </Select> + <Input value={pathname + search} onChange={this.changePath} spellCheck="false" style={{display: 'inline-block', width: 300}} /> + </InputGroup> + <Button + onClick={this.requestInterface} + type="primary" + style={{marginLeft: 10}} + loading={this.state.loading} + >发送</Button> + <span style={{fontSize: 12, color: 'rgba(0, 0, 0, 0.25)'}}>(请求测试真实接口)</span> + </div> + + <Card title="Query" noHovering style={{marginTop: 10}}> + { + query.map((item, index) => { + return ( + <div key={index}> + <Input value={item.key} onChange={e => this.changeQuery(e, index, true)} style={{display: 'inline-block', width: 200, margin: 10}} />{' = '} + <Input value={item.value} onChange={e => this.changeQuery(e, index)} style={{display: 'inline-block', width: 200, margin: 10}} /> + <Icon type="close" className="icon-btn" onClick={() => this.deleteQuery(index)} /> + </div> + ) + }) + } + <Button type="primary" icon="plus" onClick={this.addQuery} style={{margin: 10}}>Add query parameter</Button> + </Card> + <Card title="HEADERS" noHovering style={{marginTop: 10}} > + <div className="req-row headers"> + { + headers.map((item, index) => { + return ( + <div key={index}> + <Input value={item.name} onChange={e => this.changeHeader(e, index, true)} style={{display: 'inline-block', width: 200, margin: 10}} />{' = '} + <Input value={item.value} onChange={e => this.changeHeader(e, index)} style={{display: 'inline-block', width: 200, margin: 10}} /> + <Icon type="close" className="icon-btn" onClick={() => this.deleteHeader(index)} /> + </div> + ) + }) + } + <Button type="primary" icon="plus" onClick={this.addHeader} style={{margin: 10}}>Add header</Button> + </div> + </Card> + <Card title="Body" noHovering style={{marginTop: 10}}> + <div className="req-row params"> + <div> + <Select style={{margin: 10, float: 'right'}} defaultValue={paramsType} onChange={this.changeParamsType} className={method === 'POST' ? 'floatfix' : 'floatfix hidden'}> + <Option value="text">Text</Option> + <Option value="file">File</Option> + <Option value="form">Form</Option> + </Select> + </div> + { method === 'POST' && paramsType !== 'form' && paramsType !== 'file' && + <div> + <TextArea + value={params} + style={{margin: 10}} + autosize={{ minRows: 2, maxRows: 6 }} + ></TextArea> + <div>{paramsType}</div> + </div> + } + { + method === 'POST' && paramsType === 'form' && ( + <div> + { + params.map((item, index) => { + return ( + <div key={index}> + <Input value={item.key} onChange={e => this.changeParams(e, index, 'key')} style={{display: 'inline-block', width: 200, margin: 10}} /> + [<Select value={item.type} onChange={e => this.changeParams(e, index, 'type')}> + <Option value="file">File</Option> + <Option value="text">Text</Option> + </Select>]{' = '} + {item.type === 'file' ? + <Input type="file" id={'file_' + index} onChange={e => this.changeParams(e, index, 'value')} multiple style={{display: 'inline-block', width: 200, margin: 10}} /> : + <Input value={item.value} onChange={e => this.changeParams(e, index, 'value')} style={{display: 'inline-block', width: 200, margin: 10}} /> + } + </div> + ) + }) + } + <Button type="primary" icon="plus" onClick={this.addParams} style={{margin: 10}}>Add form parameter</Button> + </div> + ) + } + { + method === 'POST' && paramsType === 'file' && ( + <div> + <Input type="file"></Input> + </div> + ) + } + { + method !== 'POST' && ( + <div style={{margin: 10}}>GET 请求没有 Body。</div> + ) + } + </div> + </Card> + </div> + <Card title="返回结果" noHovering style={{marginTop: 10}}> + <Spin spinning={this.state.loading}> + <div className="res-part"> + <div style={{padding: 10}}> + <TextArea + value={typeof this.state.res === 'object' ? JSON.stringify(this.state.res, null, 2) : this.state.res.toString()} + autosize={{ minRows: 2, maxRows: 6 }} + ></TextArea> + </div> + </div> + </Spin> + </Card> + </div> + ) + } +} diff --git a/client/containers/Project/Interface/InterfaceList/Run.scss b/client/containers/Project/Interface/InterfaceList/Run.scss new file mode 100644 index 00000000..a5f2179f --- /dev/null +++ b/client/containers/Project/Interface/InterfaceList/Run.scss @@ -0,0 +1,18 @@ +.interface-test { + .interface-name { + font-size: 24px; + margin-bottom: 24px; + } + .icon-btn { + cursor: pointer; + margin-left: 6px; + } + .icon-btn:hover { + color: #108ee9; + } +} +.floatfix:after{ + content:""; + display:table; + clear:both; +} From fa510e96087f95db33ff72549d859e4495e6dcf0 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 19:58:33 +0800 Subject: [PATCH 08/14] feat: add interface res some module --- client/components/Header/Header.js | 2 +- .../InterfaceList/InterfaceEditForm.js | 112 ++++++++++++++---- .../Interface/InterfaceList/mockEditor.js | 7 +- server/controllers/interfaceCol.js | 13 +- server/models/interface.js | 16 +-- server/models/interfaceCase.js | 12 +- server_dist/controllers/interfaceCol.js | 70 +++++------ server_dist/models/interface.js | 16 +-- server_dist/models/interfaceCase.js | 12 +- 9 files changed, 155 insertions(+), 105 deletions(-) diff --git a/client/components/Header/Header.js b/client/components/Header/Header.js index f33a980b..d7ae2071 100644 --- a/client/components/Header/Header.js +++ b/client/components/Header/Header.js @@ -165,7 +165,7 @@ export default class HeaderCom extends Component { <Header className="header-box m-header"> <div className="content g-row"> <div className="logo"> - <Link to="/" onClick={this.relieveLink} className="href"> + <Link to="/group" onClick={this.relieveLink} className="href"> <img className="img" src="/image/logo_header@1x.png" /><span className="logo-name">YAPI<span className="ui-badge"></span></span> </Link> </div> diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js index 46819cb3..2219bddf 100644 --- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js +++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js @@ -35,13 +35,15 @@ class InterfaceEditForm extends Component { req_body_type: 'form', req_headers: [{ name: 'Content-Type', - value: 'application/urlencode', required: "1" + value: 'application/x-www-form-urlencoded', required: "1" }], req_body_form: [{ name: 'id', type: 'text', required: '1' - }] + }], + res_body_type: 'json', + res_body: '' } } @@ -50,20 +52,29 @@ class InterfaceEditForm extends Component { this.props.form.validateFields((err, values) => { if (!err) { console.log('Received values of form: ', values); - console.log(this.props.form.getFieldValue('keys')) } }); } componentDidMount() { + let that = this; mockEditor({ container: 'req_body_json', - data: { - name: "@name" - }, + data: that.state.req_body_json, onChange: function (d) { - console.log(this) - console.log(d) + that.setState({ + req_body_json: d.text + }) + } + }) + + mockEditor({ + container: 'res_body_json', + data: that.state.res_body, + onChange: function (d) { + that.setState({ + res_body: d.text + }) } }) } @@ -294,33 +305,94 @@ class InterfaceEditForm extends Component { <Radio value="form">form</Radio> <Radio value="json">json</Radio> <Radio value="file">file</Radio> + <Radio value="raw">raw</Radio> </RadioGroup> )} </FormItem> + {this.props.form.getFieldValue('req_body_type') === 'form' ? + <Row > + <Col span={14} offset={6} style={{ minHeight: "50px", padding: "15px" }}> + <Row> + <Col span="24"> - <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'form' ? 'block' : 'none' }}> - <Col span={14} offset={6} style={{ minHeight: "300px", padding: "15px" }}> - <Row> - <Col span="24"> + <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button> - <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button> + </Col> - </Col> + </Row> + {requestBodyList} + </Col> - </Row> - {requestBodyList} - </Col> + </Row> + : + null + } - </Row> <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}> - <Col span={14} offset={6} id="req_body_json" style={{ minHeight: "300px", padding: "15px" }}> - + <Col span={14} offset={6} id="req_body_json" style={{ minHeight: "300px", padding: "15px" }}> + </Col> + </Row> + + {this.props.form.getFieldValue('req_body_type') === 'file' ? + <Row > + <Col span={14} offset={6} style={{ padding: "15px" }}> + {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })( + <Input.TextArea placeholder="备注信息" /> + )} + </Col> + + + </Row> + : + null + } + {this.props.form.getFieldValue('req_body_type') === 'raw' ? + <Row> + <Col span={14} offset={6} style={{ padding: "15px" }}> + {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })( + <Input.TextArea placeholder="备注信息" /> + )} + </Col> + </Row> + : null + } + + <FormItem style={{ marginBottom: "5px" }} + {...formItemLayout} + label="响应Body" + > + {getFieldDecorator('res_body_type', { + initialValue: this.state.res_body_type + })( + <RadioGroup> + <Radio value="json">json</Radio> + <Radio value="raw">raw</Radio> + + </RadioGroup> + )} + + </FormItem> + <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}> + <Col span={14} offset={6} id="res_body_json" style={{ minHeight: "300px", padding: "15px" }}> + </Col> </Row> + + <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}> + <Col span={14} offset={6} style={{ padding: "15px" }}> + {getFieldDecorator('req_body_other', { initialValue: this.state.res_body })( + <Input.TextArea placeholder="备注信息" /> + )} + </Col> + + + </Row> + + <FormItem wrapperCol={{ span: 12, offset: 6 }} > diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js index 90332287..f7c01589 100644 --- a/client/containers/Project/Interface/InterfaceList/mockEditor.js +++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js @@ -3,8 +3,6 @@ var ace = require('brace'), require('brace/mode/javascript'); require('brace/theme/xcode'); require("brace/ext/language_tools.js"); -require("brace/snippets/javascript.js"); - var json5 = require('json5'); var langTools = ace.acequire("ace/ext/language_tools"), @@ -76,8 +74,9 @@ function run(options) { editor.setTheme('ace/theme/xcode'); editor.setOptions({ enableBasicAutocompletion: true, - enableSnippets: true, - enableLiveAutocompletion: true + enableSnippets: false, + enableLiveAutocompletion: true, + useWorker: false }); mockEditor = { curData: {}, diff --git a/server/controllers/interfaceCol.js b/server/controllers/interfaceCol.js index 6e372b2e..5196ae6e 100644 --- a/server/controllers/interfaceCol.js +++ b/server/controllers/interfaceCol.js @@ -24,6 +24,11 @@ class interfaceColController extends baseController{ try { let id = ctx.query.project_id; let result = await this.colModel.list(id); + + for(let i=0; i< result.length;i++){ + result[i] = result[i].toObject(); + result[i].caseList = await this.caseModel.list(result[i]._id) + } ctx.body = yapi.commons.resReturn(result); } catch (e) { ctx.body = yapi.commons.resReturn(null, 402, e.message); @@ -134,13 +139,7 @@ class interfaceColController extends baseController{ return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); } if (!params.col_id) { - return ctx.body = yapi.commons.resReturn(null, 400, '项目id不能为空'); - } - if (!params.env) { - return ctx.body = yapi.commons.resReturn(null, 400, '缺少环境配置'); - } - if (!params.path) { - return ctx.body = yapi.commons.resReturn(null, 400, 'path 不能为空'); + return ctx.body = yapi.commons.resReturn(null, 400, '接口集id不能为空'); } diff --git a/server/models/interface.js b/server/models/interface.js index 441e7125..2be3710a 100644 --- a/server/models/interface.js +++ b/server/models/interface.js @@ -42,26 +42,12 @@ class interfaceModel extends baseModel { default: "1" } }], - req_body_json_doc: [{ - json_path: String, desc: String,required:{ - type:String, - enum: ["1", "0"], - default: "1" - } - }], req_body_other: String, res_body_type: { type: String, enum: ['json', 'text', 'xml'] }, - res_body: String, - res_body_json_doc: [{ - json_path: String, desc: String,required:{ - type:String, - enum: ["1", "0"], - default: "1" - } - }] + res_body: String }; } diff --git a/server/models/interfaceCase.js b/server/models/interfaceCase.js index bb1524b7..481d9421 100644 --- a/server/models/interfaceCase.js +++ b/server/models/interfaceCase.js @@ -15,10 +15,10 @@ class interfaceCase extends baseModel { project_id: { type: Number, required: true }, add_time: Number, up_time: Number, - env: { type: String, required: true }, + env: { type: String }, domain: {type: String }, - path: { type: String, required: true }, - method: { type: String, required: true }, + path: { type: String }, + method: { type: String }, req_query: [{ name: String, value: String }], @@ -48,8 +48,10 @@ class interfaceCase extends baseModel { }).exec(); } - list() { - return this.model.find().select("casename uid col_id _id index").exec(); + list(col_id) { + return this.model.find({ + col_id: col_id + }).select("casename uid col_id _id index").exec(); } del(id) { diff --git a/server_dist/controllers/interfaceCol.js b/server_dist/controllers/interfaceCol.js index 712693a3..862f037c 100644 --- a/server_dist/controllers/interfaceCol.js +++ b/server_dist/controllers/interfaceCol.js @@ -75,7 +75,7 @@ var interfaceColController = function (_baseController) { key: 'list', value: function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) { - var id, result; + var id, result, i; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -87,23 +87,43 @@ var interfaceColController = function (_baseController) { case 4: result = _context.sent; + i = 0; - ctx.body = _yapi2.default.commons.resReturn(result); - _context.next = 11; + case 6: + if (!(i < result.length)) { + _context.next = 14; + break; + } + + result[i] = result[i].toObject(); + _context.next = 10; + return this.caseModel.list(result[i]._id); + + case 10: + result[i].caseList = _context.sent; + + case 11: + i++; + _context.next = 6; break; - case 8: - _context.prev = 8; + case 14: + ctx.body = _yapi2.default.commons.resReturn(result); + _context.next = 20; + break; + + case 17: + _context.prev = 17; _context.t0 = _context['catch'](0); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message); - case 11: + case 20: case 'end': return _context.stop(); } } - }, _callee, this, [[0, 8]]); + }, _callee, this, [[0, 17]]); })); function list(_x) { @@ -309,62 +329,46 @@ var interfaceColController = function (_baseController) { break; } - return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目id不能为空')); + return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '接口集id不能为空')); case 7: - if (params.env) { - _context4.next = 9; - break; - } - - return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '缺少环境配置')); - - case 9: - if (params.path) { - _context4.next = 11; - break; - } - - return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, 'path 不能为空')); - - case 11: if (params.casename) { - _context4.next = 13; + _context4.next = 9; break; } return _context4.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '用例名称不能为空')); - case 13: + case 9: params.uid = this.getUid(); params.index = 0; params.add_time = _yapi2.default.commons.time(); params.up_time = _yapi2.default.commons.time(); - _context4.next = 19; + _context4.next = 15; return this.caseModel.save(params); - case 19: + case 15: result = _context4.sent; ctx.body = _yapi2.default.commons.resReturn(result); - _context4.next = 26; + _context4.next = 22; break; - case 23: - _context4.prev = 23; + case 19: + _context4.prev = 19; _context4.t0 = _context4['catch'](0); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context4.t0.message); - case 26: + case 22: case 'end': return _context4.stop(); } } - }, _callee4, this, [[0, 23]]); + }, _callee4, this, [[0, 19]]); })); function addCase(_x4) { diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js index de19d3f0..fb1a8f13 100644 --- a/server_dist/models/interface.js +++ b/server_dist/models/interface.js @@ -81,26 +81,12 @@ var interfaceModel = function (_baseModel) { default: "1" } }], - req_body_json_doc: [{ - json_path: String, desc: String, required: { - type: String, - enum: ["1", "0"], - default: "1" - } - }], req_body_other: String, res_body_type: { type: String, enum: ['json', 'text', 'xml'] }, - res_body: String, - res_body_json_doc: [{ - json_path: String, desc: String, required: { - type: String, - enum: ["1", "0"], - default: "1" - } - }] + res_body: String }; } }, { diff --git a/server_dist/models/interfaceCase.js b/server_dist/models/interfaceCase.js index 5b8f5ba4..02b0dda0 100644 --- a/server_dist/models/interfaceCase.js +++ b/server_dist/models/interfaceCase.js @@ -54,10 +54,10 @@ var interfaceCase = function (_baseModel) { project_id: { type: Number, required: true }, add_time: Number, up_time: Number, - env: { type: String, required: true }, + env: { type: String }, domain: { type: String }, - path: { type: String, required: true }, - method: { type: String, required: true }, + path: { type: String }, + method: { type: String }, req_query: [{ name: String, value: String }], @@ -90,8 +90,10 @@ var interfaceCase = function (_baseModel) { } }, { key: 'list', - value: function list() { - return this.model.find().select("casename uid col_id _id index").exec(); + value: function list(col_id) { + return this.model.find({ + col_id: col_id + }).select("casename uid col_id _id index").exec(); } }, { key: 'del', From 04791fa39e362a9f035d02c505aaa233efe6ae58 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 20:09:47 +0800 Subject: [PATCH 09/14] fix: message login when guest open site --- client/reducer/middleware/messageMiddleware.js | 2 +- server/controllers/base.js | 2 +- server/router.js | 2 +- server_dist/controllers/base.js | 2 +- server_dist/router.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/reducer/middleware/messageMiddleware.js b/client/reducer/middleware/messageMiddleware.js index 8abb3d5d..5c16bde7 100644 --- a/client/reducer/middleware/messageMiddleware.js +++ b/client/reducer/middleware/messageMiddleware.js @@ -3,7 +3,7 @@ import { message } from 'antd'; export default () => next => action => { if (action.error) { message.error((action.payload && action.payload.message) || '服务器错误'); - } else if (action.payload && action.payload.data && action.payload.data.errcode) { + } else if (action.payload && action.payload.data && action.payload.data.errcode && action.payload.data.errcode !== 40011) { message.error(action.payload.data.errmsg); } return next(action); diff --git a/server/controllers/base.js b/server/controllers/base.js index f71c8dc8..781eed53 100644 --- a/server/controllers/base.js +++ b/server/controllers/base.js @@ -72,7 +72,7 @@ class baseController { result.server_ip = yapi.WEBCONFIG.server_ip; return ctx.body = yapi.commons.resReturn(result); } - return ctx.body = yapi.commons.resReturn(null, 300, 'Please login.'); + return ctx.body = yapi.commons.resReturn(null, 40011, '请登录...'); } getRole() { diff --git a/server/router.js b/server/router.js index 84a4115e..1dfd5b2c 100644 --- a/server/router.js +++ b/server/router.js @@ -320,7 +320,7 @@ function createAction(controller, action, path, method) { if (inst.$auth === true) { await inst[action].call(inst, ctx); } else { - ctx.body = yapi.commons.resReturn(null, 40011, '请登录.'); + ctx.body = yapi.commons.resReturn(null, 40011, '请登录...'); } }); } diff --git a/server_dist/controllers/base.js b/server_dist/controllers/base.js index d5b02e1b..3cdad72b 100644 --- a/server_dist/controllers/base.js +++ b/server_dist/controllers/base.js @@ -193,7 +193,7 @@ var baseController = function () { return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(result)); case 7: - return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 300, 'Please login.')); + return _context3.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 40011, '请登录...')); case 8: case 'end': diff --git a/server_dist/router.js b/server_dist/router.js index 68b8c1ef..bc493ebf 100644 --- a/server_dist/router.js +++ b/server_dist/router.js @@ -339,7 +339,7 @@ function createAction(controller, action, path, method) { break; case 8: - ctx.body = _yapi2.default.commons.resReturn(null, 40011, '请登录.'); + ctx.body = _yapi2.default.commons.resReturn(null, 40011, '请登录...'); case 9: case 'end': From 129708f264a08398589dc7316047841d943085f8 Mon Sep 17 00:00:00 2001 From: zwjamnsss <zwjamnsss@gmail.com> Date: Mon, 14 Aug 2017 21:22:18 +0800 Subject: [PATCH 10/14] feat: run --- .../Project/Interface/InterfaceList/Run.js | 41 ++++++++++--------- client/reducer/modules/project.js | 18 ++++---- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/client/containers/Project/Interface/InterfaceList/Run.js b/client/containers/Project/Interface/InterfaceList/Run.js index b71db814..8f375bf8 100644 --- a/client/containers/Project/Interface/InterfaceList/Run.js +++ b/client/containers/Project/Interface/InterfaceList/Run.js @@ -5,7 +5,7 @@ import { Button, Input, Select, Card, Alert, Spin, Icon, message } from 'antd' import { autobind } from 'core-decorators'; import crossRequest from 'cross-request'; import { withRouter } from 'react-router'; -import axios from 'axios'; +// import axios from 'axios'; import URL from 'url'; // import { @@ -19,25 +19,27 @@ const Option = Select.Option; @connect( state => ({ - reqParams: state.addInterface.reqParams, - method: state.addInterface.method, - url: state.addInterface.url, - seqGroup: state.addInterface.seqGroup, - interfaceName: state.addInterface.interfaceName, - interfaceProject: state.addInterface.project + currInterface: state.inter.curdata, + currProject: state.project.currProject + // reqParams: state.addInterface.reqParams, + // method: state.addInterface.method, + // url: state.addInterface.url, + // seqGroup: state.addInterface.seqGroup, + // interfaceName: state.addInterface.interfaceName, }) ) @withRouter export default class InterfaceTest extends Component { static propTypes = { - reqParams: PropTypes.string, - method: PropTypes.string, - url: PropTypes.string, - interfaceName: PropTypes.string, - seqGroup: PropTypes.array, match: PropTypes.object, - interfaceProject: PropTypes.object + currProject: PropTypes.object, + currInterface: PropTypes.object, + reqParams: PropTypes.string, + // method: PropTypes.string, + // url: PropTypes.string, + interfaceName: PropTypes.string + // seqGroup: PropTypes.array, } state = { @@ -68,8 +70,11 @@ export default class InterfaceTest extends Component { @autobind getInterfaceState(nextProps) { const props = nextProps || this.props; - const { method, url, seqGroup, interfaceProject } = props; - const { prd_host, basepath, protocol, env } = interfaceProject; + const { currInterface, currProject } = props; + console.log('currInterface', currInterface) + console.log('currProject', currProject) + const { method, path: url, req_headers } = currInterface; + const { prd_host, basepath, protocol, env } = currProject; const pathname = (basepath + url).replace(/\/+/g, '/'); const domains = {prd: protocol + '://' + prd_host}; @@ -104,7 +109,7 @@ export default class InterfaceTest extends Component { const headers = [] let contentTypeIndex = -1; - seqGroup.forEach((headerItem, index) => { + req_headers.forEach((headerItem, index) => { if (headerItem.name) { // TODO 'Content-Type' 排除大小写不同格式影响 if (headerItem.name === 'Content-Type'){ @@ -350,10 +355,6 @@ export default class InterfaceTest extends Component { const hasPlugin = this.hasCrossRequestPlugin(); const search = decodeURIComponent(URL.format({query: this.getQueryObj(query)})); - console.log(axios) - window.axios = axios - - return ( <div className="interface-test"> <div style={{padding: '0 20%'}}> diff --git a/client/reducer/modules/project.js b/client/reducer/modules/project.js index 28395f6f..cc611f5c 100644 --- a/client/reducer/modules/project.js +++ b/client/reducer/modules/project.js @@ -8,7 +8,7 @@ const PROJECT_DEL = 'yapi/project/PROJECT_DEL'; const CHANGE_UPDATE_MODAL = 'yapi/project/CHANGE_UPDATE_MODAL'; const CHANGE_TABLE_LOADING = 'yapi/project/CHANGE_TABLE_LOADING'; const PROJECT_UPDATE = 'yapi/project/PROJECT_UPDATE'; -const GET_CUR_PROJECT = 'yapi/project/GET_CUR_PROJECT' +const GET_CURR_PROJECT = 'yapi/project/GET_CURR_PROJECT' // Reducer const initialState = { @@ -19,15 +19,15 @@ const initialState = { tableLoading: true, total: 0, currPage: 1, - curProject: {} + currProject: {} }; export default (state = initialState, action) => { switch (action.type) { - case GET_CUR_PROJECT: { + case GET_CURR_PROJECT: { return { ...state, - curProject: action.payload.data + currProject: action.payload.data } } case CHANGE_UPDATE_MODAL: { @@ -132,12 +132,12 @@ export function delProject(id) { } export function getProject(id){ - - return async (dispatch) => { + + return async (dispatch) => { let result = await axios.get('/api/project/get?id=' + id); dispatch({ - type: GET_CUR_PROJECT, - payload: result.data + type: GET_CURR_PROJECT, + payload: result.data }) } -} \ No newline at end of file +} From be6abeedf88fd480a690900c9dc876249c885bb9 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 21:43:06 +0800 Subject: [PATCH 11/14] feat: edit interface ci --- .../Project/Interface/InterfaceList/Edit.js | 12 +- .../Project/Interface/InterfaceList/Edit.scss | 6 + .../InterfaceList/InterfaceEditForm.js | 122 ++++++++++++------ .../Interface/InterfaceList/mockEditor.js | 5 +- 4 files changed, 95 insertions(+), 50 deletions(-) create mode 100644 client/containers/Project/Interface/InterfaceList/Edit.scss diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js index c677b8bf..dec8220d 100644 --- a/client/containers/Project/Interface/InterfaceList/Edit.js +++ b/client/containers/Project/Interface/InterfaceList/Edit.js @@ -2,7 +2,7 @@ import React,{Component} from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux'; import InterfaceEditForm from './InterfaceEditForm.js' - +import './Edit.scss' @connect( state => { @@ -17,11 +17,13 @@ class InterfaceEdit extends Component{ curdata: PropTypes.object } + onSubmit = (params)=>{ + console.log('edit', params) + } + render(){ - - return <div> - <h3>Edit</h3> - <InterfaceEditForm /> + return <div className="interface-edit"> + <InterfaceEditForm onSubmit={this.onSubmit} curdata={this.props.curdata} /> </div> } } diff --git a/client/containers/Project/Interface/InterfaceList/Edit.scss b/client/containers/Project/Interface/InterfaceList/Edit.scss new file mode 100644 index 00000000..ddb4a96f --- /dev/null +++ b/client/containers/Project/Interface/InterfaceList/Edit.scss @@ -0,0 +1,6 @@ +.interface-edit{ + padding:10px; + .interface-edit-item{ + margin-bottom: 10px; + } +} \ No newline at end of file diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js index 2219bddf..f7c875d3 100644 --- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js +++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js @@ -18,40 +18,52 @@ const mockEditor = require('./mockEditor.js'); class InterfaceEditForm extends Component { static propTypes = { - form: PropTypes.object + form: PropTypes.object, + curdata: PropTypes.object, + onSubmit: PropTypes.func } constructor(props) { super(props) - this.state = { - title: 'title', - path: 'path', + const { curdata } = this.props; + if (curdata.query && curdata.query.length === 0) delete curdata.query; + if (curdata.req_headers && curdata.req_headers.length === 0) delete curdata.req_headers; + if (curdata.req_body_form && curdata.req_body_form.length === 0) delete curdata.req_body_form; + + this.state = Object.assign({ + title: '', + path: '', + status: 'undone', method: 'get', query: [{ - name: 'name', - desc: 'desc', + name: '', + desc: '', required: "1" }], req_body_type: 'form', req_headers: [{ - name: 'Content-Type', - value: 'application/x-www-form-urlencoded', required: "1" + name: '', + value: '', required: "1" }], req_body_form: [{ - name: 'id', - type: 'text', - required: '1' + name: '', + type: '', + required: '' }], res_body_type: 'json', - res_body: '' - } + res_body: '', + desc: '', + res_body_mock: '' + }, curdata) } handleSubmit = (e) => { e.preventDefault(); this.props.form.validateFields((err, values) => { if (!err) { - console.log('Received values of form: ', values); + if (values.res_body_type === 'json') values.res_body = this.state.res_body; + values.req_body_json = this.state.res_body; + this.props.onSubmit(values) } }); } @@ -72,8 +84,10 @@ class InterfaceEditForm extends Component { container: 'res_body_json', data: that.state.res_body, onChange: function (d) { + that.setState({ - res_body: d.text + res_body: d.text, + res_body_mock: d.mockText }) } }) @@ -99,8 +113,8 @@ class InterfaceEditForm extends Component { render() { const { getFieldDecorator } = this.props.form; const formItemLayout = { - labelCol: { span: 6 }, - wrapperCol: { span: 14 } + labelCol: { span: 4 }, + wrapperCol: { span: 18 } }; const prefixSelector = getFieldDecorator('method', { initialValue: 'GET' @@ -219,10 +233,12 @@ class InterfaceEditForm extends Component { return ( <Form onSubmit={this.handleSubmit}> <FormItem + className="interface-edit-item" {...formItemLayout} label="接口名称" > {getFieldDecorator('title', { + initialValue: this.state.title, rules: [{ required: true, message: '清输入接口名称!' }] @@ -232,10 +248,12 @@ class InterfaceEditForm extends Component { </FormItem> <FormItem + className="interface-edit-item" {...formItemLayout} label="接口路径" > {getFieldDecorator('path', { + initialValue: this.state.path, rules: [{ required: true, message: '清输入接口路径!' }] @@ -245,10 +263,11 @@ class InterfaceEditForm extends Component { </FormItem> <FormItem + className="interface-edit-item" {...formItemLayout} label="状态" > - {getFieldDecorator('status', { initialValue: 'undone' })( + {getFieldDecorator('status', { initialValue: this.state.status })( <Select> <Option value="done">已完成</Option> <Option value="undone">未完成</Option> @@ -257,23 +276,25 @@ class InterfaceEditForm extends Component { </FormItem> <FormItem + className="interface-edit-item" {...formItemLayout} label="接口描述" > - {getFieldDecorator('desc')( + {getFieldDecorator('desc', { initialValue: this.state.desc })( <Input.TextArea placeholder="接口描述" /> )} </FormItem> <FormItem + className="interface-edit-item" {...formItemLayout} label="Query" > - <Button onClick={() => this.addParams('query')}>添加Query参数</Button> + <Button size="small" type="primary" onClick={() => this.addParams('query')}>添加Query参数</Button> </FormItem> - <Row> - <Col span={18} offset={6}> + <Row className="interface-edit-item"> + <Col span={18} offset={4}> {QueryList} </Col> @@ -281,20 +302,22 @@ class InterfaceEditForm extends Component { <FormItem + className="interface-edit-item" {...formItemLayout} label="请求Headers" > - <Button onClick={() => this.addParams('req_headers')}>添加Header</Button> + <Button size="small" type="primary" onClick={() => this.addParams('req_headers')}>添加Header</Button> </FormItem> - <Row> - <Col span={18} offset={6}> + <Row className="interface-edit-item"> + <Col span={18} offset={4}> {headerList} </Col> </Row> - <FormItem style={{ marginBottom: "5px" }} + <FormItem + className="interface-edit-item" {...formItemLayout} label="请求Body" > @@ -311,12 +334,12 @@ class InterfaceEditForm extends Component { </FormItem> {this.props.form.getFieldValue('req_body_type') === 'form' ? - <Row > - <Col span={14} offset={6} style={{ minHeight: "50px", padding: "15px" }}> + <Row className="interface-edit-item"> + <Col span={18} offset={4} style={{ minHeight: "50px" }}> <Row> - <Col span="24"> + <Col span="24" className="interface-edit-item"> - <Button onClick={() => this.addParams('req_body_form')}>添加form参数</Button> + <Button size="small" type="primary" onClick={() => this.addParams('req_body_form')}>添加form参数</Button> </Col> @@ -330,14 +353,14 @@ class InterfaceEditForm extends Component { } - <Row style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}> - <Col span={14} offset={6} id="req_body_json" style={{ minHeight: "300px", padding: "15px" }}> + <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}> + <Col span={18} offset={4} id="req_body_json" style={{ minHeight: "300px"}}> </Col> </Row> {this.props.form.getFieldValue('req_body_type') === 'file' ? - <Row > - <Col span={14} offset={6} style={{ padding: "15px" }}> + <Row className="interface-edit-item" > + <Col span={14} offset={6}> {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })( <Input.TextArea placeholder="备注信息" /> )} @@ -350,7 +373,7 @@ class InterfaceEditForm extends Component { } {this.props.form.getFieldValue('req_body_type') === 'raw' ? <Row> - <Col span={14} offset={6} style={{ padding: "15px" }}> + <Col span={18} offset={4} > {getFieldDecorator('req_body_other', { initialValue: this.state.req_body_other })( <Input.TextArea placeholder="备注信息" /> )} @@ -359,7 +382,8 @@ class InterfaceEditForm extends Component { : null } - <FormItem style={{ marginBottom: "5px" }} + <FormItem + className="interface-edit-item" {...formItemLayout} label="响应Body" > @@ -374,17 +398,28 @@ class InterfaceEditForm extends Component { )} </FormItem> - <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}> - <Col span={14} offset={6} id="res_body_json" style={{ minHeight: "300px", padding: "15px" }}> + <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}> + + <Col span={18} offset={4} id="res_body_json" style={{ minHeight: "300px" }}> </Col> - - </Row> - <Row style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}> - <Col span={14} offset={6} style={{ padding: "15px" }}> - {getFieldDecorator('req_body_other', { initialValue: this.state.res_body })( + <FormItem + style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }} + className="interface-edit-item" + {...formItemLayout} + label="mock预览" + > + <pre style={{backgroundColor: "#eee", lineHeight: "20px"}}> + {this.state.res_body_mock || " "} + </pre> + </FormItem> + + + <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}> + <Col span={18} offset={4} > + {getFieldDecorator('res_body', { initialValue: this.state.res_body })( <Input.TextArea placeholder="备注信息" /> )} </Col> @@ -394,6 +429,7 @@ class InterfaceEditForm extends Component { <FormItem + className="interface-edit-item" wrapperCol={{ span: 12, offset: 6 }} > <Button type="primary" htmlType="submit">Submit</Button> diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js index f7c01589..3b3763a3 100644 --- a/client/containers/Project/Interface/InterfaceList/mockEditor.js +++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js @@ -76,7 +76,7 @@ function run(options) { enableBasicAutocompletion: true, enableSnippets: false, enableLiveAutocompletion: true, - useWorker: false + useWorker: true }); mockEditor = { curData: {}, @@ -86,7 +86,7 @@ function run(options) { if (typeof data === 'string') { editor.setValue(data); } else if (typeof data === 'object') { - editor.setValue(json5.stringify(data, null, " ")) + editor.setValue(JSON.stringify(data, null, " ")) } }, editor: editor @@ -128,6 +128,7 @@ function handleJson(json) { curData.format = true; curData.jsonData = obj; curData.mockData = Mock.mock(obj); + curData.mockText = JSON.stringify(curData.mockData, null, " "); } catch (e) { curData.format = e.message; } From f504acdec848874358a645e7544d8906706b219e Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Mon, 14 Aug 2017 23:01:20 +0800 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84edit=20interfac?= =?UTF-8?q?e=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Project/Interface/InterfaceList/Edit.js | 21 ++++++++-- .../InterfaceList/InterfaceEditForm.js | 28 +++++++------ client/reducer/modules/interface.js | 23 +++++++++-- server/controllers/interface.js | 9 ++++- server/models/interface.js | 2 +- server_dist/controllers/interface.js | 39 +++++++++++-------- server_dist/models/interface.js | 2 +- 7 files changed, 87 insertions(+), 37 deletions(-) diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js index dec8220d..73a4c813 100644 --- a/client/containers/Project/Interface/InterfaceList/Edit.js +++ b/client/containers/Project/Interface/InterfaceList/Edit.js @@ -2,6 +2,9 @@ import React,{Component} from 'react' import PropTypes from 'prop-types' import { connect } from 'react-redux'; import InterfaceEditForm from './InterfaceEditForm.js' +import { updateInterfaceData } from '../../../../reducer/modules/interface.js'; +import axios from 'axios' +import {message} from 'antd' import './Edit.scss' @connect( @@ -9,16 +12,28 @@ import './Edit.scss' return { curdata: state.inter.curdata } + },{ + updateInterfaceData } ) class InterfaceEdit extends Component{ static propTypes = { - curdata: PropTypes.object + curdata: PropTypes.object, + updateInterfaceData: PropTypes.func } - onSubmit = (params)=>{ - console.log('edit', params) + onSubmit =async (params)=>{ + params.id = params._id = this.props.curdata._id; + let result =await axios.post('/api/interface/up', params); + if(result.data.errcode === 0){ + this.props.updateInterfaceData(params); + message.success('保存成功'); + }else{ + message.success(result.data.errmsg) + } + + } render(){ diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js index f7c875d3..7d9db38d 100644 --- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js +++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js @@ -9,7 +9,7 @@ const FormItem = Form.Item; const Option = Select.Option; const RadioGroup = Radio.Group; const dataTpl = { - query: { name: "", required: "1", desc: "" }, + req_query: { name: "", required: "1", desc: "" }, req_headers: { name: "", required: "1", desc: "" } } @@ -26,7 +26,7 @@ class InterfaceEditForm extends Component { constructor(props) { super(props) const { curdata } = this.props; - if (curdata.query && curdata.query.length === 0) delete curdata.query; + if (curdata.req_query && curdata.req_query.length === 0) delete curdata.req_query; if (curdata.req_headers && curdata.req_headers.length === 0) delete curdata.req_headers; if (curdata.req_body_form && curdata.req_body_form.length === 0) delete curdata.req_body_form; @@ -35,7 +35,7 @@ class InterfaceEditForm extends Component { path: '', status: 'undone', method: 'get', - query: [{ + req_query: [{ name: '', desc: '', required: "1" @@ -130,14 +130,14 @@ class InterfaceEditForm extends Component { const queryTpl = (data, index) => { return <Row key={index}> <Col span="4"> - {getFieldDecorator('query[' + index + '].name', { + {getFieldDecorator('req_query[' + index + '].name', { initialValue: data.name })( <Input placeholder="参数名称" /> )} </Col> <Col span="4" > - {getFieldDecorator('query[' + index + '].required', { + {getFieldDecorator('req_query[' + index + '].required', { initialValue: data.required })( <Select> @@ -147,14 +147,14 @@ class InterfaceEditForm extends Component { )} </Col> <Col span="8" > - {getFieldDecorator('query[' + index + '].desc', { + {getFieldDecorator('req_query[' + index + '].desc', { initialValue: data.desc })( <Input placeholder="备注" /> )} </Col> <Col span="2" > - <Icon type="delete" onClick={() => this.delParams(index, 'query')} /> + <Icon type="delete" onClick={() => this.delParams(index, 'req_query')} /> </Col> </Row> @@ -193,13 +193,15 @@ class InterfaceEditForm extends Component { const requestBodyTpl = (data, index) => { return <Row key={index}> <Col span="8"> - {getFieldDecorator('req_body_form[' + index + '].name')( + {getFieldDecorator('req_body_form[' + index + '].name',{ + initialValue: data.name + })( <Input placeholder="name" /> )} </Col> <Col span="4" > {getFieldDecorator('req_body_form[' + index + '].type', { - initialValue: 'text' + initialValue: data.type })( <Select> <Option value="text">文本</Option> @@ -208,7 +210,9 @@ class InterfaceEditForm extends Component { )} </Col> <Col span="8"> - {getFieldDecorator('req_body_form[' + index + '].desc')( + {getFieldDecorator('req_body_form[' + index + '].desc',{ + initialValue: data.desc + })( <Input placeholder="备注" /> )} </Col> @@ -218,7 +222,7 @@ class InterfaceEditForm extends Component { </Row> } - const QueryList = this.state.query.map((item, index) => { + const QueryList = this.state.req_query.map((item, index) => { return queryTpl(item, index) }) @@ -290,7 +294,7 @@ class InterfaceEditForm extends Component { {...formItemLayout} label="Query" > - <Button size="small" type="primary" onClick={() => this.addParams('query')}>添加Query参数</Button> + <Button size="small" type="primary" onClick={() => this.addParams('req_query')}>添加Query参数</Button> </FormItem> <Row className="interface-edit-item"> diff --git a/client/reducer/modules/interface.js b/client/reducer/modules/interface.js index 4dd3c3d7..2f10391b 100644 --- a/client/reducer/modules/interface.js +++ b/client/reducer/modules/interface.js @@ -5,6 +5,7 @@ const FETCH_INTERFACE_LIST = 'yapi/interface/FETCH_INTERFACE_LIST'; const CHANGE_INTERFACE_ID = 'yapi/interface/CHANGE_INTERFACE_ID'; const ADD_INTERFACE_DATA = 'yapi/interface/ADD_INTERFACE_DATA'; const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA'; +const UPDATE_INTERFACE_DATA = 'yapi/interface/UPDATE_INTERFACE_DATA'; // const SAVE_INTERFACE_PROJECT_ID = 'yapi/interface/SAVE_INTERFACE_PROJECT_ID'; // const GET_INTERFACE_GROUP_LIST = 'yapi/interface/GET_INTERFACE_GROUP_LIST'; @@ -17,11 +18,16 @@ const initialState = { export default (state = initialState, action) => { switch (action.type) { + case UPDATE_INTERFACE_DATA: + return { + ...state, + curdata: action.updata + } case DELETE_INTERFACE_DATA: return (() => { - - let newlist = state.list.filter(data=> data._id !== action.payload), newid, curdata; - + + let newlist = state.list.filter(data => data._id !== action.payload), newid, curdata; + if (state.interfaceId === action.payload && state.list.length > 0) { newid = state.list[0]._id curdata = state.list[0] @@ -72,6 +78,17 @@ export function changeInterfaceId(id) { } } +export function updateInterfaceData(updata) { + + return { + type: UPDATE_INTERFACE_DATA, + updata: updata, + payload: true + } + + +} + export async function deleteInterfaceData(id) { await axios.post('/api/interface/del', { id: id }) return { diff --git a/server/controllers/interface.js b/server/controllers/interface.js index f70a1066..9873723f 100644 --- a/server/controllers/interface.js +++ b/server/controllers/interface.js @@ -83,6 +83,10 @@ class interfaceController extends baseController { up_time: yapi.commons.time() }; + if(params.req_query){ + data.req_query = params.req_query; + } + if (params.req_body_form) { data.req_body_form = params.req_body_form; } @@ -224,10 +228,13 @@ class interfaceController extends baseController { if (params.req_headers) { data.req_headers = params.req_headers; } - + if (params.req_body_form) { data.req_body_form = params.req_body_form; } + if(params.req_query){ + data.req_query = params.req_query; + } if (params.req_body_other) { data.req_body_other = params.req_body_other; } diff --git a/server/models/interface.js b/server/models/interface.js index 2be3710a..c34b2fce 100644 --- a/server/models/interface.js +++ b/server/models/interface.js @@ -36,7 +36,7 @@ class interfaceModel extends baseModel { enum: ['form', 'json', 'text', 'file'] }, req_body_form: [{ - name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: { + name: String, type: { type: String, enum: ['text', 'file'] }, desc: String, required: { type:String, enum: ["1", "0"], default: "1" diff --git a/server_dist/controllers/interface.js b/server_dist/controllers/interface.js index 98c826cb..4f828b98 100644 --- a/server_dist/controllers/interface.js +++ b/server_dist/controllers/interface.js @@ -161,6 +161,10 @@ var interfaceController = function (_baseController) { }; + if (params.req_query) { + data.req_query = params.req_query; + } + if (params.req_body_form) { data.req_body_form = params.req_body_form; } @@ -168,28 +172,28 @@ var interfaceController = function (_baseController) { data.req_body_other = params.req_body_other; } - _context.next = 22; + _context.next = 23; return this.Model.save(data); - case 22: + case 23: result = _context.sent; ctx.body = _yapi2.default.commons.resReturn(result); - _context.next = 29; + _context.next = 30; break; - case 26: - _context.prev = 26; + case 27: + _context.prev = 27; _context.t0 = _context['catch'](16); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t0.message); - case 29: + case 30: case 'end': return _context.stop(); } } - }, _callee, this, [[16, 26]]); + }, _callee, this, [[16, 27]]); })); function add(_x) { @@ -439,6 +443,9 @@ var interfaceController = function (_baseController) { if (params.req_body_form) { data.req_body_form = params.req_body_form; } + if (params.req_query) { + data.req_query = params.req_query; + } if (params.req_body_other) { data.req_body_other = params.req_body_other; } @@ -450,29 +457,29 @@ var interfaceController = function (_baseController) { data.res_body = params.res_body; } - _context4.prev = 28; - _context4.next = 31; + _context4.prev = 29; + _context4.next = 32; return this.Model.up(id, data); - case 31: + case 32: result = _context4.sent; ctx.body = _yapi2.default.commons.resReturn(result); - _context4.next = 38; + _context4.next = 39; break; - case 35: - _context4.prev = 35; - _context4.t0 = _context4['catch'](28); + case 36: + _context4.prev = 36; + _context4.t0 = _context4['catch'](29); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context4.t0.message); - case 38: + case 39: case 'end': return _context4.stop(); } } - }, _callee4, this, [[28, 35]]); + }, _callee4, this, [[29, 36]]); })); function up(_x4) { diff --git a/server_dist/models/interface.js b/server_dist/models/interface.js index fb1a8f13..f79e30f1 100644 --- a/server_dist/models/interface.js +++ b/server_dist/models/interface.js @@ -75,7 +75,7 @@ var interfaceModel = function (_baseModel) { enum: ['form', 'json', 'text', 'file'] }, req_body_form: [{ - name: String, value: String, value_type: { type: String, enum: ['text', 'file'] }, desc: String, required: { + name: String, type: { type: String, enum: ['text', 'file'] }, desc: String, required: { type: String, enum: ["1", "0"], default: "1" From c00b55af531079c3b034e6a748763f46959c02f7 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Tue, 15 Aug 2017 11:12:39 +0800 Subject: [PATCH 13/14] feat: del prd_host and perfect the interface edit style --- client/containers/AddProject/AddProject.js | 29 +--- .../Project/Interface/InterfaceList/Edit.js | 18 ++- .../Project/Interface/InterfaceList/Edit.scss | 5 + .../InterfaceList/InterfaceEditForm.js | 84 +++++++---- client/containers/Project/Project.js | 2 +- client/reducer/modules/interface.js | 3 +- client/reducer/modules/user.js | 7 +- server/controllers/project.js | 46 +----- server/models/project.js | 4 +- server_dist/controllers/project.js | 134 ++++-------------- server_dist/models/project.js | 4 +- 11 files changed, 115 insertions(+), 221 deletions(-) diff --git a/client/containers/AddProject/AddProject.js b/client/containers/AddProject/AddProject.js index 672111e6..9e57e8fb 100644 --- a/client/containers/AddProject/AddProject.js +++ b/client/containers/AddProject/AddProject.js @@ -58,7 +58,6 @@ class ProjectList extends Component { const { form, addProject } = this.props; e.preventDefault(); form.validateFields((err, values) => { - console.log(values); if (!err) { values.protocol = this.state.protocol.split(':')[0]; @@ -110,6 +109,7 @@ class ProjectList extends Component { label="所属分组" > {getFieldDecorator('group_id', { + initialValue: this.state.groupList.length > 0? this.state.groupList[0]._id.toString() : null , rules: [{ required: true, message: '请选择项目所属的分组!' }] @@ -122,37 +122,12 @@ class ProjectList extends Component { <hr className="breakline" /> - <FormItem - {...formItemLayout} - label={( - <span> - 线上域名 - <Tooltip title="将根据配置的线上域名访问mock数据"> - <Icon type="question-circle-o" /> - </Tooltip> - </span> - )} - > - {getFieldDecorator('prd_host', { - rules: [{ - required: true, - message: '请输入项目线上域名!' - }] - })( - <Input addonBefore={( - <Select defaultValue="http://" onChange={this.protocolChange}> - <Option value="http://">{'http:\/\/'}</Option> - <Option value="https://">{'https:\/\/'}</Option> - </Select>)} /> - )} - </FormItem> - <FormItem {...formItemLayout} label={( <span> 基本路径 - <Tooltip title="基本路径为空是根路径"> + <Tooltip title="接口基本路径,为空是根路径"> <Icon type="question-circle-o" /> </Tooltip> </span> diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js index 73a4c813..55ec4acd 100644 --- a/client/containers/Project/Interface/InterfaceList/Edit.js +++ b/client/containers/Project/Interface/InterfaceList/Edit.js @@ -10,7 +10,8 @@ import './Edit.scss' @connect( state => { return { - curdata: state.inter.curdata + curdata: state.inter.curdata, + currProject: state.project.currProject } },{ updateInterfaceData @@ -20,9 +21,18 @@ import './Edit.scss' class InterfaceEdit extends Component{ static propTypes = { curdata: PropTypes.object, + currProject:PropTypes.object, updateInterfaceData: PropTypes.func } + constructor(props){ + super(props) + const {curdata, currProject} = this.props; + this.state = { + mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}/${curdata.path}` + } + } + onSubmit =async (params)=>{ params.id = params._id = this.props.curdata._id; let result =await axios.post('/api/interface/up', params); @@ -31,14 +41,12 @@ class InterfaceEdit extends Component{ message.success('保存成功'); }else{ message.success(result.data.errmsg) - } - - + } } render(){ return <div className="interface-edit"> - <InterfaceEditForm onSubmit={this.onSubmit} curdata={this.props.curdata} /> + <InterfaceEditForm mockUrl={this.state.mockUrl} basepath={this.props.currProject.basepath} onSubmit={this.onSubmit} curdata={this.props.curdata} /> </div> } } diff --git a/client/containers/Project/Interface/InterfaceList/Edit.scss b/client/containers/Project/Interface/InterfaceList/Edit.scss index ddb4a96f..2600df00 100644 --- a/client/containers/Project/Interface/InterfaceList/Edit.scss +++ b/client/containers/Project/Interface/InterfaceList/Edit.scss @@ -3,4 +3,9 @@ .interface-edit-item{ margin-bottom: 10px; } + .interface-edit-del-icon{ + margin-top: 4px; + margin-left: 5px; + cursor: pointer + } } \ No newline at end of file diff --git a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js index 7d9db38d..7bc71fc2 100644 --- a/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js +++ b/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js @@ -7,6 +7,7 @@ import { } from 'antd'; const FormItem = Form.Item; const Option = Select.Option; +const InputGroup = Input.Group; const RadioGroup = Radio.Group; const dataTpl = { req_query: { name: "", required: "1", desc: "" }, @@ -20,7 +21,9 @@ class InterfaceEditForm extends Component { static propTypes = { form: PropTypes.object, curdata: PropTypes.object, - onSubmit: PropTypes.func + mockUrl: PropTypes.string, + onSubmit: PropTypes.func, + basepath: PropTypes.string } constructor(props) { @@ -53,7 +56,8 @@ class InterfaceEditForm extends Component { res_body_type: 'json', res_body: '', desc: '', - res_body_mock: '' + res_body_mock: '', + mockUrl: this.props.mockUrl }, curdata) } @@ -80,17 +84,23 @@ class InterfaceEditForm extends Component { } }) - mockEditor({ + let resBodyEditor = mockEditor({ container: 'res_body_json', data: that.state.res_body, onChange: function (d) { - + that.setState({ res_body: d.text, res_body_mock: d.mockText }) } }) + + that.setState({ + res_body_mock: resBodyEditor.curData.mockText + }) + + } addParams = (name) => { @@ -116,16 +126,7 @@ class InterfaceEditForm extends Component { labelCol: { span: 4 }, wrapperCol: { span: 18 } }; - const prefixSelector = getFieldDecorator('method', { - initialValue: 'GET' - })( - <Select style={{ width: 75 }}> - <Option value="GET">GET</Option> - <Option value="POST">POST</Option> - <Option value="PUT">PUT</Option> - <Option value="DELETE">DELETE</Option> - </Select> - ); + const queryTpl = (data, index) => { return <Row key={index}> @@ -154,7 +155,7 @@ class InterfaceEditForm extends Component { )} </Col> <Col span="2" > - <Icon type="delete" onClick={() => this.delParams(index, 'req_query')} /> + <Icon type="delete" className="interface-edit-del-icon" onClick={() => this.delParams(index, 'req_query')} /> </Col> </Row> @@ -184,7 +185,7 @@ class InterfaceEditForm extends Component { )} </Col> <Col span="2" > - <Icon type="delete" onClick={() => this.delParams(index, 'req_headers')} /> + <Icon type="delete" className="interface-edit-del-icon" onClick={() => this.delParams(index, 'req_headers')} /> </Col> </Row> @@ -193,11 +194,11 @@ class InterfaceEditForm extends Component { const requestBodyTpl = (data, index) => { return <Row key={index}> <Col span="8"> - {getFieldDecorator('req_body_form[' + index + '].name',{ + {getFieldDecorator('req_body_form[' + index + '].name', { initialValue: data.name })( <Input placeholder="name" /> - )} + )} </Col> <Col span="4" > {getFieldDecorator('req_body_form[' + index + '].type', { @@ -210,14 +211,14 @@ class InterfaceEditForm extends Component { )} </Col> <Col span="8"> - {getFieldDecorator('req_body_form[' + index + '].desc',{ + {getFieldDecorator('req_body_form[' + index + '].desc', { initialValue: data.desc })( <Input placeholder="备注" /> - )} + )} </Col> <Col span="2" > - <Icon type="delete" onClick={() => this.delParams(index, 'req_body_form')} /> + <Icon type="delete" className="interface-edit-del-icon" onClick={() => this.delParams(index, 'req_body_form')} /> </Col> </Row> } @@ -262,7 +263,25 @@ class InterfaceEditForm extends Component { required: true, message: '清输入接口路径!' }] })( - <Input addonBefore={prefixSelector} placeholder="/path" /> + <InputGroup compact> + {getFieldDecorator('method', { + initialValue: 'GET' + })( + <Select style={{ width: "75px" }}> + <Option value="GET">GET</Option> + <Option value="POST">POST</Option> + <Option value="PUT">PUT</Option> + <Option value="DELETE">DELETE</Option> + </Select> + )} + <Input value={this.props.basepath} readOnly onChange={() => { }} style={{ width: '100px', marginRight: "10px", marginLeft: "10px" }} /> + {getFieldDecorator('path', { + initialValue: this.state.path + })( + <Input placeholder="/path" style={{ width: '350px' }} /> + )} + </InputGroup> + )} </FormItem> @@ -358,7 +377,7 @@ class InterfaceEditForm extends Component { <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('req_body_type') === 'json' ? 'block' : 'none' }}> - <Col span={18} offset={4} id="req_body_json" style={{ minHeight: "300px"}}> + <Col span={18} offset={4} id="req_body_json" style={{ minHeight: "300px" }}> </Col> </Row> @@ -403,8 +422,8 @@ class InterfaceEditForm extends Component { </FormItem> <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }}> - - <Col span={18} offset={4} id="res_body_json" style={{ minHeight: "300px" }}> + + <Col span={18} offset={4} id="res_body_json" style={{ minHeight: "300px" }}> </Col> </Row> @@ -413,13 +432,22 @@ class InterfaceEditForm extends Component { style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }} className="interface-edit-item" {...formItemLayout} - label="mock预览" + label="mock地址" > - <pre style={{backgroundColor: "#eee", lineHeight: "20px"}}> + <Input onChange={() => { }} value={this.state.mockUrl} /> + </FormItem> + + <FormItem + style={{ display: this.props.form.getFieldValue('res_body_type') === 'json' ? 'block' : 'none' }} + className="interface-edit-item" + {...formItemLayout} + label="预览" + > + <pre style={{ backgroundColor: "#eee", lineHeight: "20px" }}> {this.state.res_body_mock || " "} </pre> </FormItem> - + <Row className="interface-edit-item" style={{ display: this.props.form.getFieldValue('res_body_type') === 'raw' ? 'block' : 'none' }}> <Col span={18} offset={4} > diff --git a/client/containers/Project/Project.js b/client/containers/Project/Project.js index afd0962f..ab4137c7 100644 --- a/client/containers/Project/Project.js +++ b/client/containers/Project/Project.js @@ -12,7 +12,7 @@ import { Setting } from './Setting/Setting.js' @connect( state => { return { - curProject: state.project.curProject + curProject: state.project.currProject } }, { diff --git a/client/reducer/modules/interface.js b/client/reducer/modules/interface.js index 2f10391b..1aa3c799 100644 --- a/client/reducer/modules/interface.js +++ b/client/reducer/modules/interface.js @@ -64,7 +64,8 @@ export default (state = initialState, action) => { case FETCH_INTERFACE_LIST: return { ...state, - list: action.payload.data + list: action.payload.data, + curdata: action.payload.data.length > 0 ? action.payload.data[0] : {} } default: return state diff --git a/client/reducer/modules/user.js b/client/reducer/modules/user.js index 35f01142..8a438c98 100644 --- a/client/reducer/modules/user.js +++ b/client/reducer/modules/user.js @@ -24,15 +24,13 @@ const initialState = { export default (state = initialState, action) => { switch (action.type) { case GET_LOGIN_STATE: { - console.log(action.payload.data); return { ...state, isLogin: (action.payload.data.errcode == 0), role: action.payload.data.data ? action.payload.data.data.role:null, loginState: (action.payload.data.errcode == 0)?MEMBER_STATUS:GUEST_STATUS, userName: action.payload.data.data ? action.payload.data.data.username : null, - uid: action.payload.data.data ? action.payload.data.data._id : null, - server_ip: action.payload.data.data ? action.payload.data.data.server_ip:null + uid: action.payload.data.data ? action.payload.data.data._id : null }; } case LOGIN: { @@ -42,8 +40,7 @@ export default (state = initialState, action) => { isLogin: true, loginState: MEMBER_STATUS, uid: action.payload.data.data.uid, - userName: action.payload.data.data.username, - server_ip: action.payload.data.data.server_ip + userName: action.payload.data.data.username }; } else { return state; diff --git a/server/controllers/project.js b/server/controllers/project.js index 295e83dd..792f4c18 100644 --- a/server/controllers/project.js +++ b/server/controllers/project.js @@ -45,8 +45,6 @@ class projectController extends baseController { * @foldnumber 10 * @param {String} name 项目名称,不能为空 * @param {String} basepath 项目基本路径,不能为空 - * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据 - * @param {String} protocol 线上域名协议,不能为空 * @param {Number} group_id 项目分组id,不能为空 * @param {String} project_type private public * @param {String} [desc] 项目描述 @@ -58,8 +56,6 @@ class projectController extends baseController { params = yapi.commons.handleParams(params, { name: 'string', basepath: 'string', - prd_host: 'string', - protocol: 'string', group_id: 'number', desc: 'string' }); @@ -82,35 +78,16 @@ class projectController extends baseController { return ctx.body = yapi.commons.resReturn(null, 401, '已存在的项目名'); } - - if (!params.prd_host) { - return ctx.body = yapi.commons.resReturn(null, 400, '项目domain不能为空'); - } - params.basepath = params.basepath || ''; if ((params.basepath = this.handleBasepath(params.basepath)) === false) { return ctx.body = yapi.commons.resReturn(null, 401, 'basepath格式有误'); } - if (!this.verifyDomain(params.prd_host)) { - return ctx.body = yapi.commons.resReturn(null, 401, '线上域名格式有误'); - } - - let checkRepeatDomain = await this.Model.checkDomainRepeat(params.prd_host, params.basepath); - - if (checkRepeatDomain > 0) { - return ctx.body = yapi.commons.resReturn(null, 401, '已存在domain和basepath'); - } - - - let data = { name: params.name, desc: params.desc, - prd_host: params.prd_host, basepath: params.basepath, - protocol: params.protocol || 'http', members: [], project_type: params.project_type || 'private', uid: this.getUid(), @@ -426,7 +403,6 @@ class projectController extends baseController { * @param {Number} id 项目id,不能为空 * @param {String} name 项目名称,不能为空 * @param {String} basepath 项目基本路径,不能为空 - * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据 * @param {String} [desc] 项目描述 * @param {Array} [env] 项目环境配置 * @param {String} [env[].name] 环境名称 @@ -443,8 +419,6 @@ class projectController extends baseController { params = yapi.commons.handleParams(params, { name: 'string', basepath: 'string', - prd_host: 'string', - protocol: 'string', group_id: 'number', desc: 'string' }); @@ -462,17 +436,9 @@ class projectController extends baseController { return ctx.body = yapi.commons.resReturn(null, 401, 'basepath格式有误'); } - if (!this.verifyDomain(params.prd_host)) { - return ctx.body = yapi.commons.resReturn(null, 401, '线上域名格式有误'); - } - if (projectData.name === params.name) { delete params.name; } - if (projectData.basepath === params.basepath && projectData.prd_host === params.prd_host) { - delete params.basepath; - delete params.prd_host; - } if (params.name) { let checkRepeat = await this.Model.checkNameRepeat(params.name); @@ -481,24 +447,15 @@ class projectController extends baseController { } } - if (params.basepath && params.prd_host) { - let checkRepeatDomain = await this.Model.checkDomainRepeat(params.prd_host, params.basepath); - if (checkRepeatDomain > 0) { - return ctx.body = yapi.commons.resReturn(null, 401, '已存在domain和basepath'); - } - } - let data = { up_time: yapi.commons.time() }; if (params.name) data.name = params.name; if (params.desc) data.desc = params.desc; - if (params.prd_host ) { - data.prd_host = params.prd_host; + if (params.basepath ) { data.basepath = params.basepath; } - if (params.protocol) data.protocol = params.protocol; if (params.env) data.env = params.env; let result = await this.Model.up(id, data); @@ -550,7 +507,6 @@ class projectController extends baseController { 'members', { key: 'group_id', alias: 'groupId' }, { key: 'up_time', alias: 'upTime' }, - { key: 'prd_host', alias: 'prdHost' }, { key: 'add_time', alias: 'addTime' } ]; let groupRules = [ diff --git a/server/models/project.js b/server/models/project.js index 578589a3..5f68232d 100644 --- a/server/models/project.js +++ b/server/models/project.js @@ -17,8 +17,6 @@ class projectModel extends baseModel { members: [ {uid: Number, role: {type: String, enum:['owner', 'dev']},username: String, email: String} ], - protocol: { type: String, required: true }, - prd_host: { type: String, required: true }, env: [ { name: String, domain: String } ], @@ -60,7 +58,7 @@ class projectModel extends baseModel { list(group_id, auth) { let params = {group_id: group_id} if(!auth) params.project_type = 'public'; - return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec(); + return this.model.find(params).select("_id uid name basepath desc group_id project_type env add_time up_time").sort({ _id: -1 }).exec(); } listWithPaging(group_id, page, limit) { diff --git a/server_dist/controllers/project.js b/server_dist/controllers/project.js index eeb081f4..1306355d 100644 --- a/server_dist/controllers/project.js +++ b/server_dist/controllers/project.js @@ -116,8 +116,6 @@ var projectController = function (_baseController) { * @foldnumber 10 * @param {String} name 项目名称,不能为空 * @param {String} basepath 项目基本路径,不能为空 - * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据 - * @param {String} protocol 线上域名协议,不能为空 * @param {Number} group_id 项目分组id,不能为空 * @param {String} project_type private public * @param {String} [desc] 项目描述 @@ -129,7 +127,7 @@ var projectController = function (_baseController) { key: 'add', value: function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) { - var params, checkRepeat, checkRepeatDomain, data, result, username; + var params, checkRepeat, data, result, username; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -139,8 +137,6 @@ var projectController = function (_baseController) { params = _yapi2.default.commons.handleParams(params, { name: 'string', basepath: 'string', - prd_host: 'string', - protocol: 'string', group_id: 'number', desc: 'string' }); @@ -189,53 +185,21 @@ var projectController = function (_baseController) { return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在的项目名')); case 16: - if (params.prd_host) { - _context.next = 18; - break; - } - - return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '项目domain不能为空')); - - case 18: params.basepath = params.basepath || ''; if (!((params.basepath = this.handleBasepath(params.basepath)) === false)) { - _context.next = 21; + _context.next = 19; break; } return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, 'basepath格式有误')); - case 21: - if (this.verifyDomain(params.prd_host)) { - _context.next = 23; - break; - } - - return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '线上域名格式有误')); - - case 23: - _context.next = 25; - return this.Model.checkDomainRepeat(params.prd_host, params.basepath); - - case 25: - checkRepeatDomain = _context.sent; - - if (!(checkRepeatDomain > 0)) { - _context.next = 28; - break; - } - - return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在domain和basepath')); - - case 28: + case 19: data = { name: params.name, desc: params.desc, - prd_host: params.prd_host, basepath: params.basepath, - protocol: params.protocol || 'http', members: [], project_type: params.project_type || 'private', uid: this.getUid(), @@ -243,14 +207,14 @@ var projectController = function (_baseController) { add_time: _yapi2.default.commons.time(), up_time: _yapi2.default.commons.time() }; - _context.prev = 29; - _context.next = 32; + _context.prev = 20; + _context.next = 23; return this.Model.save(data); - case 32: + case 23: result = _context.sent; username = this.getUsername(); - _context.next = 36; + _context.next = 27; return this.logModel.save({ content: '\u7528\u6237' + username + '\u6DFB\u52A0\u4E86\u9879\u76EE' + params.name, type: 'project', @@ -259,23 +223,23 @@ var projectController = function (_baseController) { typeid: params.group_id }); - case 36: + case 27: ctx.body = _yapi2.default.commons.resReturn(result); - _context.next = 42; + _context.next = 33; break; - case 39: - _context.prev = 39; - _context.t1 = _context['catch'](29); + case 30: + _context.prev = 30; + _context.t1 = _context['catch'](20); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context.t1.message); - case 42: + case 33: case 'end': return _context.stop(); } } - }, _callee, this, [[29, 39]]); + }, _callee, this, [[20, 30]]); })); function add(_x) { @@ -1022,7 +986,6 @@ var projectController = function (_baseController) { * @param {Number} id 项目id,不能为空 * @param {String} name 项目名称,不能为空 * @param {String} basepath 项目基本路径,不能为空 - * @param {String} prd_host 项目线上域名,不能为空。可通过配置的域名访问到mock数据 * @param {String} [desc] 项目描述 * @param {Array} [env] 项目环境配置 * @param {String} [env[].name] 环境名称 @@ -1035,7 +998,7 @@ var projectController = function (_baseController) { key: 'up', value: function () { var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(ctx) { - var _id2, params, projectData, checkRepeat, checkRepeatDomain, data, result, username; + var _id2, params, projectData, checkRepeat, data, result, username; return _regenerator2.default.wrap(function _callee10$(_context10) { while (1) { @@ -1049,8 +1012,6 @@ var projectController = function (_baseController) { params = _yapi2.default.commons.handleParams(params, { name: 'string', basepath: 'string', - prd_host: 'string', - protocol: 'string', group_id: 'number', desc: 'string' }); @@ -1091,61 +1052,30 @@ var projectController = function (_baseController) { return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, 'basepath格式有误')); case 17: - if (this.verifyDomain(params.prd_host)) { - _context10.next = 19; - break; - } - - return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '线上域名格式有误')); - - case 19: if (projectData.name === params.name) { delete params.name; } - if (projectData.basepath === params.basepath && projectData.prd_host === params.prd_host) { - delete params.basepath; - delete params.prd_host; - } if (!params.name) { - _context10.next = 27; + _context10.next = 24; break; } - _context10.next = 24; + _context10.next = 21; return this.Model.checkNameRepeat(params.name); - case 24: + case 21: checkRepeat = _context10.sent; if (!(checkRepeat > 0)) { - _context10.next = 27; + _context10.next = 24; break; } return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在的项目名')); - case 27: - if (!(params.basepath && params.prd_host)) { - _context10.next = 33; - break; - } - - _context10.next = 30; - return this.Model.checkDomainRepeat(params.prd_host, params.basepath); - - case 30: - checkRepeatDomain = _context10.sent; - - if (!(checkRepeatDomain > 0)) { - _context10.next = 33; - break; - } - - return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 401, '已存在domain和basepath')); - - case 33: + case 24: data = { up_time: _yapi2.default.commons.time() }; @@ -1153,20 +1083,18 @@ var projectController = function (_baseController) { if (params.name) data.name = params.name; if (params.desc) data.desc = params.desc; - if (params.prd_host) { - data.prd_host = params.prd_host; + if (params.basepath) { data.basepath = params.basepath; } - if (params.protocol) data.protocol = params.protocol; if (params.env) data.env = params.env; - _context10.next = 41; + _context10.next = 31; return this.Model.up(_id2, data); - case 41: + case 31: result = _context10.sent; username = this.getUsername(); - _context10.next = 45; + _context10.next = 35; return this.logModel.save({ content: '\u7528\u6237' + username + '\u66F4\u65B0\u4E86\u9879\u76EE' + params.name, type: 'project', @@ -1175,24 +1103,24 @@ var projectController = function (_baseController) { typeid: _id2 }); - case 45: + case 35: ctx.body = _yapi2.default.commons.resReturn(result); - _context10.next = 51; + _context10.next = 41; break; - case 48: - _context10.prev = 48; + case 38: + _context10.prev = 38; _context10.t1 = _context10['catch'](0); ctx.body = _yapi2.default.commons.resReturn(null, 402, _context10.t1.message); - case 51: + case 41: case 'end': return _context10.stop(); } } - }, _callee10, this, [[0, 48]]); + }, _callee10, this, [[0, 38]]); })); function up(_x11) { @@ -1250,7 +1178,7 @@ var projectController = function (_baseController) { case 10: groupList = _context11.sent; - projectRules = ['_id', 'name', 'basepath', 'uid', 'env', 'members', { key: 'group_id', alias: 'groupId' }, { key: 'up_time', alias: 'upTime' }, { key: 'prd_host', alias: 'prdHost' }, { key: 'add_time', alias: 'addTime' }]; + projectRules = ['_id', 'name', 'basepath', 'uid', 'env', 'members', { key: 'group_id', alias: 'groupId' }, { key: 'up_time', alias: 'upTime' }, { key: 'add_time', alias: 'addTime' }]; groupRules = ['_id', 'uid', { key: 'group_name', alias: 'groupName' }, { key: 'group_desc', alias: 'groupDesc' }, { key: 'add_time', alias: 'addTime' }, { key: 'up_time', alias: 'upTime' }]; diff --git a/server_dist/models/project.js b/server_dist/models/project.js index d0f30aa0..a9ed7f21 100644 --- a/server_dist/models/project.js +++ b/server_dist/models/project.js @@ -54,8 +54,6 @@ var projectModel = function (_baseModel) { group_id: { type: Number, required: true }, project_type: { type: String, required: true, enum: ['public', 'private'] }, members: [{ uid: Number, role: { type: String, enum: ['owner', 'dev'] }, username: String, email: String }], - protocol: { type: String, required: true }, - prd_host: { type: String, required: true }, env: [{ name: String, domain: String }], add_time: Number, up_time: Number @@ -101,7 +99,7 @@ var projectModel = function (_baseModel) { value: function list(group_id, auth) { var params = { group_id: group_id }; if (!auth) params.project_type = 'public'; - return this.model.find(params).select("_id uid name basepath desc group_id project_type protocol prd_host env add_time up_time").sort({ _id: -1 }).exec(); + return this.model.find(params).select("_id uid name basepath desc group_id project_type env add_time up_time").sort({ _id: -1 }).exec(); } }, { key: 'listWithPaging', From fe76f992f0b0251fce75b3fb564ace43565ab8b4 Mon Sep 17 00:00:00 2001 From: sean <wenxiong.su@qunar.com> Date: Tue, 15 Aug 2017 12:05:22 +0800 Subject: [PATCH 14/14] fix: mongodb auth bug and perfect mockServer --- .../Project/Interface/InterfaceList/Edit.js | 2 +- .../Interface/InterfaceList/mockEditor.js | 2 +- server/middleware/mockServer.js | 42 +++--- server/utils/db.js | 3 +- server_dist/middleware/mockServer.js | 132 +++++++++--------- server_dist/utils/db.js | 2 +- 6 files changed, 88 insertions(+), 95 deletions(-) diff --git a/client/containers/Project/Interface/InterfaceList/Edit.js b/client/containers/Project/Interface/InterfaceList/Edit.js index 55ec4acd..698458d8 100644 --- a/client/containers/Project/Interface/InterfaceList/Edit.js +++ b/client/containers/Project/Interface/InterfaceList/Edit.js @@ -29,7 +29,7 @@ class InterfaceEdit extends Component{ super(props) const {curdata, currProject} = this.props; this.state = { - mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}/${curdata.path}` + mockUrl: location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${currProject._id}${currProject.basepath}${curdata.path}` } } diff --git a/client/containers/Project/Interface/InterfaceList/mockEditor.js b/client/containers/Project/Interface/InterfaceList/mockEditor.js index 3b3763a3..1d4d4970 100644 --- a/client/containers/Project/Interface/InterfaceList/mockEditor.js +++ b/client/containers/Project/Interface/InterfaceList/mockEditor.js @@ -86,7 +86,7 @@ function run(options) { if (typeof data === 'string') { editor.setValue(data); } else if (typeof data === 'object') { - editor.setValue(JSON.stringify(data, null, " ")) + editor.setValue(json5(data, null, " ")) } }, editor: editor diff --git a/server/middleware/mockServer.js b/server/middleware/mockServer.js index af90c30e..635535b0 100644 --- a/server/middleware/mockServer.js +++ b/server/middleware/mockServer.js @@ -8,45 +8,39 @@ module.exports = async (ctx, next) => { let hostname = ctx.hostname; let config = yapi.WEBCONFIG; + let path = ctx.path; + - if (ctx.hostname === config.webhost) { + if (path.indexOf('/mock/') !== 0) { if (next) await next(); return true; } + let paths = path.split("/"); + let projectId = paths[2]; + paths.splice(0, 3); + path = "/" + paths.join("/"); + if(!projectId){ + return ctx.body = yapi.commons.resReturn(null, 400, 'projectId不能为空'); + } + yapi.commons.log('MockServer Running...'); - let projectInst = yapi.getInst(projectModel), projects; + let projectInst = yapi.getInst(projectModel), project; try { - projects = await projectInst.getByDomain(hostname); + project = await projectInst.get(projectId); } catch (e) { return ctx.body = yapi.commons.resReturn(null, 403, e.message); } - let matchProject = [], maxBasepath = 0; - - for (let i = 0, l = projects.length; i < l; i++) { - let project = projects[i]; - if(ctx.path && project.basepath == ""){ - matchProject = project; - } - else if (ctx.path && ctx.path.indexOf(project.basepath) === 0) { - if (project.basepath.length > maxBasepath) { - maxBasepath = project.basepath.length; - matchProject = project; - } - } + if (project === false) { + return ctx.body = yapi.commons.resReturn(null, 400, '不存在的项目'); } - - if (matchProject === false) { - return ctx.body = yapi.commons.resReturn(null, 400, '不存在的domain'); - } - - let project = matchProject, interfaceData; + + let interfaceData; let interfaceInst = yapi.getInst(interfaceModel); try { - - interfaceData = await interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method); + interfaceData = await interfaceInst.getByPath(project._id, path.substr(project.basepath.length), ctx.method); if (!interfaceData || interfaceData.length === 0) { //非正常跨域预检请求回应 if(ctx.method === 'OPTIONS'){ diff --git a/server/utils/db.js b/server/utils/db.js index a427a0cf..f60a3cbb 100644 --- a/server/utils/db.js +++ b/server/utils/db.js @@ -18,10 +18,11 @@ function connect() { let config = yapi.WEBCONFIG; let options = {}; - if (config.user) { + if (config.db.user) { options.user = config.db.user; options.pass = config.db.pass; } + let db = mongoose.connect(`mongodb://${config.db.servername}:${config.db.port}/${config.db.DATABASE}`, options); diff --git a/server_dist/middleware/mockServer.js b/server_dist/middleware/mockServer.js index 2ee0428d..19ce4f24 100644 --- a/server_dist/middleware/mockServer.js +++ b/server_dist/middleware/mockServer.js @@ -12,9 +12,9 @@ var _yapi = require('../yapi.js'); var _yapi2 = _interopRequireDefault(_yapi); -var _project2 = require('../models/project.js'); +var _project = require('../models/project.js'); -var _project3 = _interopRequireDefault(_project2); +var _project2 = _interopRequireDefault(_project); var _interface = require('../models/interface.js'); @@ -28,8 +28,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de module.exports = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx, next) { - var hostname, config, projectInst, projects, matchProject, maxBasepath, i, l, _project, project, interfaceData, interfaceInst, res; - + var hostname, config, path, paths, projectId, projectInst, project, interfaceData, interfaceInst, res; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -38,82 +37,81 @@ module.exports = function () { hostname = ctx.hostname; config = _yapi2.default.WEBCONFIG; + path = ctx.path; - if (!(ctx.hostname === config.webhost)) { - _context.next = 8; + if (!(path.indexOf('/mock/') !== 0)) { + _context.next = 9; break; } if (!next) { - _context.next = 7; + _context.next = 8; break; } - _context.next = 7; + _context.next = 8; return next(); - case 7: + case 8: return _context.abrupt('return', true); - case 8: + case 9: + paths = path.split("/"); + projectId = paths[2]; - _yapi2.default.commons.log('MockServer Running...'); - projectInst = _yapi2.default.getInst(_project3.default), projects = void 0; - _context.prev = 10; - _context.next = 13; - return projectInst.getByDomain(hostname); + paths.splice(0, 3); + path = "/" + paths.join("/"); - case 13: - projects = _context.sent; - _context.next = 19; - break; - - case 16: - _context.prev = 16; - _context.t0 = _context['catch'](10); - return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 403, _context.t0.message)); - - case 19: - matchProject = [], maxBasepath = 0; - - - for (i = 0, l = projects.length; i < l; i++) { - _project = projects[i]; - - if (ctx.path && _project.basepath == "") { - matchProject = _project; - } else if (ctx.path && ctx.path.indexOf(_project.basepath) === 0) { - if (_project.basepath.length > maxBasepath) { - maxBasepath = _project.basepath.length; - matchProject = _project; - } - } - } - - if (!(matchProject === false)) { - _context.next = 23; + if (projectId) { + _context.next = 15; break; } - return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的domain')); + return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, 'projectId不能为空')); + + case 15: + + _yapi2.default.commons.log('MockServer Running...'); + projectInst = _yapi2.default.getInst(_project2.default), project = void 0; + _context.prev = 17; + _context.next = 20; + return projectInst.get(projectId); + + case 20: + project = _context.sent; + _context.next = 26; + break; case 23: - project = matchProject, interfaceData = void 0; - interfaceInst = _yapi2.default.getInst(_interface2.default); - _context.prev = 25; - _context.next = 28; - return interfaceInst.getByPath(project._id, ctx.path.substr(project.basepath.length), ctx.method); + _context.prev = 23; + _context.t0 = _context['catch'](17); + return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 403, _context.t0.message)); + + case 26: + if (!(project === false)) { + _context.next = 28; + break; + } + + return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的项目')); case 28: + interfaceData = void 0; + interfaceInst = _yapi2.default.getInst(_interface2.default); + _context.prev = 30; + _context.next = 33; + return interfaceInst.getByPath(project._id, path.substr(project.basepath.length), ctx.method); + + case 33: interfaceData = _context.sent; if (!(!interfaceData || interfaceData.length === 0)) { - _context.next = 35; + _context.next = 40; break; } if (!(ctx.method === 'OPTIONS')) { - _context.next = 34; + _context.next = 39; break; } @@ -121,54 +119,54 @@ module.exports = function () { ctx.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); return _context.abrupt('return', ctx.body = 'ok'); - case 34: + case 39: return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 404, '不存在的api')); - case 35: + case 40: if (!(interfaceData.length > 1)) { - _context.next = 37; + _context.next = 42; break; } return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 405, '存在多个api,请检查数据库')); - case 37: + case 42: interfaceData = interfaceData[0]; ctx.set("Access-Control-Allow-Origin", "*"); if (!(interfaceData.res_body_type === 'json')) { - _context.next = 48; + _context.next = 53; break; } - _context.prev = 40; + _context.prev = 45; res = _mockjs2.default.mock(_yapi2.default.commons.json_parse(interfaceData.res_body)); return _context.abrupt('return', ctx.body = res); - case 45: - _context.prev = 45; - _context.t1 = _context['catch'](40); + case 50: + _context.prev = 50; + _context.t1 = _context['catch'](45); return _context.abrupt('return', ctx.body = { errcode: 400, errmsg: 'mock json数据格式有误', data: interfaceData.res_body }); - case 48: + case 53: return _context.abrupt('return', ctx.body = interfaceData.res_body); - case 51: - _context.prev = 51; - _context.t2 = _context['catch'](25); + case 56: + _context.prev = 56; + _context.t2 = _context['catch'](30); return _context.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 409, _context.t2.message)); - case 54: + case 59: case 'end': return _context.stop(); } } - }, _callee, undefined, [[10, 16], [25, 51], [40, 45]]); + }, _callee, undefined, [[17, 23], [30, 56], [45, 50]]); })); return function (_x, _x2) { diff --git a/server_dist/utils/db.js b/server_dist/utils/db.js index 21aae9bd..0f95f066 100644 --- a/server_dist/utils/db.js +++ b/server_dist/utils/db.js @@ -30,7 +30,7 @@ function connect() { var config = _yapi2.default.WEBCONFIG; var options = {}; - if (config.user) { + if (config.db.user) { options.user = config.db.user; options.pass = config.db.pass; }