Commit c0afe12f by shenjinzhu

web页面提交

parent f810a2a7
...@@ -29,6 +29,13 @@ public class Message implements Serializable { ...@@ -29,6 +29,13 @@ public class Message implements Serializable {
private Date handleDate; private Date handleDate;
private String handler; private String handler;
private String pt; private String pt;
private String handleMsg;
public String getHandleMsg() {
return handleMsg;
}
public void setHandleMsg(String handleMsg) {
this.handleMsg = handleMsg;
}
public String getPt() { public String getPt() {
return pt; return pt;
} }
...@@ -96,12 +103,7 @@ public class Message implements Serializable { ...@@ -96,12 +103,7 @@ public class Message implements Serializable {
public String toString() { public String toString() {
return "Message [messageId=" + messageId + ", templateName=" + templateName + ", createDate=" + createDate return "Message [messageId=" + messageId + ", templateName=" + templateName + ", createDate=" + createDate
+ ", errorMsg=" + errorMsg + ", templateLv=" + templateLv + ", templateCreator=" + templateCreator + ", errorMsg=" + errorMsg + ", templateLv=" + templateLv + ", templateCreator=" + templateCreator
+ ", handle=" + handle + ", handleDate=" + handleDate + ", handler=" + handler + "]"; + ", handle=" + handle + ", handleDate=" + handleDate + ", handler=" + handler + ", pt=" + pt
+ ", handleMsg=" + handleMsg + "]";
} }
} }
...@@ -51,6 +51,7 @@ public class MessageDaoImpl implements MessageDao { ...@@ -51,6 +51,7 @@ public class MessageDaoImpl implements MessageDao {
obj.put("handle", message.isHandle()); obj.put("handle", message.isHandle());
obj.put("handleDate", new Date()); obj.put("handleDate", new Date());
obj.put("handler", message.getHandler()); obj.put("handler", message.getHandler());
obj.put("handleMsg", message.getHandleMsg());
DBObject update = new BasicDBObject(); DBObject update = new BasicDBObject();
update.put("$set", obj); update.put("$set", obj);
WriteResult result = con.update(new BasicDBObject("_id", new ObjectId(message.getMessageId())), update, false, WriteResult result = con.update(new BasicDBObject("_id", new ObjectId(message.getMessageId())), update, false,
......
...@@ -39,6 +39,7 @@ public class MessageConteoller { ...@@ -39,6 +39,7 @@ public class MessageConteoller {
@RequestMapping(value = "/handle", produces = "application/json;charset=utf-8") @RequestMapping(value = "/handle", produces = "application/json;charset=utf-8")
@ResponseBody @ResponseBody
public String handle(Message message,@RequestParam(value = "pt", defaultValue = "网媒")String pt) { public String handle(Message message,@RequestParam(value = "pt", defaultValue = "网媒")String pt) {
System.out.println(message);
String str = msgService.update(message,pt); String str = msgService.update(message,pt);
JsonResult result = new JsonResult(true, 200, str, ""); JsonResult result = new JsonResult(true, 200, str, "");
return JSON.toJSONString(result); return JSON.toJSONString(result);
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<context:component-scan base-package="com.zhiwei.manage.servlet" /> <context:component-scan base-package="com.zhiwei.manage.servlet" />
<mvc:default-servlet-handler /> <mvc:default-servlet-handler />
<mvc:annotation-driven /> <mvc:annotation-driven />
<mvc:resources mapping="./static/**" location="/datamanage/dist/static/" /> <mvc:resources mapping="/static/**" location="/datamanage/dist/static/" />
<!-- ViewResolver --> <!-- ViewResolver -->
<bean <bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> class="org.springframework.web.servlet.view.InternalResourceViewResolver">
......
...@@ -45,7 +45,8 @@ exports.cssLoaders = function (options) { ...@@ -45,7 +45,8 @@ exports.cssLoaders = function (options) {
if (options.extract) { if (options.extract) {
return ExtractTextPlugin.extract({ return ExtractTextPlugin.extract({
use: loaders, use: loaders,
fallback: 'vue-style-loader' fallback: 'vue-style-loader',
publicPath: '../../'
}) })
} else { } else {
return ['vue-style-loader'].concat(loaders) return ['vue-style-loader'].concat(loaders)
......
...@@ -62,7 +62,7 @@ module.exports = { ...@@ -62,7 +62,7 @@ module.exports = {
// Paths // Paths
assetsRoot: path.resolve(__dirname, '../dist'), assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static', assetsSubDirectory: './static',
assetsPublicPath: './', assetsPublicPath: './',
/** /**
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<!-- 如果修改了 nav 中的 list 列表,不要忘了重新配置一下 navAutoShow 方法(就在下面) --> <!-- 如果修改了 nav 中的 list 列表,不要忘了重新配置一下 navAutoShow 方法(就在下面) -->
<div v-if="userInfo.lv >= 2" class="list-title icon-1" :class="{ 'active': toggle.listTitle === 0 }" @click="toggle.listTitle = 0"> <div v-if="userInfo.lv >= 2" class="list-title icon-1" :class="{ 'active': toggle.listTitle === 0 }" @click="toggle.listTitle = 0">
<a href="javascirpt:void(0)">检测模块</a> <a href="javascirpt:void(0)">检测模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div v-if="userInfo.lv >= 2" class="list-item"> <div v-if="userInfo.lv >= 2" class="list-item">
<router-link :class="{ 'active': $route.path === '/checkInfo' }" :to="{ path: '/checkInfo' }">检测信息</router-link> <router-link :class="{ 'active': $route.path === '/checkInfo' }" :to="{ path: '/checkInfo' }">检测信息</router-link>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</div> </div>
<div class="list-title icon-2" :class="{ 'active': toggle.listTitle === 1 }" @click="toggle.listTitle = 1"> <div class="list-title icon-2" :class="{ 'active': toggle.listTitle === 1 }" @click="toggle.listTitle = 1">
<a href="javascirpt:void(0)">数据模块</a> <a href="javascirpt:void(0)">数据模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div class="list-item"> <div class="list-item">
<router-link :class="{ 'active': $route.path === '/channelData' }" :to="{ path: '/channelData' }">渠道数据</router-link> <router-link :class="{ 'active': $route.path === '/channelData' }" :to="{ path: '/channelData' }">渠道数据</router-link>
...@@ -39,14 +39,14 @@ ...@@ -39,14 +39,14 @@
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-title icon-3" :class="{ 'active': toggle.listTitle === 2 }" @click="toggle.listTitle = 2"> <div v-if="userInfo.lv >= 3" class="list-title icon-3" :class="{ 'active': toggle.listTitle === 2 }" @click="toggle.listTitle = 2">
<a href="javascirpt:void(0)">用户模块</a> <a href="javascirpt:void(0)">用户模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-item"> <div v-if="userInfo.lv >= 3" class="list-item">
<router-link :class="{ 'active': $route.path === '/userManage' }" :to="{ path: '/userManage' }">用户管理</router-link> <router-link :class="{ 'active': $route.path === '/userManage' }" :to="{ path: '/userManage' }">用户管理</router-link>
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-title icon-4" :class="{ 'active': toggle.listTitle === 3 }" @click="toggle.listTitle = 3"> <div v-if="userInfo.lv >= 3" class="list-title icon-4" :class="{ 'active': toggle.listTitle === 3 }" @click="toggle.listTitle = 3">
<a href="javascirpt:void(0)">配置模块</a> <a href="javascirpt:void(0)">配置模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-item"> <div v-if="userInfo.lv >= 3" class="list-item">
<router-link :class="{ 'active': $route.path === '/databaseInfo' }" :to="{ path: '/databaseInfo' }">数据库信息</router-link> <router-link :class="{ 'active': $route.path === '/databaseInfo' }" :to="{ path: '/databaseInfo' }">数据库信息</router-link>
...@@ -287,8 +287,8 @@ body{ ...@@ -287,8 +287,8 @@ body{
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 5px center; background-position: 5px center;
background-size: 24px auto; background-size: 24px auto;
&:nth-of-type(1){ background-image: url('/static/img/user.png'); } &:nth-of-type(1){ background-image: url('~static/img/user.png'); }
&:nth-of-type(2){ background-image: url('/static/img/exit.png'); } &:nth-of-type(2){ background-image: url('~static/img/exit.png'); }
} }
.logout{ .logout{
transition: all 0.2s ease; transition: all 0.2s ease;
...@@ -323,7 +323,7 @@ body{ ...@@ -323,7 +323,7 @@ body{
height: 50px; height: 50px;
line-height: 180px; line-height: 180px;
overflow: hidden; overflow: hidden;
background-image: url('/static/img/nav-title.png'); background-image: url('~static/img/nav-title.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
margin-bottom: 20px; margin-bottom: 20px;
...@@ -396,10 +396,10 @@ body{ ...@@ -396,10 +396,10 @@ body{
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 40px 40px; background-size: 40px 40px;
background-position: 20px center; background-position: 20px center;
&.icon-1{ background-image: url('/static/img/list-1.png'); } &.icon-1{ background-image: url('~static/img/list-1.png'); }
&.icon-2{ background-image: url('/static/img/list-2.png'); } &.icon-2{ background-image: url('~static/img/list-2.png'); }
&.icon-3{ background-image: url('/static/img/list-3.png'); } &.icon-3{ background-image: url('~static/img/list-3.png'); }
&.icon-4{ background-image: url('/static/img/list-4.png'); } &.icon-4{ background-image: url('~static/img/list-4.png'); }
img{ img{
position: absolute; position: absolute;
right: 20px; right: 20px;
...@@ -537,7 +537,7 @@ body{ ...@@ -537,7 +537,7 @@ body{
border-radius: 3px; border-radius: 3px;
border: 1px solid #4E5560; border: 1px solid #4E5560;
background-color: #262D33; background-color: #262D33;
background-image: url('/static/img/search.png'); background-image: url('~static/img/search.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 10px center; background-position: 10px center;
padding: 3px 6px 3px 45px; padding: 3px 6px 3px 45px;
...@@ -546,7 +546,7 @@ body{ ...@@ -546,7 +546,7 @@ body{
font-size: 16px; font-size: 16px;
&:focus{ &:focus{
border-color: #49B0F7; border-color: #49B0F7;
background-image: url('/static/img/search_focus.png'); background-image: url('~static/img/search_focus.png');
} }
&::-webkit-input-placeholder { /* WebKit browsers */ &::-webkit-input-placeholder { /* WebKit browsers */
color: #868D93; color: #868D93;
...@@ -797,7 +797,7 @@ body{ ...@@ -797,7 +797,7 @@ body{
display: block; display: block;
width: 40px; width: 40px;
height: 40px; height: 40px;
background-image: url('/static/img/close.png'); background-image: url('~static/img/close.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
float: right; float: right;
......
export const getPageList = (params) => {
let displayCount = params.displayCount // 显示的页面总数(最大值)
let page = params.page // 当前页面
let pages = params.pages // 总页数
let limit = []
for (let i = 1; i <= pages; i++) {
limit.push(i)
}
if (displayCount >= pages) return limit
if (Math.ceil(displayCount / 2) > page) {
return limit.slice(0, displayCount)
} else if (pages - page < Math.ceil(displayCount / 2)) {
return limit.slice(pages - displayCount, pages)
} else {
return limit.slice(page - Math.ceil(displayCount / 2), page + Math.floor(displayCount / 2))
}
}
...@@ -228,7 +228,7 @@ export default { ...@@ -228,7 +228,7 @@ export default {
border: 1px solid #525A65; border: 1px solid #525A65;
color: #4F5762; color: #4F5762;
text-align: center; text-align: center;
background-image: url('/static/img/select_01.png'); background-image: url('~static/img/select_01.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
background-position: right; background-position: right;
...@@ -250,7 +250,7 @@ export default { ...@@ -250,7 +250,7 @@ export default {
height: 31px; height: 31px;
background-color: #000; background-color: #000;
border: 1px solid #394048; border: 1px solid #394048;
background-image: url('/static/img/select_02.png'); background-image: url('~static/img/select_02.png');
} }
} }
} }
......
<template lang="html">
<div class="channelTableInfoVue">
<div class="title">
<div class="right">
<button type="button" class="btn1" @click="popup.channelAdd = true">新建</button>
<button type="button" class="btn1" @click="del()">删除</button>
</div>
</div>
<div class="table">
<table>
<tr>
<td>编号</td>
<td>渠道</td>
<td>参数</td>
<td>详情</td>
<td>标记</td>
</tr>
<tr v-for="n,i in channelData.data">
<td>{{ i + 1 + (page - 1) * 10 }}.</td>
<td>{{ n.pt }}</td>
<td>{{ n.value }}</td>
<td>
<button type="button" class="btn2" @click="popup.channelDetails = true, childrenData = n">详情</button>
</td>
<td>
<label :for="'checkbox' + i" class="checkbox">
<input type="checkbox" name="" value="" :id="'checkbox' + i" v-model="checkbox[i]">
<span></span>
</label>
</td>
</tr>
<tr class="empty" v-for="n,i in freeList">
<td><!-- 编号 --></td>
<td><!-- 渠道 --></td>
<td><!-- 参数 --></td>
<td><!-- 详情 --></td>
<td><!-- 标记 --></td>
</tr>
</table>
<div class="pageList">
<div @click="page = page - 1 < 1 ? 1 : page - 1">Provious</div>
<div @click="page = n" :class="{ 'active': page === n }" v-for="n,i in pageList">{{ n }}</div>
<div @click="page = page + 1 > pages ? pages : page + 1">Next</div> / 总共 {{ channelData.pageCount || 1 }}
</div>
</div>
<!-- 检测模板详情 -->
<div class="mask" v-if="popup.channelDetails">
<channel-details @close="popup.channelDetails = false" :children-data="childrenData" @update="getChannel()" />
</div>
<!-- 删除模板 -->
<div class="mask" v-if="popup.channelDelete">
<channel-delete @close="popup.channelDelete = false" :children-data="childrenData" @update="getChannel()" :checked-channel="checkedChannel" @clear-checkbox="clearCheckbox()" />
</div>
<!-- 新建模板 -->
<div class="mask" v-if="popup.channelAdd">
<channel-add @close="popup.channelAdd = false" :userInfo="userInfo" @update="getChannel()" />
</div>
</div>
</template>
<script>
import channelDetails from '@/components/module/channelDetails'
import channelDelete from '@/components/module/channelDelete'
import channelAdd from '@/components/module/channelAdd'
import { bus, requestGetChannel } from '@/vuex/request.js'
import { getPageList } from '@/assets/js/get-page-list.js'
export default {
components: {
channelDetails,
channelDelete,
channelAdd
},
data () {
return {
page: 0,
pages: 7,
pageList: [1],
popup: {
channelDetails: false,
channelDelete: false,
channelAdd: false
},
checkbox: [false, false, false, false, false, false, false, false, false, false],
// tempName: '',
channelData: {},
freeList: 10,
pageSize: 10,
childrenData: {},
checkedChannel: []
}
},
props: ['userInfo'],
mounted () {
this.page = 1
},
methods: {
clearCheckbox () {
this.checkbox = [false, false, false, false, false, false, false, false, false, false]
},
del () {
if (!this.checkbox.some((n, i) => { return n === true })) {
bus.$emit('alert', '您没有选择任何选项!')
} else {
this.popup.channelDelete = true
this.checkedChannel = []
this.checkbox.forEach((n, i) => {
if (n) {
this.checkedChannel.push(this.channelData.data[i])
}
})
}
},
getChannel () {
let pageSize = this.pageSize
let params = {
pageNo: this.page,
pageSize: pageSize
// tempName: this.tempName
}
requestGetChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.channelData = response.data.data
this.pages = response.data.data.pageCount
this.pageList = getPageList({
displayCount: 7, // 显示的页面总数(最大值)
page: Math.max(this.page, 1), // 当前页面
pages: Math.max(response.data.data.pageCount, 1) // 总页数
})
this.freeList = this.page === response.data.data.pageCount ? pageSize - (response.data.data.dataCount % pageSize === 0 ? pageSize : response.data.data.dataCount % pageSize) : 0
if (!response.data.data.data.length) {
this.freeList = 10
}
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
page (val, oldVal) {
this.getChannel()
}
}
}
</script>
<style lang="scss" scoped>
.channelTableInfoVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
.title{
padding: 15px 0;
overflow: hidden;
.right{
float: right;
height: 100%;
vertical-align: middle;
text-align: right;
line-height: 36px;
button:nth-of-type(n + 2){
margin-left: 10px;
}
}
}
}
.pageList{
margin-top: 30px;
margin-bottom: 10px;
}
</style>
<template lang="html">
<div class="databaseInfoVue">
<div class="title">
<input type="text" name="" value="" class="searchInput" spellcheck="false" placeholder="数据库" v-model="dbName" @keydown.enter="getServer()">
<div class="right">
<button type="button" class="btn1" @click="popup.databaseAdd = true">新建</button>
<button type="button" class="btn1" @click="del()">删除</button>
</div>
</div>
<div class="table">
<table>
<tr>
<td>编号</td>
<td>数据库名</td>
<td>地址</td>
<td>端口</td>
<td>渠道</td>
<td>功能</td>
<td>数据库类型</td>
<td>是否分表</td>
<td>分表种类</td>
<td>详情</td>
<td>标记</td>
</tr>
<tr v-for="n,i in DatabaseData.data">
<td>{{ i + 1 + (page - 1) * 10 }}.</td>
<td>
<p class="lengthLimit">{{ n.dbName }}</p>
</td>
<td>{{ n.dbHost }}</td>
<td>{{ n.dbPort }}</td>
<td>{{ n.pt }}</td>
<td>{{ n.effect }}</td>
<td>{{ n.dbType }}</td>
<td>
<span :class="{'tableTrue': n.table}">{{ n.table ? '✔' : '✖' }}</span>
</td>
<td>{{ n.tableKind }}</td>
<td>
<button type="button" class="btn2" @click="popup.databaseDetails = true, childrenData = n">详情</button>
</td>
<td>
<label :for="'checkbox' + i" class="checkbox">
<input type="checkbox" name="" value="" :id="'checkbox' + i" v-model="checkbox[i]">
<span></span>
</label>
</td>
</tr>
<tr class="empty" v-for="n,i in freeList">
<td><!-- 编号 --></td>
<td><!-- 数据库名 --></td>
<td><!-- 地址 --></td>
<td><!-- 端口 --></td>
<td><!-- 渠道 --></td>
<td><!-- 功能 --></td>
<td><!-- 数据库类型 --></td>
<td><!-- 是否分表 --></td>
<td><!-- 分表种类 --></td>
<td><!-- 详情 --></td>
<td><!-- 标记 --></td>
</tr>
</table>
<div class="pageList">
<div @click="page = page - 1 < 1 ? 1 : page - 1">Provious</div>
<div @click="page = n" :class="{ 'active': page === n }" v-for="n,i in pageList">{{ n }}</div>
<div @click="page = page + 1 > pages ? pages : page + 1">Next</div> / 总共 {{ DatabaseData.pageCount || 1 }}
</div>
</div>
<!-- 检测模板详情 -->
<div class="mask" v-if="popup.databaseDetails">
<database-details @close="popup.databaseDetails = false" :children-data="childrenData" @update="getServer()" :param-data="paramData" />
</div>
<!-- 删除模板 -->
<div class="mask" v-if="popup.databaseDelete">
<database-delete @close="popup.databaseDelete = false" @update="getServer()" :checked-database="checkedDatabase" @clear-checkbox="clearCheckbox()" />
</div>
<!-- 新建模板 -->
<div class="mask" v-if="popup.databaseAdd">
<database-add @close="popup.databaseAdd = false" :userInfo="userInfo" @update="getServer()" :param-data="paramData" />
</div>
</div>
</template>
<script>
import databaseDetails from '@/components/module/databaseDetails'
import databaseDelete from '@/components/module/databaseDelete'
import databaseAdd from '@/components/module/databaseAdd'
import { bus, requestGetServer, requestStartTmp, requestStopTmp, requestGetParam } from '@/vuex/request.js'
import { getPageList } from '@/assets/js/get-page-list.js'
export default {
components: {
databaseDetails,
databaseDelete,
databaseAdd
},
data () {
return {
page: 0,
pages: 7,
pageList: [1],
popup: {
databaseDetails: false,
databaseDelete: false,
databaseAdd: false
},
checkbox: [false, false, false, false, false, false, false, false, false, false],
dbName: '',
DatabaseData: {},
freeList: 10,
pageSize: 10,
childrenData: {},
checkedDatabase: [],
paramData: []
}
},
props: ['userInfo'],
mounted () {
this.page = 1
this.getParamData()
},
methods: {
getParamData () {
requestGetParam((response) => {
if (response.data) {
if (response.data.state) {
this.paramData = response.data.data
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
},
clearCheckbox () {
this.checkbox = [false, false, false, false, false, false, false, false, false, false]
},
tempToggle (i) {
let params = {
templateId: this.DatabaseData.data[i].templateId
}
if (!this.toggle[i]) {
requestStartTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.getServer()
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
} else {
requestStopTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.getServer()
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
del () {
if (!this.checkbox.some((n, i) => { return n === true })) {
bus.$emit('alert', '您没有选择任何选项!')
} else {
this.popup.databaseDelete = true
this.checkedDatabase = []
this.checkbox.forEach((n, i) => {
if (n) {
this.checkedDatabase.push(this.DatabaseData.data[i])
}
})
}
},
getServer () {
let pageSize = this.pageSize
let params = {
pageNo: this.page,
pageSize: pageSize,
dbName: this.dbName
}
requestGetServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.DatabaseData = response.data.data
this.pages = response.data.data.pageCount
this.pageList = getPageList({
displayCount: 7, // 显示的页面总数(最大值)
page: Math.max(this.page, 1), // 当前页面
pages: Math.max(response.data.data.pageCount, 1) // 总页数
})
this.freeList = this.page === response.data.data.pageCount ? pageSize - (response.data.data.dataCount % pageSize === 0 ? pageSize : response.data.data.dataCount % pageSize) : 0
if (!response.data.data.data.length) {
this.freeList = 10
}
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
page (val, oldVal) {
this.getServer()
}
}
}
</script>
<style lang="scss" scoped>
.databaseInfoVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
.title{
padding: 15px 0;
.right{
float: right;
height: 100%;
vertical-align: middle;
text-align: right;
line-height: 36px;
button:nth-of-type(n + 2){
margin-left: 10px;
}
}
}
}
.tableTrue{
// display: inline-block;
// transform: scale(1.5);
color: #49b0f7;
}
.pageList{
margin-top: 30px;
margin-bottom: 10px;
}
</style>
...@@ -320,7 +320,7 @@ export default { ...@@ -320,7 +320,7 @@ export default {
border: 1px solid #525A65; border: 1px solid #525A65;
color: #4F5762; color: #4F5762;
text-align: center; text-align: center;
background-image: url('/static/img/select_01.png'); background-image: url('~static/img/select_01.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
background-position: right; background-position: right;
...@@ -385,7 +385,7 @@ export default { ...@@ -385,7 +385,7 @@ export default {
height: 31px; height: 31px;
background-color: #000; background-color: #000;
border: 1px solid #394048; border: 1px solid #394048;
background-image: url('/static/img/select_02.png'); background-image: url('~static/img/select_02.png');
} }
} }
} }
......
<template lang="html">
<div class="fieldTableInfoVue">
<div class="title">
<input type="text" name="" value="" class="searchInput" spellcheck="false" placeholder="渠道" v-model="pt" @keydown.enter="getFields()">
<div class="right">
<button type="button" class="btn1" @click="popup.fieldAdd = true">新建</button>
<button type="button" class="btn1" @click="del()">删除</button>
</div>
</div>
<div class="table">
<table>
<tr>
<td>编号</td>
<td>数据库名</td>
<td>表名</td>
<td>字段长度</td>
<td>所属渠道</td>
<td>详细信息</td>
<td>标记</td>
</tr>
<tr v-for="n,i in fieldData.data">
<td>{{ i + 1 + (page - 1) * 10 }}.</td>
<td>
<p class="lengthLimit" :title="n.dbName">{{ n.dbName }}</p>
</td>
<td>{{ n.collection }}</td>
<td>{{ n.fieldSize }}</td>
<td>{{ n.pt }}</td>
<td>
<button type="button" class="btn2" @click="popup.fieldDetails = true, childrenData = n">详情</button>
</td>
<td>
<label :for="'checkbox' + i" class="checkbox">
<input type="checkbox" name="" value="" :id="'checkbox' + i" v-model="checkbox[i]">
<span></span>
</label>
</td>
</tr>
<tr class="empty" v-for="n,i in freeList">
<td><!-- 编号 --></td>
<td><!-- 数据库名 --></td>
<td><!-- 表名 --></td>
<td><!-- 字段长度 --></td>
<td><!-- 所属渠道 --></td>
<td><!-- 详细信息 --></td>
<td><!-- 标记 --></td>
</tr>
</table>
<div class="pageList">
<div @click="page = page - 1 < 1 ? 1 : page - 1">Provious</div>
<div @click="page = n" :class="{ 'active': page === n }" v-for="n,i in pageList">{{ n }}</div>
<div @click="page = page + 1 > pages ? pages : page + 1">Next</div> / 总共 {{ fieldData.pageCount || 1 }}
</div>
</div>
<!-- 检测模板详情 -->
<div class="mask" v-if="popup.fieldDetails">
<field-details @close="popup.fieldDetails = false" :children-data="childrenData" @update="getFields()" :channel-msg-data="channelMsgData" />
</div>
<!-- 删除模板 -->
<div class="mask" v-if="popup.fieldDelete">
<field-delete @close="popup.fieldDelete = false" :children-data="childrenData" @update="getFields()" :checked-field="checkedField" @clear-checkbox="clearCheckbox()" />
</div>
<!-- 新建模板 -->
<div class="mask" v-if="popup.fieldAdd">
<field-add @close="popup.fieldAdd = false" :userInfo="userInfo" @update="getFields()" :channel-msg-data="channelMsgData" />
</div>
</div>
</template>
<script>
import fieldDetails from '@/components/module/fieldDetails'
import fieldDelete from '@/components/module/fieldDelete'
import fieldAdd from '@/components/module/fieldAdd'
import { bus, requestGetFields, requestGetDisChannel } from '@/vuex/request.js'
import { getPageList } from '@/assets/js/get-page-list.js'
export default {
components: {
fieldDetails,
fieldDelete,
fieldAdd
},
data () {
return {
page: 0,
pages: 7,
pageList: [1],
popup: {
fieldDetails: false,
fieldDelete: false,
fieldAdd: false
},
checkbox: [false, false, false, false, false, false, false, false, false, false],
pt: '',
fieldData: {},
freeList: 10,
pageSize: 10,
childrenData: {},
checkedField: [],
channelMsgData: []
}
},
props: ['userInfo'],
mounted () {
this.page = 1
this.getDisChannel()
},
methods: {
getDisChannel () {
requestGetDisChannel((response) => {
if (response.data) {
if (response.data.state) {
this.channelMsgData = response.data.data
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
},
clearCheckbox () {
this.checkbox = [false, false, false, false, false, false, false, false, false, false]
},
del () {
if (!this.checkbox.some((n, i) => { return n === true })) {
bus.$emit('alert', '您没有选择任何选项!')
} else {
this.popup.fieldDelete = true
this.checkedField = []
this.checkbox.forEach((n, i) => {
if (n) {
this.checkedField.push(this.fieldData.data[i])
}
})
}
},
getFields () {
let pageSize = this.pageSize
let params = {
pageNo: this.page,
pageSize: pageSize,
pt: this.pt
}
requestGetFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.fieldData = response.data.data
this.pages = response.data.data.pageCount
this.pageList = getPageList({
displayCount: 7, // 显示的页面总数(最大值)
page: Math.max(this.page, 1), // 当前页面
pages: Math.max(response.data.data.pageCount, 1) // 总页数
})
this.freeList = this.page === response.data.data.pageCount ? pageSize - (response.data.data.dataCount % pageSize === 0 ? pageSize : response.data.data.dataCount % pageSize) : 0
if (!response.data.data.data.length) {
this.freeList = 10
}
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
page (val, oldVal) {
this.getFields()
}
}
}
</script>
<style lang="scss" scoped>
.fieldTableInfoVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
.title{
padding: 15px 0;
.right{
float: right;
height: 100%;
vertical-align: middle;
text-align: right;
line-height: 36px;
button:nth-of-type(n + 2){
margin-left: 10px;
}
}
}
}
.pageList{
margin-top: 30px;
margin-bottom: 10px;
}
</style>
<template lang="html"> <template lang="html">
<div class="loginVue"> <div class="loginVue">
<img src="static/img/logo.png" alt="" class="logo"> <img src="~static/img/logo.png" alt="" class="logo">
<div class="loginForm"> <div class="loginForm">
<div class="title"> <div class="title">
<img src="static/img/login_title.png" alt=""> <img src="~static/img/login_title.png" alt="">
</div> </div>
<div class="form"> <div class="form">
<input type="text" name="username" class="username" v-model="username" spellcheck="false" placeholder="User name" @keydown.enter="login()"> <input type="text" name="username" class="username" v-model="username" spellcheck="false" placeholder="User name" @keydown.enter="login()">
...@@ -68,7 +68,7 @@ export default { ...@@ -68,7 +68,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.loginVue{ .loginVue{
padding: 15px 45px 0 45px; padding: 15px 45px 0 45px;
background-image: url('/static/img/bg.png'); background-image: url('~static/img/bg.png');
.loginForm{ .loginForm{
position: absolute; position: absolute;
left: 50%; left: 50%;
...@@ -101,18 +101,18 @@ export default { ...@@ -101,18 +101,18 @@ export default {
background-position: right center; background-position: right center;
&.username{ &.username{
margin-bottom: 30px; margin-bottom: 30px;
background-image: url('/static/img/username_1.png'); background-image: url('~static/img/username_1.png');
&:focus{ &:focus{
border-bottom-color: #49AFF7; border-bottom-color: #49AFF7;
background-image: url('/static/img/username_2.png'); background-image: url('~static/img/username_2.png');
} }
} }
&.password{ &.password{
margin-bottom: 10px; margin-bottom: 10px;
background-image: url('/static/img/password_1.png'); background-image: url('~static/img/password_1.png');
&:focus{ &:focus{
border-bottom-color: #49AFF7; border-bottom-color: #49AFF7;
background-image: url('/static/img/password_2.png'); background-image: url('~static/img/password_2.png');
} }
} }
&::-webkit-input-placeholder { /* WebKit browsers */ &::-webkit-input-placeholder { /* WebKit browsers */
......
<template lang="html">
<div class="NotFoundComponentVue">
<h1>您访问的页面不存在 :(</h1>
<h3>{{ timeout }} 秒后返回上一个页面</h3>
</div>
</template>
<script>
export default {
data () {
return {
timeout: 3
}
},
mounted () {
let timer = setInterval(() => {
this.timeout--
if (this.timeout < 0) {
window.history.back()
clearInterval(timer)
}
}, 1000)
}
}
</script>
<style lang="scss" scoped>
.NotFoundComponentVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
}
</style>
<template lang="html">
<div class="channelAddVue pop-up">
<div class="title">
新建渠道表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>渠道信息</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>渠道对应</span>:
<input type="text" name="" v-model="data.value" spellcheck="false">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestInsertChannel } from '@/vuex/request.js'
export default {
data () {
return {
data: {
value: '',
pt: ''
}
}
},
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelAddVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
requestInsertChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.channelAddVue{
width: 500px;
.main{
.list{
overflow: hidden;
.item{
width: 100%;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 310px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="channelDeleteVue pop-up">
<div class="title">
删除渠道表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedChannel.length }}个渠道表?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedChannel">{{ n.pt }} ({{ n.value }})</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteChannel } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedChannel'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
id: this.checkedChannel.map((n, i) => {
return n.id
})
}
requestDeleteChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.channelDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="channelDetailsVue pop-up">
<div class="title">
修改渠道表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>渠道信息</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>渠道对应</span>:
<input type="text" name="" v-model="data.value" spellcheck="false">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdateChannel } from '@/vuex/request.js'
export default {
data () {
return {
data: {
id: '',
value: '',
pt: ''
}
}
},
props: ['childrenData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelDetailsVue.pop-up')
})
// init
for (let n in this.data) {
this.data[n] = this.childrenData[n]
}
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelDetailsVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
requestUpdateChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.channelDetailsVue{
width: 500px;
.main{
.list{
overflow: hidden;
.item{
width: 100%;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 310px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除信息
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedMessage.length }}条信息?</p>
<ul>
<li class="lengthLimit" :title="n.errorMsg" v-for="n,i in checkedMessage">{{ n.templateName }} ({{ n.errorMsg }})</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteMsg } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedMessage', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
messageId: this.checkedMessage.map((n, i) => {
return n.messageId
}),
pt: this.ptSelectedData.pt
}
requestDeleteMsg(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
// overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDetailsVue pop-up">
<div class="title">
检测详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板</span>:
<input type="text" name="" :value="data.templateName" disabled spellcheck="false" placeholder="UC">
</p>
<p class="item">
<span>产生时间</span>:
<input type="text" name="" :value="data.handleDate" disabled class="dateInput" placeholder="2017-12-12" id="generationTime" readonly>
</p>
<p class="item big-area">
<span>错误信息</span>:
<textarea name="name" :value="data.errorMsg" disabled spellcheck="false" placeholder="连接失败"></textarea>
</p>
<p class="item">
<span>所属级别</span>:
<input type="text" name="" :value="data.templateLv" disabled spellcheck="false" placeholder="1">
</p>
<p class="item">
<span>模板创建人</span>:
<input type="text" name="" :value="data.templateCreator" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item big-area">
<span>处理信息</span>:
<textarea name="name" v-model="data.handleMsg" spellcheck="false" placeholder="无"></textarea>
</p>
</div>
<div class="handle">
<label for="checkInfoDetailsVuePopUpCheckBox" class="checkbox">
<input type="checkbox" name="" v-model="data.handle" id="checkInfoDetailsVuePopUpCheckBox">
<span></span>
已处理
</label>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确定</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestHandle } from '@/vuex/request.js'
import moment from 'moment'
export default {
data () {
return {
data: {
messageId: '',
templateName: '',
handleDate: '',
errorMsg: '',
handleMsg: '',
templateLv: '',
templateCreator: '',
handle: false
}
}
},
props: ['childrenData', 'userInfo', 'ptSelectedData'],
mounted () {
let self = this
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDetailsVue.pop-up')
})
// 初始化
this.data = {
messageId: this.childrenData.messageId,
templateName: this.childrenData.templateName,
handleDate: moment(this.childrenData.handleDate).format('YYYY-MM-DD'),
errorMsg: this.childrenData.errorMsg,
handleMsg: this.childrenData.handleMsg,
templateLv: this.childrenData.templateLv,
templateCreator: this.childrenData.templateCreator,
handle: this.childrenData.handle
}
// 自定义日历插件
window.$('#generationTime').DatePicker({
format: 'Y-m-d',
date: window.$('#generationTime').val(),
current: window.$('#generationTime').val(),
starts: 1,
position: 'bottom',
onBeforeShow: function () {
window.$('#generationTime').DatePickerSetDate(window.$('#generationTime').val(), true)
},
onChange: function (formated, dates) {
console.log(formated, dates)
self.data.handleDate = formated
window.$('#generationTime').val(formated)
window.$('#generationTime').DatePickerHide()
}
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDetailsVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
messageId: this.childrenData.messageId,
// templateName: this.childrenData.templateName,
// handleDate: this.childrenData.handleDate,
// errorMsg: this.childrenData.errorMsg,
// templateLv: this.childrenData.templateLv,
// templateCreator: this.childrenData.templateCreator,
handleMsg: this.data.handleMsg,
handle: this.data.handle,
handler: this.userInfo.username,
pt: this.ptSelectedData.pt
}
requestHandle(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDetailsVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 80px;
}
input{
width: 219px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
}
&.big-area{
width: 100%;
vertical-align: top;
textarea{
min-width: 543px;
max-width: 543px;
min-height: 75px;
max-height: 150px;
background-color: #2F363E;
border: 1px solid #505A64;
padding: 6px;
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkTemplateDetailsVue pop-up">
<div class="title">
新建模板
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板名称</span>:
<input type="text" name="" v-model="data.tempName" spellcheck="false">
</p>
<p class="item">
<span>模板渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>等级</span>:
<input type="text" name="" v-model="data.templateLv" spellcheck="false">
</p>
<p class="item">
<span>设置人</span>:
<input type="text" name="" :value="this.userInfo.username" disabled spellcheck="false">
</p>
<p class="item">
<span>连通性测试</span>:
<select class="" name="" v-model="data.needPing">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.pingInterval" spellcheck="false" :disabled="!data.needPing">
</p>
<p class="item">
<span>链接测试网站</span>:
<input type="text" name="" v-model="data.pingUrlOne">
</p>
<p class="item">
<span>测试网站二</span>:
<input type="text" name="" v-model="data.pingUrlTwo">
</p>
<p class="item">
<span>字段完整率</span>:
<select class="" name="" v-model="data.needField">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.fieldInterval" spellcheck="false" :disabled="!data.needField">
</p>
<p class="item">
<span>字段选择</span>:
<input type="text" name="" v-model="data.field" spellcheck="false" readonly @click="popup.fieldSelect = true">
</p>
<p class="item">
<span>字段达标率(%)</span>:
<input type="text" name="" v-model="data.fieldIntegrityRate" spellcheck="false">
</p>
<p class="item">
<span>数据的延时性</span>:
<select class="" name="" v-model="data.needDelayed">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.delayedInterval" spellcheck="false" :disabled="!data.needDelayed">
</p>
<p class="item">
<span>入库时间字段</span>:
<input type="text" name="" v-model="data.savetime" spellcheck="false">
</p>
<p class="item">
<span>产生时间字段</span>:
<input type="text" name="" v-model="data.time" spellcheck="false">
</p>
<p class="item">
<span>每次检查条数</span>:
<input type="text" name="" v-model="data.testCount">
</p>
<p class="item">
<span>延时要求</span>:
<input type="text" name="" v-model="data.newsDelayed">
</p>
<p class="item">
<span>预警邮箱</span>:
<input type="text" name="" v-model="data.mail">
</p>
<p class="item">
<span>低数据量预警</span>:
<input type="text" name="" v-model="data.newsNumber">
</p>
<p class="item">
<span>存储地址</span>:
<input type="text" name="" v-model="data.host">
</p>
<p class="item">
<span>端口</span>:
<input type="text" name="" v-model="data.port">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dBName">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection">
</p>
<p class="item">
<span>采集主键</span>:
<input type="text" name="" v-model="data.spyderInfoId">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
<!-- 字段选择弹窗 -->
<div class="mask" v-if="popup.fieldSelect">
<field-select @close="popup.fieldSelect = false" :field="data.field" @change-field-list="changeFieldList" :all-fields="allFields" />
</div>
</div>
</template>
<script>
import { bus, requestSaveTmp } from '@/vuex/request.js'
import fieldSelect from '@/components/module/fieldSelect'
export default {
components: {
fieldSelect
},
data () {
return {
popup: {
fieldSelect: false
},
data: {
tempName: '',
pt: '',
templateLv: '',
creator: '',
needPing: false,
pingInterval: 0,
pingUrlOne: '',
pingUrlTwo: '',
needField: false,
fieldInterval: 0,
field: [''],
fieldIntegrityRate: '',
needDelayed: false,
delayedInterval: 0,
savetime: '',
time: '',
testCount: '',
newsDelayed: '',
mail: '',
newsNumber: '',
host: '',
port: '',
dBName: '',
collection: '',
spyderInfoId: ''
}
}
},
props: ['userInfo', 'allFields', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkTemplateDetailsVue.pop-up')
})
// init
this.data.creator = this.userInfo.username
this.data.pt = this.ptSelectedData.pt
},
methods: {
changeFieldList (list) {
this.data.field = list
},
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkTemplateDetailsVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = this.data
if (params.needPing && params.pingUrlOne === '') {
bus.$emit('alert', '链接测试网站 不可为空!')
return false
}
for (let n in params) {
// 除去特殊几个外,其他都不为空
if (params[n] === '' && !/spyderInfoId|pingUrlTwo/g.test(n)) {
bus.$emit('alert', '必填项未填写')
return false
}
// 部分值必须为整数
if (/[^\d]/g.test(params[n]) && /templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
return false
}
// if (/templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
// if (/[^\d]/g.test(params[n])) {
// bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
// return false
// } else {
// params[n] = parseInt(this.data[n])
// }
// }
if (n === 'host' && !/\d+\.\d+\.\d+\.\d+/g.test(params[n])) {
bus.$emit('alert', '存储地址 必须为ip地址,如:192.168.0.242')
return false
}
}
params.field = this.data.field.join(',')
console.log('checkTemplateAdd request params:', params)
// {tmp: JSON.stringify(params)}
requestSaveTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkTemplateDetailsVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
&[readonly]{
cursor: pointer;
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除模板
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedTemplate.length }}个模板?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedTemplate">{{ n.tempName }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteTmp } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['childrenData', 'checkedTemplate', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
templateId: this.checkedTemplate.map((n, i) => {
return n.templateId
}),
pt: this.ptSelectedData.pt
}
requestDeleteTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="checkTemplateDetailsVue pop-up">
<div class="title">
检测详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板名称</span>:
<input type="text" name="" v-model="data.tempName" spellcheck="false">
</p>
<p class="item">
<span>模板渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>等级</span>:
<input type="text" name="" v-model="data.templateLv" spellcheck="false">
</p>
<p class="item">
<span>设置人</span>:
<input type="text" name="" :value="this.userInfo.username" disabled spellcheck="false">
</p>
<p class="item">
<span>连通性测试</span>:
<select class="" name="" v-model="data.needPing">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.pingInterval" spellcheck="false" :disabled="!data.needPing">
</p>
<p class="item">
<span>链接测试网站</span>:
<input type="text" name="" v-model="data.pingUrlOne">
</p>
<p class="item">
<span>测试网站二</span>:
<input type="text" name="" v-model="data.pingUrlTwo">
</p>
<p class="item">
<span>字段完整率</span>:
<select class="" name="" v-model="data.needField">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.fieldInterval" spellcheck="false" :disabled="!data.needField">
</p>
<p class="item">
<span>字段选择</span>:
<input type="text" name="" v-model="data.field" spellcheck="false" readonly @click="popup.fieldSelect = true">
</p>
<p class="item">
<span>字段达标率(%)</span>:
<input type="text" name="" v-model="data.fieldIntegrityRate" spellcheck="false">
</p>
<p class="item">
<span>数据的延时性</span>:
<select class="" name="" v-model="data.needDelayed">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.delayedInterval" spellcheck="false" :disabled="!data.needDelayed">
</p>
<p class="item">
<span>入库时间字段</span>:
<input type="text" name="" v-model="data.savetime" spellcheck="false">
</p>
<p class="item">
<span>产生时间字段</span>:
<input type="text" name="" v-model="data.time" spellcheck="false">
</p>
<p class="item">
<span>每次检查条数</span>:
<input type="text" name="" v-model="data.testCount">
</p>
<p class="item">
<span>延时要求</span>:
<input type="text" name="" v-model="data.newsDelayed">
</p>
<p class="item">
<span>预警邮箱</span>:
<input type="text" name="" v-model="data.mail">
</p>
<p class="item">
<span>低数据量预警</span>:
<input type="text" name="" v-model="data.newsNumber">
</p>
<p class="item">
<span>存储地址</span>:
<input type="text" name="" v-model="data.host">
</p>
<p class="item">
<span>端口</span>:
<input type="text" name="" v-model="data.port">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dBName">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection">
</p>
<p class="item">
<span>采集主键</span>:
<input type="text" name="" v-model="data.spyderInfoId">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">保存修改</button>
<button type="button" class="btn3" @click="close()">放弃修改</button>
</div>
<!-- 字段选择弹窗 -->
<div class="mask" v-if="popup.fieldSelect">
<field-select @close="popup.fieldSelect = false" :field="data.field" @change-field-list="changeFieldList" :all-fields="allFields" />
</div>
</div>
</template>
<script>
import { bus, requestUpdateTmp } from '@/vuex/request.js'
import fieldSelect from '@/components/module/fieldSelect'
export default {
components: {
fieldSelect
},
data () {
return {
popup: {
fieldSelect: false
},
data: {
tempName: '',
pt: '',
templateLv: '',
creator: '',
needPing: false,
pingInterval: 0,
pingUrlOne: '',
pingUrlTwo: '',
needField: false,
fieldInterval: 0,
field: [''],
fieldIntegrityRate: '',
needDelayed: false,
delayedInterval: 0,
savetime: '',
time: '',
testCount: '',
newsDelayed: '',
mail: '',
newsNumber: '',
host: '',
port: '',
dBName: '',
collection: '',
spyderInfoId: ''
}
}
},
props: ['childrenData', 'userInfo', 'allFields', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkTemplateDetailsVue.pop-up')
})
// init
for (let n in this.data) {
if (n === 'field') {
this.data.field = this.childrenData.field.split(',')
} else {
this.data[n] = this.childrenData[n]
}
}
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkTemplateDetailsVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = this.data
if (params.needPing && params.pingUrlOne === '') {
bus.$emit('alert', '链接测试网站 不可为空!')
return false
}
for (let n in params) {
// 除去特殊几个外,其他都不为空
if (params[n] === '' && !/spyderInfoId|pingUrlTwo/g.test(n)) {
bus.$emit('alert', '必填项未填写')
return false
}
// 部分值必须为整数
if (/[^\d]/g.test(params[n]) && /templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
return false
}
// if (/templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
// if (/[^\d]/g.test(params[n])) {
// bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
// return false
// } else {
// params[n] = parseInt(this.data[n])
// }
// }
if (n === 'host' && !/\d+\.\d+\.\d+\.\d+/g.test(params[n])) {
bus.$emit('alert', '存储地址 必须为ip地址,如:192.168.0.242')
return false
}
}
params.field = this.data.field.join(',')
params.templateId = this.childrenData.templateId
console.log('checkTemplateDetails request params:', params)
requestUpdateTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkTemplateDetailsVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="databaseAddVue pop-up">
<div class="title">
新建数据库
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>数据库用户名</span>:
<input type="text" name="" v-model="data.dbUsername" spellcheck="false">
</p>
<p class="item">
<span>数据库密码</span>:
<input type="text" name="" v-model="data.dbPassword" spellcheck="false">
</p>
<p class="item">
<span>数据库地址</span>:
<input type="text" name="" v-model="data.dbHost" spellcheck="false">
</p>
<p class="item">
<span>数据库端口</span>:
<input type="text" name="" v-model="data.dbPort" spellcheck="false">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>表的作用</span>:
<input type="text" name="" v-model="data.effect" spellcheck="false">
</p>
<p class="item">
<span>数据库类型</span>:
<input type="text" name="" v-model="data.dbType" spellcheck="false">
</p>
<!-- <p class="item">
<span>存储的什么数据</span>:
<input type="text" name="" v-model="data.dataType" spellcheck="false">
</p> -->
<p class="item">
<span>参数说明</span>:
<!-- <input type="text" name="" v-model="data.other" spellcheck="false"> -->
<select class="" name="" v-model="data.other">
<option :value="n" v-for="n,i in paramData">{{ n }}</option>
</select>
</p>
<p class="item">
<span>渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>是否分表</span>:
<select class="" name="" v-model="data.table">
<option :value="true">是</option>
<option :value="false">否</option>
</select>
</p>
<p class="item">
<span>分表种类</span>:
<select class="" name="" v-model="data.tableKind">
<option value="hash">哈希</option>
<option value="month">月份</option>
</select>
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestInsertServer } from '@/vuex/request.js'
export default {
data () {
return {
data: {
dbUsername: '',
dbPassword: '',
dbHost: '',
dbPort: '',
collection: '',
dbName: '',
effect: '',
dbType: '',
// dataType: '',
other: '',
pt: '',
table: true,
tableKind: 'hash'
}
}
},
props: ['paramData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.databaseAddVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.databaseAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '' && !/dbUsername|dbPassword/g.test(n)) {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.data.dbPort.search(/[^\d]/g) !== -1) {
bus.$emit('alert', '端口必须为数字')
return false
}
requestInsertServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.databaseAddVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="databaseDeleteVue pop-up">
<div class="title">
删除数据库
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedDatabase.length }}个数据库?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedDatabase">{{ n.dbName }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteServer } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedDatabase'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.databaseDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.databaseDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
serverid: this.checkedDatabase.map((n, i) => {
return n.id
})
}
requestDeleteServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.databaseDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="databaseAddVue pop-up">
<div class="title">
修改数据库
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>数据库用户名</span>:
<input type="text" name="" v-model="data.dbUsername" spellcheck="false">
</p>
<p class="item">
<span>数据库密码</span>:
<input type="text" name="" v-model="data.dbPassword" spellcheck="false">
</p>
<p class="item">
<span>数据库地址</span>:
<input type="text" name="" v-model="data.dbHost" spellcheck="false">
</p>
<p class="item">
<span>数据库端口</span>:
<input type="text" name="" v-model="data.dbPort" spellcheck="false">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>表的作用</span>:
<input type="text" name="" v-model="data.effect" spellcheck="false">
</p>
<p class="item">
<span>数据库类型</span>:
<input type="text" name="" v-model="data.dbType" spellcheck="false">
</p>
<!-- <p class="item">
<span>存储的什么数据</span>:
<input type="text" name="" v-model="data.dataType" spellcheck="false">
</p> -->
<p class="item">
<span>参数说明</span>:
<!-- <input type="text" name="" v-model="data.other" spellcheck="false"> -->
<select class="" name="" v-model="data.other">
<option :value="n" v-for="n,i in paramData">{{ n }}</option>
</select>
</p>
<p class="item">
<span>渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>是否分表</span>:
<select class="" name="" v-model="data.table">
<option :value="true">是</option>
<option :value="false">否</option>
</select>
</p>
<p class="item">
<span>分表种类</span>:
<select class="" name="" v-model="data.tableKind">
<option value="hash">哈希</option>
<option value="month">月份</option>
</select>
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdateServer } from '@/vuex/request.js'
export default {
data () {
return {
data: {
id: '',
dbUsername: '',
dbPassword: '',
dbHost: '',
dbPort: '',
collection: '',
dbName: '',
effect: '',
dbType: '',
// dataType: '',
other: '',
pt: '',
table: true,
tableKind: 'hash'
}
}
},
props: ['childrenData', 'paramData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.databaseAddVue.pop-up')
})
// init
for (let n in this.data) {
this.data[n] = this.childrenData[n]
}
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.databaseAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '' && !/dbUsername|dbPassword/g.test(n)) {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
requestUpdateServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.databaseAddVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="fieldAddVue pop-up" @click="toggle.fieldList = false">
<div class="title">
新建字段表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>字段数量</span>:
<input type="text" name="" v-model="data.fieldSize" spellcheck="false">
</p>
<p class="item">
<span>字段值</span>:
<input type="text" name="" v-model="fieldInput" spellcheck="false" @click.stop="toggle.fieldList = true" @keydown.enter="AddFieldList()">
<ul class="fieldList" v-show="toggle.fieldList">
<li v-if="data.field.length" v-for="n,i in data.field"><span>{{ n }}</span><i @click.stop="delField(i)">✖</i></li>
<li v-if="!data.field.length" class="empty">Empty...</li>
</ul>
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>渠道信息</span>:
<!-- <input type="text" name="" v-model="data.pt" spellcheck="false"> -->
<select class="" name="" v-model="data.pt">
<option :value="n" v-for="n,i in channelMsgData">{{ n }}</option>
</select>
</p>
<!-- <p class="item">
<span>数据库表id</span>:
<input type="text" name="" v-model="data.dbId" spellcheck="false">
</p> -->
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestInsertFields } from '@/vuex/request.js'
export default {
data () {
return {
fieldInput: '',
data: {
fieldSize: '',
field: [],
collection: '',
dbName: '',
pt: ''
// dbId: ''
},
toggle: {
fieldList: false
}
}
},
props: ['channelMsgData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.fieldAddVue.pop-up')
})
},
methods: {
delField (index) {
this.data.field.splice(index, 1)
setTimeout(() => {
this.toggle.fieldList = true
}, 100)
},
AddFieldList () {
if (this.fieldInput === '') {
bus.$emit('alert', '字段值中有空字段!')
return false
}
if (/,/g.test(this.fieldInput)) {
bus.$emit('alert', '字段值中不能有逗号(,)')
return false
}
for (let i = 0; i < this.data.field.length; i++) {
if (this.data.field[i] === this.fieldInput) {
bus.$emit('alert', '字段值有重复项!')
return false
}
}
this.data.field.push(this.fieldInput)
this.fieldInput = ''
},
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.fieldAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.data.fieldSize.toString().search(/[^\d]/g) !== -1) {
bus.$emit('alert', '字段数量必须为数字')
return false
}
// for (let i = 0; i < params.field.length - 1; i++) {
// for (let j = i + 1; j < params.field.length; j++) {
// if (params.field[i] === '' || params.field[j] === '') {
// bus.$emit('alert', '字段值中有空字段!')
// return false
// }
// if (/,/g.test(params.field[i]) || /,/g.test(params.field[j])) {
// bus.$emit('alert', '字段值中不能有逗号(,)')
// return false
// }
// if (params.field[i] === params.field[j]) {
// bus.$emit('alert', '字段值有重复项!')
// return false
// }
// }
// }
params.field = params.field.join(',')
requestInsertFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
'toggle.fieldList' (val, oldVal) {
if (val) {
this.fieldInput = ''
} else {
this.fieldInput = this.data.field.join(',')
}
}
}
}
</script>
<style lang="scss" scoped>
.fieldAddVue{
.main{
.list{
// overflow: hidden;
&:after{
display: block;
content: "";
clear: both;
}
.item{
width: 50%;
float: left;
margin-bottom: 20px;
position: relative;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
.fieldList{
width: 200px;
position: absolute;
left: 107.5px;
top: 30px;
background-color: #2F363E;
border: 1px solid #505A64;
z-index: 1;
li{
padding: 3px 6px;
i{
display: inline-block;
cursor: pointer;
float: right;
}
&:nth-of-type(n+2){
border-top: 1px solid #505A64;
}
&.empty{
text-align: center;
}
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="fieldDeleteVue pop-up">
<div class="title">
删除字段表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedField.length }}个字段表?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedField">{{ n.dbName }} -> {{ n.collection }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteFields } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedField'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.fieldDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.fieldDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
id: this.checkedField.map((n, i) => {
return n.id
})
}
requestDeleteFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.fieldDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="fieldAddVue pop-up" @click="toggle.fieldList = false">
<div class="title">
字段表详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>字段数量</span>:
<input type="text" name="" v-model="data.fieldSize" spellcheck="false">
</p>
<p class="item">
<span>字段值</span>:
<input type="text" name="" v-model="fieldInput" spellcheck="false" @click.stop="toggle.fieldList = true" @keydown.enter="AddFieldList()">
<ul class="fieldList" v-show="toggle.fieldList">
<li v-if="data.field.length" v-for="n,i in data.field"><span>{{ n }}</span><i @click.stop="delField(i)">✖</i></li>
<li v-if="!data.field.length" class="empty">Empty...</li>
</ul>
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>渠道信息</span>:
<!-- <input type="text" name="" v-model="data.pt" spellcheck="false"> -->
<select class="" name="" v-model="data.pt">
<option :value="n" v-for="n,i in channelMsgData">{{ n }}</option>
</select>
</p>
<!-- <p class="item">
<span>数据库表id</span>:
<input type="text" name="" v-model="data.dbId" spellcheck="false">
</p> -->
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdateFields } from '@/vuex/request.js'
export default {
data () {
return {
fieldInput: '',
data: {
fieldSize: '',
field: [],
collection: '',
dbName: '',
pt: ''
// dbId: ''
},
toggle: {
fieldList: false
}
}
},
props: ['childrenData', 'channelMsgData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.fieldAddVue.pop-up')
})
// init
this.fieldInput = this.childrenData.field
for (let n in this.data) {
if (n === 'field') {
this.data.field = this.childrenData.field.split(',')
} else {
this.data[n] = this.childrenData[n]
}
}
},
methods: {
delField (index) {
this.data.field.splice(index, 1)
setTimeout(() => {
this.toggle.fieldList = true
}, 100)
},
AddFieldList () {
if (this.fieldInput === '') {
bus.$emit('alert', '字段值中有空字段!')
return false
}
if (/,/g.test(this.fieldInput)) {
bus.$emit('alert', '字段值中不能有逗号(,)')
return false
}
for (let i = 0; i < this.data.field.length; i++) {
if (this.data.field[i] === this.fieldInput) {
bus.$emit('alert', '字段值有重复项!')
return false
}
}
this.data.field.push(this.fieldInput)
this.fieldInput = ''
},
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.fieldAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.data.fieldSize.toString().search(/[^\d]/g) !== -1) {
bus.$emit('alert', '字段数量必须为数字')
return false
}
// for (let i = 0; i < params.field.length - 1; i++) {
// for (let j = i + 1; j < params.field.length; j++) {
// if (params.field[i] === '' || params.field[j] === '') {
// bus.$emit('alert', '字段值中有空字段!')
// return false
// }
// if (/,/g.test(params.field[i]) || /,/g.test(params.field[j])) {
// bus.$emit('alert', '字段值中不能有逗号(,)')
// return false
// }
// if (params.field[i] === params.field[j]) {
// bus.$emit('alert', '字段值有重复项!')
// return false
// }
// }
// }
params.field = params.field.join(',')
params.id = this.childrenData.id
requestUpdateFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
'toggle.fieldList' (val, oldVal) {
if (val) {
this.fieldInput = ''
} else {
this.fieldInput = this.data.field.join(',')
}
}
}
}
</script>
<style lang="scss" scoped>
.fieldAddVue{
.main{
.list{
// overflow: hidden;
&:after{
display: block;
content: "";
clear: both;
}
.item{
width: 50%;
float: left;
margin-bottom: 20px;
position: relative;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
.fieldList{
width: 200px;
position: absolute;
left: 107.5px;
top: 30px;
background-color: #2F363E;
border: 1px solid #505A64;
z-index: 1;
li{
padding: 3px 6px;
i{
display: inline-block;
cursor: pointer;
float: right;
}
&:nth-of-type(n+2){
border-top: 1px solid #505A64;
}
&.empty{
text-align: center;
}
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="channelSelectVue pop-up">
<div class="title">
字段选择
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item" v-for="n,i in fieldList">
<span>第{{ i + 1 }}个</span>:
<select class="" name="" v-model="fieldList[i]">
<option :value="n" v-for="n,i in allFields">{{ n }}</option>
</select>
<i v-if="fieldList.length > 1" @click="fieldList.splice(i, 1)">✖</i>
<i v-if="i === fieldList.length - 1 && fieldList.length < 4" @click="fieldList.push('')">➕</i>
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus } from '@/vuex/request.js'
export default {
data () {
return {
fieldList: ['']
}
},
props: ['field', 'allFields'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelSelectVue.pop-up')
})
// init
this.fieldList = []
this.field.forEach((n, i) => {
this.fieldList[i] = n
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelSelectVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
if (this.fieldList.some((n, i) => {
return n === ''
})) {
bus.$emit('alert', '存在未填写项')
return false
} else {
// not same
for (let i = 0; i < this.fieldList.length; i++) {
for (let j = 0; j < this.fieldList.length; j++) {
if (i !== j && this.fieldList[i] === this.fieldList[j]) {
bus.$emit('alert', '存在相同项')
return false
}
}
}
this.$emit('change-field-list', this.fieldList)
this.$emit('close')
}
}
}
}
</script>
<style lang="scss" scoped>
.channelSelectVue{
width: 500px;
.main{
.list{
overflow: hidden;
.item{
width: 100%;
margin-bottom: 20px;
line-height: 30px;
span{
display: inline-block;
width: 60px;
}
i{
display: inline-block;
width: 25px;
height: 25px;
line-height: 25px;
text-align: center;
margin-left: 10px;
cursor: pointer;
border-radius: 3px;
transition: all .3s ease;
&:hover{
background-color: #2F363E;
}
}
input, select{
width: 290px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除处理记录
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedMessage.length }}条记录?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedMessage">{{ n.templateName }} ({{ n.errorMsg }})</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteMsg } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedMessage'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
messageId: this.checkedMessage.map((n, i) => {
return n.messageId
})
}
requestDeleteMsg(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDetailsVue pop-up">
<div class="title">
检测详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板</span>:
<input type="text" name="" :value="data.templateName" disabled spellcheck="false" placeholder="UC">
</p>
<p class="item">
<span>产生时间</span>:
<input type="text" name="" :value="data.createDate" disabled class="dateInput" placeholder="2017-12-12" id="generationTime" readonly>
</p>
<p class="item big-area">
<span>错误信息</span>:
<!-- <input type="text" name="" :value="data.errorMsg" disabled spellcheck="false" placeholder="连接失败"> -->
<textarea name="name" rows="8" cols="80" :value="data.errorMsg" disabled spellcheck="false" placeholder="连接失败"></textarea>
</p>
<p class="item">
<span>所属级别</span>:
<input type="text" name="" :value="data.templateLv" disabled spellcheck="false" placeholder="1">
</p>
<p class="item">
<span>模板创建人</span>:
<input type="text" name="" :value="data.templateCreator" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item">
<span>是否已处理</span>:
<input type="text" name="" :value="data.handle" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item">
<span>处理人</span>:
<input type="text" name="" :value="data.handler" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item big-area">
<span>处理信息</span>:
<textarea name="name" v-model="data.handleMsg" spellcheck="false" placeholder="无"></textarea>
</p>
<p class="item">
<span>处理时间</span>:
<input type="text" name="" :value="data.handleDate" disabled spellcheck="false" placeholder="沈金柱">
</p>
</div>
<div class="handle" v-show>
<label for="checkInfoDetailsVuePopUpCheckBox" class="checkbox">
<input type="checkbox" name="" v-model="data.handle" id="checkInfoDetailsVuePopUpCheckBox">
<span></span>
已处理
</label>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="close()">确定</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
// requestHandle
import { bus } from '@/vuex/request.js'
import moment from 'moment'
export default {
data () {
return {
data: {
messageId: '',
templateName: '',
createDate: '',
errorMsg: '',
templateLv: '',
templateCreator: '',
handle: false,
handler: '',
handleMsg: '',
handleDate: ''
}
}
},
props: ['childrenData'],
mounted () {
// let self = this
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDetailsVue.pop-up')
})
// 初始化
this.data = {
messageId: this.childrenData.messageId,
templateName: this.childrenData.templateName,
createDate: moment(this.childrenData.createDate).format('YYYY-MM-DD HH:mm'),
errorMsg: this.childrenData.errorMsg,
templateLv: this.childrenData.templateLv,
templateCreator: this.childrenData.templateCreator,
handle: this.childrenData.handle,
handler: this.childrenData.handler,
handleMsg: this.childrenData.handleMsg,
handleDate: moment(this.childrenData.handleDate).format('YYYY-MM-DD HH:mm')
}
// 自定义日历插件
// window.$('#generationTime').DatePicker({
// format: 'Y-m-d',
// date: window.$('#generationTime').val(),
// current: window.$('#generationTime').val(),
// starts: 1,
// position: 'bottom',
// onBeforeShow: function () {
// window.$('#generationTime').DatePickerSetDate(window.$('#generationTime').val(), true)
// },
// onChange: function (formated, dates) {
// console.log(formated, dates)
// self.data.handleDate = formated
// window.$('#generationTime').val(formated)
// window.$('#generationTime').DatePickerHide()
// }
// })
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDetailsVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
}
// submit () {
// let params = {
// messageId: this.childrenData.messageId,
// // templateName: this.childrenData.templateName,
// // handleDate: this.childrenData.handleDate,
// // errorMsg: this.childrenData.errorMsg,
// // templateLv: this.childrenData.templateLv,
// // templateCreator: this.childrenData.templateCreator,
// handle: this.data.handle,
// handler: this.userInfo.username
// }
// requestHandle(params, {}, (response) => {
// if (response.data) {
// if (response.data.state) {
// bus.$emit('alert', response.data.message)
// this.$emit('update')
// this.$emit('close')
// } else {
// bus.$emit('alert', response.data.message)
// }
// } else {
// bus.$emit('alert', response + '.')
// }
// })
// }
}
}
</script>
<style lang="scss" scoped>
.checkInfoDetailsVue{
.main{
padding-bottom: 50px;
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 80px;
}
input{
width: 219px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
}
&.big-area{
width: 100%;
vertical-align: top;
textarea{
min-width: 543px;
max-width: 543px;
min-height: 150px;
max-height: 400px;
background-color: #2F363E;
border: 1px solid #505A64;
padding: 6px;
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="">
</div>
</template>
<script>
export default {
beforeCreate () {
this.$router.go(-1)
}
}
</script>
<style lang="css">
</style>
<template lang="html">
<div class="userAddVue pop-up">
<div class="title">
新建用户
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>
<span>用户名</span>:
<input type="text" name="" v-model="username" spellcheck="false">
</p>
<p>
<span>密码</span>:
<input type="text" name="" v-model="password" spellcheck="false">
</p>
<p>
<span>等级</span>:
<input type="number" name="" v-model="lv" spellcheck="false">
</p>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">创建</button>
<button type="button" class="btn3" @click="close()">取消</button>
</div>
</div>
</template>
<script>
import { bus, requestSavePerson } from '@/vuex/request.js'
export default {
data () {
return {
username: '',
password: '',
lv: ''
}
},
props: ['userInfo'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.userAddVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.userAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
if (this.username === '' || this.password === '' || this.lv === '') {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.lv.search(/[^\d]/g) !== -1) {
bus.$emit('alert', '等级只能为整数!')
return false
}
let params = {
username: this.username,
password: this.password,
lv: this.lv,
creator: this.userInfo.username
}
requestSavePerson(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.userAddVue{
width: 500px;
.main{
padding: 50px 0;
p{
text-align: center;
margin-bottom: 20px;
span{
display: inline-block;
width: 50px;
}
input{
width: 300px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
text-align: left;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除用户
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedUsers.length }}个用户?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedUsers">{{ n.username }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeletePerson } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedUsers'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
personId: this.checkedUsers.map((n, i) => {
return n.personId
})
}
requestDeletePerson(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="userAddVue pop-up">
<div class="title">
修改用户
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>
<span>用户名</span>:
<input type="text" name="" v-model="username" :placeholder="username" spellcheck="false">
</p>
<p>
<span>密码</span>:
<input type="text" name="" v-model="password" :placeholder="password" spellcheck="false">
</p>
<p>
<span>等级</span>:
<input type="number" name="" v-model="lv" :placeholder="lv" spellcheck="false">
</p>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认修改</button>
<button type="button" class="btn3" @click="close()">放弃修改</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdatePerson } from '@/vuex/request.js'
export default {
data () {
return {
username: '',
password: '',
lv: ''
}
},
props: ['childrenData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.userAddVue.pop-up')
})
// init
this.username = this.childrenData.username
this.password = this.childrenData.password
this.lv = this.childrenData.lv + ''
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.userAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
if (this.username === '' || this.password === '' || this.lv === '') {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.lv.search(/[^\d]/g) !== -1) {
bus.$emit('alert', '等级只能为整数!')
return false
}
let params = {
username: this.username,
password: this.password,
personId: this.childrenData.personId,
lv: this.lv
}
requestUpdatePerson(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.userAddVue{
width: 500px;
.main{
padding: 50px 0;
p{
text-align: center;
margin-bottom: 20px;
span{
display: inline-block;
width: 50px;
}
input{
width: 300px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
text-align: left;
}
}
}
}
</style>
div.datepicker {
position: relative;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
width: 196px;
height: 147px;
position: absolute;
cursor: default;
top: 0;
left: 0;
display: none;
}
.datepickerContainer {
background: #121212;
position: absolute;
top: 10px;
left: 10px;
}
.datepickerBorderT {
position: absolute;
left: 10px;
top: 0;
right: 10px;
height: 10px;
background: url(../images/datepicker_t.png);
}
.datepickerBorderB {
position: absolute;
left: 10px;
bottom: 0;
right: 10px;
height: 10px;
background: url(../images/datepicker_b.png);
}
.datepickerBorderL {
position: absolute;
left: 0;
bottom: 10px;
top: 10px;
width: 10px;
background: url(../images/datepicker_l.png);
}
.datepickerBorderR {
position: absolute;
right: 0;
bottom: 10px;
top: 10px;
width: 10px;
background: url(../images/datepicker_r.png);
}
.datepickerBorderTL {
position: absolute;
top: 0;
left: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_tl.png);
}
.datepickerBorderTR {
position: absolute;
top: 0;
right: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_tr.png);
}
.datepickerBorderBL {
position: absolute;
bottom: 0;
left: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_bl.png);
}
.datepickerBorderBR {
position: absolute;
bottom: 0;
right: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_br.png);
}
.datepickerHidden {
display: none;
}
div.datepicker table {
border-collapse:collapse;
}
div.datepicker a {
color: #eee;
text-decoration: none;
cursor: default;
outline: none;
}
div.datepicker table td {
text-align: right;
padding: 0;
margin: 0;
}
div.datepicker th {
text-align: center;
color: #999;
font-weight: normal;
}
div.datepicker tbody th {
text-align: left;
}
div.datepicker tbody a {
display: block;
}
.datepickerDays a {
width: 20px;
line-height: 16px;
height: 16px;
padding-right: 2px;
}
.datepickerYears a,
.datepickerMonths a{
width: 44px;
line-height: 36px;
height: 36px;
text-align: center;
}
td.datepickerNotInMonth a {
color: #666;
}
tbody.datepickerDays td.datepickerSelected{
background: #136A9F;
}
tbody.datepickerDays td.datepickerNotInMonth.datepickerSelected {
background: #17384d;
}
tbody.datepickerYears td.datepickerSelected,
tbody.datepickerMonths td.datepickerSelected{
background: #17384d;
}
div.datepicker a:hover,
div.datepicker a:hover {
color: #88c5eb;
}
div.datepicker td.datepickerNotInMonth a:hover {
color: #999;
}
div.datepicker tbody th {
text-align: left;
}
.datepickerSpace div {
width: 20px;
}
.datepickerGoNext a,
.datepickerGoPrev a,
.datepickerMonth a {
text-align: center;
height: 20px;
line-height: 20px;
}
.datepickerGoNext a {
float: right;
width: 20px;
}
.datepickerGoPrev a {
float: left;
width: 20px;
}
table.datepickerViewDays tbody.datepickerMonths,
table.datepickerViewDays tbody.datepickerYears {
display: none;
}
table.datepickerViewMonths tbody.datepickerDays,
table.datepickerViewMonths tbody.datepickerYears,
table.datepickerViewMonths tr.datepickerDoW {
display: none;
}
table.datepickerViewYears tbody.datepickerDays,
table.datepickerViewYears tbody.datepickerMonths,
table.datepickerViewYears tr.datepickerDoW {
display: none;
}
td.datepickerDisabled a,
td.datepickerDisabled.datepickerNotInMonth a{
color: #333;
}
td.datepickerDisabled a:hover {
color: #333;
}
td.datepickerSpecial a {
background: #700;
}
td.datepickerSpecial.datepickerSelected a {
background: #a00;
}
\ No newline at end of file
.datepickerContainer{
background-color: #2F363E;
/*border: 1px solid #505A64;*/
}
.datepicker>div[class*=datepickerBorder]{
background-image: none;
background-color: #2F363E;
}
.datepickerBorderT{
border-top: 1px solid #505a64;
}
.datepickerBorderB{
border-bottom: 1px solid #505a64;
}
.datepickerBorderL{
border-left: 1px solid #505a64;
}
.datepickerBorderR{
border-right: 1px solid #505a64;
}
.datepickerBorderTL{
border-top: 1px solid #505a64;
border-left: 1px solid #505a64;
}
.datepickerBorderTR{
border-top: 1px solid #505a64;
border-right: 1px solid #505a64;
}
.datepickerBorderBL{
border-bottom: 1px solid #505a64;
border-left: 1px solid #505a64;
}
.datepickerBorderBR{
border-bottom: 1px solid #505a64;
border-right: 1px solid #505a64;
}
/*body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {
margin:0;
padding:0;
}
table {
border-collapse:collapse;
border-spacing:0;
}
fieldset,img {
border:0;
}
address,caption,cite,code,dfn,em,strong,th,var {
font-style:normal;
font-weight:normal;
}
ol,ul {
list-style:none;
}
caption,th {
text-align:left;
}
h1,h2,h3,h4,h5,h6 {
font-size:100%;
font-weight:normal;
}
q:before,q:after {
content:'';
}
abbr,acronym { border:0;
}
html, body {
background-color: #fff;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 18px;
color: #52697E;
}
body {
text-align: center;
overflow: auto;
}
.wrapper {
width: 700px;
margin: 0 auto;
text-align: left;
}
h1 {
font-size: 21px;
height: 47px;
line-height: 47px;
text-transform: uppercase;
}
.navigationTabs {
height: 23px;
line-height: 23px;
border-bottom: 1px solid #ccc;
}
.navigationTabs li {
float: left;
height: 23px;
line-height: 23px;
padding-right: 3px;
}
.navigationTabs li a{
float: left;
dispaly: block;
height: 23px;
line-height: 23px;
padding: 0 10px;
overflow: hidden;
color: #52697E;
background-color: #eee;
position: relative;
text-decoration: none;
}
.navigationTabs li a:hover {
background-color: #f0f0f0;
}
.navigationTabs li a.active {
background-color: #fff;
border: 1px solid #ccc;
border-bottom: 0px solid;
}
.tabsContent {
border: 1px solid #ccc;
border-top: 0px solid;
width: 698px;
overflow: hidden;
}
.tab {
padding: 16px;
display: none;
}
.tab h2 {
font-weight: bold;
font-size: 16px;
}
.tab h3 {
font-weight: bold;
font-size: 14px;
margin-top: 20px;
}
.tab p {
margin-top: 16px;
clear: both;
}
.tab ul {
margin-top: 16px;
list-style: disc;
}
.tab li {
margin: 10px 0 0 35px;
}
.tab a {
color: #8FB0CF;
}
.tab strong {
font-weight: bold;
}
.tab pre {
font-size: 11px;
margin-top: 20px;
width: 668px;
overflow: auto;
clear: both;
}
.tab table {
width: 100%;
}
.tab table td {
padding: 6px 10px 6px 0;
vertical-align: top;
}
.tab dt {
margin-top: 16px;
}
#colorSelector {
position: relative;
width: 36px;
height: 36px;
background: url(../images/select.png);
}
#colorSelector div {
position: absolute;
top: 3px;
left: 3px;
width: 30px;
height: 30px;
background: url(../images/select.png) center;
}
#colorSelector2 {
position: absolute;
top: 0;
left: 0;
width: 36px;
height: 36px;
background: url(../images/select2.png);
}
#colorSelector2 div {
position: absolute;
top: 4px;
left: 4px;
width: 28px;
height: 28px;
background: url(../images/select2.png) center;
}
#colorpickerHolder2 {
top: 32px;
left: 0;
width: 356px;
height: 0;
overflow: hidden;
position: absolute;
}
#colorpickerHolder2 .colorpicker {
background-image: url(../images/custom_background.png);
position: absolute;
bottom: 0;
left: 0;
}
#colorpickerHolder2 .colorpicker_hue div {
background-image: url(../images/custom_indic.gif);
}
#colorpickerHolder2 .colorpicker_hex {
background-image: url(../images/custom_hex.png);
}
#colorpickerHolder2 .colorpicker_rgb_r {
background-image: url(../images/custom_rgb_r.png);
}
#colorpickerHolder2 .colorpicker_rgb_g {
background-image: url(../images/custom_rgb_g.png);
}
#colorpickerHolder2 .colorpicker_rgb_b {
background-image: url(../images/custom_rgb_b.png);
}
#colorpickerHolder2 .colorpicker_hsb_s {
background-image: url(../images/custom_hsb_s.png);
display: none;
}
#colorpickerHolder2 .colorpicker_hsb_h {
background-image: url(../images/custom_hsb_h.png);
display: none;
}
#colorpickerHolder2 .colorpicker_hsb_b {
background-image: url(../images/custom_hsb_b.png);
display: none;
}
#colorpickerHolder2 .colorpicker_submit {
background-image: url(../images/custom_submit.png);
}
#colorpickerHolder2 .colorpicker input {
color: #778398;
}
#customWidget {
position: relative;
height: 36px;
}
input.inputDate {
border: 1px solid #999;
padding: 4px;
border-bottom-color: #ddd;
border-right-color: #ddd;
width: 65px;
}
#widget {
position: relative;
}
#widgetField {
width: 290px;
height: 26px;
background: url(../images/field.png);
overflow: hidden;
position: relative;
}
#widgetField a {
display: block;
position: absolute;
width: 26px;
height: 26px;
top: 0;
right: 0;
text-decoration: none;
text-indent: -3000px;
}
#widgetField span {
font-size: 12px;
font-weight: bold;
color: #000;
position: absolute;
top: 0;
height: 26px;
line-height: 26px;
left: 5px;
width: 250px;
text-align: center;
}
#widgetCalendar {
position: absolute;
top: 26px;
left: 0;
height: 0px;
overflow: hidden;
width: 588px;
background: #B9B9B9;
}
#widgetCalendar .datepicker {
position: absolute;
bottom: 0;
top: auto;
}
#widgetCalendar .datepickerContainer,
#widgetCalendar .datepickerBorderT,
#widgetCalendar .datepickerBorderB,
#widgetCalendar .datepickerBorderL,
#widgetCalendar .datepickerBorderR,
#widgetCalendar .datepickerBorderTL,
#widgetCalendar .datepickerBorderTR,
#widgetCalendar .datepickerBorderBL,
#widgetCalendar .datepickerBorderBR {
background: transparent !important;
}
#widgetCalendar .datepicker a:hover{
color: #b6f063;
}*/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="css/datepicker.css" type="text/css" />
<link rel="stylesheet" media="screen" type="text/css" href="css/layout.css" />
<title>DatePicker - jQuery plugin</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/datepicker.js"></script>
<script type="text/javascript" src="js/eye.js"></script>
<script type="text/javascript" src="js/utils.js"></script>
<script type="text/javascript" src="js/layout.js?ver=1.0.2"></script>
</head>
<body>
<div class="wrapper">
<h1>Date Picker - jQuery plugin</h1>
<ul class="navigationTabs">
<li><a href="#about" rel="about">About</a></li>
<li><a href="#download" rel="download">Download</a></li>
<li><a href="#implement" rel="implement">Implement</a></li>
</ul>
<div class="tabsContent">
<div class="tab">
<h2>About</h2>
<p>Date Picker component with a lot of options and easy to fit in your web application.</p>
<h3>Last update</h3>
<p>22.05.2009 - Check Download tab</p>
<h3>Features</h3>
<ul>
<li>Flat mode - as element in page</li>
<li>Multiple calendars in the component</li>
<li>Allows single, multiple or range selection</li>
<li>Mark dates as special, weekends, special days</li>
<li>Easy to customize the look by changing CSS</li>
<li>Localiation for months' and days' names</li>
<li>Custom day to start the week</li>
<li>Fits into the viewport</li>
</ul>
<h3>License</h3>
<p>Dual licensed under the MIT and GPL licenses.</p>
<h3>Examples</h3>
<p id="date"></p>
<p>Flat mode, single selection, the week start monday.</p>
<pre>$('#date').DatePicker({
flat: true,
date: '2008-07-31',
current: '2008-07-31',
calendars: 1,
starts: 1
});</pre>
<p>Flat mode, multiple selection, disabled dates, special day, the week start sunday.</p>
<p id="date2"></p>
<pre>$('#date2').DatePicker({
flat: true,
date: ['2008-07-31', '2008-07-28'],
current: '2008-07-31',
format: 'Y-m-d',
calendars: 1,
mode: 'multiple',
onRender: function(date) {
return {
disabled: (date.valueOf() < now.valueOf()),
className: date.valueOf() == now2.valueOf() ? 'datepickerSpecial' : false
}
},
starts: 0
});</pre>
<p><a href="#" id="clearSelection">Clear selection</a></p>
<pre>$('#date3').DatePickerClear();</pre>
<p>Flat mode, range selection, 3 calendars.</p>
<p id="date3"></p>
<pre>$('#date3').DatePicker({
flat: true,
date: ['2008-07-28','2008-07-31'],
current: '2008-07-31',
calendars: 3,
mode: 'range',
starts: 1
});</pre>
<p>Attached to an text field and usign callbacks to update the date selection with the value from the field.</p>
<p>
<input class="inputDate" id="inputDate" value="06/14/2008" />
<label id="closeOnSelect"><input type="checkbox" /> Close on selection</label>
</p>
<pre>$('#inputDate').DatePicker({
format:'m/d/Y',
date: $('#inputDate').val(),
current: $('#inputDate').val(),
starts: 1,
position: 'r',
onBeforeShow: function(){
$('#inputDate').DatePickerSetDate($('#inputDate').val(), true);
},
onChange: function(formated, dates){
$('#inputDate').val(formated);
if ($('#closeOnSelect input').attr('checked')) {
$('#inputDate').DatePickerHide();
}
}
});</pre>
<p>Flat mode, inside a custom widget and with custom design.</p>
<div id="widget">
<div id="widgetField">
<span>28 July, 2008 &divide; 31 July, 2008</span>
<a href="#">Select date range</a>
</div>
<div id="widgetCalendar">
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="tab">
<h2>Download</h2>
<p><a href="datepicker.zip">datepicker.zip (50 kb)</a>: jQuery, Javscript files, CSS files, images, examples and instructions.</p>
<h3>Changelog</h3>
<dl>
<dt>22.05.2009</dt>
<dd>added: close on selection example</dd>
<dd>added: onChange has new parameter: reference to related element</dd>
<dd>added: start view days, months, years</dd>
<dd>added: clear selection in multiple and range mode</dd>
<dd>fixed: datepicker hide and show methods</dd>
<dd>fixed: january selection (tahns to Konstantin Zavialov)</dd>
<dd>fixed: working with jQuery 1.3</dd>
<dd>fixed: deselecting a date in multiple mode (thanks to Geelen Sebastien)</dd>
<dt>22.08.2008</dt>
<dd>Fixed bug: where some events were not canceled right on Safari</dd>
<dd>Fixed bug: where teh view port was not detected right on Safari</dd>
<dt>31.07.2008</dt>
<dd>Added new method: 'DatePickerGetDate'</dd>
<dd>Minor speed improvement</dd>
<dt>30.07.2008</dt>
<dd>The first release.</dd>
</dl>
</div>
<div class="tab">
<h2>Implement</h2>
<p>Attach the Javascript and CSS files to your document. Edit CSS file and fix the paths to images and change colors to fit your site theme.</p>
<pre>
&lt;link rel="stylesheet" media="screen" type="text/css" href="css/datepicker.css" /&gt;
&lt;script type="text/javascript" src="js/datepicker.js"&gt;&lt;/script&gt;
</pre>
<h3>Invocation code</h3>
<p>All you have to do is to select the elements in a jQuery way and call the plugin.</p>
<pre>
$('input').DatePicker(options);
</pre>
<h3>Options</h3>
<p>A hash of parameters. All parameters are optional.</p>
<table>
<tr>
<td><strong>eventName</strong></td>
<td>string</td>
<td>The desired event to trigger the date picker. Default: 'click'</td>
</tr>
<tr>
<td><strong>date</strong></td>
<td>String, Date or array</td>
<td>The selected date(s) as string (will be converted to Date object based on teh format suplied) and Date object for single selection, as Array of strings or Date objects</td>
</tr>
<tr>
<td><strong>flat</strong></td>
<td>boolean</td>
<td>Whatever if the date picker is appended to the element or triggered by an event. Default false</td>
</tr>
<tr>
<td><strong>start</strong></td>
<td>integer</td>
<td>The day week start. Default 1 (monday)</td>
</tr>
<tr>
<td><strong>prev</strong></td>
<td>string</td>
<td>HTML inserted to previous links. Default '&#9664;' (UNICODE black left arrow)</td>
</tr>
<tr>
<td><strong>next</strong></td>
<td>string</td>
<td>HTML inserted to next links. Default '&#9654;' (UNICODE black right arrow)</td>
</tr>
<tr>
<td><strong>mode</strong></td>
<td>string ['single'|'multiple'|'range']</td>
<td>Date selection mode. Default 'single'</td>
</tr>
<tr>
<td><strong>view</strong></td>
<td>string ['days'|'months'|'years']</td>
<td>Start view mode. Default 'days'</td>
</tr>
<tr>
<td><strong>calendars</strong></td>
<td>integer</td>
<td>Number of calendars to render inside the date picker. Default 1</td>
</tr>
<tr>
<td><strong>format</strong></td>
<td>string</td>
<td>Date format. Default 'Y-m-d'</td>
</tr>
<tr>
<td><strong>position</strong></td>
<td>string ['top'|'left'|'right'|'bottom']</td>
<td>Date picker's position relative to the trigegr element (non flat mode only). Default 'bottom'</td>
</tr>
<tr>
<td><strong>locale</strong></td>
<td>hash</td>
<td>Location: provide a hash with keys 'days', 'daysShort', 'daysMin', 'months', 'monthsShort', 'week'. Default english</td>
</tr>
<tr>
<td><strong>onShow</strong></td>
<td>function</td>
<td>Callback function triggered when the date picker is shown</td>
</tr>
<tr>
<td><strong>onBeforeShow</strong></td>
<td>function</td>
<td>Callback function triggered before the date picker is shown</td>
</tr>
<tr>
<td><strong>onHide</strong></td>
<td>function</td>
<td>Callback function triggered when the date picker is hidden</td>
</tr>
<tr>
<td><strong>onChange</strong></td>
<td>function</td>
<td>Callback function triggered when the date is changed</td>
</tr>
<tr>
<td><strong>onRender</strong></td>
<td>function</td>
<td>Callback function triggered when the date is rendered inside a calendar. It should return and hash with keys: 'selected' to select the date, 'disabled' to disable the date, 'className' for additional CSS class</td>
</tr>
</table>
<h3>Set date</h3>
<p>If you want to set a diferent date selection.</p>
<pre>$('input').DatePickerSetDate(date, shiftTo);</pre>
<p>The 'date' argument is the same format as the option 'date' and the 'shiftTo' argument (boolean) moves the curent month view to the date selection provided.</p>
<h3>Get date</h3>
<p>Get date selection.</p>
<pre>$('input').DatePickerGetDate(formated);</pre>
<p>Set 'formated' to true if you whant to get teh selection formated.</p>
<h3>Show and hide date picker</h3>
<p>Show or hide a date picker.</p>
<pre>$('input').DatePickerShow();</pre>
<pre>$('input').DatePickerHide();</pre>
<h3>Clear multiple selection</h3>
<p>Clear selection in multiple and range mode</p>
<pre>$('#datepicker').DatePickerClear();</pre>
</div>
</div>
</div>
</body>
</html>
/**
*
* Date picker
* Author: Stefan Petre www.eyecon.ro
*
* Dual licensed under the MIT and GPL licenses
*
*/
(function ($) {
var DatePicker = function () {
var ids = {},
views = {
years: 'datepickerViewYears',
moths: 'datepickerViewMonths',
days: 'datepickerViewDays'
},
tpl = {
wrapper: '<div class="datepicker"><div class="datepickerBorderT" /><div class="datepickerBorderB" /><div class="datepickerBorderL" /><div class="datepickerBorderR" /><div class="datepickerBorderTL" /><div class="datepickerBorderTR" /><div class="datepickerBorderBL" /><div class="datepickerBorderBR" /><div class="datepickerContainer"><table cellspacing="0" cellpadding="0"><tbody><tr></tr></tbody></table></div></div>',
head: [
'<td>',
'<table cellspacing="0" cellpadding="0">',
'<thead>',
'<tr>',
'<th class="datepickerGoPrev"><a href="#"><span><%=prev%></span></a></th>',
'<th colspan="6" class="datepickerMonth"><a href="#"><span></span></a></th>',
'<th class="datepickerGoNext"><a href="#"><span><%=next%></span></a></th>',
'</tr>',
'<tr class="datepickerDoW">',
'<th><span><%=week%></span></th>',
'<th><span><%=day1%></span></th>',
'<th><span><%=day2%></span></th>',
'<th><span><%=day3%></span></th>',
'<th><span><%=day4%></span></th>',
'<th><span><%=day5%></span></th>',
'<th><span><%=day6%></span></th>',
'<th><span><%=day7%></span></th>',
'</tr>',
'</thead>',
'</table></td>'
],
space : '<td class="datepickerSpace"><div></div></td>',
days: [
'<tbody class="datepickerDays">',
'<tr>',
'<th class="datepickerWeek"><a href="#"><span><%=weeks[0].week%></span></a></th>',
'<td class="<%=weeks[0].days[0].classname%>"><a href="#"><span><%=weeks[0].days[0].text%></span></a></td>',
'<td class="<%=weeks[0].days[1].classname%>"><a href="#"><span><%=weeks[0].days[1].text%></span></a></td>',
'<td class="<%=weeks[0].days[2].classname%>"><a href="#"><span><%=weeks[0].days[2].text%></span></a></td>',
'<td class="<%=weeks[0].days[3].classname%>"><a href="#"><span><%=weeks[0].days[3].text%></span></a></td>',
'<td class="<%=weeks[0].days[4].classname%>"><a href="#"><span><%=weeks[0].days[4].text%></span></a></td>',
'<td class="<%=weeks[0].days[5].classname%>"><a href="#"><span><%=weeks[0].days[5].text%></span></a></td>',
'<td class="<%=weeks[0].days[6].classname%>"><a href="#"><span><%=weeks[0].days[6].text%></span></a></td>',
'</tr>',
'<tr>',
'<th class="datepickerWeek"><a href="#"><span><%=weeks[1].week%></span></a></th>',
'<td class="<%=weeks[1].days[0].classname%>"><a href="#"><span><%=weeks[1].days[0].text%></span></a></td>',
'<td class="<%=weeks[1].days[1].classname%>"><a href="#"><span><%=weeks[1].days[1].text%></span></a></td>',
'<td class="<%=weeks[1].days[2].classname%>"><a href="#"><span><%=weeks[1].days[2].text%></span></a></td>',
'<td class="<%=weeks[1].days[3].classname%>"><a href="#"><span><%=weeks[1].days[3].text%></span></a></td>',
'<td class="<%=weeks[1].days[4].classname%>"><a href="#"><span><%=weeks[1].days[4].text%></span></a></td>',
'<td class="<%=weeks[1].days[5].classname%>"><a href="#"><span><%=weeks[1].days[5].text%></span></a></td>',
'<td class="<%=weeks[1].days[6].classname%>"><a href="#"><span><%=weeks[1].days[6].text%></span></a></td>',
'</tr>',
'<tr>',
'<th class="datepickerWeek"><a href="#"><span><%=weeks[2].week%></span></a></th>',
'<td class="<%=weeks[2].days[0].classname%>"><a href="#"><span><%=weeks[2].days[0].text%></span></a></td>',
'<td class="<%=weeks[2].days[1].classname%>"><a href="#"><span><%=weeks[2].days[1].text%></span></a></td>',
'<td class="<%=weeks[2].days[2].classname%>"><a href="#"><span><%=weeks[2].days[2].text%></span></a></td>',
'<td class="<%=weeks[2].days[3].classname%>"><a href="#"><span><%=weeks[2].days[3].text%></span></a></td>',
'<td class="<%=weeks[2].days[4].classname%>"><a href="#"><span><%=weeks[2].days[4].text%></span></a></td>',
'<td class="<%=weeks[2].days[5].classname%>"><a href="#"><span><%=weeks[2].days[5].text%></span></a></td>',
'<td class="<%=weeks[2].days[6].classname%>"><a href="#"><span><%=weeks[2].days[6].text%></span></a></td>',
'</tr>',
'<tr>',
'<th class="datepickerWeek"><a href="#"><span><%=weeks[3].week%></span></a></th>',
'<td class="<%=weeks[3].days[0].classname%>"><a href="#"><span><%=weeks[3].days[0].text%></span></a></td>',
'<td class="<%=weeks[3].days[1].classname%>"><a href="#"><span><%=weeks[3].days[1].text%></span></a></td>',
'<td class="<%=weeks[3].days[2].classname%>"><a href="#"><span><%=weeks[3].days[2].text%></span></a></td>',
'<td class="<%=weeks[3].days[3].classname%>"><a href="#"><span><%=weeks[3].days[3].text%></span></a></td>',
'<td class="<%=weeks[3].days[4].classname%>"><a href="#"><span><%=weeks[3].days[4].text%></span></a></td>',
'<td class="<%=weeks[3].days[5].classname%>"><a href="#"><span><%=weeks[3].days[5].text%></span></a></td>',
'<td class="<%=weeks[3].days[6].classname%>"><a href="#"><span><%=weeks[3].days[6].text%></span></a></td>',
'</tr>',
'<tr>',
'<th class="datepickerWeek"><a href="#"><span><%=weeks[4].week%></span></a></th>',
'<td class="<%=weeks[4].days[0].classname%>"><a href="#"><span><%=weeks[4].days[0].text%></span></a></td>',
'<td class="<%=weeks[4].days[1].classname%>"><a href="#"><span><%=weeks[4].days[1].text%></span></a></td>',
'<td class="<%=weeks[4].days[2].classname%>"><a href="#"><span><%=weeks[4].days[2].text%></span></a></td>',
'<td class="<%=weeks[4].days[3].classname%>"><a href="#"><span><%=weeks[4].days[3].text%></span></a></td>',
'<td class="<%=weeks[4].days[4].classname%>"><a href="#"><span><%=weeks[4].days[4].text%></span></a></td>',
'<td class="<%=weeks[4].days[5].classname%>"><a href="#"><span><%=weeks[4].days[5].text%></span></a></td>',
'<td class="<%=weeks[4].days[6].classname%>"><a href="#"><span><%=weeks[4].days[6].text%></span></a></td>',
'</tr>',
'<tr>',
'<th class="datepickerWeek"><a href="#"><span><%=weeks[5].week%></span></a></th>',
'<td class="<%=weeks[5].days[0].classname%>"><a href="#"><span><%=weeks[5].days[0].text%></span></a></td>',
'<td class="<%=weeks[5].days[1].classname%>"><a href="#"><span><%=weeks[5].days[1].text%></span></a></td>',
'<td class="<%=weeks[5].days[2].classname%>"><a href="#"><span><%=weeks[5].days[2].text%></span></a></td>',
'<td class="<%=weeks[5].days[3].classname%>"><a href="#"><span><%=weeks[5].days[3].text%></span></a></td>',
'<td class="<%=weeks[5].days[4].classname%>"><a href="#"><span><%=weeks[5].days[4].text%></span></a></td>',
'<td class="<%=weeks[5].days[5].classname%>"><a href="#"><span><%=weeks[5].days[5].text%></span></a></td>',
'<td class="<%=weeks[5].days[6].classname%>"><a href="#"><span><%=weeks[5].days[6].text%></span></a></td>',
'</tr>',
'</tbody>'
],
months: [
'<tbody class="<%=className%>">',
'<tr>',
'<td colspan="2"><a href="#"><span><%=data[0]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[1]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[2]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[3]%></span></a></td>',
'</tr>',
'<tr>',
'<td colspan="2"><a href="#"><span><%=data[4]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[5]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[6]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[7]%></span></a></td>',
'</tr>',
'<tr>',
'<td colspan="2"><a href="#"><span><%=data[8]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[9]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[10]%></span></a></td>',
'<td colspan="2"><a href="#"><span><%=data[11]%></span></a></td>',
'</tr>',
'</tbody>'
]
},
defaults = {
flat: false,
starts: 1,
prev: '&#9664;',
next: '&#9654;',
lastSel: false,
mode: 'single',
view: 'days',
calendars: 1,
format: 'Y-m-d',
position: 'bottom',
eventName: 'click',
onRender: function(){return {};},
onChange: function(){return true;},
onShow: function(){return true;},
onBeforeShow: function(){return true;},
onHide: function(){return true;},
locale: {
// days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
// daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
// daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
// months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
// monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
// weekMin: 'wk'
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
weekMin: '周'
}
},
fill = function(el) {
var options = $(el).data('datepicker');
var cal = $(el);
var currentCal = Math.floor(options.calendars/2), date, data, dow, month, cnt = 0, week, days, indic, indic2, html, tblCal;
cal.find('td>table tbody').remove();
for (var i = 0; i < options.calendars; i++) {
date = new Date(options.current);
date.addMonths(-currentCal + i);
tblCal = cal.find('table').eq(i+1);
switch (tblCal[0].className) {
case 'datepickerViewDays':
dow = formatDate(date, 'B, Y');
break;
case 'datepickerViewMonths':
dow = date.getFullYear();
break;
case 'datepickerViewYears':
dow = (date.getFullYear()-6) + ' - ' + (date.getFullYear()+5);
break;
}
tblCal.find('thead tr:first th:eq(1) span').text(dow);
dow = date.getFullYear()-6;
data = {
data: [],
className: 'datepickerYears'
}
for ( var j = 0; j < 12; j++) {
data.data.push(dow + j);
}
html = tmpl(tpl.months.join(''), data);
date.setDate(1);
data = {weeks:[], test: 10};
month = date.getMonth();
var dow = (date.getDay() - options.starts) % 7;
date.addDays(-(dow + (dow < 0 ? 7 : 0)));
week = -1;
cnt = 0;
while (cnt < 42) {
indic = parseInt(cnt/7,10);
indic2 = cnt%7;
if (!data.weeks[indic]) {
week = date.getWeekNumber();
data.weeks[indic] = {
week: week,
days: []
};
}
data.weeks[indic].days[indic2] = {
text: date.getDate(),
classname: []
};
if (month != date.getMonth()) {
data.weeks[indic].days[indic2].classname.push('datepickerNotInMonth');
}
if (date.getDay() == 0) {
data.weeks[indic].days[indic2].classname.push('datepickerSunday');
}
if (date.getDay() == 6) {
data.weeks[indic].days[indic2].classname.push('datepickerSaturday');
}
var fromUser = options.onRender(date);
var val = date.valueOf();
if (fromUser.selected || options.date == val || $.inArray(val, options.date) > -1 || (options.mode == 'range' && val >= options.date[0] && val <= options.date[1])) {
data.weeks[indic].days[indic2].classname.push('datepickerSelected');
}
if (fromUser.disabled) {
data.weeks[indic].days[indic2].classname.push('datepickerDisabled');
}
if (fromUser.className) {
data.weeks[indic].days[indic2].classname.push(fromUser.className);
}
data.weeks[indic].days[indic2].classname = data.weeks[indic].days[indic2].classname.join(' ');
cnt++;
date.addDays(1);
}
html = tmpl(tpl.days.join(''), data) + html;
data = {
data: options.locale.monthsShort,
className: 'datepickerMonths'
};
html = tmpl(tpl.months.join(''), data) + html;
tblCal.append(html);
}
},
parseDate = function (date, format) {
if (date.constructor == Date) {
return new Date(date);
}
var parts = date.split(/\W+/);
var against = format.split(/\W+/), d, m, y, h, min, now = new Date();
for (var i = 0; i < parts.length; i++) {
switch (against[i]) {
case 'd':
case 'e':
d = parseInt(parts[i],10);
break;
case 'm':
m = parseInt(parts[i], 10)-1;
break;
case 'Y':
case 'y':
y = parseInt(parts[i], 10);
y += y > 100 ? 0 : (y < 29 ? 2000 : 1900);
break;
case 'H':
case 'I':
case 'k':
case 'l':
h = parseInt(parts[i], 10);
break;
case 'P':
case 'p':
if (/pm/i.test(parts[i]) && h < 12) {
h += 12;
} else if (/am/i.test(parts[i]) && h >= 12) {
h -= 12;
}
break;
case 'M':
min = parseInt(parts[i], 10);
break;
}
}
return new Date(
y === undefined ? now.getFullYear() : y,
m === undefined ? now.getMonth() : m,
d === undefined ? now.getDate() : d,
h === undefined ? now.getHours() : h,
min === undefined ? now.getMinutes() : min,
0
);
},
formatDate = function(date, format) {
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
var wn = date.getWeekNumber();
var w = date.getDay();
var s = {};
var hr = date.getHours();
var pm = (hr >= 12);
var ir = (pm) ? (hr - 12) : hr;
var dy = date.getDayOfYear();
if (ir == 0) {
ir = 12;
}
var min = date.getMinutes();
var sec = date.getSeconds();
var parts = format.split(''), part;
for ( var i = 0; i < parts.length; i++ ) {
part = parts[i];
switch (parts[i]) {
case 'a':
part = date.getDayName();
break;
case 'A':
part = date.getDayName(true);
break;
case 'b':
part = date.getMonthName();
break;
case 'B':
part = date.getMonthName(true);
break;
case 'C':
part = 1 + Math.floor(y / 100);
break;
case 'd':
part = (d < 10) ? ("0" + d) : d;
break;
case 'e':
part = d;
break;
case 'H':
part = (hr < 10) ? ("0" + hr) : hr;
break;
case 'I':
part = (ir < 10) ? ("0" + ir) : ir;
break;
case 'j':
part = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy;
break;
case 'k':
part = hr;
break;
case 'l':
part = ir;
break;
case 'm':
part = (m < 9) ? ("0" + (1+m)) : (1+m);
break;
case 'M':
part = (min < 10) ? ("0" + min) : min;
break;
case 'p':
case 'P':
part = pm ? "PM" : "AM";
break;
case 's':
part = Math.floor(date.getTime() / 1000);
break;
case 'S':
part = (sec < 10) ? ("0" + sec) : sec;
break;
case 'u':
part = w + 1;
break;
case 'w':
part = w;
break;
case 'y':
part = ('' + y).substr(2, 2);
break;
case 'Y':
part = y;
break;
}
parts[i] = part;
}
return parts.join('');
},
extendDate = function(options) {
if (Date.prototype.tempDate) {
return;
}
Date.prototype.tempDate = null;
Date.prototype.months = options.months;
Date.prototype.monthsShort = options.monthsShort;
Date.prototype.days = options.days;
Date.prototype.daysShort = options.daysShort;
Date.prototype.getMonthName = function(fullName) {
return this[fullName ? 'months' : 'monthsShort'][this.getMonth()];
};
Date.prototype.getDayName = function(fullName) {
return this[fullName ? 'days' : 'daysShort'][this.getDay()];
};
Date.prototype.addDays = function (n) {
this.setDate(this.getDate() + n);
this.tempDate = this.getDate();
};
Date.prototype.addMonths = function (n) {
if (this.tempDate == null) {
this.tempDate = this.getDate();
}
this.setDate(1);
this.setMonth(this.getMonth() + n);
this.setDate(Math.min(this.tempDate, this.getMaxDays()));
};
Date.prototype.addYears = function (n) {
if (this.tempDate == null) {
this.tempDate = this.getDate();
}
this.setDate(1);
this.setFullYear(this.getFullYear() + n);
this.setDate(Math.min(this.tempDate, this.getMaxDays()));
};
Date.prototype.getMaxDays = function() {
var tmpDate = new Date(Date.parse(this)),
d = 28, m;
m = tmpDate.getMonth();
d = 28;
while (tmpDate.getMonth() == m) {
d ++;
tmpDate.setDate(d);
}
return d - 1;
};
Date.prototype.getFirstDay = function() {
var tmpDate = new Date(Date.parse(this));
tmpDate.setDate(1);
return tmpDate.getDay();
};
Date.prototype.getWeekNumber = function() {
var tempDate = new Date(this);
tempDate.setDate(tempDate.getDate() - (tempDate.getDay() + 6) % 7 + 3);
var dms = tempDate.valueOf();
tempDate.setMonth(0);
tempDate.setDate(4);
return Math.round((dms - tempDate.valueOf()) / (604800000)) + 1;
};
Date.prototype.getDayOfYear = function() {
var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
var time = now - then;
return Math.floor(time / 24*60*60*1000);
};
},
layout = function (el) {
var options = $(el).data('datepicker');
var cal = $('#' + options.id);
if (!options.extraHeight) {
var divs = $(el).find('div');
options.extraHeight = divs.get(0).offsetHeight + divs.get(1).offsetHeight;
options.extraWidth = divs.get(2).offsetWidth + divs.get(3).offsetWidth;
}
var tbl = cal.find('table:first').get(0);
var width = tbl.offsetWidth;
var height = tbl.offsetHeight;
cal.css({
width: width + options.extraWidth + 'px',
height: height + options.extraHeight + 'px'
}).find('div.datepickerContainer').css({
width: width + 'px',
height: height + 'px'
});
},
click = function(ev) {
if ($(ev.target).is('span')) {
ev.target = ev.target.parentNode;
}
var el = $(ev.target);
if (el.is('a')) {
ev.target.blur();
if (el.hasClass('datepickerDisabled')) {
return false;
}
var options = $(this).data('datepicker');
var parentEl = el.parent();
var tblEl = parentEl.parent().parent().parent();
var tblIndex = $('table', this).index(tblEl.get(0)) - 1;
var tmp = new Date(options.current);
var changed = false;
var fillIt = false;
if (parentEl.is('th')) {
if (parentEl.hasClass('datepickerWeek') && options.mode == 'range' && !parentEl.next().hasClass('datepickerDisabled')) {
var val = parseInt(parentEl.next().text(), 10);
tmp.addMonths(tblIndex - Math.floor(options.calendars/2));
if (parentEl.next().hasClass('datepickerNotInMonth')) {
tmp.addMonths(val > 15 ? -1 : 1);
}
tmp.setDate(val);
options.date[0] = (tmp.setHours(0,0,0,0)).valueOf();
tmp.setHours(23,59,59,0);
tmp.addDays(6);
options.date[1] = tmp.valueOf();
fillIt = true;
changed = true;
options.lastSel = false;
} else if (parentEl.hasClass('datepickerMonth')) {
tmp.addMonths(tblIndex - Math.floor(options.calendars/2));
switch (tblEl.get(0).className) {
case 'datepickerViewDays':
tblEl.get(0).className = 'datepickerViewMonths';
el.find('span').text(tmp.getFullYear());
break;
case 'datepickerViewMonths':
tblEl.get(0).className = 'datepickerViewYears';
el.find('span').text((tmp.getFullYear()-6) + ' - ' + (tmp.getFullYear()+5));
break;
case 'datepickerViewYears':
tblEl.get(0).className = 'datepickerViewDays';
el.find('span').text(formatDate(tmp, 'B, Y'));
break;
}
} else if (parentEl.parent().parent().is('thead')) {
switch (tblEl.get(0).className) {
case 'datepickerViewDays':
options.current.addMonths(parentEl.hasClass('datepickerGoPrev') ? -1 : 1);
break;
case 'datepickerViewMonths':
options.current.addYears(parentEl.hasClass('datepickerGoPrev') ? -1 : 1);
break;
case 'datepickerViewYears':
options.current.addYears(parentEl.hasClass('datepickerGoPrev') ? -12 : 12);
break;
}
fillIt = true;
}
} else if (parentEl.is('td') && !parentEl.hasClass('datepickerDisabled')) {
switch (tblEl.get(0).className) {
case 'datepickerViewMonths':
options.current.setMonth(tblEl.find('tbody.datepickerMonths td').index(parentEl));
options.current.setFullYear(parseInt(tblEl.find('thead th.datepickerMonth span').text(), 10));
options.current.addMonths(Math.floor(options.calendars/2) - tblIndex);
tblEl.get(0).className = 'datepickerViewDays';
break;
case 'datepickerViewYears':
options.current.setFullYear(parseInt(el.text(), 10));
tblEl.get(0).className = 'datepickerViewMonths';
break;
default:
var val = parseInt(el.text(), 10);
tmp.addMonths(tblIndex - Math.floor(options.calendars/2));
if (parentEl.hasClass('datepickerNotInMonth')) {
tmp.addMonths(val > 15 ? -1 : 1);
}
tmp.setDate(val);
switch (options.mode) {
case 'multiple':
val = (tmp.setHours(0,0,0,0)).valueOf();
if ($.inArray(val, options.date) > -1) {
$.each(options.date, function(nr, dat){
if (dat == val) {
options.date.splice(nr,1);
return false;
}
});
} else {
options.date.push(val);
}
break;
case 'range':
if (!options.lastSel) {
options.date[0] = (tmp.setHours(0,0,0,0)).valueOf();
}
val = (tmp.setHours(23,59,59,0)).valueOf();
if (val < options.date[0]) {
options.date[1] = options.date[0] + 86399000;
options.date[0] = val - 86399000;
} else {
options.date[1] = val;
}
options.lastSel = !options.lastSel;
break;
default:
options.date = tmp.valueOf();
break;
}
break;
}
fillIt = true;
changed = true;
}
if (fillIt) {
fill(this);
}
if (changed) {
options.onChange.apply(this, prepareDate(options));
}
}
return false;
},
prepareDate = function (options) {
var tmp;
if (options.mode == 'single') {
tmp = new Date(options.date);
return [formatDate(tmp, options.format), tmp, options.el];
} else {
tmp = [[],[], options.el];
$.each(options.date, function(nr, val){
var date = new Date(val);
tmp[0].push(formatDate(date, options.format));
tmp[1].push(date);
});
return tmp;
}
},
getViewport = function () {
var m = document.compatMode == 'CSS1Compat';
return {
l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),
t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),
w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),
h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)
};
},
isChildOf = function(parentEl, el, container) {
if (parentEl == el) {
return true;
}
if (parentEl.contains) {
return parentEl.contains(el);
}
if ( parentEl.compareDocumentPosition ) {
return !!(parentEl.compareDocumentPosition(el) & 16);
}
var prEl = el.parentNode;
while(prEl && prEl != container) {
if (prEl == parentEl)
return true;
prEl = prEl.parentNode;
}
return false;
},
show = function (ev) {
var cal = $('#' + $(this).data('datepickerId'));
if (!cal.is(':visible')) {
var calEl = cal.get(0);
fill(calEl);
var options = cal.data('datepicker');
options.onBeforeShow.apply(this, [cal.get(0)]);
var pos = $(this).offset();
var viewPort = getViewport();
var top = pos.top;
var left = pos.left;
// var oldDisplay = $.curCSS(calEl, 'display');
var oldDisplay = $(calEl).css('display');
cal.css({
visibility: 'hidden',
display: 'block'
});
layout(calEl);
switch (options.position){
case 'top':
top -= calEl.offsetHeight;
break;
case 'left':
left -= calEl.offsetWidth;
break;
case 'right':
left += this.offsetWidth;
break;
case 'bottom':
top += this.offsetHeight;
break;
}
if (top + calEl.offsetHeight > viewPort.t + viewPort.h) {
top = pos.top - calEl.offsetHeight;
}
if (top < viewPort.t) {
top = pos.top + this.offsetHeight + calEl.offsetHeight;
}
if (left + calEl.offsetWidth > viewPort.l + viewPort.w) {
left = pos.left - calEl.offsetWidth;
}
if (left < viewPort.l) {
left = pos.left + this.offsetWidth
}
cal.css({
visibility: 'visible',
display: 'block',
top: top + 'px',
left: left + 'px'
});
if (options.onShow.apply(this, [cal.get(0)]) != false) {
cal.show();
}
$(document).bind('mousedown', {cal: cal, trigger: this}, hide);
}
return false;
},
hide = function (ev) {
if (ev.target != ev.data.trigger && !isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {
if (ev.data.cal.data('datepicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {
ev.data.cal.hide();
}
$(document).unbind('mousedown', hide);
}
};
return {
init: function(options){
options = $.extend({}, defaults, options||{});
extendDate(options.locale);
options.calendars = Math.max(1, parseInt(options.calendars,10)||1);
options.mode = /single|multiple|range/.test(options.mode) ? options.mode : 'single';
return this.each(function(){
if (!$(this).data('datepicker')) {
options.el = this;
if (options.date.constructor == String) {
options.date = parseDate(options.date, options.format);
options.date.setHours(0,0,0,0);
}
if (options.mode != 'single') {
if (options.date.constructor != Array) {
options.date = [options.date.valueOf()];
if (options.mode == 'range') {
options.date.push(((new Date(options.date[0])).setHours(23,59,59,0)).valueOf());
}
} else {
for (var i = 0; i < options.date.length; i++) {
options.date[i] = (parseDate(options.date[i], options.format).setHours(0,0,0,0)).valueOf();
}
if (options.mode == 'range') {
options.date[1] = ((new Date(options.date[1])).setHours(23,59,59,0)).valueOf();
}
}
} else {
options.date = options.date.valueOf();
}
if (!options.current) {
options.current = new Date();
} else {
options.current = parseDate(options.current, options.format);
}
options.current.setDate(1);
options.current.setHours(0,0,0,0);
var id = 'datepicker_' + parseInt(Math.random() * 1000), cnt;
options.id = id;
$(this).data('datepickerId', options.id);
var cal = $(tpl.wrapper).attr('id', id).bind('click', click).data('datepicker', options);
if (options.className) {
cal.addClass(options.className);
}
var html = '';
for (var i = 0; i < options.calendars; i++) {
cnt = options.starts;
if (i > 0) {
html += tpl.space;
}
html += tmpl(tpl.head.join(''), {
week: options.locale.weekMin,
prev: options.prev,
next: options.next,
day1: options.locale.daysMin[(cnt++)%7],
day2: options.locale.daysMin[(cnt++)%7],
day3: options.locale.daysMin[(cnt++)%7],
day4: options.locale.daysMin[(cnt++)%7],
day5: options.locale.daysMin[(cnt++)%7],
day6: options.locale.daysMin[(cnt++)%7],
day7: options.locale.daysMin[(cnt++)%7]
});
}
cal
.find('tr:first').append(html)
.find('table').addClass(views[options.view]);
fill(cal.get(0));
if (options.flat) {
cal.appendTo(this).show().css('position', 'relative');
layout(cal.get(0));
} else {
cal.appendTo(document.body);
$(this).bind(options.eventName, show);
}
}
});
},
showPicker: function() {
return this.each( function () {
if ($(this).data('datepickerId')) {
show.apply(this);
}
});
},
hidePicker: function() {
return this.each( function () {
if ($(this).data('datepickerId')) {
$('#' + $(this).data('datepickerId')).hide();
}
});
},
setDate: function(date, shiftTo){
return this.each(function(){
if ($(this).data('datepickerId')) {
var cal = $('#' + $(this).data('datepickerId'));
var options = cal.data('datepicker');
options.date = date;
if (options.date.constructor == String) {
options.date = parseDate(options.date, options.format);
options.date.setHours(0,0,0,0);
}
if (options.mode != 'single') {
if (options.date.constructor != Array) {
options.date = [options.date.valueOf()];
if (options.mode == 'range') {
options.date.push(((new Date(options.date[0])).setHours(23,59,59,0)).valueOf());
}
} else {
for (var i = 0; i < options.date.length; i++) {
options.date[i] = (parseDate(options.date[i], options.format).setHours(0,0,0,0)).valueOf();
}
if (options.mode == 'range') {
options.date[1] = ((new Date(options.date[1])).setHours(23,59,59,0)).valueOf();
}
}
} else {
options.date = options.date.valueOf();
}
if (shiftTo) {
options.current = new Date (options.mode != 'single' ? options.date[0] : options.date);
}
fill(cal.get(0));
}
});
},
getDate: function(formated) {
if (this.size() > 0) {
return prepareDate($('#' + $(this).data('datepickerId')).data('datepicker'))[formated ? 0 : 1];
}
},
clear: function(){
return this.each(function(){
if ($(this).data('datepickerId')) {
var cal = $('#' + $(this).data('datepickerId'));
var options = cal.data('datepicker');
if (options.mode != 'single') {
options.date = [];
fill(cal.get(0));
} else {
// else 由 kiccer 添加。(可自行判断是否去除)
$('#' + $(this).data('datepickerId')).remove();
}
}
});
},
fixLayout: function(){
return this.each(function(){
if ($(this).data('datepickerId')) {
var cal = $('#' + $(this).data('datepickerId'));
var options = cal.data('datepicker');
if (options.flat) {
layout(cal.get(0));
}
}
});
}
};
}();
$.fn.extend({
DatePicker: DatePicker.init,
DatePickerHide: DatePicker.hidePicker,
DatePickerShow: DatePicker.showPicker,
DatePickerSetDate: DatePicker.setDate,
DatePickerGetDate: DatePicker.getDate,
DatePickerClear: DatePicker.clear,
DatePickerLayout: DatePicker.fixLayout
});
})(jQuery);
(function(){
var cache = {};
this.tmpl = function tmpl(str, data){
// Figure out if we're getting a template, or if we need to
// load the template - and be sure to cache the result.
var fn = !/\W/.test(str) ?
cache[str] = cache[str] ||
tmpl(document.getElementById(str).innerHTML) :
// Generate a reusable function that will serve as a template
// generator (and which will be cached).
new Function("obj",
"var p=[],print=function(){p.push.apply(p,arguments);};" +
// Introduce the data as local variables using with(){}
"with(obj){p.push('" +
// Convert the template into pure JavaScript
str
.replace(/[\r\t\n]/g, " ")
.split("<%").join("\t")
.replace(/((^|%>)[^\t]*)'/g, "$1\r")
.replace(/\t=(.*?)%>/g, "',$1,'")
.split("\t").join("');")
.split("%>").join("p.push('")
.split("\r").join("\\'")
+ "');}return p.join('');");
// Provide some basic currying to the user
return data ? fn( data ) : fn;
};
})();
\ No newline at end of file
/**
*
* Zoomimage
* Author: Stefan Petre www.eyecon.ro
*
*/
(function($){
var EYE = window.EYE = function() {
var _registered = {
init: []
};
return {
init: function() {
$.each(_registered.init, function(nr, fn){
fn.call();
});
},
extend: function(prop) {
for (var i in prop) {
if (prop[i] != undefined) {
this[i] = prop[i];
}
}
},
register: function(fn, type) {
if (!_registered[type]) {
_registered[type] = [];
}
_registered[type].push(fn);
}
};
}();
$(EYE.init);
})(jQuery);
This source diff could not be displayed because it is too large. You can view the blob instead.
(function($){
var initLayout = function() {
var hash = window.location.hash.replace('#', '');
var currentTab = $('ul.navigationTabs a')
.bind('click', showTab)
// .filter('a[rel=' + hash + ']');
if (currentTab.size() == 0) {
currentTab = $('ul.navigationTabs a:first');
}
showTab.apply(currentTab.get(0));
$('#date').DatePicker({
flat: true,
date: '2008-07-31',
current: '2008-07-31',
calendars: 1,
starts: 1,
view: 'years'
});
var now = new Date();
now.addDays(-10);
var now2 = new Date();
now2.addDays(-5);
now2.setHours(0,0,0,0);
$('#date2').DatePicker({
flat: true,
date: ['2008-07-31', '2008-07-28'],
current: '2008-07-31',
format: 'Y-m-d',
calendars: 1,
mode: 'multiple',
onRender: function(date) {
return {
disabled: (date.valueOf() < now.valueOf()),
className: date.valueOf() == now2.valueOf() ? 'datepickerSpecial' : false
}
},
onChange: function(formated, dates) {
},
starts: 0
});
$('#clearSelection').bind('click', function(){
$('#date3').DatePickerClear();
return false;
});
$('#date3').DatePicker({
flat: true,
date: ['2009-12-28','2010-01-23'],
current: '2010-01-01',
calendars: 3,
mode: 'range',
starts: 1
});
$('.inputDate').DatePicker({
format:'m/d/Y',
date: $('#inputDate').val(),
current: $('#inputDate').val(),
starts: 1,
position: 'right',
onBeforeShow: function(){
$('#inputDate').DatePickerSetDate($('#inputDate').val(), true);
},
onChange: function(formated, dates){
$('#inputDate').val(formated);
if ($('#closeOnSelect input').attr('checked')) {
$('#inputDate').DatePickerHide();
}
}
});
var now3 = new Date();
now3.addDays(-4);
var now4 = new Date()
$('#widgetCalendar').DatePicker({
flat: true,
format: 'd B, Y',
date: [new Date(now3), new Date(now4)],
calendars: 3,
mode: 'range',
starts: 1,
onChange: function(formated) {
$('#widgetField span').get(0).innerHTML = formated.join(' &divide; ');
}
});
var state = false;
$('#widgetField>a').bind('click', function(){
$('#widgetCalendar').stop().animate({height: state ? 0 : $('#widgetCalendar div.datepicker').get(0).offsetHeight}, 500);
state = !state;
return false;
});
$('#widgetCalendar div.datepicker').css('position', 'absolute');
};
var showTab = function(e) {
var tabIndex = $('ul.navigationTabs a')
.removeClass('active')
.index(this);
$(this)
.addClass('active')
.blur();
$('div.tab')
.hide()
.eq(tabIndex)
.show();
};
EYE.register(initLayout, 'init');
})(jQuery)
\ No newline at end of file
/**
*
* Utilities
* Author: Stefan Petre www.eyecon.ro
*
*/
(function($) {
EYE.extend({
getPosition : function(e, forceIt)
{
var x = 0;
var y = 0;
var es = e.style;
var restoreStyles = false;
if (forceIt && jQuery.curCSS(e,'display') == 'none') {
var oldVisibility = es.visibility;
var oldPosition = es.position;
restoreStyles = true;
es.visibility = 'hidden';
es.display = 'block';
es.position = 'absolute';
}
var el = e;
if (el.getBoundingClientRect) { // IE
var box = el.getBoundingClientRect();
x = box.left + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) - 2;
y = box.top + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - 2;
} else {
x = el.offsetLeft;
y = el.offsetTop;
el = el.offsetParent;
if (e != el) {
while (el) {
x += el.offsetLeft;
y += el.offsetTop;
el = el.offsetParent;
}
}
if (jQuery.browser.safari && jQuery.curCSS(e, 'position') == 'absolute' ) {
x -= document.body.offsetLeft;
y -= document.body.offsetTop;
}
el = e.parentNode;
while (el && el.tagName.toUpperCase() != 'BODY' && el.tagName.toUpperCase() != 'HTML')
{
if (jQuery.curCSS(el, 'display') != 'inline') {
x -= el.scrollLeft;
y -= el.scrollTop;
}
el = el.parentNode;
}
}
if (restoreStyles == true) {
es.display = 'none';
es.position = oldPosition;
es.visibility = oldVisibility;
}
return {x:x, y:y};
},
getSize : function(e)
{
var w = parseInt(jQuery.curCSS(e,'width'), 10);
var h = parseInt(jQuery.curCSS(e,'height'), 10);
var wb = 0;
var hb = 0;
if (jQuery.curCSS(e, 'display') != 'none') {
wb = e.offsetWidth;
hb = e.offsetHeight;
} else {
var es = e.style;
var oldVisibility = es.visibility;
var oldPosition = es.position;
es.visibility = 'hidden';
es.display = 'block';
es.position = 'absolute';
wb = e.offsetWidth;
hb = e.offsetHeight;
es.display = 'none';
es.position = oldPosition;
es.visibility = oldVisibility;
}
return {w:w, h:h, wb:wb, hb:hb};
},
getClient : function(e)
{
var h, w;
if (e) {
w = e.clientWidth;
h = e.clientHeight;
} else {
var de = document.documentElement;
w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
}
return {w:w,h:h};
},
getScroll : function (e)
{
var t=0, l=0, w=0, h=0, iw=0, ih=0;
if (e && e.nodeName.toLowerCase() != 'body') {
t = e.scrollTop;
l = e.scrollLeft;
w = e.scrollWidth;
h = e.scrollHeight;
} else {
if (document.documentElement) {
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
} else if (document.body) {
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
if (typeof pageYOffset != 'undefined') {
t = pageYOffset;
l = pageXOffset;
}
iw = self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||0;
ih = self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0;
}
return { t: t, l: l, w: w, h: h, iw: iw, ih: ih };
},
getMargins : function(e, toInteger)
{
var t = jQuery.curCSS(e,'marginTop') || '';
var r = jQuery.curCSS(e,'marginRight') || '';
var b = jQuery.curCSS(e,'marginBottom') || '';
var l = jQuery.curCSS(e,'marginLeft') || '';
if (toInteger)
return {
t: parseInt(t, 10)||0,
r: parseInt(r, 10)||0,
b: parseInt(b, 10)||0,
l: parseInt(l, 10)
};
else
return {t: t, r: r, b: b, l: l};
},
getPadding : function(e, toInteger)
{
var t = jQuery.curCSS(e,'paddingTop') || '';
var r = jQuery.curCSS(e,'paddingRight') || '';
var b = jQuery.curCSS(e,'paddingBottom') || '';
var l = jQuery.curCSS(e,'paddingLeft') || '';
if (toInteger)
return {
t: parseInt(t, 10)||0,
r: parseInt(r, 10)||0,
b: parseInt(b, 10)||0,
l: parseInt(l, 10)
};
else
return {t: t, r: r, b: b, l: l};
},
getBorder : function(e, toInteger)
{
var t = jQuery.curCSS(e,'borderTopWidth') || '';
var r = jQuery.curCSS(e,'borderRightWidth') || '';
var b = jQuery.curCSS(e,'borderBottomWidth') || '';
var l = jQuery.curCSS(e,'borderLeftWidth') || '';
if (toInteger)
return {
t: parseInt(t, 10)||0,
r: parseInt(r, 10)||0,
b: parseInt(b, 10)||0,
l: parseInt(l, 10)||0
};
else
return {t: t, r: r, b: b, l: l};
},
traverseDOM : function(nodeEl, func)
{
func(nodeEl);
nodeEl = nodeEl.firstChild;
while(nodeEl){
EYE.traverseDOM(nodeEl, func);
nodeEl = nodeEl.nextSibling;
}
},
getInnerWidth : function(el, scroll) {
var offsetW = el.offsetWidth;
return scroll ? Math.max(el.scrollWidth,offsetW) - offsetW + el.clientWidth:el.clientWidth;
},
getInnerHeight : function(el, scroll) {
var offsetH = el.offsetHeight;
return scroll ? Math.max(el.scrollHeight,offsetH) - offsetH + el.clientHeight:el.clientHeight;
},
getExtraWidth : function(el) {
if($.boxModel)
return (parseInt($.curCSS(el, 'paddingLeft'))||0)
+ (parseInt($.curCSS(el, 'paddingRight'))||0)
+ (parseInt($.curCSS(el, 'borderLeftWidth'))||0)
+ (parseInt($.curCSS(el, 'borderRightWidth'))||0);
return 0;
},
getExtraHeight : function(el) {
if($.boxModel)
return (parseInt($.curCSS(el, 'paddingTop'))||0)
+ (parseInt($.curCSS(el, 'paddingBottom'))||0)
+ (parseInt($.curCSS(el, 'borderTopWidth'))||0)
+ (parseInt($.curCSS(el, 'borderBottomWidth'))||0);
return 0;
},
isChildOf: function(parentEl, el, container) {
if (parentEl == el) {
return true;
}
if (!el || !el.nodeType || el.nodeType != 1) {
return false;
}
if (parentEl.contains && !$.browser.safari) {
return parentEl.contains(el);
}
if ( parentEl.compareDocumentPosition ) {
return !!(parentEl.compareDocumentPosition(el) & 16);
}
var prEl = el.parentNode;
while(prEl && prEl != container) {
if (prEl == parentEl)
return true;
prEl = prEl.parentNode;
}
return false;
},
centerEl : function(el, axis)
{
var clientScroll = EYE.getScroll();
var size = EYE.getSize(el);
if (!axis || axis == 'vertically')
$(el).css(
{
top: clientScroll.t + ((Math.min(clientScroll.h,clientScroll.ih) - size.hb)/2) + 'px'
}
);
if (!axis || axis == 'horizontally')
$(el).css(
{
left: clientScroll.l + ((Math.min(clientScroll.w,clientScroll.iw) - size.wb)/2) + 'px'
}
);
}
});
if (!$.easing.easeout) {
$.easing.easeout = function(p, n, firstNum, delta, duration) {
return -delta * ((n=n/duration-1)*n*n*n - 1) + firstNum;
};
}
})(jQuery);
\ No newline at end of file
/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.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",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={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:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,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":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.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(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
jQuery Easing v1.3.1 - http://gsgd.co.uk/sandbox/jquery/easing/
Uses the built in easing capabilities added In jQuery 1.1
to offer multiple easing options
TERMS OF USE - jQuery Easing
Open source under the BSD License.
Copyright © 2008 George McGinley Smith
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
Neither the name of the author nor the names of contributors may be used to endorse
or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
TERMS OF USE - EASING EQUATIONS
Open source under the BSD License.
Copyright © 2001 Robert Penner
All rights reserved.
Redistribution and use in source and binary forms, with or without modification
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
Neither the name of the author nor the names of contributors may be used to endorse
or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
# jQuery Easing Plugin
What is it? A jQuery plugin from GSGD to give advanced easing options. More info [here](http://gsgd.co.uk/sandbox/jquery/easing)
For CDN please use CloudFlare [`http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js`](http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js) to help my host. Thank you.
# AMD or CommonJS usage
```js
// CommonJS
var jQuery = require('jquery');
require('jquery.easing')(jQuery);
// AMD
define(['jquery', 'jquery.easing'], function (jQuery, easing) {
easing(jQuery)
})
```
# Building and testing
* Clone the repo
* `npm install`
* Make changes
* Test against files in `/examples`
* Build minified version with `npm run build`
{
"name": "jquery.easing",
"main": "jquery.easing.js",
"version": "1.4.1",
"homepage": "https://github.com/gdsmith/jquery.easing",
"authors": [
"George McGinley Smith <george@gsgd.co.uk>"
],
"description": "A jQuery plugin from GSGD to give advanced easing options",
"keywords": [
"easing",
"ease",
"tween",
"keyframe",
"timeline",
"animation",
"jquery-plugin",
"ecosystem:jquery"
],
"dependencies": {
"jquery": ">= 1.3.0"
},
"license": "BSD-3-Clause",
"ignore": [
"**/.*",
"example"
]
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Demo of all easing styles</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.3.js"></script>
<script type="text/javascript" src="../jquery.easing.js"></script>
<style type="text/css" media="screen">
#bounds {
width: 250px;
height: 250px;
border: 1px solid #888;
}
#box {
height: 50px;
width: 50px;
background: black;
}
</style>
<script type="text/javascript">
$(function() {
var easings = $.map( $.easing, function( fn, key ) {
return jQuery.isFunction( fn ) ?
"<option value='" + key + "'>" + key + "</option>" :
null;
}),
current = 0,
positions = [
{
marginTop: "0px",
marginLeft: "0px"
}, {
marginTop: "200px",
marginLeft: "200px"
}
];
$( "#easing" ).html( easings );
$( "#run" ).on( "click", function() {
var duration = +$( "#duration" ).val(),
easing = $( "#easing" ).val(),
start = Date.now();
if ( Number.isNaN( duration ) ) {
duration = 1000;
$( "#duration" ).val( duration );
}
$( "#status" ).text( "Animating..." );
// Alternate positions
current = current ^ 1;
$( "#box" ).animate( positions[current], duration, easing,
function() {
$( "#status" ).text( "Done (" + (Date.now() - start)/1000 + " seconds)" );
}
);
});
});
</script>
</head>
<body>
<h1>Demo of all easing styles</h1>
<p id=status>Choose an easing method and press Run</p>
<p>
<label for=easing>Easing: </label>
<select id=easing></select><br />
<label for=duration> Duration (seconds): </label>
<input type=text id=duration size=10 value=1000 /><br />
<button id=run>Run</button>
</p>
<div id=bounds>
<div id="box"></div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Example</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="../jquery.easing.js"></script>
<script type="text/javascript" src="../jquery.easing.compatibility.js"></script>
<script type="text/javascript">
$(function() {
var boing = function() {
$('#boxing')
.animate({marginLeft: '50px' }, 1000, 'easeOutElastic')
.animate({marginTop: '50px' }, 1000, 'easeOutBounce')
.animate({marginLeft: '-150px'}, 1000, 'easeOutQuad')
.animate({marginTop: '-150px'}, 1000, 'easeInOutBack');
};
var squish = function() {
$('#box')
.animate({height: '100px', marginTop: '0px', width: '50px' }, 1000, 'easeOutElastic')
.animate({height: '50px' , marginTop: '25px', width: '50px' }, 1000, 'easeOutBounce')
.animate({height: '50px' , marginTop: '25px', width: '100px'}, 1000, 'easeOutQuad')
.animate({height:'100px' , marginTop: '0px', width: '100px'}, 1000, 'easeInOutBack');
}
setInterval(boing, 4000);
setInterval(squish, 4000);
setTimeout(function() {
boing();
squish();
}, 500);
})
</script>
<style type="text/css" media="screen">
#boxing {
height:100px;
width:100px;
position:absolute;
top:50%;left:50%;
margin-left:-150px;
margin-top:-150px;
}
#box {
height:100px;
width:100px;
background:#000;
margin:0 auto;
}
</style>
</head>
<body>
<div id="boxing"><div id="box"></div></div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Verify results agains Easing 1.3 plugin</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.2.3.js"></script>
<script>
var origEasing = $.extend(true, {}, $.easing);
</script>
<script type="text/javascript" src="../jquery.easing.js"></script>
<script>
var newEasing = $.extend(true, {}, $.easing);
</script>
<!-- loaded last because it refers back to the $.easing fns it defines -->
<script src="http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.js"></script>
<script>
var oldEasing = $.easing;
</script>
<style type="text/css" media="screen">
#bounds {
width: 250px;
height: 250px;
border: 1px solid #888;
}
#box {
height: 50px;
width: 50px;
background: black;
}
</style>
<script type="text/javascript">
$(function() {
var times = [
0, 0.09, 0.15, 0.24, 0.37, 0.43, 0.50,
0.58, 0.64, 0.76, 0.89, 0.92, 0.98, 1
];
$.each( oldEasing, function( name ) {
var oldfn = oldEasing[ name ],
newfn = newEasing[ name ];
if ( typeof oldfn !== "function" || name === "swing" || name === "jswing" ) {
return;
}
$( "#results").append( "<br />--- Testing " + name + " " );
try {
times.forEach( function( time ) {
var ov = oldfn(time, time*1000, 0, 1, 1000),
nv = newfn(time),
diff = Math.abs(ov - nv);
if ( Number.isNaN(diff) || diff > 0.001 ) {
$( "#results").append("<br />at " + time + ": old " + ov + " new " + nv );
}
});
$( "#results").append( "Done" );
} catch ( err ) {
$( "#results").append( err );
}
});
});
</script>
</head>
<body>
<h1>Easing function comparison</h1>
<p id=results></p>
</body>
</html>
\ No newline at end of file
/*
* Easing Compatibility v1 - http://gsgd.co.uk/sandbox/jquery/easing
*
* Adds compatibility for applications that use the pre 1.2 easing names
*
* Copyright (c) 2007 George Smith
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*/
(function($){
$.extend( $.easing,
{
easeIn: function (x, t, b, c, d) {
return $.easing.easeInQuad(x, t, b, c, d);
},
easeOut: function (x, t, b, c, d) {
return $.easing.easeOutQuad(x, t, b, c, d);
},
easeInOut: function (x, t, b, c, d) {
return $.easing.easeInOutQuad(x, t, b, c, d);
},
expoin: function(x, t, b, c, d) {
return $.easing.easeInExpo(x, t, b, c, d);
},
expoout: function(x, t, b, c, d) {
return $.easing.easeOutExpo(x, t, b, c, d);
},
expoinout: function(x, t, b, c, d) {
return $.easing.easeInOutExpo(x, t, b, c, d);
},
bouncein: function(x, t, b, c, d) {
return $.easing.easeInBounce(x, t, b, c, d);
},
bounceout: function(x, t, b, c, d) {
return $.easing.easeOutBounce(x, t, b, c, d);
},
bounceinout: function(x, t, b, c, d) {
return $.easing.easeInOutBounce(x, t, b, c, d);
},
elasin: function(x, t, b, c, d) {
return $.easing.easeInElastic(x, t, b, c, d);
},
elasout: function(x, t, b, c, d) {
return $.easing.easeOutElastic(x, t, b, c, d);
},
elasinout: function(x, t, b, c, d) {
return $.easing.easeInOutElastic(x, t, b, c, d);
},
backin: function(x, t, b, c, d) {
return $.easing.easeInBack(x, t, b, c, d);
},
backout: function(x, t, b, c, d) {
return $.easing.easeOutBack(x, t, b, c, d);
},
backinout: function(x, t, b, c, d) {
return $.easing.easeInOutBack(x, t, b, c, d);
}
});})(jQuery);
/*
* jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/
* Open source under the BSD License.
* Copyright © 2008 George McGinley Smith
* All rights reserved.
* https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
*/
(function (factory) {
if (typeof define === "function" && define.amd) {
define(['jquery'], function ($) {
return factory($);
});
} else if (typeof module === "object" && typeof module.exports === "object") {
exports = factory(require('jquery'));
} else {
factory(jQuery);
}
})(function($){
// Preserve the original jQuery "swing" easing as "jswing"
if (typeof $.easing !== 'undefined') {
$.easing['jswing'] = $.easing['swing'];
}
var pow = Math.pow,
sqrt = Math.sqrt,
sin = Math.sin,
cos = Math.cos,
PI = Math.PI,
c1 = 1.70158,
c2 = c1 * 1.525,
c3 = c1 + 1,
c4 = ( 2 * PI ) / 3,
c5 = ( 2 * PI ) / 4.5;
// x is the fraction of animation progress, in the range 0..1
function bounceOut(x) {
var n1 = 7.5625,
d1 = 2.75;
if ( x < 1/d1 ) {
return n1*x*x;
} else if ( x < 2/d1 ) {
return n1*(x-=(1.5/d1))*x + .75;
} else if ( x < 2.5/d1 ) {
return n1*(x-=(2.25/d1))*x + .9375;
} else {
return n1*(x-=(2.625/d1))*x + .984375;
}
}
$.extend( $.easing,
{
def: 'easeOutQuad',
swing: function (x) {
return $.easing[$.easing.def](x);
},
easeInQuad: function (x) {
return x * x;
},
easeOutQuad: function (x) {
return 1 - ( 1 - x ) * ( 1 - x );
},
easeInOutQuad: function (x) {
return x < 0.5 ?
2 * x * x :
1 - pow( -2 * x + 2, 2 ) / 2;
},
easeInCubic: function (x) {
return x * x * x;
},
easeOutCubic: function (x) {
return 1 - pow( 1 - x, 3 );
},
easeInOutCubic: function (x) {
return x < 0.5 ?
4 * x * x * x :
1 - pow( -2 * x + 2, 3 ) / 2;
},
easeInQuart: function (x) {
return x * x * x * x;
},
easeOutQuart: function (x) {
return 1 - pow( 1 - x, 4 );
},
easeInOutQuart: function (x) {
return x < 0.5 ?
8 * x * x * x * x :
1 - pow( -2 * x + 2, 4 ) / 2;
},
easeInQuint: function (x) {
return x * x * x * x * x;
},
easeOutQuint: function (x) {
return 1 - pow( 1 - x, 5 );
},
easeInOutQuint: function (x) {
return x < 0.5 ?
16 * x * x * x * x * x :
1 - pow( -2 * x + 2, 5 ) / 2;
},
easeInSine: function (x) {
return 1 - cos( x * PI/2 );
},
easeOutSine: function (x) {
return sin( x * PI/2 );
},
easeInOutSine: function (x) {
return -( cos( PI * x ) - 1 ) / 2;
},
easeInExpo: function (x) {
return x === 0 ? 0 : pow( 2, 10 * x - 10 );
},
easeOutExpo: function (x) {
return x === 1 ? 1 : 1 - pow( 2, -10 * x );
},
easeInOutExpo: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
pow( 2, 20 * x - 10 ) / 2 :
( 2 - pow( 2, -20 * x + 10 ) ) / 2;
},
easeInCirc: function (x) {
return 1 - sqrt( 1 - pow( x, 2 ) );
},
easeOutCirc: function (x) {
return sqrt( 1 - pow( x - 1, 2 ) );
},
easeInOutCirc: function (x) {
return x < 0.5 ?
( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :
( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;
},
easeInElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
-pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );
},
easeOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;
},
easeInOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
-( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :
pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;
},
easeInBack: function (x) {
return c3 * x * x * x - c1 * x * x;
},
easeOutBack: function (x) {
return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );
},
easeInOutBack: function (x) {
return x < 0.5 ?
( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :
( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;
},
easeInBounce: function (x) {
return 1 - bounceOut( 1 - x );
},
easeOutBounce: bounceOut,
easeInOutBounce: function (x) {
return x < 0.5 ?
( 1 - bounceOut( 1 - 2 * x ) ) / 2 :
( 1 + bounceOut( 2 * x - 1 ) ) / 2;
}
});
});
!function(n){"function"==typeof define&&define.amd?define(["jquery"],function(e){return n(e)}):"object"==typeof module&&"object"==typeof module.exports?exports=n(require("jquery")):n(jQuery)}(function(n){function e(n){var e=7.5625,t=2.75;return n<1/t?e*n*n:n<2/t?e*(n-=1.5/t)*n+.75:n<2.5/t?e*(n-=2.25/t)*n+.9375:e*(n-=2.625/t)*n+.984375}void 0!==n.easing&&(n.easing.jswing=n.easing.swing);var t=Math.pow,u=Math.sqrt,r=Math.sin,i=Math.cos,a=Math.PI,c=1.70158,o=1.525*c,s=2*a/3,f=2*a/4.5;n.extend(n.easing,{def:"easeOutQuad",swing:function(e){return n.easing[n.easing.def](e)},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return 1-(1-n)*(1-n)},easeInOutQuad:function(n){return n<.5?2*n*n:1-t(-2*n+2,2)/2},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return 1-t(1-n,3)},easeInOutCubic:function(n){return n<.5?4*n*n*n:1-t(-2*n+2,3)/2},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return 1-t(1-n,4)},easeInOutQuart:function(n){return n<.5?8*n*n*n*n:1-t(-2*n+2,4)/2},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return 1-t(1-n,5)},easeInOutQuint:function(n){return n<.5?16*n*n*n*n*n:1-t(-2*n+2,5)/2},easeInSine:function(n){return 1-i(n*a/2)},easeOutSine:function(n){return r(n*a/2)},easeInOutSine:function(n){return-(i(a*n)-1)/2},easeInExpo:function(n){return 0===n?0:t(2,10*n-10)},easeOutExpo:function(n){return 1===n?1:1-t(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:n<.5?t(2,20*n-10)/2:(2-t(2,-20*n+10))/2},easeInCirc:function(n){return 1-u(1-t(n,2))},easeOutCirc:function(n){return u(1-t(n-1,2))},easeInOutCirc:function(n){return n<.5?(1-u(1-t(2*n,2)))/2:(u(1-t(-2*n+2,2))+1)/2},easeInElastic:function(n){return 0===n?0:1===n?1:-t(2,10*n-10)*r((10*n-10.75)*s)},easeOutElastic:function(n){return 0===n?0:1===n?1:t(2,-10*n)*r((10*n-.75)*s)+1},easeInOutElastic:function(n){return 0===n?0:1===n?1:n<.5?-(t(2,20*n-10)*r((20*n-11.125)*f))/2:t(2,-20*n+10)*r((20*n-11.125)*f)/2+1},easeInBack:function(n){return(c+1)*n*n*n-c*n*n},easeOutBack:function(n){return 1+(c+1)*t(n-1,3)+c*t(n-1,2)},easeInOutBack:function(n){return n<.5?t(2*n,2)*(7.189819*n-o)/2:(t(2*n-2,2)*((o+1)*(2*n-2)+o)+2)/2},easeInBounce:function(n){return 1-e(1-n)},easeOutBounce:e,easeInOutBounce:function(n){return n<.5?(1-e(1-2*n))/2:(1+e(2*n-1))/2}})});
{
"name": "jquery.easing",
"version": "1.4.1",
"homepage": "https://github.com/gdsmith/jquery.easing",
"description": "A jQuery plugin from GSGD to give advanced easing options",
"author": {
"name": "George McGinley Smith",
"email": "george@gsgd.co.uk",
"url": "http://gsgd.co.uk/"
},
"repository": {
"type": "git",
"url": "git://github.com/gdsmith/jquery.easing.git"
},
"bugs": {
"url": "https://github.com/gdsmith/jquery.easing/issues"
},
"main": "jquery.easing.js",
"directories": {
"example": "example"
},
"scripts": {
"test": "echo \"Use tests in the examples directory\" && exit 1",
"build": "uglifyjs jquery.easing.js --compress --mangle -o jquery.easing.min.js"
},
"devDependencies": {
"jquery": ">=1.3.0",
"uglify-js": "^2.6.2"
},
"keywords": [
"jquery-plugin",
"ecosystem:jquery"
],
"license": "BSD-3-Clause"
}
/*
* jQuery Easing v1.4.1 - http://gsgd.co.uk/sandbox/jquery/easing/
* Open source under the BSD License.
* Copyright © 2008 George McGinley Smith
* All rights reserved.
* https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
*/
(function (factory) {
if (typeof define === "function" && define.amd) {
define(['jquery'], function ($) {
return factory($);
});
} else if (typeof module === "object" && typeof module.exports === "object") {
exports = factory(require('jquery'));
} else {
factory(jQuery);
}
})(function($){
// Preserve the original jQuery "swing" easing as "jswing"
if (typeof $.easing !== 'undefined') {
$.easing['jswing'] = $.easing['swing'];
}
var pow = Math.pow,
sqrt = Math.sqrt,
sin = Math.sin,
cos = Math.cos,
PI = Math.PI,
c1 = 1.70158,
c2 = c1 * 1.525,
c3 = c1 + 1,
c4 = ( 2 * PI ) / 3,
c5 = ( 2 * PI ) / 4.5;
// x is the fraction of animation progress, in the range 0..1
function bounceOut(x) {
var n1 = 7.5625,
d1 = 2.75;
if ( x < 1/d1 ) {
return n1*x*x;
} else if ( x < 2/d1 ) {
return n1*(x-=(1.5/d1))*x + .75;
} else if ( x < 2.5/d1 ) {
return n1*(x-=(2.25/d1))*x + .9375;
} else {
return n1*(x-=(2.625/d1))*x + .984375;
}
}
$.extend( $.easing,
{
def: 'easeOutQuad',
swing: function (x) {
return $.easing[$.easing.def](x);
},
easeInQuad: function (x) {
return x * x;
},
easeOutQuad: function (x) {
return 1 - ( 1 - x ) * ( 1 - x );
},
easeInOutQuad: function (x) {
return x < 0.5 ?
2 * x * x :
1 - pow( -2 * x + 2, 2 ) / 2;
},
easeInCubic: function (x) {
return x * x * x;
},
easeOutCubic: function (x) {
return 1 - pow( 1 - x, 3 );
},
easeInOutCubic: function (x) {
return x < 0.5 ?
4 * x * x * x :
1 - pow( -2 * x + 2, 3 ) / 2;
},
easeInQuart: function (x) {
return x * x * x * x;
},
easeOutQuart: function (x) {
return 1 - pow( 1 - x, 4 );
},
easeInOutQuart: function (x) {
return x < 0.5 ?
8 * x * x * x * x :
1 - pow( -2 * x + 2, 4 ) / 2;
},
easeInQuint: function (x) {
return x * x * x * x * x;
},
easeOutQuint: function (x) {
return 1 - pow( 1 - x, 5 );
},
easeInOutQuint: function (x) {
return x < 0.5 ?
16 * x * x * x * x * x :
1 - pow( -2 * x + 2, 5 ) / 2;
},
easeInSine: function (x) {
return 1 - cos( x * PI/2 );
},
easeOutSine: function (x) {
return sin( x * PI/2 );
},
easeInOutSine: function (x) {
return -( cos( PI * x ) - 1 ) / 2;
},
easeInExpo: function (x) {
return x === 0 ? 0 : pow( 2, 10 * x - 10 );
},
easeOutExpo: function (x) {
return x === 1 ? 1 : 1 - pow( 2, -10 * x );
},
easeInOutExpo: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
pow( 2, 20 * x - 10 ) / 2 :
( 2 - pow( 2, -20 * x + 10 ) ) / 2;
},
easeInCirc: function (x) {
return 1 - sqrt( 1 - pow( x, 2 ) );
},
easeOutCirc: function (x) {
return sqrt( 1 - pow( x - 1, 2 ) );
},
easeInOutCirc: function (x) {
return x < 0.5 ?
( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :
( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;
},
easeInElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
-pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );
},
easeOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 :
pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;
},
easeInOutElastic: function (x) {
return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
-( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :
pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;
},
easeInBack: function (x) {
return c3 * x * x * x - c1 * x * x;
},
easeOutBack: function (x) {
return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );
},
easeInOutBack: function (x) {
return x < 0.5 ?
( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :
( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;
},
easeInBounce: function (x) {
return 1 - bounceOut( 1 - x );
},
easeOutBounce: bounceOut,
easeInOutBounce: function (x) {
return x < 0.5 ?
( 1 - bounceOut( 1 - 2 * x ) ) / 2 :
( 1 + bounceOut( 2 * x - 1 ) ) / 2;
}
});
});
;(function(root,factory){if(typeof define==='function'&&define.amd){define(['jquery'],factory);}else if(typeof exports==='object'){module.exports=factory(require('jquery'));}else{factory(root.jQuery);}}(this,function($){$.transit={version:"0.9.12",propertyMap:{marginLeft:'margin',marginRight:'margin',marginBottom:'margin',marginTop:'margin',paddingLeft:'padding',paddingRight:'padding',paddingBottom:'padding',paddingTop:'padding'},enabled:true,useTransitionEnd:false};var div=document.createElement('div');var support={};function getVendorPropertyName(prop){if(prop in div.style)return prop;var prefixes=['Moz','Webkit','O','ms'];var prop_=prop.charAt(0).toUpperCase()+ prop.substr(1);for(var i=0;i<prefixes.length;++i){var vendorProp=prefixes[i]+ prop_;if(vendorProp in div.style){return vendorProp;}}}
function checkTransform3dSupport(){div.style[support.transform]='';div.style[support.transform]='rotateY(90deg)';return div.style[support.transform]!=='';}
var isChrome=navigator.userAgent.toLowerCase().indexOf('chrome')>-1;support.transition=getVendorPropertyName('transition');support.transitionDelay=getVendorPropertyName('transitionDelay');support.transform=getVendorPropertyName('transform');support.transformOrigin=getVendorPropertyName('transformOrigin');support.filter=getVendorPropertyName('Filter');support.transform3d=checkTransform3dSupport();var eventNames={'transition':'transitionend','MozTransition':'transitionend','OTransition':'oTransitionEnd','WebkitTransition':'webkitTransitionEnd','msTransition':'MSTransitionEnd'};var transitionEnd=support.transitionEnd=eventNames[support.transition]||null;for(var key in support){if(support.hasOwnProperty(key)&&typeof $.support[key]==='undefined'){$.support[key]=support[key];}}
div=null;$.cssEase={'_default':'ease','in':'ease-in','out':'ease-out','in-out':'ease-in-out','snap':'cubic-bezier(0,1,.5,1)','easeInCubic':'cubic-bezier(.550,.055,.675,.190)','easeOutCubic':'cubic-bezier(.215,.61,.355,1)','easeInOutCubic':'cubic-bezier(.645,.045,.355,1)','easeInCirc':'cubic-bezier(.6,.04,.98,.335)','easeOutCirc':'cubic-bezier(.075,.82,.165,1)','easeInOutCirc':'cubic-bezier(.785,.135,.15,.86)','easeInExpo':'cubic-bezier(.95,.05,.795,.035)','easeOutExpo':'cubic-bezier(.19,1,.22,1)','easeInOutExpo':'cubic-bezier(1,0,0,1)','easeInQuad':'cubic-bezier(.55,.085,.68,.53)','easeOutQuad':'cubic-bezier(.25,.46,.45,.94)','easeInOutQuad':'cubic-bezier(.455,.03,.515,.955)','easeInQuart':'cubic-bezier(.895,.03,.685,.22)','easeOutQuart':'cubic-bezier(.165,.84,.44,1)','easeInOutQuart':'cubic-bezier(.77,0,.175,1)','easeInQuint':'cubic-bezier(.755,.05,.855,.06)','easeOutQuint':'cubic-bezier(.23,1,.32,1)','easeInOutQuint':'cubic-bezier(.86,0,.07,1)','easeInSine':'cubic-bezier(.47,0,.745,.715)','easeOutSine':'cubic-bezier(.39,.575,.565,1)','easeInOutSine':'cubic-bezier(.445,.05,.55,.95)','easeInBack':'cubic-bezier(.6,-.28,.735,.045)','easeOutBack':'cubic-bezier(.175, .885,.32,1.275)','easeInOutBack':'cubic-bezier(.68,-.55,.265,1.55)'};$.cssHooks['transit:transform']={get:function(elem){return $(elem).data('transform')||new Transform();},set:function(elem,v){var value=v;if(!(value instanceof Transform)){value=new Transform(value);}
if(support.transform==='WebkitTransform'&&!isChrome){elem.style[support.transform]=value.toString(true);}else{elem.style[support.transform]=value.toString();}
$(elem).data('transform',value);}};$.cssHooks.transform={set:$.cssHooks['transit:transform'].set};$.cssHooks.filter={get:function(elem){return elem.style[support.filter];},set:function(elem,value){elem.style[support.filter]=value;}};if($.fn.jquery<"1.8"){$.cssHooks.transformOrigin={get:function(elem){return elem.style[support.transformOrigin];},set:function(elem,value){elem.style[support.transformOrigin]=value;}};$.cssHooks.transition={get:function(elem){return elem.style[support.transition];},set:function(elem,value){elem.style[support.transition]=value;}};}
registerCssHook('scale');registerCssHook('scaleX');registerCssHook('scaleY');registerCssHook('translate');registerCssHook('rotate');registerCssHook('rotateX');registerCssHook('rotateY');registerCssHook('rotate3d');registerCssHook('perspective');registerCssHook('skewX');registerCssHook('skewY');registerCssHook('x',true);registerCssHook('y',true);function Transform(str){if(typeof str==='string'){this.parse(str);}
return this;}
Transform.prototype={setFromString:function(prop,val){var args=(typeof val==='string')?val.split(','):(val.constructor===Array)?val:[val];args.unshift(prop);Transform.prototype.set.apply(this,args);},set:function(prop){var args=Array.prototype.slice.apply(arguments,[1]);if(this.setter[prop]){this.setter[prop].apply(this,args);}else{this[prop]=args.join(',');}},get:function(prop){if(this.getter[prop]){return this.getter[prop].apply(this);}else{return this[prop]||0;}},setter:{rotate:function(theta){this.rotate=unit(theta,'deg');},rotateX:function(theta){this.rotateX=unit(theta,'deg');},rotateY:function(theta){this.rotateY=unit(theta,'deg');},scale:function(x,y){if(y===undefined){y=x;}
this.scale=x+","+ y;},skewX:function(x){this.skewX=unit(x,'deg');},skewY:function(y){this.skewY=unit(y,'deg');},perspective:function(dist){this.perspective=unit(dist,'px');},x:function(x){this.set('translate',x,null);},y:function(y){this.set('translate',null,y);},translate:function(x,y){if(this._translateX===undefined){this._translateX=0;}
if(this._translateY===undefined){this._translateY=0;}
if(x!==null&&x!==undefined){this._translateX=unit(x,'px');}
if(y!==null&&y!==undefined){this._translateY=unit(y,'px');}
this.translate=this._translateX+","+ this._translateY;}},getter:{x:function(){return this._translateX||0;},y:function(){return this._translateY||0;},scale:function(){var s=(this.scale||"1,1").split(',');if(s[0]){s[0]=parseFloat(s[0]);}
if(s[1]){s[1]=parseFloat(s[1]);}
return(s[0]===s[1])?s[0]:s;},rotate3d:function(){var s=(this.rotate3d||"0,0,0,0deg").split(',');for(var i=0;i<=3;++i){if(s[i]){s[i]=parseFloat(s[i]);}}
if(s[3]){s[3]=unit(s[3],'deg');}
return s;}},parse:function(str){var self=this;str.replace(/([a-zA-Z0-9]+)\((.*?)\)/g,function(x,prop,val){self.setFromString(prop,val);});},toString:function(use3d){var re=[];for(var i in this){if(this.hasOwnProperty(i)){if((!support.transform3d)&&((i==='rotateX')||(i==='rotateY')||(i==='perspective')||(i==='transformOrigin'))){continue;}
if(i[0]!=='_'){if(use3d&&(i==='scale')){re.push(i+"3d("+ this[i]+",1)");}else if(use3d&&(i==='translate')){re.push(i+"3d("+ this[i]+",0)");}else{re.push(i+"("+ this[i]+")");}}}}
return re.join(" ");}};function callOrQueue(self,queue,fn){if(queue===true){self.queue(fn);}else if(queue){self.queue(queue,fn);}else{self.each(function(){fn.call(this);});}}
function getProperties(props){var re=[];$.each(props,function(key){key=$.camelCase(key);key=$.transit.propertyMap[key]||$.cssProps[key]||key;key=uncamel(key);if(support[key])
key=uncamel(support[key]);if($.inArray(key,re)===-1){re.push(key);}});return re;}
function getTransition(properties,duration,easing,delay){var props=getProperties(properties);if($.cssEase[easing]){easing=$.cssEase[easing];}
var attribs=''+ toMS(duration)+' '+ easing;if(parseInt(delay,10)>0){attribs+=' '+ toMS(delay);}
var transitions=[];$.each(props,function(i,name){transitions.push(name+' '+ attribs);});return transitions.join(', ');}
$.fn.transition=$.fn.transit=function(properties,duration,easing,callback){var self=this;var delay=0;var queue=true;var theseProperties=$.extend(true,{},properties);if(typeof duration==='function'){callback=duration;duration=undefined;}
if(typeof duration==='object'){easing=duration.easing;delay=duration.delay||0;queue=typeof duration.queue==="undefined"?true:duration.queue;callback=duration.complete;duration=duration.duration;}
if(typeof easing==='function'){callback=easing;easing=undefined;}
if(typeof theseProperties.easing!=='undefined'){easing=theseProperties.easing;delete theseProperties.easing;}
if(typeof theseProperties.duration!=='undefined'){duration=theseProperties.duration;delete theseProperties.duration;}
if(typeof theseProperties.complete!=='undefined'){callback=theseProperties.complete;delete theseProperties.complete;}
if(typeof theseProperties.queue!=='undefined'){queue=theseProperties.queue;delete theseProperties.queue;}
if(typeof theseProperties.delay!=='undefined'){delay=theseProperties.delay;delete theseProperties.delay;}
if(typeof duration==='undefined'){duration=$.fx.speeds._default;}
if(typeof easing==='undefined'){easing=$.cssEase._default;}
duration=toMS(duration);var transitionValue=getTransition(theseProperties,duration,easing,delay);var work=$.transit.enabled&&support.transition;var i=work?(parseInt(duration,10)+ parseInt(delay,10)):0;if(i===0){var fn=function(next){self.css(theseProperties);if(callback){callback.apply(self);}
if(next){next();}};callOrQueue(self,queue,fn);return self;}
var oldTransitions={};var run=function(nextCall){var bound=false;var cb=function(){if(bound){self.unbind(transitionEnd,cb);}
if(i>0){self.each(function(){this.style[support.transition]=(oldTransitions[this]||null);});}
if(typeof callback==='function'){callback.apply(self);}
if(typeof nextCall==='function'){nextCall();}};if((i>0)&&(transitionEnd)&&($.transit.useTransitionEnd)){bound=true;self.bind(transitionEnd,cb);}else{window.setTimeout(cb,i);}
self.each(function(){if(i>0){this.style[support.transition]=transitionValue;}
$(this).css(theseProperties);});};var deferredRun=function(next){this.offsetWidth;run(next);};callOrQueue(self,queue,deferredRun);return this;};function registerCssHook(prop,isPixels){if(!isPixels){$.cssNumber[prop]=true;}
$.transit.propertyMap[prop]=support.transform;$.cssHooks[prop]={get:function(elem){var t=$(elem).css('transit:transform');return t.get(prop);},set:function(elem,value){var t=$(elem).css('transit:transform');t.setFromString(prop,value);$(elem).css({'transit:transform':t});}};}
function uncamel(str){return str.replace(/([A-Z])/g,function(letter){return'-'+ letter.toLowerCase();});}
function unit(i,units){if((typeof i==="string")&&(!i.match(/^[\-0-9\.]+$/))){return i;}else{return""+ i+ units;}}
function toMS(duration){var i=duration;if(typeof i==='string'&&(!i.match(/^[\-0-9\.]+/))){i=$.fx.speeds[i]||$.fx.speeds._default;}
return unit(i,'ms');}
$.transit.getTransitionValue=getTransition;return $;}));
\ No newline at end of file
/*!
* jQuery Transit - CSS3 transitions and transformations
* Copyright(c) 2011 Rico Sta. Cruz <rico@ricostacruz.com>
* MIT Licensed.
*
* http://ricostacruz.com/jquery.transit
* http://github.com/rstacruz/jquery.transit
*/
(function(c){function k(a){var b=["Moz","Webkit","O","ms"],d=a.charAt(0).toUpperCase()+a.substr(1);if(a in l.style)return a;for(a=0;a<b.length;++a){var c=b[a]+d;if(c in l.style)return c}}function j(a){"string"===typeof a&&this.parse(a);return this}function r(a,b,d){!0===b?a.queue(d):b?a.queue(b,d):d()}function n(a){var b=[];c.each(a,function(a){a=c.camelCase(a);a=c.transit.propertyMap[a]||a;a=t(a);-1===b.indexOf(a)&&b.push(a)});return b}function s(a,b,d,q){a=n(a);c.cssEase[d]&&(d=c.cssEase[d]);var f=
""+o(b)+" "+d;0<parseInt(q)&&(f+=" "+o(q));var e=[];c.each(a,function(a,b){e.push(b+" "+f)});return e.join(", ")}function e(a,b){b||(c.cssNumber[a]=!0);c.transit.propertyMap[a]=h.transform;c.cssHooks[a]={get:function(b){return(c(b).css("transform")||new j).get(a)},set:function(b,e){var f=c(b).css("transform")||new j;f.setFromString(a,e);c(b).css({transform:f})}}}function t(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function g(a,b){return"string"===typeof a&&!a.match(/^[\-0-9\.]+$/)?
a:""+a+b}function o(a){c.fx.speeds[a]&&(a=c.fx.speeds[a]);return g(a,"ms")}c.transit={version:"0.1.1",propertyMap:{marginLeft:"margin",marginRight:"margin",marginBottom:"margin",marginTop:"margin",paddingLeft:"padding",paddingRight:"padding",paddingBottom:"padding",paddingTop:"padding"},enabled:!0};var l=document.createElement("div"),h={transition:k("transition"),transitionDelay:k("transitionDelay"),transform:k("transform"),transformOrigin:k("transformOrigin")};c.extend(c.support,h);var p={MozTransition:"transitionend",
OTransition:"oTransitionEnd",WebkitTransition:"webkitTransitionEnd",msTransition:"MSTransitionEnd"}[h.transition]||null,l=null;c.cssEase={_default:"ease","in":"ease-in",out:"ease-out","in-out":"ease-in-out",snap:"cubic-bezier(0,1,.5,1)"};c.cssHooks.transform={get:function(a){return c(a).data("transform")},set:function(a,b){var d=b;d instanceof j||(d=new j(d));a.style[h.transform]="WebkitTransform"==h.transform?d.toString(!0):d.toString();c(a).data("transform",d)}};c.cssHooks.transformOrigin={get:function(a){return a.style[h.transformOrigin]},
set:function(a,b){a.style[h.transformOrigin]=b}};e("scale");e("translate");e("rotate");e("rotateX");e("rotateY");e("rotate3d");e("perspective");e("skewX");e("skewY");e("x",!0);e("y",!0);j.prototype={setFromString:function(a,b){var c="string"===typeof b?b.split(","):b.constructor==Array?b:[b];c.unshift(a);j.prototype.set.apply(this,c)},set:function(a){var b=Array.prototype.slice.apply(arguments,[1]);this.setter[a]?this.setter[a].apply(this,b):this[a]=b.join(",")},get:function(a){return this.getter[a]?
this.getter[a].apply(this):this[a]||0},setter:{rotate:function(a){this.rotate=g(a,"deg")},rotateX:function(a){this.rotateX=g(a,"deg")},rotateY:function(a){this.rotateY=g(a,"deg")},scale:function(a,b){void 0===b&&(b=a);this.scale=a+","+b},skewX:function(a){this.skewX=g(a,"deg")},skewY:function(a){this.skewY=g(a,"deg")},perspective:function(a){this.perspective=g(a,"px")},x:function(a){this.set("translate",a,null)},y:function(a){this.set("translate",null,a)},translate:function(a,b){if(void 0===this._translateX)this._translateX=
0;if(void 0===this._translateY)this._translateY=0;if(null!==a)this._translateX=g(a,"px");if(null!==b)this._translateY=g(b,"px");this.translate=this._translateX+","+this._translateY}},getter:{x:function(){return this._translateX||0},y:function(){return this._translateY||0},scale:function(){var a=(this.scale||"1,1").split(",");a[0]&&(a[0]=parseFloat(a[0]));a[1]&&(a[1]=parseFloat(a[1]));return a[0]==a[1]?a[0]:a},rotate3d:function(){var a=(this.rotate3d||"0,0,0,0deg").split(",");for(i=0;3>=i;++i)a[i]&&
(a[i]=parseFloat(a[i]));a[3]&&(a[3]=g(a[3],"deg"));return a}},parse:function(a){var b=this;a.replace(/([a-zA-Z0-9]+)\((.*?)\)/g,function(a,c,f){b.setFromString(c,f)})},toString:function(a){var b=[];for(i in this)this.hasOwnProperty(i)&&"_"!==i[0]&&(a&&("scale"===i||"translate"===i)?b.push(i+"3d("+this[i]+",0)"):b.push(i+"("+this[i]+")"));return b.join(" ")}};c.fn.transition=c.fn.transit=function(a,b,d,e){var f=this,g=0,j=!0;"function"===typeof b&&(e=b,b=null);"function"===typeof d&&(e=d,d=null);if(a.easing)d=
a.easing,delete a.easing;if(a.duration)b=a.duration,delete a.duration;if(a.complete)e=a.complete,delete a.complete;if(a.queue)j=a.queue,delete a.queue;if(a.delay)g=a.delay,delete a.delay;if(null==b)b=c.fx.speeds._default;if(null==d)d=c.cssEase._default;var b=o(b),k=s(a,b,d,g),m=c.transit.enabled&&h.transition?parseInt(b)+parseInt(g):0;if(0===m)return r(f,j,function(b){f.css(a);e&&e();b()}),f;var l={},n=function(b){f.each(function(){0<m&&(this.style[h.transition]=k);c(this).css(a)});var d=!1,g=function(){d&&
f.unbind(p,g);0<m&&f.each(function(){this.style[h.transition]=l[this]});"function"===typeof e&&e.apply(f);"function"===typeof b&&b()};0<m&&p?(d=!0,f.bind(p,g)):window.setTimeout(g,m)};r(f,j,function(a){var b=0;"MozTransition"===h.transition&&25>b&&(b=25);window.setTimeout(function(){n(a)},b)});return this};c.transit.getTransitionValue=s})(jQuery);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment