static init
|
@ -1,755 +0,0 @@
|
|||
<html xmlns="http://www.w3.org/1999/html">
|
||||
<head>
|
||||
<title>静态化</title>
|
||||
<#include "../../include/head-file.ftl">
|
||||
<style>
|
||||
[v-cloak]{
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="custom-body">
|
||||
<div id="app" v-cloak>
|
||||
<div class="class-1" >
|
||||
<el-alert style="line-height: 22px;padding: 20px;"
|
||||
title=""
|
||||
type="success"
|
||||
:closable="false"
|
||||
show-icon>
|
||||
更新主页,如果系统存在引导页面可以手动修改主页位置文件名,default.html引导页面index.html主页。<br/>
|
||||
更新栏目列表,推荐使用指定栏目更新。系统提示“更新中”请不要刷新页面或点击其他菜单。<br/>
|
||||
根据时间与栏目类型生成文章
|
||||
</el-alert>
|
||||
</div>
|
||||
<el-form ref="form" label-width="100px" size="mini">
|
||||
<div class="class-2" >
|
||||
<div class="class-3" >
|
||||
<div class="class-4" >
|
||||
<el-form-item label="主题模板">
|
||||
<el-select v-model="template"
|
||||
:filterable="true"
|
||||
:clearable="false"
|
||||
placeholder="请选择主题模板">
|
||||
<el-option v-for='item in templateOptions' :key="item" :value="item"
|
||||
:label="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="class-7" >
|
||||
<el-form-item>
|
||||
<template slot='label'>主页位置
|
||||
<el-popover slot="label" placement="top-start" title="提示" width="200" trigger="hover" content="主页位置htm文件名一般为index.html或default.html">
|
||||
<i class="el-icon-question" slot="reference"></i>
|
||||
</el-popover>
|
||||
</template>
|
||||
<el-input v-model="position"
|
||||
:disabled="false"
|
||||
:style="{width: '100%'}"
|
||||
:clearable="true"
|
||||
placeholder="请输入主页位置">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="class-10" >
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="updataIndex" :loading="homeLoading">{{homeLoading?'更新中':'生成主页'}}</el-button>
|
||||
<el-button plain @click="viewIndex">预览主页</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<div class="class-13" >
|
||||
<div class="class-14" >
|
||||
<el-form-item label="文章栏目">
|
||||
<tree-select v-model="contentSection"
|
||||
:props="{value: 'id',label: 'categoryTitle',children: 'children'}"
|
||||
:options="treeList" :style="{width:'100%'}"
|
||||
placeholder="请选择文章栏目">
|
||||
</tree-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="class-17" >
|
||||
<el-form-item>
|
||||
<template slot='label'>指定时间
|
||||
<el-popover slot="label" placement="top-start" title="提示" width="200" trigger="hover" content="指定时间需要小于生成文章的发布时间">
|
||||
<i class="el-icon-question" slot="reference"></i>
|
||||
</el-popover>
|
||||
</template>
|
||||
<el-date-picker
|
||||
v-model="time"
|
||||
placeholder="请选择指定时间"
|
||||
start-placeholder=""
|
||||
end-placeholder=""
|
||||
:readonly="false"
|
||||
:disabled="false"
|
||||
:editable="false"
|
||||
:clearable="false"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
:style="{width:'100%'}"
|
||||
type="date">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="class-20" >
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="updateArticle" :loading="articleLoading">{{articleLoading?'更新中':'生成文章'}}</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<div class="class-23" >
|
||||
<div class="class-24" >
|
||||
<el-form-item label="生成栏目">
|
||||
<tree-select v-model="section"
|
||||
:props="{value: 'id',label: 'categoryTitle',children: 'children'}"
|
||||
:options="treeList" :style="{width:'100%'}"
|
||||
placeholder="请选择文章栏目">
|
||||
</tree-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="class-30" >
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="updateColumn" :loading="columnLoading">{{columnLoading?'更新中':'生成栏目'}}</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
"use strict";
|
||||
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
watch: {},
|
||||
data: {
|
||||
homeLoading: false,
|
||||
articleLoading: false,
|
||||
columnLoading: false,
|
||||
template: '',
|
||||
//主题模板
|
||||
templateOptions: [],
|
||||
position: 'index',
|
||||
//位置
|
||||
contentSection: '0',
|
||||
//文章栏目
|
||||
section: '0',
|
||||
//栏目
|
||||
time: ms.util.date.fmt(new Date(), "yyyy-MM-dd"),
|
||||
treeList: [{
|
||||
id: '0',
|
||||
categoryTitle: '顶级栏目',
|
||||
children: []
|
||||
}]
|
||||
},
|
||||
methods: {
|
||||
//更新主页
|
||||
updataIndex: function () {
|
||||
var that = this;
|
||||
if (!that.position || that.position == '') {
|
||||
this.$notify({
|
||||
title: '请输入主页位置!',
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
that.homeLoading = true;
|
||||
ms.http.post(ms.manager + '/cms/generate//generateIndex.do', {
|
||||
url: that.template,
|
||||
position: that.position
|
||||
}).then(function (data) {
|
||||
if (data.result) {
|
||||
that.$notify({
|
||||
title: '更新成功!',
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
that.$notify({
|
||||
title: '更新失败!',
|
||||
message: "错误",
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}).catch(function (err) {
|
||||
that.$notify({
|
||||
title: '更新失败!',
|
||||
message: err,
|
||||
type: 'error'
|
||||
});
|
||||
console.log(err);
|
||||
}).finally(function () {
|
||||
that.homeLoading = false;
|
||||
});
|
||||
},
|
||||
//预览主页
|
||||
viewIndex: function () {
|
||||
if (!this.position || this.position == '') {
|
||||
this.$notify({
|
||||
title: '请输入主页位置!',
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
window.open(ms.manager + "/cms/generate/" + this.position + "/viewIndex.do");
|
||||
},
|
||||
//更新栏目
|
||||
updateColumn: function () {
|
||||
var that = this;
|
||||
that.columnLoading = true;
|
||||
ms.http.get(ms.manager + '/cms/generate/' + (that.section ? that.section : 0) + '/genernateColumn.do').then(function (data) {
|
||||
if (data.result) {
|
||||
that.$notify({
|
||||
title: '更新成功!',
|
||||
type: 'success'
|
||||
});
|
||||
}
|
||||
}).catch(function (err) {
|
||||
that.$notify({
|
||||
title: '更新失败!',
|
||||
message: err,
|
||||
type: 'error'
|
||||
});
|
||||
console.log(err);
|
||||
}).finally(function () {
|
||||
that.columnLoading = false;
|
||||
});
|
||||
},
|
||||
//生成文章栏目
|
||||
updateArticle: function () {
|
||||
var that = this;
|
||||
that.articleLoading = true;
|
||||
ms.http.post(ms.manager + '/cms/generate/' + (that.contentSection ? that.contentSection : 0) + '/generateArticle.do', {
|
||||
dateTime: that.time
|
||||
}).then(function (data) {
|
||||
if (data.result) {
|
||||
that.$notify({
|
||||
title: '更新成功!',
|
||||
type: 'success'
|
||||
});
|
||||
}
|
||||
}).catch(function (err) {
|
||||
that.$notify({
|
||||
title: '更新失败!',
|
||||
message: err,
|
||||
type: 'error'
|
||||
});
|
||||
console.log(err);
|
||||
}).finally(function () {
|
||||
that.articleLoading = false;
|
||||
});
|
||||
},
|
||||
//获取主题模板数据源
|
||||
templateOptionsGet: function () {
|
||||
var that = this;
|
||||
ms.http.get(ms.manager + '/template/queryTemplateFileForColumn.do', {
|
||||
pageSize: 99999
|
||||
}).then(function (data) {
|
||||
that.templateOptions = data.data; //寻找主页
|
||||
|
||||
var template = that.templateOptions.find(function (x) {
|
||||
return x.indexOf("index") != -1 || x.indexOf("default") != -1;
|
||||
}); //没有就找其他的
|
||||
|
||||
that.template = template || (that.templateOptions.length > 0 ? that.templateOptions[0] : "");
|
||||
}).catch(function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
},
|
||||
getTree: function () {
|
||||
var that = this;
|
||||
ms.http.get(ms.manager + "/cms/category/list.do", {
|
||||
pageSize: 9999
|
||||
}).then(function (res) {
|
||||
if (res.result) {
|
||||
//res.data.rows.push({id:0,categoryId: null,categoryTitle:'顶级栏目管理'});
|
||||
that.treeList[0].children = ms.util.treeData(res.data.rows, 'id', 'categoryId', 'children');
|
||||
}
|
||||
}).catch(function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.getTree();
|
||||
this.templateOptionsGet();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
input{
|
||||
width: 100%!important;
|
||||
}
|
||||
.class-1
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
max-width:100%;
|
||||
background-color:#FFFFFF;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
width:100%;
|
||||
background-repeat:no-repeat;
|
||||
padding: 14px;
|
||||
}
|
||||
.class-2
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
height:500px;
|
||||
max-width:100%;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
width:100%;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-3
|
||||
{
|
||||
color:#333333;
|
||||
padding:20px;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
height:200px;
|
||||
max-width:100%;
|
||||
background-color:#FFFFFF;
|
||||
flex-direction:column;
|
||||
display:flex;
|
||||
justify-content:end;
|
||||
margin: 12px 6px 12px 12px;
|
||||
animation-duration:1s;
|
||||
width:100%;
|
||||
padding-left:20px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-4
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-5
|
||||
{
|
||||
color:#333333;
|
||||
word-wrap:break-word;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
font-size:14px;
|
||||
line-height:1.4;
|
||||
}
|
||||
.class-6
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#606266;
|
||||
padding-right:15px;
|
||||
box-sizing:boredr-box;
|
||||
outline:none;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:40px;
|
||||
margin-left:20px;
|
||||
animation-duration:1s;
|
||||
background:none;
|
||||
width:320px;
|
||||
font-size:12px;
|
||||
line-height:40px;
|
||||
padding-left:15px;
|
||||
}
|
||||
.class-7
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
border-width:1px;
|
||||
border-style:none;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-8
|
||||
{
|
||||
color:#333333;
|
||||
word-wrap:break-word;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
font-size:14px;
|
||||
line-height:1.4;
|
||||
}
|
||||
.class-9
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#606266;
|
||||
padding-right:15px;
|
||||
box-sizing:boredr-box;
|
||||
outline:none;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:40px;
|
||||
margin-left:20px;
|
||||
animation-duration:1s;
|
||||
background:none;
|
||||
width:320px;
|
||||
font-size:12px;
|
||||
line-height:40px;
|
||||
padding-left:15px;
|
||||
}
|
||||
.class-10
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
border-width:1px;
|
||||
border-style:none;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-11
|
||||
{
|
||||
cursor:pointer;
|
||||
color:#ffffff;
|
||||
box-sizing:border-box;
|
||||
height:34px;
|
||||
background-color:#0099ff;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
border-radius:4px;
|
||||
width:98px;
|
||||
line-height:34px;
|
||||
font-size:14px;
|
||||
}
|
||||
.class-12
|
||||
{
|
||||
cursor:pointer;
|
||||
border-color:#0099FF;
|
||||
color:#0099FF;
|
||||
box-sizing:border-box;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:34px;
|
||||
background-color:#FFFFFF;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
margin-left:10px;
|
||||
animation-duration:1s;
|
||||
border-radius:4px;
|
||||
width:98px;
|
||||
line-height:34px;
|
||||
font-size:14px;
|
||||
}
|
||||
.class-13
|
||||
{
|
||||
color:#333333;
|
||||
padding:20px;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
height:200px;
|
||||
max-width:100%;
|
||||
background-color:#FFFFFF;
|
||||
flex-direction:column;
|
||||
display:flex;
|
||||
justify-content:end;
|
||||
margin: 12px 6px;
|
||||
animation-duration:1s;
|
||||
width:100%;
|
||||
padding-left:20px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-14
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-15
|
||||
{
|
||||
color:#333333;
|
||||
word-wrap:break-word;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
font-size:14px;
|
||||
line-height:1.4;
|
||||
}
|
||||
.class-16
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#606266;
|
||||
padding-right:15px;
|
||||
box-sizing:boredr-box;
|
||||
outline:none;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:40px;
|
||||
margin-left:20px;
|
||||
animation-duration:1s;
|
||||
background:none;
|
||||
width:320px;
|
||||
font-size:12px;
|
||||
line-height:40px;
|
||||
padding-left:15px;
|
||||
}
|
||||
.class-17
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
border-width:1px;
|
||||
border-style:none;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-18
|
||||
{
|
||||
color:#333333;
|
||||
word-wrap:break-word;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
font-size:14px;
|
||||
line-height:1.4;
|
||||
}
|
||||
.class-19
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#606266;
|
||||
padding-right:15px;
|
||||
box-sizing:boredr-box;
|
||||
outline:none;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:40px;
|
||||
margin-left:20px;
|
||||
animation-duration:1s;
|
||||
background:none;
|
||||
width:320px;
|
||||
font-size:12px;
|
||||
line-height:40px;
|
||||
padding-left:15px;
|
||||
}
|
||||
.class-20
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-21
|
||||
{
|
||||
cursor:pointer;
|
||||
color:#ffffff;
|
||||
box-sizing:border-box;
|
||||
height:34px;
|
||||
background-color:#0099ff;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
border-radius:4px;
|
||||
width:98px;
|
||||
line-height:34px;
|
||||
font-size:14px;
|
||||
}
|
||||
.class-22
|
||||
{
|
||||
cursor:pointer;
|
||||
border-color:#0099FF;
|
||||
color:#0099FF;
|
||||
box-sizing:border-box;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:34px;
|
||||
background-color:#FFFFFF;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
margin-left:10px;
|
||||
animation-duration:1s;
|
||||
border-radius:4px;
|
||||
width:98px;
|
||||
line-height:34px;
|
||||
font-size:14px;
|
||||
}
|
||||
.class-23
|
||||
{
|
||||
color:#333333;
|
||||
padding:20px;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
height:200px;
|
||||
max-width:100%;
|
||||
background-color:#FFFFFF;
|
||||
flex-direction:column;
|
||||
display:flex;
|
||||
justify-content:end;
|
||||
margin: 12px 12px 12px 6px;
|
||||
animation-duration:1s;
|
||||
width:100%;
|
||||
padding-left:20px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-24
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-25
|
||||
{
|
||||
color:#333333;
|
||||
word-wrap:break-word;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
font-size:14px;
|
||||
line-height:1.4;
|
||||
}
|
||||
.class-26
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#606266;
|
||||
padding-right:15px;
|
||||
box-sizing:boredr-box;
|
||||
outline:none;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:40px;
|
||||
margin-left:20px;
|
||||
animation-duration:1s;
|
||||
background:none;
|
||||
width:320px;
|
||||
font-size:12px;
|
||||
line-height:40px;
|
||||
padding-left:15px;
|
||||
}
|
||||
.class-27
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
border-width:1px;
|
||||
border-style:none;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-28
|
||||
{
|
||||
color:#333333;
|
||||
word-wrap:break-word;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
font-size:14px;
|
||||
line-height:1.4;
|
||||
}
|
||||
.class-29
|
||||
{
|
||||
border-color:#EEEEEE;
|
||||
color:#606266;
|
||||
padding-right:15px;
|
||||
box-sizing:boredr-box;
|
||||
outline:none;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:40px;
|
||||
margin-left:20px;
|
||||
animation-duration:1s;
|
||||
background:none;
|
||||
width:320px;
|
||||
font-size:12px;
|
||||
line-height:40px;
|
||||
padding-left:15px;
|
||||
}
|
||||
.class-30
|
||||
{
|
||||
color:#333333;
|
||||
outline:none;
|
||||
outline-offset:-1px;
|
||||
max-width:100%;
|
||||
align-items:center;
|
||||
flex-direction:row;
|
||||
display:flex;
|
||||
animation-duration:1s;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.class-31
|
||||
{
|
||||
cursor:pointer;
|
||||
color:#ffffff;
|
||||
box-sizing:border-box;
|
||||
height:34px;
|
||||
background-color:#0099ff;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
animation-duration:1s;
|
||||
border-radius:4px;
|
||||
width:98px;
|
||||
line-height:34px;
|
||||
font-size:14px;
|
||||
}
|
||||
.class-32
|
||||
{
|
||||
cursor:pointer;
|
||||
border-color:#0099FF;
|
||||
color:#0099FF;
|
||||
box-sizing:border-box;
|
||||
border-width:1px;
|
||||
border-style:solid;
|
||||
height:34px;
|
||||
background-color:#FFFFFF;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
margin-left:10px;
|
||||
animation-duration:1s;
|
||||
border-radius:4px;
|
||||
width:98px;
|
||||
line-height:34px;
|
||||
font-size:14px;
|
||||
}
|
||||
.el-select,
|
||||
.el-input,
|
||||
.el-form-item,
|
||||
.el-date-editor{
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
|
@ -83,7 +83,7 @@ a:link,a:visited,a:active{text-decoration: none; color:#409EFF;}
|
|||
width: 100% !important;
|
||||
}
|
||||
.ms-search{
|
||||
padding: 20px 10px 0px;
|
||||
padding: 20px 0 0;
|
||||
background: #fff;
|
||||
}
|
||||
.ms-search .ms-search-footer{
|
||||
|
|
|
@ -141,7 +141,7 @@ textarea::-webkit-input-placeholder {
|
|||
flex: 1;
|
||||
height: 320px;
|
||||
background: #fff;
|
||||
padding: 20px 54px;
|
||||
padding: 20px 26px;
|
||||
}
|
||||
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form h1 {
|
||||
line-height: 1;
|
||||
|
@ -173,7 +173,7 @@ textarea::-webkit-input-placeholder {
|
|||
}
|
||||
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content .el-input__inner,
|
||||
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content .el-input {
|
||||
width: 97px;
|
||||
width: 110px;
|
||||
}
|
||||
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content > img {
|
||||
width: 66px;
|
||||
|
@ -183,7 +183,7 @@ textarea::-webkit-input-placeholder {
|
|||
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content p {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
line-height: 17px;
|
||||
line-height: 1;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
}
|
||||
|
|
|
@ -47,13 +47,6 @@
|
|||
"unicode": "e6c2",
|
||||
"unicode_decimal": 59074
|
||||
},
|
||||
{
|
||||
"icon_id": "174849",
|
||||
"name": "特色服务icon",
|
||||
"font_class": "tesefuwuicon",
|
||||
"unicode": "e7a2",
|
||||
"unicode_decimal": 59298
|
||||
},
|
||||
{
|
||||
"icon_id": "247483",
|
||||
"name": "书",
|
||||
|
@ -747,13 +740,6 @@
|
|||
"unicode": "e6aa",
|
||||
"unicode_decimal": 59050
|
||||
},
|
||||
{
|
||||
"icon_id": "2228997",
|
||||
"name": "打折",
|
||||
"font_class": "dazhe",
|
||||
"unicode": "e79e",
|
||||
"unicode_decimal": 59294
|
||||
},
|
||||
{
|
||||
"icon_id": "2245822",
|
||||
"name": "红包",
|
||||
|
@ -1118,13 +1104,6 @@
|
|||
"unicode": "e615",
|
||||
"unicode_decimal": 58901
|
||||
},
|
||||
{
|
||||
"icon_id": "3512889",
|
||||
"name": "地址",
|
||||
"font_class": "dizhi",
|
||||
"unicode": "e79f",
|
||||
"unicode_decimal": 59295
|
||||
},
|
||||
{
|
||||
"icon_id": "3555825",
|
||||
"name": "加",
|
||||
|
@ -1405,13 +1384,6 @@
|
|||
"unicode": "e6e1",
|
||||
"unicode_decimal": 59105
|
||||
},
|
||||
{
|
||||
"icon_id": "4480718",
|
||||
"name": "网页",
|
||||
"font_class": "wangye",
|
||||
"unicode": "e7a0",
|
||||
"unicode_decimal": 59296
|
||||
},
|
||||
{
|
||||
"icon_id": "4549366",
|
||||
"name": "水滴",
|
||||
|
@ -1594,20 +1566,6 @@
|
|||
"unicode": "e917",
|
||||
"unicode_decimal": 59671
|
||||
},
|
||||
{
|
||||
"icon_id": "5296173",
|
||||
"name": "承诺函",
|
||||
"font_class": "chengnuohan",
|
||||
"unicode": "e8f9",
|
||||
"unicode_decimal": 59641
|
||||
},
|
||||
{
|
||||
"icon_id": "5296174",
|
||||
"name": "正品行货",
|
||||
"font_class": "zhengpinhanghuo",
|
||||
"unicode": "e8fa",
|
||||
"unicode_decimal": 59642
|
||||
},
|
||||
{
|
||||
"icon_id": "5309436",
|
||||
"name": "电源",
|
||||
|
@ -2161,13 +2119,6 @@
|
|||
"unicode": "ebf4",
|
||||
"unicode_decimal": 60404
|
||||
},
|
||||
{
|
||||
"icon_id": "7731245",
|
||||
"name": "优惠券",
|
||||
"font_class": "youhuiquan1",
|
||||
"unicode": "e79a",
|
||||
"unicode_decimal": 59290
|
||||
},
|
||||
{
|
||||
"icon_id": "7782114",
|
||||
"name": "裁剪",
|
||||
|
@ -2714,13 +2665,6 @@
|
|||
"unicode": "e82f",
|
||||
"unicode_decimal": 59439
|
||||
},
|
||||
{
|
||||
"icon_id": "9739958",
|
||||
"name": "9-劳联保险@三合一",
|
||||
"font_class": "-laolianbaoxiansanheyi",
|
||||
"unicode": "e7a3",
|
||||
"unicode_decimal": 59299
|
||||
},
|
||||
{
|
||||
"icon_id": "9742421",
|
||||
"name": "清空",
|
||||
|
@ -2987,13 +2931,6 @@
|
|||
"unicode": "e738",
|
||||
"unicode_decimal": 59192
|
||||
},
|
||||
{
|
||||
"icon_id": "10833932",
|
||||
"name": "商户管理",
|
||||
"font_class": "shanghuguanli",
|
||||
"unicode": "e79d",
|
||||
"unicode_decimal": 59293
|
||||
},
|
||||
{
|
||||
"icon_id": "11043027",
|
||||
"name": "多行文本",
|
||||
|
|
Before Width: | Height: | Size: 933 KiB After Width: | Height: | Size: 912 KiB |
|
@ -0,0 +1,13 @@
|
|||
/* Polyfill service v3.25.1
|
||||
* For detailed credits and licence information see https://github.com/financial-times/polyfill-service.
|
||||
*
|
||||
* UA detected: other/0.0.0 (unknown/unsupported; using policy `unknown=ignore`)
|
||||
* Features requested: default
|
||||
* */
|
||||
|
||||
(function(undefined) {
|
||||
|
||||
/* No polyfills found for current settings */
|
||||
|
||||
})
|
||||
.call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});
|
|
@ -0,0 +1,14 @@
|
|||
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}
|
||||
body{line-height:1}
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}
|
||||
nav ul{list-style:none}
|
||||
blockquote,q{quotes:none}
|
||||
blockquote:before,blockquote:after,q:before,q:after{content:none}
|
||||
a{margin:0;padding:0;font-size:100%;vertical-align:baseline;background:transparent}
|
||||
ins{background-color:#ff9;color:#000;text-decoration:none}
|
||||
mark{background-color:#ff9;color:#000;font-style:italic;font-weight:bold}
|
||||
del{text-decoration:line-through}
|
||||
abbr[title],dfn[title]{border-bottom:1px dotted;cursor:help}
|
||||
table{border-collapse:collapse;border-spacing:0}
|
||||
hr{display:block;height:1px;border:0;border-top:1px solid #ccc;margin:1em 0;padding:0}
|
||||
input,select{vertical-align:middle}
|
|
@ -0,0 +1,398 @@
|
|||
/**
|
||||
* styling for DIVAS slider - skin dark focus
|
||||
* @author Federica Sibella - Michela Chiucini
|
||||
* @date 2014/08/01
|
||||
* @version 0.1
|
||||
*
|
||||
1. RESET styles for Divas Slider
|
||||
2. SPINNER styles
|
||||
3. MANDATORY Divas Styles
|
||||
4. DEFAULT slider settings = SPECIFIC styles for demo
|
||||
5. GENERAL media queries
|
||||
*/
|
||||
/************************************************************************
|
||||
* 1. RESET styles for Divas Slider
|
||||
*************************************************************************/
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
|
||||
body { background: none repeat scroll 0 0 #fff; color: #313131; font-family: 'Source Sans Pro',Helvetica,Arial,sans-serif; font-size: 62.5%; line-height: 1.4; min-width: 20em; position: relative; width: 100%; margin: 0;}
|
||||
header,
|
||||
section,
|
||||
footer { position: relative; width: 100%; background: rgba(0, 0, 0, 0); padding-top: 0; height: auto; }
|
||||
ul,
|
||||
ol { list-style: none outside none; }
|
||||
.esc { position: relative; width: 100%; height: 1px; clear: both; }
|
||||
.clearfix:after { content: ""; display: table; clear: both; }
|
||||
|
||||
/************************************************************************
|
||||
* 2. SPINNER styles
|
||||
*************************************************************************/
|
||||
|
||||
@keyframes spin {
|
||||
to {
|
||||
-webkit-transform: rotate(1turn);
|
||||
-moz-transform: rotate(1turn);
|
||||
-o-transform: rotate(1turn);
|
||||
-ms-transform: rotate(1turn);
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes extra-spin {
|
||||
to {
|
||||
-webkit-transform: rotate(1.125turn);
|
||||
-moz-transform: rotate(1.125turn);
|
||||
-o-transform: rotate(1.125turn);
|
||||
-ms-transform: rotate(1.125turn);
|
||||
transform: rotate(1.125turn);
|
||||
}
|
||||
}
|
||||
|
||||
.spin {
|
||||
font-size: 36px;
|
||||
text-align: center;
|
||||
text-indent: -999em;
|
||||
}
|
||||
|
||||
.spin:before,
|
||||
.spin:after {
|
||||
content: "";
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
border-radius: 0.2em;
|
||||
position: fixed;
|
||||
top: 5em;
|
||||
left: 50%;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.spin:before {
|
||||
box-shadow:
|
||||
/* 1 */
|
||||
0 1em #eee,
|
||||
0 1.125em #eee,
|
||||
0 1.25em #eee,
|
||||
0 1.375em #eee,
|
||||
0 1.5em #eee,
|
||||
|
||||
/* 3 */
|
||||
-1em 0 #aaa,
|
||||
-1.125em 0 #aaa,
|
||||
-1.25em 0 #aaa,
|
||||
-1.375em 0 #aaa,
|
||||
-1.5em 0 #aaa,
|
||||
|
||||
/* 5 */
|
||||
0 -1em #666,
|
||||
0 -1.125em #666,
|
||||
0 -1.25em #666,
|
||||
0 -1.375em #666,
|
||||
0 -1.5em #666,
|
||||
|
||||
/* 7 */
|
||||
1em 0 #222,
|
||||
1.125em 0 #222,
|
||||
1.25em 0 #222,
|
||||
1.375em 0 #222,
|
||||
1.5em 0 #222;
|
||||
-webkit-transform: rotate(45deg);
|
||||
-moz-transform: rotate(45deg);
|
||||
-o-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
-webkit-animation: extra-spin 1s infinite steps(8);
|
||||
-moz-animation: extra-spin 1s infinite steps(8);
|
||||
-o-animation: extra-spin 1s infinite steps(8);
|
||||
animation: extra-spin 1s infinite steps(8);
|
||||
}
|
||||
|
||||
.spin:after {
|
||||
box-shadow:
|
||||
/* 2 */
|
||||
-1em 0 #ccc,
|
||||
-1.125em 0 #ccc,
|
||||
-1.25em 0 #ccc,
|
||||
-1.375em 0 #ccc,
|
||||
-1.5em 0 #ccc,
|
||||
|
||||
/* 4 */
|
||||
0 -1em #888,
|
||||
0 -1.125em #888,
|
||||
0 -1.25em #888,
|
||||
0 -1.375em #888,
|
||||
0 -1.5em #888,
|
||||
|
||||
/* 6 */
|
||||
1em 0 #444,
|
||||
1.125em 0 #444,
|
||||
1.25em 0 #444,
|
||||
1.375em 0 #444,
|
||||
1.5em 0 #444,
|
||||
|
||||
/* 8 */
|
||||
0 1em #000,
|
||||
0 1.125em #000,
|
||||
0 1.25em #000,
|
||||
0 1.375em #000,
|
||||
0 1.5em #000;
|
||||
-webkit-animation: spin 1s infinite steps(8);
|
||||
-moz-animation: spin 1s infinite steps(8);
|
||||
-o-animation: spin 1s infinite steps(8);
|
||||
animation: spin 1s infinite steps(8);
|
||||
}
|
||||
/*end of CSS spinner*/
|
||||
|
||||
#loader {
|
||||
position: fixed;
|
||||
margin: 0;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 9999;
|
||||
background: rgba(255,255,255,1);
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#loader > div {
|
||||
position: relative;
|
||||
margin-top: 10%;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* 3. MANDATORY Divas styles
|
||||
*************************************************************************/
|
||||
|
||||
#slider_wrapper {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.divas-slider {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.divas-slider-container {
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.divas-slider-container:after {
|
||||
content: "";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.divas-slide {
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.divas-slide img {
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
outline: 0 none;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* 4. DEFAULT slider settings
|
||||
*************************************************************************/
|
||||
|
||||
/*
|
||||
* divas slide transitions
|
||||
*/
|
||||
.divas-slide-transition-left {
|
||||
-webkit-transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
-moz-transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
-o-transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
}
|
||||
|
||||
/*
|
||||
* divas navigation buttons
|
||||
*/
|
||||
.divas-navigation {
|
||||
clear: both;
|
||||
position: absolute;
|
||||
margin: 0px auto;
|
||||
height: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
top: 47%;
|
||||
top: calc(50% - 33px);
|
||||
}
|
||||
.divas-has-bullets .divas-navigation {
|
||||
top: calc(50% - 61px);
|
||||
}
|
||||
|
||||
.divas-navigation span {
|
||||
height: 66px;
|
||||
outline: 0 none;
|
||||
position: absolute;
|
||||
width: 42px;
|
||||
z-index: 9999;
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
font-size: 3em;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
.divas-navigation span:hover {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.divas-controls span.divas-start,
|
||||
.divas-controls span.divas-stop {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.divas-navigation span.divas-prev {
|
||||
left: 1em;
|
||||
background: url("../images/prev.svg") no-repeat top center rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.divas-navigation span.divas-next {
|
||||
right: 1em;
|
||||
background: url("../images/next.svg") no-repeat top center rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
@media screen and (max-width: 40em) {
|
||||
.divas-navigation span.divas-prev,
|
||||
.divas-navigation span.divas-next{
|
||||
background-position:center center;
|
||||
-webkit-background-size: 75% auto;
|
||||
-moz-background-size: 75% auto;
|
||||
-o-background-size: 75% auto;
|
||||
background-size: 75% auto;
|
||||
}
|
||||
.divas-navigation span.divas-prev {
|
||||
left: 0.5em;
|
||||
}
|
||||
.divas-navigation span.divas-next {
|
||||
right: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* divas caption styling
|
||||
*/
|
||||
.divas-caption {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: auto;
|
||||
background: rgba(0,0,0,0.7);
|
||||
color: #f7f7f7;
|
||||
border: none;
|
||||
padding: 1em 2em 1.6em;
|
||||
margin: 0 2em;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* divas caption transitions: left
|
||||
*/
|
||||
.divas-caption.divas-title-transition-left-start {
|
||||
left: -999px;
|
||||
}
|
||||
|
||||
.divas-caption.divas-title-transition-left {
|
||||
-webkit-transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
-moz-transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
-o-transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
transition: left 1s cubic-bezier(0.23, 1, 0.32, 1) 0s;
|
||||
}
|
||||
|
||||
.divas-caption.divas-title-transition-left-stop {
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
.divas-caption h1 {
|
||||
font-weight: 900;
|
||||
font-size: 4.8em;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.divas-caption p {
|
||||
font-style: italic;
|
||||
font-size: 1.6em;
|
||||
}
|
||||
|
||||
/*
|
||||
* divas navigation bullets
|
||||
*/
|
||||
.divas-bullets {
|
||||
clear: both;
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
padding: 20px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.divas-bullets ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.divas-bullet {
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
border-radius: 1.5em;
|
||||
display: inline-block;
|
||||
height: 16px;
|
||||
margin: 0 0.3em;
|
||||
text-indent: -9999px;
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
.divas-bullet-current {
|
||||
background-color: rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/************************************************************************
|
||||
* 5. GENERAL media queries
|
||||
*************************************************************************/
|
||||
|
||||
@media screen and (max-width: 87.5em) {
|
||||
body {
|
||||
font-size: 54.6875%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 75em) {
|
||||
body {
|
||||
font-size: 50.875%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 56.75em) {
|
||||
body {
|
||||
font-size: 45%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 35em) {
|
||||
.divas-caption {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="43.333px" height="64.667px" viewBox="0 0 43.333 64.667" enable-background="new 0 0 43.333 64.667" xml:space="preserve">
|
||||
<polyline fill="none" stroke="#FFFFFF" points="10.25,6.917 37.25,33.917 10.25,60.917 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 588 B |
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="43.333px" height="64.667px" viewBox="0 0 43.333 64.667" enable-background="new 0 0 43.333 64.667" xml:space="preserve">
|
||||
<polyline fill="none" stroke="#FFFFFF" points="37.25,6.917 10.25,33.917 37.25,60.917 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 588 B |
|
@ -0,0 +1,91 @@
|
|||
.flexslider {
|
||||
margin: 0px auto 20px;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 482px;
|
||||
overflow: hidden;
|
||||
zoom: 1;
|
||||
}
|
||||
|
||||
.flexslider .slides li {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.flex-direction-nav a {
|
||||
width: 70px;
|
||||
height: 70px;
|
||||
line-height: 99em;
|
||||
overflow: hidden;
|
||||
margin: -35px 0 0;
|
||||
display: block;
|
||||
background: url(../images/ad_ctr.png) no-repeat;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
-webkit-transition: all .3s ease;
|
||||
border-radius: 35px;
|
||||
}
|
||||
|
||||
.flex-direction-nav .flex-next {
|
||||
background-position: 0 -70px;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.flex-direction-nav .flex-prev {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.flexslider:hover .flex-next {
|
||||
opacity: 0.8;
|
||||
filter: alpha(opacity=25);
|
||||
}
|
||||
|
||||
.flexslider:hover .flex-prev {
|
||||
opacity: 0.8;
|
||||
filter: alpha(opacity=25);
|
||||
}
|
||||
|
||||
.flexslider:hover .flex-next:hover,
|
||||
.flexslider:hover .flex-prev:hover {
|
||||
opacity: 1;
|
||||
filter: alpha(opacity=50);
|
||||
}
|
||||
|
||||
.flex-control-nav {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.flex-control-nav li {
|
||||
margin: 0 2px;
|
||||
display: inline-block;
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
}
|
||||
|
||||
.flex-control-paging li a {
|
||||
background: url(../images/dot.png) no-repeat 0 -16px;
|
||||
display: block;
|
||||
height: 16px;
|
||||
overflow: hidden;
|
||||
text-indent: -99em;
|
||||
width: 16px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.flex-control-paging li a.flex-active,
|
||||
.flex-control-paging li.active a {
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
||||
.flexslider .slides a img {
|
||||
width: 100%;
|
||||
height: 482px;
|
||||
display: block;
|
||||
}
|
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 924 B |
After Width: | Height: | Size: 573 B |
|
@ -0,0 +1,156 @@
|
|||
/**
|
||||
* slider插件可悬停控制
|
||||
*/
|
||||
; $(function ($, window, document, undefined) {
|
||||
|
||||
Slider = function (container, options) {
|
||||
/*
|
||||
options = {
|
||||
auto: true,
|
||||
time: 3000,
|
||||
event: 'hover' | 'click',
|
||||
mode: 'slide | fade',
|
||||
controller: $(),
|
||||
activeControllerCls: 'className',
|
||||
exchangeEnd: $.noop
|
||||
}
|
||||
*/
|
||||
|
||||
"use strict"; //stirct mode not support by IE9-
|
||||
|
||||
if (!container) return;
|
||||
|
||||
var options = options || {},
|
||||
currentIndex = 0,
|
||||
cls = options.activeControllerCls,
|
||||
delay = options.delay,
|
||||
isAuto = options.auto,
|
||||
controller = options.controller,
|
||||
event = options.event,
|
||||
interval,
|
||||
slidesWrapper = container.children().first(),
|
||||
slides = slidesWrapper.children(),
|
||||
length = slides.length,
|
||||
childWidth = container.width(),
|
||||
totalWidth = childWidth * slides.length;
|
||||
|
||||
function init() {
|
||||
var controlItem = controller.children();
|
||||
|
||||
mode();
|
||||
|
||||
event == 'hover' ? controlItem.mouseover(function () {
|
||||
stop();
|
||||
var index = $(this).index();
|
||||
|
||||
play(index, options.mode);
|
||||
}).mouseout(function () {
|
||||
isAuto && autoPlay();
|
||||
}) : controlItem.click(function () {
|
||||
stop();
|
||||
var index = $(this).index();
|
||||
|
||||
play(index, options.mode);
|
||||
isAuto && autoPlay();
|
||||
});
|
||||
|
||||
isAuto && autoPlay();
|
||||
}
|
||||
|
||||
//animate mode
|
||||
function mode() {
|
||||
var wrapper = container.children().first();
|
||||
|
||||
options.mode == 'slide' ? wrapper.width(totalWidth) : wrapper.children().css({
|
||||
'position': 'absolute',
|
||||
'left': 0,
|
||||
'top': 0
|
||||
})
|
||||
.first().siblings().hide();
|
||||
}
|
||||
|
||||
//auto play
|
||||
function autoPlay() {
|
||||
interval = setInterval(function () {
|
||||
triggerPlay(currentIndex);
|
||||
}, options.time);
|
||||
}
|
||||
|
||||
//trigger play
|
||||
function triggerPlay(cIndex) {
|
||||
var index;
|
||||
|
||||
(cIndex == length - 1) ? index = 0 : index = cIndex + 1;
|
||||
play(index, options.mode);
|
||||
}
|
||||
|
||||
//play
|
||||
function play(index, mode) {
|
||||
slidesWrapper.stop(true, true);
|
||||
slides.stop(true, true);
|
||||
|
||||
mode == 'slide' ? (function () {
|
||||
if (index > currentIndex) {
|
||||
slidesWrapper.animate({
|
||||
left: '-=' + Math.abs(index - currentIndex) * childWidth + 'px'
|
||||
}, delay);
|
||||
} else if (index < currentIndex) {
|
||||
slidesWrapper.animate({
|
||||
left: '+=' + Math.abs(index - currentIndex) * childWidth + 'px'
|
||||
}, delay);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
})() : (function () {
|
||||
if (slidesWrapper.children(':visible').index() == index) return;
|
||||
slidesWrapper.children().fadeOut(delay).eq(index).fadeIn(delay);
|
||||
})();
|
||||
|
||||
try {
|
||||
controller.children('.' + cls).removeClass(cls);
|
||||
controller.children().eq(index).addClass(cls);
|
||||
} catch (e) { }
|
||||
|
||||
currentIndex = index;
|
||||
|
||||
options.exchangeEnd && typeof options.exchangeEnd == 'function' && options.exchangeEnd.call(this, currentIndex);
|
||||
}
|
||||
|
||||
//stop
|
||||
function stop() {
|
||||
clearInterval(interval);
|
||||
}
|
||||
|
||||
//prev frame
|
||||
function prev() {
|
||||
stop();
|
||||
|
||||
currentIndex == 0 ? triggerPlay(length - 2) : triggerPlay(currentIndex - 2);
|
||||
|
||||
isAuto && autoPlay();
|
||||
}
|
||||
|
||||
//next frame
|
||||
function next() {
|
||||
stop();
|
||||
|
||||
currentIndex == length - 1 ? triggerPlay(-1) : triggerPlay(currentIndex);
|
||||
|
||||
isAuto && autoPlay();
|
||||
}
|
||||
|
||||
//init
|
||||
init();
|
||||
|
||||
//expose the Slider API
|
||||
return {
|
||||
prev: function () {
|
||||
prev();
|
||||
},
|
||||
next: function () {
|
||||
next();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}(jQuery, window, document));
|
|
@ -0,0 +1,13 @@
|
|||
.flexslider{position:relative;height:400px;overflow:hidden;background:url(../images/loading.gif) 50% no-repeat;}
|
||||
.slides{position:relative;z-index:1;}
|
||||
.slides li{height:400px;}
|
||||
.slides li a{ display:block; width:100%; height:100%; text-align:left; text-indent:-9999px}
|
||||
.flex-control-nav{position:absolute;bottom:10px;z-index:2; left:45%;text-align:center;}
|
||||
.flex-control-nav li{display:inline-block;width:14px; float:left;height:14px;margin:0 5px;*display:inline;zoom:1;}
|
||||
.flex-control-nav a{display:inline-block;width:14px;height:14px;line-height:40px;overflow:hidden;background:url(../images/dot.png) right 0 no-repeat;cursor:pointer;}
|
||||
.flex-control-nav .flex-active{background-position:0 0;}
|
||||
|
||||
.flex-direction-nav{position:absolute;z-index:3; left:0;width:100%;top:45%;}
|
||||
.flex-direction-nav li a{display:block;width:50px;height:50px;overflow:hidden;cursor:pointer;position:absolute;}
|
||||
.flex-direction-nav li a.flex-prev{left:60px;background:url(../images/prev.png) center center no-repeat;}
|
||||
.flex-direction-nav li a.flex-next{right:60px;background:url(../images/next.png) center center no-repeat;}
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 3.4 KiB |
5
src/main/webapp/static/plugins/banner/round-button/js/jquery.flexslider-min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
@media screen and (min-width:460px){.wh_item_date[data-v-5f855eee]:hover{background:#71c7a5;cursor:pointer}}[data-v-5f855eee]{margin:0;padding:0}.wh_container[data-v-5f855eee]{max-width:410px;margin:auto}li[data-v-5f855eee]{list-style-type:none}.wh_top_changge[data-v-5f855eee]{display:flex}.wh_top_changge li[data-v-5f855eee]{cursor:pointer;display:flex;color:#fff;font-size:18px;flex:1;justify-content:center;align-items:center;height:47px}.wh_top_changge .wh_content_li[data-v-5f855eee]{cursor:auto;flex:2.5}.wh_content_all[data-v-5f855eee]{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Helvetica Neue,STHeiti,Microsoft Yahei,Tahoma,Simsun,sans-serif;background-color:#0fc37c;width:100%;overflow:hidden;padding-bottom:8px}.wh_content[data-v-5f855eee]{display:flex;flex-wrap:wrap;padding:0 3%;width:100%}.wh_content:first-child .wh_content_item[data-v-5f855eee],.wh_content:first-child .wh_content_item_tag[data-v-5f855eee]{color:#ddd;font-size:16px}.wh_content_item[data-v-5f855eee],wh_content_item_tag[data-v-5f855eee]{font-size:15px;width:13.4%;text-align:center;color:#fff;position:relative}.wh_content_item[data-v-5f855eee]{height:40px}.wh_item_date[data-v-5f855eee],.wh_top_tag[data-v-5f855eee]{width:40px;height:40px;line-height:40px;margin:auto;display:flex;justify-content:center;align-items:center}.wh_jiantou1[data-v-5f855eee]{width:12px;height:12px;border-top:2px solid #fff;border-left:2px solid #fff;transform:rotate(-45deg)}.wh_jiantou1[data-v-5f855eee]:active,.wh_jiantou2[data-v-5f855eee]:active{border-color:#ddd}.wh_jiantou2[data-v-5f855eee]{width:12px;height:12px;border-top:2px solid #fff;border-right:2px solid #fff;transform:rotate(45deg)}.wh_content_item>.wh_isMark[data-v-5f855eee]{margin:auto;border-radius:100px;background:#00f;z-index:2}.wh_content_item .wh_other_dayhide[data-v-5f855eee],.wh_content_item .wh_want_dayhide[data-v-5f855eee]{color:#bfbfbf}.wh_content_item .wh_isToday[data-v-5f855eee]{background:#ff0;border-radius:100px}.wh_content_item .wh_chose_day[data-v-5f855eee]{background:green;border-radius:100px}
|
|
@ -1,36 +1,36 @@
|
|||
@font-face {
|
||||
font-family: 'iconfont';
|
||||
src: url('font_1421490211_4230533.eot'); /* IE9*/
|
||||
src: url('font_1421490211_4230533.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('font_1421490211_4230533.woff') format('woff'), /* chrome、firefox */
|
||||
url('font_1421490211_4230533.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
|
||||
url('font_1421490211_4230533.svg#iconfont') format('svg'); /* iOS 4.1- */
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family:"iconfont" !important;
|
||||
font-size:2rem;
|
||||
font-style:normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-text-stroke-width: 0.2px;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.icon_lists li{
|
||||
float:left;
|
||||
width: 100px;
|
||||
height:150px;
|
||||
text-align: center;
|
||||
}
|
||||
.icon_lists .icon{
|
||||
font-size: 42px;
|
||||
line-height: 100px;
|
||||
margin: 10px 0;
|
||||
color:#333;
|
||||
-webkit-transition: font-size 0.25s ease-out 0s;
|
||||
-moz-transition: font-size 0.25s ease-out 0s;
|
||||
transition: font-size 0.25s ease-out 0s;
|
||||
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'iconfont';
|
||||
src: url('font_1421490211_4230533.eot'); /* IE9*/
|
||||
src: url('font_1421490211_4230533.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||
url('font_1421490211_4230533.woff') format('woff'), /* chrome、firefox */
|
||||
url('font_1421490211_4230533.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
|
||||
url('font_1421490211_4230533.svg#iconfont') format('svg'); /* iOS 4.1- */
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-family:"iconfont" !important;
|
||||
font-size:2rem;
|
||||
font-style:normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-text-stroke-width: 0.2px;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.icon_lists li{
|
||||
float:left;
|
||||
width: 100px;
|
||||
height:150px;
|
||||
text-align: center;
|
||||
}
|
||||
.icon_lists .icon{
|
||||
font-size: 42px;
|
||||
line-height: 100px;
|
||||
margin: 10px 0;
|
||||
color:#333;
|
||||
-webkit-transition: font-size 0.25s ease-out 0s;
|
||||
-moz-transition: font-size 0.25s ease-out 0s;
|
||||
transition: font-size 0.25s ease-out 0s;
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
blop.mp3 sound file recorded by Mark DiAngelo
|
||||
Downloaded from http://soundbible.com/2067-Blop.html
|
||||
|
||||
All other files created by rjsken (http://www.fiverr.com/rjsken)
|
||||
All files are royalty free (http://en.wikipedia.org/wiki/Royalty-free)
|
|
@ -0,0 +1,569 @@
|
|||
|
||||
/* Global */
|
||||
|
||||
.jBox-wrapper {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.jBox-wrapper,
|
||||
.jBox-wrapper * {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.jBox-title,
|
||||
.jBox-content,
|
||||
.jBox-container {
|
||||
position: relative;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.jBox-container {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.jBox-content {
|
||||
padding: 8px 10px;
|
||||
overflow: auto;
|
||||
-webkit-transition: opacity .15s;
|
||||
transition: opacity .15s;
|
||||
}
|
||||
|
||||
/* jBox Tooltip */
|
||||
|
||||
.jBox-Tooltip .jBox-container,
|
||||
.jBox-Mouse .jBox-container {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.jBox-Tooltip .jBox-title,
|
||||
.jBox-Mouse .jBox-title {
|
||||
padding: 8px 10px 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.jBox-hasTitle.jBox-Tooltip .jBox-content,
|
||||
.jBox-hasTitle.jBox-Mouse .jBox-content {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
/* Pointer */
|
||||
|
||||
.jBox-pointer {
|
||||
position: absolute;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.jBox-pointer-top { top: 0; }
|
||||
.jBox-pointer-bottom { bottom: 0; }
|
||||
.jBox-pointer-left { left: 0; }
|
||||
.jBox-pointer-right { right: 0; }
|
||||
|
||||
.jBox-pointer-top,
|
||||
.jBox-pointer-bottom {
|
||||
width: 30px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.jBox-pointer-left,
|
||||
.jBox-pointer-right {
|
||||
width: 12px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.jBox-pointer:after {
|
||||
content: '';
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
-webkit-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.jBox-pointer-top:after {
|
||||
left: 5px;
|
||||
top: 6px;
|
||||
box-shadow: -1px -1px 4px rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
.jBox-pointer-right:after {
|
||||
top: 5px;
|
||||
right: 6px;
|
||||
box-shadow: 1px -1px 4px rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
.jBox-pointer-bottom:after {
|
||||
left: 5px;
|
||||
bottom: 6px;
|
||||
box-shadow: 1px 1px 4px rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
.jBox-pointer-left:after {
|
||||
top: 5px;
|
||||
left: 6px;
|
||||
box-shadow: -1px 1px 4px rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
/* jBox Modal & jBox Confirm */
|
||||
|
||||
.jBox-Modal .jBox-container,
|
||||
.jBox-Confirm .jBox-container {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 3px 15px rgba(0, 0, 0, .4), 0 0 5px rgba(0, 0, 0, .4);
|
||||
}
|
||||
|
||||
.jBox-Modal .jBox-title,
|
||||
.jBox-Confirm .jBox-title {
|
||||
border-radius: 3px 3px 0 0;
|
||||
padding: 10px 15px;
|
||||
background: #f4f5f6;
|
||||
border-bottom: 1px solid #ddd;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
|
||||
.jBox-Modal.jBox-closeButton-title .jBox-title,
|
||||
.jBox-Confirm.jBox-closeButton-title .jBox-title {
|
||||
padding-right: 55px;
|
||||
}
|
||||
|
||||
.jBox-Modal.jBox-closeButton-box:before,
|
||||
.jBox-Confirm.jBox-closeButton-box:before {
|
||||
box-shadow: 0 3px 15px rgba(0, 0, 0, .4), 0 0 5px rgba(0, 0, 0, .4);
|
||||
}
|
||||
|
||||
/* jBox Modal */
|
||||
|
||||
.jBox-Modal .jBox-content {
|
||||
padding: 12px 15px;
|
||||
}
|
||||
|
||||
/* jBox Confirm */
|
||||
|
||||
.jBox-Confirm .jBox-content {
|
||||
text-align: center;
|
||||
padding: 45px 35px;
|
||||
}
|
||||
|
||||
.jBox-Confirm-footer {
|
||||
border-top: 1px solid #e2e2e2;
|
||||
background: #fafafa;
|
||||
border-radius: 0 0 3px 3px;
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.jBox-Confirm-button {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
font-size: 15px;
|
||||
line-height: 30px;
|
||||
height: 30px;
|
||||
border-radius: 3px;
|
||||
padding: 0 20px;
|
||||
-webkit-transition: color .2s, background-color .2s;
|
||||
transition: color .2s, background-color .2s;
|
||||
}
|
||||
|
||||
.jBox-Confirm-button-cancel {
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, .6);
|
||||
background: #ddd;
|
||||
color: #999;
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
.jBox-Confirm-button-cancel:hover {
|
||||
background: #ccc;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.jBox-Confirm-button-submit {
|
||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, .2);
|
||||
background: #5fc04c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.jBox-Confirm-button-submit:hover {
|
||||
background: #53a642;
|
||||
}
|
||||
|
||||
.jBox-Confirm-button-cancel:active,
|
||||
.jBox-Confirm-button-submit:active {
|
||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .26);
|
||||
}
|
||||
|
||||
/* jBox Notice */
|
||||
|
||||
.jBox-Notice {
|
||||
-webkit-transition: margin .2s;
|
||||
transition: margin .2s;
|
||||
}
|
||||
|
||||
.jBox-Notice .jBox-container {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 0 3px rgba(0, 0, 0, .2);
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 #000;
|
||||
background: #333;
|
||||
background-image: linear-gradient(to bottom, #444, #222);
|
||||
}
|
||||
|
||||
.jBox-Notice .jBox-content {
|
||||
border-radius: 3px;
|
||||
padding: 12px 20px;
|
||||
}
|
||||
|
||||
.jBox-Notice .jBox-title {
|
||||
padding: 8px 20px 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.jBox-hasTitle.jBox-Notice .jBox-content {
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.jBox-Notice-color .jBox-container {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.jBox-Notice-gray .jBox-container {
|
||||
color: #666;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
background: #f4f4f4;
|
||||
background-image: linear-gradient(to bottom, #fafafa, #f0f0f0);
|
||||
}
|
||||
|
||||
.jBox-Notice-red .jBox-container {
|
||||
background: #b02222;
|
||||
background-image: linear-gradient(to bottom, #ee2222, #b02222);
|
||||
}
|
||||
|
||||
.jBox-Notice-green .jBox-container {
|
||||
background: #70a800;
|
||||
background-image: linear-gradient(to bottom, #95cc2a, #70a800);
|
||||
}
|
||||
|
||||
.jBox-Notice-blue .jBox-container {
|
||||
background: #2b91d9;
|
||||
background-image: linear-gradient(to bottom, #5abaff, #2b91d9);
|
||||
}
|
||||
|
||||
.jBox-Notice-yellow .jBox-container {
|
||||
color: #744700;
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, .6);
|
||||
background: #ffb11f;
|
||||
background-image: linear-gradient(to bottom, #ffd665, #ffb11f);
|
||||
}
|
||||
|
||||
/* jBox Image */
|
||||
|
||||
.jBox-Image {
|
||||
background: #fff;
|
||||
padding: 8px 8px 45px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.jBox-Image .jBox-content {
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.jBox-image-container {
|
||||
border-radius: 5px;
|
||||
background: #fff center center no-repeat;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.jBox-image-label {
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
background: #fff;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
color: #333;
|
||||
margin-top: -35px;
|
||||
padding: 0 90px 5px 10px;
|
||||
border-radius: 0 0 5px 5px;
|
||||
-webkit-transition: opacity .3s;
|
||||
transition: opacity .3s;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.jBox-image-label.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.jBox-image-pointer-next,
|
||||
.jBox-image-pointer-prev {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
width: 22px;
|
||||
height: 45px;
|
||||
background: no-repeat center center url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ijc0LjcgMjI0IDE4LjcgMzIiPg0KPHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTTkzLDIyNy40TDgwLjQsMjQwTDkzLDI1Mi42YzAuNCwwLjQsMC40LDEuMSwwLDEuNWwtMS42LDEuNmMtMC40LDAuNC0xLDAuNS0xLjUsMEw3NSwyNDAuN2MtMC40LTAuNC0wLjUtMSwwLTEuNWwxNC45LTE0LjljMC40LTAuNCwxLTAuNCwxLjUsMGwxLjYsMS42QzkzLjUsMjI2LjQsOTMuNCwyMjcsOTMsMjI3LjR6Ii8+DQo8L3N2Zz4=);
|
||||
background-size: 11px auto;
|
||||
cursor: pointer;
|
||||
opacity: .6;
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-transition: opacity .2s;
|
||||
transition: opacity .2s;
|
||||
}
|
||||
|
||||
.jBox-image-pointer-next:hover,
|
||||
.jBox-image-pointer-prev:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.jBox-image-pointer-next {
|
||||
right: 8px;
|
||||
-webkit-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
.jBox-image-pointer-prev {
|
||||
right: 30px;
|
||||
}
|
||||
|
||||
.jBox-image-open #jBox-overlay {
|
||||
background-color: rgba(0, 0, 0, .86);
|
||||
}
|
||||
|
||||
.jBox-Image.jBox-loading .jBox-container:before {
|
||||
left: auto;
|
||||
top: auto;
|
||||
bottom: -33px;
|
||||
right: 55px;
|
||||
margin-top: -9px;
|
||||
margin-left: -9px;
|
||||
}
|
||||
|
||||
/* Close button */
|
||||
|
||||
.jBox-closeButton {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.jBox-closeButton svg {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: 50%;
|
||||
}
|
||||
|
||||
.jBox-closeButton path {
|
||||
-webkit-transition: fill .2s;
|
||||
transition: fill .2s;
|
||||
}
|
||||
|
||||
.jBox-closeButton path {
|
||||
fill: #aaa;
|
||||
}
|
||||
|
||||
.jBox-closeButton:hover path {
|
||||
fill: #888;
|
||||
}
|
||||
|
||||
.jBox-closeButton:active path {
|
||||
fill: #666;
|
||||
}
|
||||
|
||||
/* Close button in overlay */
|
||||
|
||||
#jBox-overlay .jBox-closeButton {
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
#jBox-overlay .jBox-closeButton svg {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: -10px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
|
||||
#jBox-overlay .jBox-closeButton path {
|
||||
fill: #d2d4d6;
|
||||
}
|
||||
|
||||
#jBox-overlay .jBox-closeButton:hover path {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
#jBox-overlay .jBox-closeButton:active path {
|
||||
fill: #b2b4b6;
|
||||
}
|
||||
|
||||
/* Close button in title */
|
||||
|
||||
.jBox-closeButton-title .jBox-closeButton {
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.jBox-closeButton-title .jBox-closeButton svg {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
margin-top: -6px;
|
||||
margin-right: -6px;
|
||||
}
|
||||
|
||||
/* Close button in box */
|
||||
|
||||
.jBox-closeButton-box .jBox-closeButton {
|
||||
top: -8px;
|
||||
right: -10px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: #fff;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.jBox-closeButton-box .jBox-closeButton svg {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin-top: -5px;
|
||||
margin-right: -5px;
|
||||
}
|
||||
|
||||
.jBox-hasTitle.jBox-Modal.jBox-closeButton-box .jBox-closeButton {
|
||||
background: #f4f5f6;
|
||||
}
|
||||
|
||||
.jBox-closeButton-box:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -8px;
|
||||
right: -10px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.jBox-pointerPosition-top.jBox-closeButton-box:before {
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
.jBox-pointerPosition-right.jBox-closeButton-box:before {
|
||||
right: 2px;
|
||||
}
|
||||
|
||||
/* Overlay */
|
||||
|
||||
#jBox-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
background-color: rgba(0, 0, 0, .6);
|
||||
}
|
||||
|
||||
/* Block scrolling */
|
||||
|
||||
body[class^="jBox-blockScroll-"],
|
||||
body[class*=" jBox-blockScroll-"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Draggable */
|
||||
|
||||
.jBox-draggable {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
/* Spinner */
|
||||
|
||||
@keyframes jBoxLoading {
|
||||
to {transform: rotate(360deg);}
|
||||
}
|
||||
|
||||
@-webkit-keyframes jBoxLoading {
|
||||
to {-webkit-transform: rotate(360deg);}
|
||||
}
|
||||
|
||||
.jBox-loading .jBox-content {
|
||||
min-height: 32px;
|
||||
min-width: 38px;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.jBox-spinner {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: -10px;
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
.jBox-spinner:before {
|
||||
content: 'Loading…';
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
text-align: center;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.jBox-spinner:not(:required):before {
|
||||
content: '';
|
||||
border-radius: 50%;
|
||||
border: 2px solid rgba(0, 0, 0, .3);
|
||||
border-top-color: rgba(0, 0, 0, .6);
|
||||
animation: jBoxLoading .6s linear infinite;
|
||||
-webkit-animation: jBoxLoading .6s linear infinite;
|
||||
}
|
||||
|
||||
/* IE8 fixes */
|
||||
|
||||
.jBox-IE8.jBox-Tooltip .jBox-container,
|
||||
.jBox-IE8.jBox-Mouse .jBox-container {
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
|
||||
.jBox-IE8 .jBox-pointer:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jBox-IE8 .jBox-pointer {
|
||||
border: 0;
|
||||
background: no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPJJREFUeNq01l0OwyAIAGAlvY+n8ZJ6Gk/EqqkNtf7ApCQ+LM34iuCmRUQzihjj6FH+kjWL8N4/Ph9GHpiTnC9SwDbhLGyvspSScc71KkOa/HpuuRhIK+psE2pjONouCQg7kBSEXUgC2tHo52mTTBpnaEATWlaYK6MrhIAaceWpOcsCrYp6FV4H/90zTWjUQ/gSevVQq0ecHqoOxWpYoO7p5O9ku2fnVtp7QAik2rsK3fnpWfjynJWpbw+1BkghurrYDjiCptg/4AxaYhJwBbEwDsiB2NgM5EIirAdKIDFGQSmU1+NaIPjJYt2I25vxT4ABAMhWvtle2YvmAAAAAElFTkSuQmCC);
|
||||
}
|
||||
|
||||
.jBox-IE8 .jBox-pointer-top { background-position: center top; }
|
||||
.jBox-IE8 .jBox-pointer-bottom { background-position: center bottom; }
|
||||
.jBox-IE8 .jBox-pointer-left { background-position: left center; }
|
||||
.jBox-IE8 .jBox-pointer-right { background-position: right center; }
|
||||
|
||||
.jBox-IE8.jBox-Modal .jBox-container {
|
||||
border: 3px solid #aaa;
|
||||
}
|
||||
|
||||
/* No SVG support fixes */
|
||||
|
||||
.jBox-nosvg .jBox-closeButton:before {
|
||||
font-family: Verdana, sans-serif;
|
||||
content: 'x';
|
||||
text-align: center;
|
||||
font-size: 18px;
|
||||
color: #888;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
|
||||
/* Wrapper */
|
||||
|
||||
.jBox-ModalBorder {
|
||||
border-radius: 8px;
|
||||
background: rgba(0, 0, 0, .4);
|
||||
padding: 8px;
|
||||
box-shadow: 0 0 6px rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
/* Container */
|
||||
|
||||
.jBox-ModalBorder .jBox-container {
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
/* Close button */
|
||||
|
||||
.jBox-ModalBorder.jBox-closeButton-box {
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.jBox-ModalBorder.jBox-closeButton-box:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.jBox-ModalBorder.jBox-hasTitle.jBox-closeButton-box .jBox-closeButton,
|
||||
.jBox-ModalBorder.jBox-closeButton-box .jBox-closeButton {
|
||||
background: rgba(0, 0, 0, .4);
|
||||
border-radius: 0 50% 50% 0;
|
||||
right: -32px;
|
||||
top: -8px;
|
||||
}
|
||||
|
||||
.jBox-ModalBorder.jBox-closeButton-box .jBox-closeButton path {
|
||||
fill: #d2d4d6;
|
||||
}
|
||||
|
||||
.jBox-ModalBorder.jBox-closeButton-box .jBox-closeButton:hover path {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.jBox-ModalBorder.jBox-closeButton-box .jBox-closeButton:active path {
|
||||
fill: #b2b4b6;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
/* jBox: Notice */
|
||||
|
||||
.jBox-NoticeBorder .jBox-container {
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder .jBox-content,
|
||||
.jBox-NoticeBorder .jBox-title {
|
||||
padding-left: 26px;
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder.jBox-Notice-color .jBox-container {
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 #000;
|
||||
background: rgba(0, 0, 0, .92);
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder.jBox-Notice-color .jBox-container:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 8px;
|
||||
border-radius: 5px 0 0 5px;
|
||||
background-image: linear-gradient(45deg, rgba(255, 255, 255, .5) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .5) 50%, rgba(255, 255, 255, .5) 75%, transparent 75%, transparent);
|
||||
background-size: 18px 18px;
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder.jBox-Notice-red .jBox-container:after {
|
||||
background-color: #ee0000;
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder.jBox-Notice-green .jBox-container:after {
|
||||
background-color: #95cc2a;
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder.jBox-Notice-blue .jBox-container:after {
|
||||
background-color: #4cb4ff;
|
||||
}
|
||||
|
||||
.jBox-NoticeBorder.jBox-Notice-yellow .jBox-container:after {
|
||||
background-color: #ffba00;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
|
||||
/* Container */
|
||||
|
||||
.jBox-TooltipBorder .jBox-container {
|
||||
border-radius: 5px;
|
||||
border: 2px solid #52a2cb;
|
||||
}
|
||||
|
||||
/* Pointer */
|
||||
|
||||
.jBox-TooltipBorder .jBox-pointer:after {
|
||||
border: 2px solid #52a2cb;
|
||||
}
|
||||
|
||||
.jBox-TooltipBorder .jBox-pointer-top,
|
||||
.jBox-TooltipBorder .jBox-pointer-bottom {
|
||||
width: 34px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
.jBox-TooltipBorder .jBox-pointer-left,
|
||||
.jBox-TooltipBorder .jBox-pointer-right {
|
||||
width: 12px;
|
||||
height: 34px;
|
||||
}
|
||||
|
||||
/* Close button */
|
||||
|
||||
.jBox-TooltipBorder.jBox-closeButton-box:before {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
background: #52a2cb;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
|
||||
/* Container */
|
||||
|
||||
.jBox-TooltipDark .jBox-container {
|
||||
border-radius: 3px;
|
||||
background: #222;
|
||||
color: #fff;
|
||||
box-shadow: 0 0 6px rgba(0, 0, 0, .4);
|
||||
}
|
||||
|
||||
/* Pointer */
|
||||
|
||||
.jBox-TooltipDark .jBox-pointer:after {
|
||||
background: #222;
|
||||
}
|
||||
|
||||
/* Close button */
|
||||
|
||||
.jBox-TooltipDark .jBox-closeButton {
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.jBox-TooltipDark.jBox-closeButton-box:before {
|
||||
box-shadow: 0 0 6px rgba(0, 0, 0, .4);
|
||||
}
|
||||
|
||||
.jBox-TooltipDark.jBox-closeButton-box .jBox-closeButton path {
|
||||
fill: #d2d4d6;
|
||||
}
|
||||
|
||||
.jBox-TooltipDark.jBox-closeButton-box .jBox-closeButton:hover path {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.jBox-TooltipDark.jBox-closeButton-box .jBox-closeButton:active path {
|
||||
fill: #b2b4b6;
|
||||
}
|
|
@ -0,0 +1,340 @@
|
|||
/*!
|
||||
SerializeJSON jQuery plugin.
|
||||
https://github.com/marioizquierdo/jquery.serializeJSON
|
||||
version 2.8.1 (Dec, 2016)
|
||||
|
||||
Copyright (c) 2012, 2017 Mario Izquierdo
|
||||
Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
||||
*/
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof exports === 'object') { // Node/CommonJS
|
||||
var jQuery = require('jquery');
|
||||
module.exports = factory(jQuery);
|
||||
} else { // Browser globals (zepto supported)
|
||||
factory(window.jQuery || window.Zepto || window.$); // Zepto supported on browsers as well
|
||||
}
|
||||
|
||||
}(function ($) {
|
||||
"use strict";
|
||||
|
||||
// jQuery('form').serializeJSON()
|
||||
$.fn.serializeJSON = function (options) {
|
||||
var f, $form, opts, formAsArray, serializedObject, name, value, parsedValue, _obj, nameWithNoType, type, keys, skipFalsy;
|
||||
f = $.serializeJSON;
|
||||
$form = this; // NOTE: the set of matched elements is most likely a form, but it could also be a group of inputs
|
||||
opts = f.setupOpts(options); // calculate values for options {parseNumbers, parseBoolens, parseNulls, ...} with defaults
|
||||
|
||||
// Use native `serializeArray` function to get an array of {name, value} objects.
|
||||
formAsArray = $form.serializeArray();
|
||||
f.readCheckboxUncheckedValues(formAsArray, opts, $form); // add objects to the array from unchecked checkboxes if needed
|
||||
|
||||
// Convert the formAsArray into a serializedObject with nested keys
|
||||
serializedObject = {};
|
||||
$.each(formAsArray, function (i, obj) {
|
||||
name = obj.name; // original input name
|
||||
value = obj.value; // input value
|
||||
_obj = f.extractTypeAndNameWithNoType(name);
|
||||
nameWithNoType = _obj.nameWithNoType; // input name with no type (i.e. "foo:string" => "foo")
|
||||
type = _obj.type; // type defined from the input name in :type colon notation
|
||||
if (!type) type = f.attrFromInputWithName($form, name, 'data-value-type');
|
||||
f.validateType(name, type, opts); // make sure that the type is one of the valid types if defined
|
||||
|
||||
if (type !== 'skip') { // ignore inputs with type 'skip'
|
||||
keys = f.splitInputNameIntoKeysArray(nameWithNoType);
|
||||
parsedValue = f.parseValue(value, name, type, opts); // convert to string, number, boolean, null or customType
|
||||
|
||||
skipFalsy = !parsedValue && f.shouldSkipFalsy($form, name, nameWithNoType, type, opts); // ignore falsy inputs if specified
|
||||
if (!skipFalsy) {
|
||||
f.deepSet(serializedObject, keys, parsedValue, opts);
|
||||
}
|
||||
}
|
||||
});
|
||||
return serializedObject;
|
||||
};
|
||||
|
||||
// Use $.serializeJSON as namespace for the auxiliar functions
|
||||
// and to define defaults
|
||||
$.serializeJSON = {
|
||||
|
||||
defaultOptions: {
|
||||
checkboxUncheckedValue: undefined, // to include that value for unchecked checkboxes (instead of ignoring them)
|
||||
|
||||
parseNumbers: false, // convert values like "1", "-2.33" to 1, -2.33
|
||||
parseBooleans: false, // convert "true", "false" to true, false
|
||||
parseNulls: false, // convert "null" to null
|
||||
parseAll: false, // all of the above
|
||||
parseWithFunction: null, // to use custom parser, a function like: function(val){ return parsed_val; }
|
||||
|
||||
skipFalsyValuesForTypes: [], // skip serialization of falsy values for listed value types
|
||||
skipFalsyValuesForFields: [], // skip serialization of falsy values for listed field names
|
||||
|
||||
customTypes: {}, // override defaultTypes
|
||||
defaultTypes: {
|
||||
"string": function(str) { return String(str); },
|
||||
"number": function(str) { return Number(str); },
|
||||
"boolean": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1; },
|
||||
"null": function(str) { var falses = ["false", "null", "undefined", "", "0"]; return falses.indexOf(str) === -1 ? str : null; },
|
||||
"array": function(str) { return JSON.parse(str); },
|
||||
"object": function(str) { return JSON.parse(str); },
|
||||
"auto": function(str) { return $.serializeJSON.parseValue(str, null, null, {parseNumbers: true, parseBooleans: true, parseNulls: true}); }, // try again with something like "parseAll"
|
||||
"skip": null // skip is a special type that makes it easy to ignore elements
|
||||
},
|
||||
|
||||
useIntKeysAsArrayIndex: false // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]}
|
||||
},
|
||||
|
||||
// Merge option defaults into the options
|
||||
setupOpts: function(options) {
|
||||
var opt, validOpts, defaultOptions, optWithDefault, parseAll, f;
|
||||
f = $.serializeJSON;
|
||||
|
||||
if (options == null) { options = {}; } // options ||= {}
|
||||
defaultOptions = f.defaultOptions || {}; // defaultOptions
|
||||
|
||||
// Make sure that the user didn't misspell an option
|
||||
validOpts = ['checkboxUncheckedValue', 'parseNumbers', 'parseBooleans', 'parseNulls', 'parseAll', 'parseWithFunction', 'skipFalsyValuesForTypes', 'skipFalsyValuesForFields', 'customTypes', 'defaultTypes', 'useIntKeysAsArrayIndex']; // re-define because the user may override the defaultOptions
|
||||
for (opt in options) {
|
||||
if (validOpts.indexOf(opt) === -1) {
|
||||
throw new Error("serializeJSON ERROR: invalid option '" + opt + "'. Please use one of " + validOpts.join(', '));
|
||||
}
|
||||
}
|
||||
|
||||
// Helper to get the default value for this option if none is specified by the user
|
||||
optWithDefault = function(key) { return (options[key] !== false) && (options[key] !== '') && (options[key] || defaultOptions[key]); };
|
||||
|
||||
// Return computed options (opts to be used in the rest of the script)
|
||||
parseAll = optWithDefault('parseAll');
|
||||
return {
|
||||
checkboxUncheckedValue: optWithDefault('checkboxUncheckedValue'),
|
||||
|
||||
parseNumbers: parseAll || optWithDefault('parseNumbers'),
|
||||
parseBooleans: parseAll || optWithDefault('parseBooleans'),
|
||||
parseNulls: parseAll || optWithDefault('parseNulls'),
|
||||
parseWithFunction: optWithDefault('parseWithFunction'),
|
||||
|
||||
skipFalsyValuesForTypes: optWithDefault('skipFalsyValuesForTypes'),
|
||||
skipFalsyValuesForFields: optWithDefault('skipFalsyValuesForFields'),
|
||||
typeFunctions: $.extend({}, optWithDefault('defaultTypes'), optWithDefault('customTypes')),
|
||||
|
||||
useIntKeysAsArrayIndex: optWithDefault('useIntKeysAsArrayIndex')
|
||||
};
|
||||
},
|
||||
|
||||
// Given a string, apply the type or the relevant "parse" options, to return the parsed value
|
||||
parseValue: function(valStr, inputName, type, opts) {
|
||||
var f, parsedVal;
|
||||
f = $.serializeJSON;
|
||||
parsedVal = valStr; // if no parsing is needed, the returned value will be the same
|
||||
|
||||
if (opts.typeFunctions && type && opts.typeFunctions[type]) { // use a type if available
|
||||
parsedVal = opts.typeFunctions[type](valStr);
|
||||
} else if (opts.parseNumbers && f.isNumeric(valStr)) { // auto: number
|
||||
parsedVal = Number(valStr);
|
||||
} else if (opts.parseBooleans && (valStr === "true" || valStr === "false")) { // auto: boolean
|
||||
parsedVal = (valStr === "true");
|
||||
} else if (opts.parseNulls && valStr == "null") { // auto: null
|
||||
parsedVal = null;
|
||||
}
|
||||
if (opts.parseWithFunction && !type) { // custom parse function (apply after previous parsing options, but not if there's a specific type)
|
||||
parsedVal = opts.parseWithFunction(parsedVal, inputName);
|
||||
}
|
||||
|
||||
return parsedVal;
|
||||
},
|
||||
|
||||
isObject: function(obj) { return obj === Object(obj); }, // is it an Object?
|
||||
isUndefined: function(obj) { return obj === void 0; }, // safe check for undefined values
|
||||
isValidArrayIndex: function(val) { return /^[0-9]+$/.test(String(val)); }, // 1,2,3,4 ... are valid array indexes
|
||||
isNumeric: function(obj) { return obj - parseFloat(obj) >= 0; }, // taken from jQuery.isNumeric implementation. Not using jQuery.isNumeric to support old jQuery and Zepto versions
|
||||
|
||||
optionKeys: function(obj) { if (Object.keys) { return Object.keys(obj); } else { var key, keys = []; for(key in obj){ keys.push(key); } return keys;} }, // polyfill Object.keys to get option keys in IE<9
|
||||
|
||||
|
||||
// Fill the formAsArray object with values for the unchecked checkbox inputs,
|
||||
// using the same format as the jquery.serializeArray function.
|
||||
// The value of the unchecked values is determined from the opts.checkboxUncheckedValue
|
||||
// and/or the data-unchecked-value attribute of the inputs.
|
||||
readCheckboxUncheckedValues: function (formAsArray, opts, $form) {
|
||||
var selector, $uncheckedCheckboxes, $el, uncheckedValue, f, name;
|
||||
if (opts == null) { opts = {}; }
|
||||
f = $.serializeJSON;
|
||||
|
||||
selector = 'input[type=checkbox][name]:not(:checked):not([disabled])';
|
||||
$uncheckedCheckboxes = $form.find(selector).add($form.filter(selector));
|
||||
$uncheckedCheckboxes.each(function (i, el) {
|
||||
// Check data attr first, then the option
|
||||
$el = $(el);
|
||||
uncheckedValue = $el.attr('data-unchecked-value');
|
||||
if (uncheckedValue == null) {
|
||||
uncheckedValue = opts.checkboxUncheckedValue;
|
||||
}
|
||||
|
||||
// If there's an uncheckedValue, push it into the serialized formAsArray
|
||||
if (uncheckedValue != null) {
|
||||
if (el.name && el.name.indexOf("[][") !== -1) { // identify a non-supported
|
||||
throw new Error("serializeJSON ERROR: checkbox unchecked values are not supported on nested arrays of objects like '"+el.name+"'. See https://github.com/marioizquierdo/jquery.serializeJSON/issues/67");
|
||||
}
|
||||
formAsArray.push({name: el.name, value: uncheckedValue});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// Returns and object with properties {name_without_type, type} from a given name.
|
||||
// The type is null if none specified. Example:
|
||||
// "foo" => {nameWithNoType: "foo", type: null}
|
||||
// "foo:boolean" => {nameWithNoType: "foo", type: "boolean"}
|
||||
// "foo[bar]:null" => {nameWithNoType: "foo[bar]", type: "null"}
|
||||
extractTypeAndNameWithNoType: function(name) {
|
||||
var match;
|
||||
if (match = name.match(/(.*):([^:]+)$/)) {
|
||||
return {nameWithNoType: match[1], type: match[2]};
|
||||
} else {
|
||||
return {nameWithNoType: name, type: null};
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// Check if this input should be skipped when it has a falsy value,
|
||||
// depending on the options to skip values by name or type, and the data-skip-falsy attribute.
|
||||
shouldSkipFalsy: function($form, name, nameWithNoType, type, opts) {
|
||||
var f = $.serializeJSON;
|
||||
|
||||
var skipFromDataAttr = f.attrFromInputWithName($form, name, 'data-skip-falsy');
|
||||
if (skipFromDataAttr != null) {
|
||||
return skipFromDataAttr !== 'false'; // any value is true, except if explicitly using 'false'
|
||||
}
|
||||
|
||||
var optForFields = opts.skipFalsyValuesForFields;
|
||||
if (optForFields && (optForFields.indexOf(nameWithNoType) !== -1 || optForFields.indexOf(name) !== -1)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
var optForTypes = opts.skipFalsyValuesForTypes;
|
||||
if (type == null) type = 'string'; // assume fields with no type are targeted as string
|
||||
if (optForTypes && optForTypes.indexOf(type) !== -1) {
|
||||
return true
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
// Finds the first input in $form with this name, and get the given attr from it.
|
||||
// Returns undefined if no input or no attribute was found.
|
||||
attrFromInputWithName: function($form, name, attrName) {
|
||||
var escapedName, selector, $input, attrValue;
|
||||
escapedName = name.replace(/(:|\.|\[|\]|\s)/g,'\\$1'); // every non-standard character need to be escaped by \\
|
||||
selector = '[name="' + escapedName + '"]';
|
||||
$input = $form.find(selector).add($form.filter(selector)); // NOTE: this returns only the first $input element if multiple are matched with the same name (i.e. an "array[]"). So, arrays with different element types specified through the data-value-type attr is not supported.
|
||||
return $input.attr(attrName);
|
||||
},
|
||||
|
||||
// Raise an error if the type is not recognized.
|
||||
validateType: function(name, type, opts) {
|
||||
var validTypes, f;
|
||||
f = $.serializeJSON;
|
||||
validTypes = f.optionKeys(opts ? opts.typeFunctions : f.defaultOptions.defaultTypes);
|
||||
if (!type || validTypes.indexOf(type) !== -1) {
|
||||
return true;
|
||||
} else {
|
||||
throw new Error("serializeJSON ERROR: Invalid type " + type + " found in input name '" + name + "', please use one of " + validTypes.join(', '));
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// Split the input name in programatically readable keys.
|
||||
// Examples:
|
||||
// "foo" => ['foo']
|
||||
// "[foo]" => ['foo']
|
||||
// "foo[inn][bar]" => ['foo', 'inn', 'bar']
|
||||
// "foo[inn[bar]]" => ['foo', 'inn', 'bar']
|
||||
// "foo[inn][arr][0]" => ['foo', 'inn', 'arr', '0']
|
||||
// "arr[][val]" => ['arr', '', 'val']
|
||||
splitInputNameIntoKeysArray: function(nameWithNoType) {
|
||||
var keys, f;
|
||||
f = $.serializeJSON;
|
||||
keys = nameWithNoType.split('['); // split string into array
|
||||
keys = $.map(keys, function (key) { return key.replace(/\]/g, ''); }); // remove closing brackets
|
||||
if (keys[0] === '') { keys.shift(); } // ensure no opening bracket ("[foo][inn]" should be same as "foo[inn]")
|
||||
return keys;
|
||||
},
|
||||
|
||||
// Set a value in an object or array, using multiple keys to set in a nested object or array:
|
||||
//
|
||||
// deepSet(obj, ['foo'], v) // obj['foo'] = v
|
||||
// deepSet(obj, ['foo', 'inn'], v) // obj['foo']['inn'] = v // Create the inner obj['foo'] object, if needed
|
||||
// deepSet(obj, ['foo', 'inn', '123'], v) // obj['foo']['arr']['123'] = v //
|
||||
//
|
||||
// deepSet(obj, ['0'], v) // obj['0'] = v
|
||||
// deepSet(arr, ['0'], v, {useIntKeysAsArrayIndex: true}) // arr[0] = v
|
||||
// deepSet(arr, [''], v) // arr.push(v)
|
||||
// deepSet(obj, ['arr', ''], v) // obj['arr'].push(v)
|
||||
//
|
||||
// arr = [];
|
||||
// deepSet(arr, ['', v] // arr => [v]
|
||||
// deepSet(arr, ['', 'foo'], v) // arr => [v, {foo: v}]
|
||||
// deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}]
|
||||
// deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}, {bar: v}]
|
||||
//
|
||||
deepSet: function (o, keys, value, opts) {
|
||||
var key, nextKey, tail, lastIdx, lastVal, f;
|
||||
if (opts == null) { opts = {}; }
|
||||
f = $.serializeJSON;
|
||||
if (f.isUndefined(o)) { throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined"); }
|
||||
if (!keys || keys.length === 0) { throw new Error("ArgumentError: param 'keys' expected to be an array with least one element"); }
|
||||
|
||||
key = keys[0];
|
||||
|
||||
// Only one key, then it's not a deepSet, just assign the value.
|
||||
if (keys.length === 1) {
|
||||
if (key === '') {
|
||||
o.push(value); // '' is used to push values into the array (assume o is an array)
|
||||
} else {
|
||||
o[key] = value; // other keys can be used as object keys or array indexes
|
||||
}
|
||||
|
||||
// With more keys is a deepSet. Apply recursively.
|
||||
} else {
|
||||
nextKey = keys[1];
|
||||
|
||||
// '' is used to push values into the array,
|
||||
// with nextKey, set the value into the same object, in object[nextKey].
|
||||
// Covers the case of ['', 'foo'] and ['', 'var'] to push the object {foo, var}, and the case of nested arrays.
|
||||
if (key === '') {
|
||||
lastIdx = o.length - 1; // asume o is array
|
||||
lastVal = o[lastIdx];
|
||||
if (f.isObject(lastVal) && (f.isUndefined(lastVal[nextKey]) || keys.length > 2)) { // if nextKey is not present in the last object element, or there are more keys to deep set
|
||||
key = lastIdx; // then set the new value in the same object element
|
||||
} else {
|
||||
key = lastIdx + 1; // otherwise, point to set the next index in the array
|
||||
}
|
||||
}
|
||||
|
||||
// '' is used to push values into the array "array[]"
|
||||
if (nextKey === '') {
|
||||
if (f.isUndefined(o[key]) || !$.isArray(o[key])) {
|
||||
o[key] = []; // define (or override) as array to push values
|
||||
}
|
||||
} else {
|
||||
if (opts.useIntKeysAsArrayIndex && f.isValidArrayIndex(nextKey)) { // if 1, 2, 3 ... then use an array, where nextKey is the index
|
||||
if (f.isUndefined(o[key]) || !$.isArray(o[key])) {
|
||||
o[key] = []; // define (or override) as array, to insert values using int keys as array indexes
|
||||
}
|
||||
} else { // for anything else, use an object, where nextKey is going to be the attribute name
|
||||
if (f.isUndefined(o[key]) || !f.isObject(o[key])) {
|
||||
o[key] = {}; // define (or override) as object, to set nested properties
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Recursively set the inner object
|
||||
tail = keys.slice(1);
|
||||
f.deepSet(o[key], tail, value, opts);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}));
|
10
src/main/webapp/static/plugins/jquery.serializeJSON/2.8.1/jquery.serializejson.min.js
vendored
Normal file
8
src/main/webapp/static/plugins/jquery.serializeObject/2.5.0/jquery.serialize-object.min.js
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
/**
|
||||
* jQuery serializeObject
|
||||
* @copyright 2014, macek <paulmacek@gmail.com>
|
||||
* @link https://github.com/macek/jquery-serialize-object
|
||||
* @license BSD
|
||||
* @version 2.5.0
|
||||
*/
|
||||
!function(e,i){if("function"==typeof define&&define.amd)define(["exports","jquery"],function(e,r){return i(e,r)});else if("undefined"!=typeof exports){var r=require("jquery");i(exports,r)}else i(e,e.jQuery||e.Zepto||e.ender||e.$)}(this,function(e,i){function r(e,r){function n(e,i,r){return e[i]=r,e}function a(e,i){for(var r,a=e.match(t.key);void 0!==(r=a.pop());)if(t.push.test(r)){var u=s(e.replace(/\[\]$/,""));i=n([],u,i)}else t.fixed.test(r)?i=n([],r,i):t.named.test(r)&&(i=n({},r,i));return i}function s(e){return void 0===h[e]&&(h[e]=0),h[e]++}function u(e){switch(i('[name="'+e.name+'"]',r).attr("type")){case"checkbox":return"on"===e.value?!0:e.value;default:return e.value}}function f(i){if(!t.validate.test(i.name))return this;var r=a(i.name,u(i));return l=e.extend(!0,l,r),this}function d(i){if(!e.isArray(i))throw new Error("formSerializer.addPairs expects an Array");for(var r=0,t=i.length;t>r;r++)this.addPair(i[r]);return this}function o(){return l}function c(){return JSON.stringify(o())}var l={},h={};this.addPair=f,this.addPairs=d,this.serialize=o,this.serializeJSON=c}var t={validate:/^[a-z_][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,key:/[a-z0-9_]+|(?=\[\])/gi,push:/^$/,fixed:/^\d+$/,named:/^[a-z0-9_]+$/i};return r.patterns=t,r.serializeObject=function(){return new r(i,this).addPairs(this.serializeArray()).serialize()},r.serializeJSON=function(){return new r(i,this).addPairs(this.serializeArray()).serializeJSON()},"undefined"!=typeof i.fn&&(i.fn.serializeObject=r.serializeObject,i.fn.serializeJSON=r.serializeJSON),e.FormSerializer=r,r});
|
After Width: | Height: | Size: 697 B |
After Width: | Height: | Size: 689 B |
|
@ -0,0 +1,159 @@
|
|||
/*
|
||||
[Leo.C, Studio] (C)2004 - 2008
|
||||
|
||||
$Hanization: LeoChung $
|
||||
$E-Mail: who@imll.net $
|
||||
$HomePage: http://imll.net $
|
||||
$Date: 2008/11/8 18:02 $
|
||||
*/
|
||||
/*
|
||||
A simple class for displaying file information and progress
|
||||
Note: This is a demonstration only and not part of SWFUpload.
|
||||
Note: Some have had problems adapting this class in IE7. It may not be suitable for your application.
|
||||
*/
|
||||
|
||||
// Constructor
|
||||
// file is a SWFUpload file object
|
||||
// targetID is the HTML element id attribute that the FileProgress HTML structure will be added to.
|
||||
// Instantiating a new FileProgress object with an existing file will reuse/update the existing DOM elements
|
||||
function FileProgress(file, targetID) {
|
||||
this.fileProgressID = file.id;
|
||||
|
||||
this.opacity = 100;
|
||||
this.height = 0;
|
||||
|
||||
this.fileProgressWrapper = document.getElementById(this.fileProgressID);
|
||||
if (!this.fileProgressWrapper) {
|
||||
this.fileProgressWrapper = document.createElement("div");
|
||||
this.fileProgressWrapper.className = "progressWrapper";
|
||||
this.fileProgressWrapper.id = this.fileProgressID;
|
||||
|
||||
this.fileProgressElement = document.createElement("div");
|
||||
this.fileProgressElement.className = "progressContainer";
|
||||
|
||||
var progressCancel = document.createElement("a");
|
||||
progressCancel.className = "progressCancel";
|
||||
progressCancel.href = "#";
|
||||
progressCancel.style.visibility = "hidden";
|
||||
progressCancel.appendChild(document.createTextNode(" "));
|
||||
|
||||
var progressText = document.createElement("div");
|
||||
progressText.className = "progressName";
|
||||
progressText.appendChild(document.createTextNode(file.name));
|
||||
|
||||
var progressBar = document.createElement("div");
|
||||
progressBar.className = "progressBarInProgress";
|
||||
|
||||
var progressStatus = document.createElement("div");
|
||||
progressStatus.className = "progressBarStatus";
|
||||
progressStatus.innerHTML = " ";
|
||||
|
||||
this.fileProgressElement.appendChild(progressCancel);
|
||||
this.fileProgressElement.appendChild(progressText);
|
||||
this.fileProgressElement.appendChild(progressStatus);
|
||||
this.fileProgressElement.appendChild(progressBar);
|
||||
|
||||
this.fileProgressWrapper.appendChild(this.fileProgressElement);
|
||||
|
||||
document.getElementById(targetID).appendChild(this.fileProgressWrapper);
|
||||
} else {
|
||||
this.fileProgressElement = this.fileProgressWrapper.firstChild;
|
||||
}
|
||||
|
||||
this.height = this.fileProgressWrapper.offsetHeight;
|
||||
|
||||
}
|
||||
FileProgress.prototype.setProgress = function (percentage) {
|
||||
this.fileProgressElement.className = "progressContainer green";
|
||||
this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
|
||||
this.fileProgressElement.childNodes[3].style.width = percentage + "%";
|
||||
};
|
||||
FileProgress.prototype.setComplete = function () {
|
||||
this.fileProgressElement.className = "progressContainer blue";
|
||||
this.fileProgressElement.childNodes[3].className = "progressBarComplete";
|
||||
this.fileProgressElement.childNodes[3].style.width = "";
|
||||
|
||||
var oSelf = this;
|
||||
setTimeout(function () {
|
||||
oSelf.disappear();
|
||||
}, 10000);
|
||||
};
|
||||
FileProgress.prototype.setError = function () {
|
||||
this.fileProgressElement.className = "progressContainer red";
|
||||
this.fileProgressElement.childNodes[3].className = "progressBarError";
|
||||
this.fileProgressElement.childNodes[3].style.width = "";
|
||||
|
||||
var oSelf = this;
|
||||
setTimeout(function () {
|
||||
oSelf.disappear();
|
||||
}, 5000);
|
||||
};
|
||||
FileProgress.prototype.setCancelled = function () {
|
||||
this.fileProgressElement.className = "progressContainer";
|
||||
this.fileProgressElement.childNodes[3].className = "progressBarError";
|
||||
this.fileProgressElement.childNodes[3].style.width = "";
|
||||
|
||||
var oSelf = this;
|
||||
setTimeout(function () {
|
||||
oSelf.disappear();
|
||||
}, 2000);
|
||||
};
|
||||
FileProgress.prototype.setStatus = function (status) {
|
||||
this.fileProgressElement.childNodes[2].innerHTML = status;
|
||||
};
|
||||
|
||||
// Show/Hide the cancel button
|
||||
FileProgress.prototype.toggleCancel = function (show, swfUploadInstance) {
|
||||
this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
|
||||
if (swfUploadInstance) {
|
||||
var fileID = this.fileProgressID;
|
||||
this.fileProgressElement.childNodes[0].onclick = function () {
|
||||
swfUploadInstance.cancelUpload(fileID);
|
||||
return false;
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
// Fades out and clips away the FileProgress box.
|
||||
FileProgress.prototype.disappear = function () {
|
||||
|
||||
var reduceOpacityBy = 15;
|
||||
var reduceHeightBy = 4;
|
||||
var rate = 30; // 15 fps
|
||||
|
||||
if (this.opacity > 0) {
|
||||
this.opacity -= reduceOpacityBy;
|
||||
if (this.opacity < 0) {
|
||||
this.opacity = 0;
|
||||
}
|
||||
|
||||
if (this.fileProgressWrapper.filters) {
|
||||
try {
|
||||
this.fileProgressWrapper.filters.item("DXImageTransform.Microsoft.Alpha").opacity = this.opacity;
|
||||
} catch (e) {
|
||||
// If it is not set initially, the browser will throw an error. This will set it if it is not set yet.
|
||||
this.fileProgressWrapper.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + this.opacity + ")";
|
||||
}
|
||||
} else {
|
||||
this.fileProgressWrapper.style.opacity = this.opacity / 100;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.height > 0) {
|
||||
this.height -= reduceHeightBy;
|
||||
if (this.height < 0) {
|
||||
this.height = 0;
|
||||
}
|
||||
|
||||
this.fileProgressWrapper.style.height = this.height + "px";
|
||||
}
|
||||
|
||||
if (this.height > 0 || this.opacity > 0) {
|
||||
var oSelf = this;
|
||||
setTimeout(function () {
|
||||
oSelf.disappear();
|
||||
}, rate);
|
||||
} else {
|
||||
this.fileProgressWrapper.style.display = "none";
|
||||
}
|
||||
};
|
|
@ -0,0 +1,185 @@
|
|||
/*
|
||||
[Leo.C, Studio] (C)2004 - 2008
|
||||
|
||||
$Hanization: LeoChung $
|
||||
$E-Mail: who@imll.net $
|
||||
$HomePage: http://imll.net $
|
||||
$Date: 2008/11/8 18:02 $
|
||||
*/
|
||||
/* Demo Note: This demo uses a FileProgress class that handles the UI for displaying the file name and percent complete.
|
||||
The FileProgress class is not part of SWFUpload.
|
||||
*/
|
||||
|
||||
|
||||
/* **********************
|
||||
Event Handlers
|
||||
These are my custom event handlers to make my
|
||||
web application behave the way I went when SWFUpload
|
||||
completes different tasks. These aren't part of the SWFUpload
|
||||
package. They are part of my application. Without these none
|
||||
of the actions SWFUpload makes will show up in my application.
|
||||
********************** */
|
||||
function fileQueued(file) {
|
||||
try {
|
||||
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
||||
progress.setStatus("正在等待...");
|
||||
progress.toggleCancel(true, this);
|
||||
|
||||
} catch (ex) {
|
||||
this.debug(ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function fileQueueError(file, errorCode, message) {
|
||||
try {
|
||||
if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
|
||||
alert("您正在上传的文件队列过多.\n" + (message === 0 ? "您已达到上传限制" : "您最多能选择 " + (message > 1 ? "上传 " + message + " 文件." : "一个文件.")));
|
||||
return;
|
||||
}
|
||||
|
||||
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
||||
progress.setError();
|
||||
progress.toggleCancel(false);
|
||||
|
||||
switch (errorCode) {
|
||||
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
|
||||
progress.setStatus("文件尺寸过大.");
|
||||
this.debug("错误代码: 文件尺寸过大, 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
|
||||
progress.setStatus("无法上传零字节文件.");
|
||||
this.debug("错误代码: 零字节文件, 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
|
||||
progress.setStatus("不支持的文件类型.");
|
||||
this.debug("错误代码: 不支持的文件类型, 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
default:
|
||||
if (file !== null) {
|
||||
progress.setStatus("未处理的错误");
|
||||
}
|
||||
this.debug("错误代码: " + errorCode + ", 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
}
|
||||
} catch (ex) {
|
||||
this.debug(ex);
|
||||
}
|
||||
}
|
||||
|
||||
function fileDialogComplete(numFilesSelected, numFilesQueued) {
|
||||
try {
|
||||
if (numFilesSelected > 0) {
|
||||
document.getElementById(this.customSettings.cancelButtonId).disabled = false;
|
||||
}
|
||||
|
||||
/* I want auto start the upload and I can do that here */
|
||||
this.startUpload();
|
||||
} catch (ex) {
|
||||
this.debug(ex);
|
||||
}
|
||||
}
|
||||
|
||||
function uploadStart(file) {
|
||||
try {
|
||||
/* I don't want to do any file validation or anything, I'll just update the UI and
|
||||
return true to indicate that the upload should start.
|
||||
It's important to update the UI here because in Linux no uploadProgress events are called. The best
|
||||
we can do is say we are uploading.
|
||||
*/
|
||||
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
||||
progress.setStatus("正在上传...");
|
||||
progress.toggleCancel(true, this);
|
||||
}
|
||||
catch (ex) {}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function uploadProgress(file, bytesLoaded, bytesTotal) {
|
||||
try {
|
||||
var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
|
||||
|
||||
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
||||
progress.setProgress(percent);
|
||||
progress.setStatus("正在上传...");
|
||||
} catch (ex) {
|
||||
this.debug(ex);
|
||||
}
|
||||
}
|
||||
|
||||
function uploadSuccess(file, serverData) {
|
||||
try {
|
||||
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
||||
progress.setComplete();
|
||||
progress.setStatus("上传成功");
|
||||
progress.toggleCancel(false);
|
||||
|
||||
} catch (ex) {
|
||||
this.debug(ex);
|
||||
}
|
||||
}
|
||||
|
||||
function uploadError(file, errorCode, message) {
|
||||
try {
|
||||
var progress = new FileProgress(file, this.customSettings.progressTarget);
|
||||
progress.setError();
|
||||
progress.toggleCancel(false);
|
||||
|
||||
switch (errorCode) {
|
||||
case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
|
||||
progress.setStatus("上传错误: " + message);
|
||||
this.debug("错误代码: HTTP错误, 文件名: " + file.name + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
|
||||
progress.setStatus("上传失败");
|
||||
this.debug("错误代码: 上传失败, 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.IO_ERROR:
|
||||
progress.setStatus("服务器 (IO) 错误");
|
||||
this.debug("错误代码: IO 错误, 文件名: " + file.name + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
|
||||
progress.setStatus("安全错误");
|
||||
this.debug("错误代码: 安全错误, 文件名: " + file.name + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
|
||||
progress.setStatus("超出上传限制.");
|
||||
this.debug("错误代码: 超出上传限制, 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
|
||||
progress.setStatus("无法验证. 跳过上传.");
|
||||
this.debug("错误代码: 文件验证失败, 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
|
||||
// If there aren't any files left (they were all cancelled) disable the cancel button
|
||||
if (this.getStats().files_queued === 0) {
|
||||
document.getElementById(this.customSettings.cancelButtonId).disabled = true;
|
||||
}
|
||||
progress.setStatus("取消");
|
||||
progress.setCancelled();
|
||||
break;
|
||||
case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
|
||||
progress.setStatus("停止");
|
||||
break;
|
||||
default:
|
||||
progress.setStatus("未处理的错误: " + errorCode);
|
||||
this.debug("错误代码: " + errorCode + ", 文件名: " + file.name + ", 文件尺寸: " + file.size + ", 信息: " + message);
|
||||
break;
|
||||
}
|
||||
} catch (ex) {
|
||||
this.debug(ex);
|
||||
}
|
||||
}
|
||||
|
||||
function uploadComplete(file) {
|
||||
if (this.getStats().files_queued === 0) {
|
||||
document.getElementById(this.customSettings.cancelButtonId).disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
// This event comes from the Queue Plugin
|
||||
function queueComplete(numFilesUploaded) {
|
||||
var status = document.getElementById("divStatus");
|
||||
status.innerHTML = numFilesUploaded + " 个文件" + (numFilesUploaded === 1 ? "" : "s") + "已上传.";
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* SWFUpload jQuery Plugin v1.0.0
|
||||
*
|
||||
* Copyright (c) 2009 Adam Royle
|
||||
* Licensed under the MIT license.
|
||||
*
|
||||
*/
|
||||
|
||||
(function($){
|
||||
|
||||
var defaultHandlers = ['swfupload_loaded_handler','file_queued_handler','file_queue_error_handler','file_dialog_start_handler','file_dialog_complete_handler','upload_start_handler','upload_progress_handler','upload_error_handler','upload_success_handler','upload_complete_handler','queue_complete_handler'];
|
||||
var additionalHandlers = [];
|
||||
|
||||
$.fn.swfupload = function(){
|
||||
var args = $.makeArray(arguments);
|
||||
return this.each(function(){
|
||||
var swfu;
|
||||
if (args.length == 1 && typeof(args[0]) == 'object') {
|
||||
swfu = $(this).data('__swfu');
|
||||
if (!swfu) {
|
||||
var settings = args[0];
|
||||
var $magicUploadControl = $(this);
|
||||
var handlers = [];
|
||||
$.merge(handlers, defaultHandlers);
|
||||
$.merge(handlers, additionalHandlers);
|
||||
$.each(handlers, function(i, v){
|
||||
var eventName = v.replace(/_handler$/, '').replace(/_([a-z])/g, function(){ return arguments[1].toUpperCase(); });
|
||||
settings[v] = function() {
|
||||
var event = $.Event(eventName);
|
||||
$magicUploadControl.trigger(event, $.makeArray(arguments));
|
||||
return !event.isDefaultPrevented();
|
||||
};
|
||||
});
|
||||
$(this).data('__swfu', new SWFUpload(settings));
|
||||
}
|
||||
} else if (args.length > 0 && typeof(args[0]) == 'string') {
|
||||
var methodName = args.shift();
|
||||
swfu = $(this).data('__swfu');
|
||||
if (swfu && swfu[methodName]) {
|
||||
swfu[methodName].apply(swfu, args);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$.swfupload = {
|
||||
additionalHandlers: function() {
|
||||
if (arguments.length === 0) {
|
||||
return additionalHandlers.slice();
|
||||
} else {
|
||||
$(arguments).each(function(i, v){
|
||||
$.merge(additionalHandlers, $.makeArray(v));
|
||||
});
|
||||
}
|
||||
},
|
||||
defaultHandlers: function() {
|
||||
return defaultHandlers.slice();
|
||||
},
|
||||
getInstance: function(el) {
|
||||
return $(el).data('__swfu');
|
||||
}
|
||||
};
|
||||
|
||||
})(jQuery);
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,980 @@
|
|||
/**
|
||||
* SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
|
||||
*
|
||||
* mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/
|
||||
*
|
||||
* SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
* SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* ******************* */
|
||||
/* Constructor & Init */
|
||||
/* ******************* */
|
||||
var SWFUpload;
|
||||
|
||||
if (SWFUpload == undefined) {
|
||||
SWFUpload = function (settings) {
|
||||
this.initSWFUpload(settings);
|
||||
};
|
||||
}
|
||||
|
||||
SWFUpload.prototype.initSWFUpload = function (settings) {
|
||||
try {
|
||||
this.customSettings = {}; // A container where developers can place their own settings associated with this instance.
|
||||
this.settings = settings;
|
||||
this.eventQueue = [];
|
||||
this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
|
||||
this.movieElement = null;
|
||||
|
||||
|
||||
// Setup global control tracking
|
||||
SWFUpload.instances[this.movieName] = this;
|
||||
|
||||
// Load the settings. Load the Flash movie.
|
||||
this.initSettings();
|
||||
this.loadFlash();
|
||||
this.displayDebugInfo();
|
||||
} catch (ex) {
|
||||
delete SWFUpload.instances[this.movieName];
|
||||
throw ex;
|
||||
}
|
||||
};
|
||||
|
||||
/* *************** */
|
||||
/* Static Members */
|
||||
/* *************** */
|
||||
SWFUpload.instances = {};
|
||||
SWFUpload.movieCount = 0;
|
||||
SWFUpload.version = "2.2.0 2009-03-25";
|
||||
SWFUpload.QUEUE_ERROR = {
|
||||
QUEUE_LIMIT_EXCEEDED : -100,
|
||||
FILE_EXCEEDS_SIZE_LIMIT : -110,
|
||||
ZERO_BYTE_FILE : -120,
|
||||
INVALID_FILETYPE : -130
|
||||
};
|
||||
SWFUpload.UPLOAD_ERROR = {
|
||||
HTTP_ERROR : -200,
|
||||
MISSING_UPLOAD_URL : -210,
|
||||
IO_ERROR : -220,
|
||||
SECURITY_ERROR : -230,
|
||||
UPLOAD_LIMIT_EXCEEDED : -240,
|
||||
UPLOAD_FAILED : -250,
|
||||
SPECIFIED_FILE_ID_NOT_FOUND : -260,
|
||||
FILE_VALIDATION_FAILED : -270,
|
||||
FILE_CANCELLED : -280,
|
||||
UPLOAD_STOPPED : -290
|
||||
};
|
||||
SWFUpload.FILE_STATUS = {
|
||||
QUEUED : -1,
|
||||
IN_PROGRESS : -2,
|
||||
ERROR : -3,
|
||||
COMPLETE : -4,
|
||||
CANCELLED : -5
|
||||
};
|
||||
SWFUpload.BUTTON_ACTION = {
|
||||
SELECT_FILE : -100,
|
||||
SELECT_FILES : -110,
|
||||
START_UPLOAD : -120
|
||||
};
|
||||
SWFUpload.CURSOR = {
|
||||
ARROW : -1,
|
||||
HAND : -2
|
||||
};
|
||||
SWFUpload.WINDOW_MODE = {
|
||||
WINDOW : "window",
|
||||
TRANSPARENT : "transparent",
|
||||
OPAQUE : "opaque"
|
||||
};
|
||||
|
||||
// Private: takes a URL, determines if it is relative and converts to an absolute URL
|
||||
// using the current site. Only processes the URL if it can, otherwise returns the URL untouched
|
||||
SWFUpload.completeURL = function(url) {
|
||||
if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//)) {
|
||||
return url;
|
||||
}
|
||||
|
||||
var currentURL = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : "");
|
||||
|
||||
var indexSlash = window.location.pathname.lastIndexOf("/");
|
||||
if (indexSlash <= 0) {
|
||||
path = "/";
|
||||
} else {
|
||||
path = window.location.pathname.substr(0, indexSlash) + "/";
|
||||
}
|
||||
|
||||
return /*currentURL +*/ path + url;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/* ******************** */
|
||||
/* Instance Members */
|
||||
/* ******************** */
|
||||
|
||||
// Private: initSettings ensures that all the
|
||||
// settings are set, getting a default value if one was not assigned.
|
||||
SWFUpload.prototype.initSettings = function () {
|
||||
this.ensureDefault = function (settingName, defaultValue) {
|
||||
this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];
|
||||
};
|
||||
|
||||
// Upload backend settings
|
||||
this.ensureDefault("upload_url", "");
|
||||
this.ensureDefault("preserve_relative_urls", false);
|
||||
this.ensureDefault("file_post_name", "Filedata");
|
||||
this.ensureDefault("post_params", {});
|
||||
this.ensureDefault("use_query_string", false);
|
||||
this.ensureDefault("requeue_on_error", false);
|
||||
this.ensureDefault("http_success", []);
|
||||
this.ensureDefault("assume_success_timeout", 0);
|
||||
|
||||
// File Settings
|
||||
this.ensureDefault("file_types", "*.*");
|
||||
this.ensureDefault("file_types_description", "All Files");
|
||||
this.ensureDefault("file_size_limit", 0); // Default zero means "unlimited"
|
||||
this.ensureDefault("file_upload_limit", 0);
|
||||
this.ensureDefault("file_queue_limit", 0);
|
||||
|
||||
// Flash Settings
|
||||
this.ensureDefault("flash_url", "swfupload.swf");
|
||||
this.ensureDefault("prevent_swf_caching", true);
|
||||
|
||||
// Button Settings
|
||||
this.ensureDefault("button_image_url", "");
|
||||
this.ensureDefault("button_width", 1);
|
||||
this.ensureDefault("button_height", 1);
|
||||
this.ensureDefault("button_text", "");
|
||||
this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;");
|
||||
this.ensureDefault("button_text_top_padding", 0);
|
||||
this.ensureDefault("button_text_left_padding", 0);
|
||||
this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
|
||||
this.ensureDefault("button_disabled", false);
|
||||
this.ensureDefault("button_placeholder_id", "");
|
||||
this.ensureDefault("button_placeholder", null);
|
||||
this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW);
|
||||
this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW);
|
||||
|
||||
// Debug Settings
|
||||
this.ensureDefault("debug", false);
|
||||
this.settings.debug_enabled = this.settings.debug; // Here to maintain v2 API
|
||||
|
||||
// Event Handlers
|
||||
this.settings.return_upload_start_handler = this.returnUploadStart;
|
||||
this.ensureDefault("swfupload_loaded_handler", null);
|
||||
this.ensureDefault("file_dialog_start_handler", null);
|
||||
this.ensureDefault("file_queued_handler", null);
|
||||
this.ensureDefault("file_queue_error_handler", null);
|
||||
this.ensureDefault("file_dialog_complete_handler", null);
|
||||
|
||||
this.ensureDefault("upload_start_handler", null);
|
||||
this.ensureDefault("upload_progress_handler", null);
|
||||
this.ensureDefault("upload_error_handler", null);
|
||||
this.ensureDefault("upload_success_handler", null);
|
||||
this.ensureDefault("upload_complete_handler", null);
|
||||
|
||||
this.ensureDefault("debug_handler", this.debugMessage);
|
||||
|
||||
this.ensureDefault("custom_settings", {});
|
||||
|
||||
// Other settings
|
||||
this.customSettings = this.settings.custom_settings;
|
||||
|
||||
// Update the flash url if needed
|
||||
if (!!this.settings.prevent_swf_caching) {
|
||||
this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime();
|
||||
}
|
||||
|
||||
if (!this.settings.preserve_relative_urls) {
|
||||
//this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url); // Don't need to do this one since flash doesn't look at it
|
||||
this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);
|
||||
this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url);
|
||||
}
|
||||
|
||||
delete this.ensureDefault;
|
||||
};
|
||||
|
||||
// Private: loadFlash replaces the button_placeholder element with the flash movie.
|
||||
SWFUpload.prototype.loadFlash = function () {
|
||||
var targetElement, tempParent;
|
||||
|
||||
// Make sure an element with the ID we are going to use doesn't already exist
|
||||
if (document.getElementById(this.movieName) !== null) {
|
||||
throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
|
||||
}
|
||||
|
||||
// Get the element where we will be placing the flash movie
|
||||
targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder;
|
||||
|
||||
if (targetElement == undefined) {
|
||||
throw "Could not find the placeholder element: " + this.settings.button_placeholder_id;
|
||||
}
|
||||
|
||||
// Append the container and load the flash
|
||||
tempParent = document.createElement("div");
|
||||
tempParent.innerHTML = this.getFlashHTML(); // Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
|
||||
targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);
|
||||
|
||||
// Fix IE Flash/Form bug
|
||||
if (window[this.movieName] == undefined) {
|
||||
window[this.movieName] = this.getMovieElement();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Private: getFlashHTML generates the object tag needed to embed the flash in to the document
|
||||
SWFUpload.prototype.getFlashHTML = function () {
|
||||
// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
|
||||
return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
|
||||
'<param name="wmode" value="', this.settings.button_window_mode, '" />',
|
||||
'<param name="movie" value="', this.settings.flash_url, '" />',
|
||||
'<param name="quality" value="high" />',
|
||||
'<param name="menu" value="false" />',
|
||||
'<param name="allowScriptAccess" value="always" />',
|
||||
'<param name="flashvars" value="' + this.getFlashVars() + '" />',
|
||||
'</object>'].join("");
|
||||
};
|
||||
|
||||
// Private: getFlashVars builds the parameter string that will be passed
|
||||
// to flash in the flashvars param.
|
||||
SWFUpload.prototype.getFlashVars = function () {
|
||||
// Build a string from the post param object
|
||||
var paramString = this.buildParamString();
|
||||
var httpSuccessString = this.settings.http_success.join(",");
|
||||
|
||||
// Build the parameter string
|
||||
return ["movieName=", encodeURIComponent(this.movieName),
|
||||
"&uploadURL=", encodeURIComponent(this.settings.upload_url),
|
||||
"&useQueryString=", encodeURIComponent(this.settings.use_query_string),
|
||||
"&requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
|
||||
"&httpSuccess=", encodeURIComponent(httpSuccessString),
|
||||
"&assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout),
|
||||
"&params=", encodeURIComponent(paramString),
|
||||
"&filePostName=", encodeURIComponent(this.settings.file_post_name),
|
||||
"&fileTypes=", encodeURIComponent(this.settings.file_types),
|
||||
"&fileTypesDescription=", encodeURIComponent(this.settings.file_types_description),
|
||||
"&fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit),
|
||||
"&fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit),
|
||||
"&fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit),
|
||||
"&debugEnabled=", encodeURIComponent(this.settings.debug_enabled),
|
||||
"&buttonImageURL=", encodeURIComponent(this.settings.button_image_url),
|
||||
"&buttonWidth=", encodeURIComponent(this.settings.button_width),
|
||||
"&buttonHeight=", encodeURIComponent(this.settings.button_height),
|
||||
"&buttonText=", encodeURIComponent(this.settings.button_text),
|
||||
"&buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding),
|
||||
"&buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
|
||||
"&buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
|
||||
"&buttonAction=", encodeURIComponent(this.settings.button_action),
|
||||
"&buttonDisabled=", encodeURIComponent(this.settings.button_disabled),
|
||||
"&buttonCursor=", encodeURIComponent(this.settings.button_cursor)
|
||||
].join("");
|
||||
};
|
||||
|
||||
// Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload
|
||||
// The element is cached after the first lookup
|
||||
SWFUpload.prototype.getMovieElement = function () {
|
||||
if (this.movieElement == undefined) {
|
||||
this.movieElement = document.getElementById(this.movieName);
|
||||
}
|
||||
|
||||
if (this.movieElement === null) {
|
||||
throw "Could not find Flash element";
|
||||
}
|
||||
|
||||
return this.movieElement;
|
||||
};
|
||||
|
||||
// Private: buildParamString takes the name/value pairs in the post_params setting object
|
||||
// and joins them up in to a string formatted "name=value&name=value"
|
||||
SWFUpload.prototype.buildParamString = function () {
|
||||
var postParams = this.settings.post_params;
|
||||
var paramStringPairs = [];
|
||||
|
||||
if (typeof(postParams) === "object") {
|
||||
for (var name in postParams) {
|
||||
if (postParams.hasOwnProperty(name)) {
|
||||
paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return paramStringPairs.join("&");
|
||||
};
|
||||
|
||||
// Public: Used to remove a SWFUpload instance from the page. This method strives to remove
|
||||
// all references to the SWF, and other objects so memory is properly freed.
|
||||
// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
|
||||
// Credits: Major improvements provided by steffen
|
||||
SWFUpload.prototype.destroy = function () {
|
||||
try {
|
||||
// Make sure Flash is done before we try to remove it
|
||||
this.cancelUpload(null, false);
|
||||
|
||||
|
||||
// Remove the SWFUpload DOM nodes
|
||||
var movieElement = null;
|
||||
movieElement = this.getMovieElement();
|
||||
|
||||
if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
|
||||
// Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround)
|
||||
for (var i in movieElement) {
|
||||
try {
|
||||
if (typeof(movieElement[i]) === "function") {
|
||||
movieElement[i] = null;
|
||||
}
|
||||
} catch (ex1) {}
|
||||
}
|
||||
|
||||
// Remove the Movie Element from the page
|
||||
try {
|
||||
movieElement.parentNode.removeChild(movieElement);
|
||||
} catch (ex) {}
|
||||
}
|
||||
|
||||
// Remove IE form fix reference
|
||||
window[this.movieName] = null;
|
||||
|
||||
// Destroy other references
|
||||
SWFUpload.instances[this.movieName] = null;
|
||||
delete SWFUpload.instances[this.movieName];
|
||||
|
||||
this.movieElement = null;
|
||||
this.settings = null;
|
||||
this.customSettings = null;
|
||||
this.eventQueue = null;
|
||||
this.movieName = null;
|
||||
|
||||
|
||||
return true;
|
||||
} catch (ex2) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Public: displayDebugInfo prints out settings and configuration
|
||||
// information about this SWFUpload instance.
|
||||
// This function (and any references to it) can be deleted when placing
|
||||
// SWFUpload in production.
|
||||
SWFUpload.prototype.displayDebugInfo = function () {
|
||||
this.debug(
|
||||
[
|
||||
"---SWFUpload Instance Info---\n",
|
||||
"Version: ", SWFUpload.version, "\n",
|
||||
"Movie Name: ", this.movieName, "\n",
|
||||
"Settings:\n",
|
||||
"\t", "upload_url: ", this.settings.upload_url, "\n",
|
||||
"\t", "flash_url: ", this.settings.flash_url, "\n",
|
||||
"\t", "use_query_string: ", this.settings.use_query_string.toString(), "\n",
|
||||
"\t", "requeue_on_error: ", this.settings.requeue_on_error.toString(), "\n",
|
||||
"\t", "http_success: ", this.settings.http_success.join(", "), "\n",
|
||||
"\t", "assume_success_timeout: ", this.settings.assume_success_timeout, "\n",
|
||||
"\t", "file_post_name: ", this.settings.file_post_name, "\n",
|
||||
"\t", "post_params: ", this.settings.post_params.toString(), "\n",
|
||||
"\t", "file_types: ", this.settings.file_types, "\n",
|
||||
"\t", "file_types_description: ", this.settings.file_types_description, "\n",
|
||||
"\t", "file_size_limit: ", this.settings.file_size_limit, "\n",
|
||||
"\t", "file_upload_limit: ", this.settings.file_upload_limit, "\n",
|
||||
"\t", "file_queue_limit: ", this.settings.file_queue_limit, "\n",
|
||||
"\t", "debug: ", this.settings.debug.toString(), "\n",
|
||||
|
||||
"\t", "prevent_swf_caching: ", this.settings.prevent_swf_caching.toString(), "\n",
|
||||
|
||||
"\t", "button_placeholder_id: ", this.settings.button_placeholder_id.toString(), "\n",
|
||||
"\t", "button_placeholder: ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n",
|
||||
"\t", "button_image_url: ", this.settings.button_image_url.toString(), "\n",
|
||||
"\t", "button_width: ", this.settings.button_width.toString(), "\n",
|
||||
"\t", "button_height: ", this.settings.button_height.toString(), "\n",
|
||||
"\t", "button_text: ", this.settings.button_text.toString(), "\n",
|
||||
"\t", "button_text_style: ", this.settings.button_text_style.toString(), "\n",
|
||||
"\t", "button_text_top_padding: ", this.settings.button_text_top_padding.toString(), "\n",
|
||||
"\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n",
|
||||
"\t", "button_action: ", this.settings.button_action.toString(), "\n",
|
||||
"\t", "button_disabled: ", this.settings.button_disabled.toString(), "\n",
|
||||
|
||||
"\t", "custom_settings: ", this.settings.custom_settings.toString(), "\n",
|
||||
"Event Handlers:\n",
|
||||
"\t", "swfupload_loaded_handler assigned: ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n",
|
||||
"\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n",
|
||||
"\t", "file_queued_handler assigned: ", (typeof this.settings.file_queued_handler === "function").toString(), "\n",
|
||||
"\t", "file_queue_error_handler assigned: ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n",
|
||||
"\t", "upload_start_handler assigned: ", (typeof this.settings.upload_start_handler === "function").toString(), "\n",
|
||||
"\t", "upload_progress_handler assigned: ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n",
|
||||
"\t", "upload_error_handler assigned: ", (typeof this.settings.upload_error_handler === "function").toString(), "\n",
|
||||
"\t", "upload_success_handler assigned: ", (typeof this.settings.upload_success_handler === "function").toString(), "\n",
|
||||
"\t", "upload_complete_handler assigned: ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n",
|
||||
"\t", "debug_handler assigned: ", (typeof this.settings.debug_handler === "function").toString(), "\n"
|
||||
].join("")
|
||||
);
|
||||
};
|
||||
|
||||
/* Note: addSetting and getSetting are no longer used by SWFUpload but are included
|
||||
the maintain v2 API compatibility
|
||||
*/
|
||||
// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used.
|
||||
SWFUpload.prototype.addSetting = function (name, value, default_value) {
|
||||
if (value == undefined) {
|
||||
return (this.settings[name] = default_value);
|
||||
} else {
|
||||
return (this.settings[name] = value);
|
||||
}
|
||||
};
|
||||
|
||||
// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found.
|
||||
SWFUpload.prototype.getSetting = function (name) {
|
||||
if (this.settings[name] != undefined) {
|
||||
return this.settings[name];
|
||||
}
|
||||
|
||||
return "";
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Private: callFlash handles function calls made to the Flash element.
|
||||
// Calls are made with a setTimeout for some functions to work around
|
||||
// bugs in the ExternalInterface library.
|
||||
SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
|
||||
argumentArray = argumentArray || [];
|
||||
|
||||
var movieElement = this.getMovieElement();
|
||||
var returnValue, returnString;
|
||||
|
||||
// Flash's method if calling ExternalInterface methods (code adapted from MooTools).
|
||||
try {
|
||||
returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
|
||||
returnValue = eval(returnString);
|
||||
} catch (ex) {
|
||||
throw "Call to " + functionName + " failed";
|
||||
}
|
||||
|
||||
// Unescape file post param values
|
||||
if (returnValue != undefined && typeof returnValue.post === "object") {
|
||||
returnValue = this.unescapeFilePostParams(returnValue);
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
};
|
||||
|
||||
/* *****************************
|
||||
-- Flash control methods --
|
||||
Your UI should use these
|
||||
to operate SWFUpload
|
||||
***************************** */
|
||||
|
||||
// WARNING: this function does not work in Flash Player 10
|
||||
// Public: selectFile causes a File Selection Dialog window to appear. This
|
||||
// dialog only allows 1 file to be selected.
|
||||
SWFUpload.prototype.selectFile = function () {
|
||||
this.callFlash("SelectFile");
|
||||
};
|
||||
|
||||
// WARNING: this function does not work in Flash Player 10
|
||||
// Public: selectFiles causes a File Selection Dialog window to appear/ This
|
||||
// dialog allows the user to select any number of files
|
||||
// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
|
||||
// If the selection name length is too long the dialog will fail in an unpredictable manner. There is no work-around
|
||||
// for this bug.
|
||||
SWFUpload.prototype.selectFiles = function () {
|
||||
this.callFlash("SelectFiles");
|
||||
};
|
||||
|
||||
|
||||
// Public: startUpload starts uploading the first file in the queue unless
|
||||
// the optional parameter 'fileID' specifies the ID
|
||||
SWFUpload.prototype.startUpload = function (fileID) {
|
||||
this.callFlash("StartUpload", [fileID]);
|
||||
};
|
||||
|
||||
// Public: cancelUpload cancels any queued file. The fileID parameter may be the file ID or index.
|
||||
// If you do not specify a fileID the current uploading file or first file in the queue is cancelled.
|
||||
// If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter.
|
||||
SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) {
|
||||
if (triggerErrorEvent !== false) {
|
||||
triggerErrorEvent = true;
|
||||
}
|
||||
this.callFlash("CancelUpload", [fileID, triggerErrorEvent]);
|
||||
};
|
||||
|
||||
// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
|
||||
// If nothing is currently uploading then nothing happens.
|
||||
SWFUpload.prototype.stopUpload = function () {
|
||||
this.callFlash("StopUpload");
|
||||
};
|
||||
|
||||
/* ************************
|
||||
* Settings methods
|
||||
* These methods change the SWFUpload settings.
|
||||
* SWFUpload settings should not be changed directly on the settings object
|
||||
* since many of the settings need to be passed to Flash in order to take
|
||||
* effect.
|
||||
* *********************** */
|
||||
|
||||
// Public: getStats gets the file statistics object.
|
||||
SWFUpload.prototype.getStats = function () {
|
||||
return this.callFlash("GetStats");
|
||||
};
|
||||
|
||||
// Public: setStats changes the SWFUpload statistics. You shouldn't need to
|
||||
// change the statistics but you can. Changing the statistics does not
|
||||
// affect SWFUpload accept for the successful_uploads count which is used
|
||||
// by the upload_limit setting to determine how many files the user may upload.
|
||||
SWFUpload.prototype.setStats = function (statsObject) {
|
||||
this.callFlash("SetStats", [statsObject]);
|
||||
};
|
||||
|
||||
// Public: getFile retrieves a File object by ID or Index. If the file is
|
||||
// not found then 'null' is returned.
|
||||
SWFUpload.prototype.getFile = function (fileID) {
|
||||
if (typeof(fileID) === "number") {
|
||||
return this.callFlash("GetFileByIndex", [fileID]);
|
||||
} else {
|
||||
return this.callFlash("GetFile", [fileID]);
|
||||
}
|
||||
};
|
||||
|
||||
// Public: addFileParam sets a name/value pair that will be posted with the
|
||||
// file specified by the Files ID. If the name already exists then the
|
||||
// exiting value will be overwritten.
|
||||
SWFUpload.prototype.addFileParam = function (fileID, name, value) {
|
||||
return this.callFlash("AddFileParam", [fileID, name, value]);
|
||||
};
|
||||
|
||||
// Public: removeFileParam removes a previously set (by addFileParam) name/value
|
||||
// pair from the specified file.
|
||||
SWFUpload.prototype.removeFileParam = function (fileID, name) {
|
||||
this.callFlash("RemoveFileParam", [fileID, name]);
|
||||
};
|
||||
|
||||
// Public: setUploadUrl changes the upload_url setting.
|
||||
SWFUpload.prototype.setUploadURL = function (url) {
|
||||
this.settings.upload_url = url.toString();
|
||||
this.callFlash("SetUploadURL", [url]);
|
||||
};
|
||||
|
||||
// Public: setPostParams changes the post_params setting
|
||||
SWFUpload.prototype.setPostParams = function (paramsObject) {
|
||||
this.settings.post_params = paramsObject;
|
||||
this.callFlash("SetPostParams", [paramsObject]);
|
||||
};
|
||||
|
||||
// Public: addPostParam adds post name/value pair. Each name can have only one value.
|
||||
SWFUpload.prototype.addPostParam = function (name, value) {
|
||||
this.settings.post_params[name] = value;
|
||||
this.callFlash("SetPostParams", [this.settings.post_params]);
|
||||
};
|
||||
|
||||
// Public: removePostParam deletes post name/value pair.
|
||||
SWFUpload.prototype.removePostParam = function (name) {
|
||||
delete this.settings.post_params[name];
|
||||
this.callFlash("SetPostParams", [this.settings.post_params]);
|
||||
};
|
||||
|
||||
// Public: setFileTypes changes the file_types setting and the file_types_description setting
|
||||
SWFUpload.prototype.setFileTypes = function (types, description) {
|
||||
this.settings.file_types = types;
|
||||
this.settings.file_types_description = description;
|
||||
this.callFlash("SetFileTypes", [types, description]);
|
||||
};
|
||||
|
||||
// Public: setFileSizeLimit changes the file_size_limit setting
|
||||
SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) {
|
||||
this.settings.file_size_limit = fileSizeLimit;
|
||||
this.callFlash("SetFileSizeLimit", [fileSizeLimit]);
|
||||
};
|
||||
|
||||
// Public: setFileUploadLimit changes the file_upload_limit setting
|
||||
SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) {
|
||||
this.settings.file_upload_limit = fileUploadLimit;
|
||||
this.callFlash("SetFileUploadLimit", [fileUploadLimit]);
|
||||
};
|
||||
|
||||
// Public: setFileQueueLimit changes the file_queue_limit setting
|
||||
SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) {
|
||||
this.settings.file_queue_limit = fileQueueLimit;
|
||||
this.callFlash("SetFileQueueLimit", [fileQueueLimit]);
|
||||
};
|
||||
|
||||
// Public: setFilePostName changes the file_post_name setting
|
||||
SWFUpload.prototype.setFilePostName = function (filePostName) {
|
||||
this.settings.file_post_name = filePostName;
|
||||
this.callFlash("SetFilePostName", [filePostName]);
|
||||
};
|
||||
|
||||
// Public: setUseQueryString changes the use_query_string setting
|
||||
SWFUpload.prototype.setUseQueryString = function (useQueryString) {
|
||||
this.settings.use_query_string = useQueryString;
|
||||
this.callFlash("SetUseQueryString", [useQueryString]);
|
||||
};
|
||||
|
||||
// Public: setRequeueOnError changes the requeue_on_error setting
|
||||
SWFUpload.prototype.setRequeueOnError = function (requeueOnError) {
|
||||
this.settings.requeue_on_error = requeueOnError;
|
||||
this.callFlash("SetRequeueOnError", [requeueOnError]);
|
||||
};
|
||||
|
||||
// Public: setHTTPSuccess changes the http_success setting
|
||||
SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) {
|
||||
if (typeof http_status_codes === "string") {
|
||||
http_status_codes = http_status_codes.replace(" ", "").split(",");
|
||||
}
|
||||
|
||||
this.settings.http_success = http_status_codes;
|
||||
this.callFlash("SetHTTPSuccess", [http_status_codes]);
|
||||
};
|
||||
|
||||
// Public: setHTTPSuccess changes the http_success setting
|
||||
SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) {
|
||||
this.settings.assume_success_timeout = timeout_seconds;
|
||||
this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]);
|
||||
};
|
||||
|
||||
// Public: setDebugEnabled changes the debug_enabled setting
|
||||
SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
|
||||
this.settings.debug_enabled = debugEnabled;
|
||||
this.callFlash("SetDebugEnabled", [debugEnabled]);
|
||||
};
|
||||
|
||||
// Public: setButtonImageURL loads a button image sprite
|
||||
SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) {
|
||||
if (buttonImageURL == undefined) {
|
||||
buttonImageURL = "";
|
||||
}
|
||||
|
||||
this.settings.button_image_url = buttonImageURL;
|
||||
this.callFlash("SetButtonImageURL", [buttonImageURL]);
|
||||
};
|
||||
|
||||
// Public: setButtonDimensions resizes the Flash Movie and button
|
||||
SWFUpload.prototype.setButtonDimensions = function (width, height) {
|
||||
this.settings.button_width = width;
|
||||
this.settings.button_height = height;
|
||||
|
||||
var movie = this.getMovieElement();
|
||||
if (movie != undefined) {
|
||||
movie.style.width = width + "px";
|
||||
movie.style.height = height + "px";
|
||||
}
|
||||
|
||||
this.callFlash("SetButtonDimensions", [width, height]);
|
||||
};
|
||||
// Public: setButtonText Changes the text overlaid on the button
|
||||
SWFUpload.prototype.setButtonText = function (html) {
|
||||
this.settings.button_text = html;
|
||||
this.callFlash("SetButtonText", [html]);
|
||||
};
|
||||
// Public: setButtonTextPadding changes the top and left padding of the text overlay
|
||||
SWFUpload.prototype.setButtonTextPadding = function (left, top) {
|
||||
this.settings.button_text_top_padding = top;
|
||||
this.settings.button_text_left_padding = left;
|
||||
this.callFlash("SetButtonTextPadding", [left, top]);
|
||||
};
|
||||
|
||||
// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button
|
||||
SWFUpload.prototype.setButtonTextStyle = function (css) {
|
||||
this.settings.button_text_style = css;
|
||||
this.callFlash("SetButtonTextStyle", [css]);
|
||||
};
|
||||
// Public: setButtonDisabled disables/enables the button
|
||||
SWFUpload.prototype.setButtonDisabled = function (isDisabled) {
|
||||
this.settings.button_disabled = isDisabled;
|
||||
this.callFlash("SetButtonDisabled", [isDisabled]);
|
||||
};
|
||||
// Public: setButtonAction sets the action that occurs when the button is clicked
|
||||
SWFUpload.prototype.setButtonAction = function (buttonAction) {
|
||||
this.settings.button_action = buttonAction;
|
||||
this.callFlash("SetButtonAction", [buttonAction]);
|
||||
};
|
||||
|
||||
// Public: setButtonCursor changes the mouse cursor displayed when hovering over the button
|
||||
SWFUpload.prototype.setButtonCursor = function (cursor) {
|
||||
this.settings.button_cursor = cursor;
|
||||
this.callFlash("SetButtonCursor", [cursor]);
|
||||
};
|
||||
|
||||
/* *******************************
|
||||
Flash Event Interfaces
|
||||
These functions are used by Flash to trigger the various
|
||||
events.
|
||||
|
||||
All these functions a Private.
|
||||
|
||||
Because the ExternalInterface library is buggy the event calls
|
||||
are added to a queue and the queue then executed by a setTimeout.
|
||||
This ensures that events are executed in a determinate order and that
|
||||
the ExternalInterface bugs are avoided.
|
||||
******************************* */
|
||||
|
||||
SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) {
|
||||
// Warning: Don't call this.debug inside here or you'll create an infinite loop
|
||||
|
||||
if (argumentArray == undefined) {
|
||||
argumentArray = [];
|
||||
} else if (!(argumentArray instanceof Array)) {
|
||||
argumentArray = [argumentArray];
|
||||
}
|
||||
|
||||
var self = this;
|
||||
if (typeof this.settings[handlerName] === "function") {
|
||||
// Queue the event
|
||||
this.eventQueue.push(function () {
|
||||
this.settings[handlerName].apply(this, argumentArray);
|
||||
});
|
||||
|
||||
// Execute the next queued event
|
||||
setTimeout(function () {
|
||||
self.executeNextEvent();
|
||||
}, 0);
|
||||
|
||||
} else if (this.settings[handlerName] !== null) {
|
||||
throw "Event handler " + handlerName + " is unknown or is not a function";
|
||||
}
|
||||
};
|
||||
|
||||
// Private: Causes the next event in the queue to be executed. Since events are queued using a setTimeout
|
||||
// we must queue them in order to garentee that they are executed in order.
|
||||
SWFUpload.prototype.executeNextEvent = function () {
|
||||
// Warning: Don't call this.debug inside here or you'll create an infinite loop
|
||||
|
||||
var f = this.eventQueue ? this.eventQueue.shift() : null;
|
||||
if (typeof(f) === "function") {
|
||||
f.apply(this);
|
||||
}
|
||||
};
|
||||
|
||||
// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have
|
||||
// properties that contain characters that are not valid for JavaScript identifiers. To work around this
|
||||
// the Flash Component escapes the parameter names and we must unescape again before passing them along.
|
||||
SWFUpload.prototype.unescapeFilePostParams = function (file) {
|
||||
var reg = /[$]([0-9a-f]{4})/i;
|
||||
var unescapedPost = {};
|
||||
var uk;
|
||||
|
||||
if (file != undefined) {
|
||||
for (var k in file.post) {
|
||||
if (file.post.hasOwnProperty(k)) {
|
||||
uk = k;
|
||||
var match;
|
||||
while ((match = reg.exec(uk)) !== null) {
|
||||
uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16)));
|
||||
}
|
||||
unescapedPost[uk] = file.post[k];
|
||||
}
|
||||
}
|
||||
|
||||
file.post = unescapedPost;
|
||||
}
|
||||
|
||||
return file;
|
||||
};
|
||||
|
||||
// Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working)
|
||||
SWFUpload.prototype.testExternalInterface = function () {
|
||||
try {
|
||||
return this.callFlash("TestExternalInterface");
|
||||
} catch (ex) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
// Private: This event is called by Flash when it has finished loading. Don't modify this.
|
||||
// Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded.
|
||||
SWFUpload.prototype.flashReady = function () {
|
||||
// Check that the movie element is loaded correctly with its ExternalInterface methods defined
|
||||
var movieElement = this.getMovieElement();
|
||||
|
||||
if (!movieElement) {
|
||||
this.debug("Flash called back ready but the flash movie can't be found.");
|
||||
return;
|
||||
}
|
||||
|
||||
this.cleanUp(movieElement);
|
||||
|
||||
this.queueEvent("swfupload_loaded_handler");
|
||||
};
|
||||
|
||||
// Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE.
|
||||
// This function is called by Flash each time the ExternalInterface functions are created.
|
||||
SWFUpload.prototype.cleanUp = function (movieElement) {
|
||||
// Pro-actively unhook all the Flash functions
|
||||
try {
|
||||
if (this.movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
|
||||
this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");
|
||||
for (var key in movieElement) {
|
||||
try {
|
||||
if (typeof(movieElement[key]) === "function") {
|
||||
movieElement[key] = null;
|
||||
}
|
||||
} catch (ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ex1) {
|
||||
|
||||
}
|
||||
|
||||
// Fix Flashes own cleanup code so if the SWFMovie was removed from the page
|
||||
// it doesn't display errors.
|
||||
window["__flash__removeCallback"] = function (instance, name) {
|
||||
try {
|
||||
if (instance) {
|
||||
instance[name] = null;
|
||||
}
|
||||
} catch (flashEx) {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
/* This is a chance to do something before the browse window opens */
|
||||
SWFUpload.prototype.fileDialogStart = function () {
|
||||
this.queueEvent("file_dialog_start_handler");
|
||||
};
|
||||
|
||||
|
||||
/* Called when a file is successfully added to the queue. */
|
||||
SWFUpload.prototype.fileQueued = function (file) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("file_queued_handler", file);
|
||||
};
|
||||
|
||||
|
||||
/* Handle errors that occur when an attempt to queue a file fails. */
|
||||
SWFUpload.prototype.fileQueueError = function (file, errorCode, message) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("file_queue_error_handler", [file, errorCode, message]);
|
||||
};
|
||||
|
||||
/* Called after the file dialog has closed and the selected files have been queued.
|
||||
You could call startUpload here if you want the queued files to begin uploading immediately. */
|
||||
SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) {
|
||||
this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]);
|
||||
};
|
||||
|
||||
SWFUpload.prototype.uploadStart = function (file) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("return_upload_start_handler", file);
|
||||
};
|
||||
|
||||
SWFUpload.prototype.returnUploadStart = function (file) {
|
||||
var returnValue;
|
||||
if (typeof this.settings.upload_start_handler === "function") {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
returnValue = this.settings.upload_start_handler.call(this, file);
|
||||
} else if (this.settings.upload_start_handler != undefined) {
|
||||
throw "upload_start_handler must be a function";
|
||||
}
|
||||
|
||||
// Convert undefined to true so if nothing is returned from the upload_start_handler it is
|
||||
// interpretted as 'true'.
|
||||
if (returnValue === undefined) {
|
||||
returnValue = true;
|
||||
}
|
||||
|
||||
returnValue = !!returnValue;
|
||||
|
||||
this.callFlash("ReturnUploadStart", [returnValue]);
|
||||
};
|
||||
|
||||
|
||||
|
||||
SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]);
|
||||
};
|
||||
|
||||
SWFUpload.prototype.uploadError = function (file, errorCode, message) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("upload_error_handler", [file, errorCode, message]);
|
||||
};
|
||||
|
||||
SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("upload_success_handler", [file, serverData, responseReceived]);
|
||||
};
|
||||
|
||||
SWFUpload.prototype.uploadComplete = function (file) {
|
||||
file = this.unescapeFilePostParams(file);
|
||||
this.queueEvent("upload_complete_handler", file);
|
||||
};
|
||||
|
||||
/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the
|
||||
internal debug console. You can override this event and have messages written where you want. */
|
||||
SWFUpload.prototype.debug = function (message) {
|
||||
this.queueEvent("debug_handler", message);
|
||||
};
|
||||
|
||||
|
||||
/* **********************************
|
||||
Debug Console
|
||||
The debug console is a self contained, in page location
|
||||
for debug message to be sent. The Debug Console adds
|
||||
itself to the body if necessary.
|
||||
|
||||
The console is automatically scrolled as messages appear.
|
||||
|
||||
If you are using your own debug handler or when you deploy to production and
|
||||
have debug disabled you can remove these functions to reduce the file size
|
||||
and complexity.
|
||||
********************************** */
|
||||
|
||||
// Private: debugMessage is the default debug_handler. If you want to print debug messages
|
||||
// call the debug() function. When overriding the function your own function should
|
||||
// check to see if the debug setting is true before outputting debug information.
|
||||
SWFUpload.prototype.debugMessage = function (message) {
|
||||
if (this.settings.debug) {
|
||||
var exceptionMessage, exceptionValues = [];
|
||||
|
||||
// Check for an exception object and print it nicely
|
||||
if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") {
|
||||
for (var key in message) {
|
||||
if (message.hasOwnProperty(key)) {
|
||||
exceptionValues.push(key + ": " + message[key]);
|
||||
}
|
||||
}
|
||||
exceptionMessage = exceptionValues.join("\n") || "";
|
||||
exceptionValues = exceptionMessage.split("\n");
|
||||
exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: ");
|
||||
SWFUpload.Console.writeLine(exceptionMessage);
|
||||
} else {
|
||||
SWFUpload.Console.writeLine(message);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
SWFUpload.Console = {};
|
||||
SWFUpload.Console.writeLine = function (message) {
|
||||
var console, documentForm;
|
||||
|
||||
try {
|
||||
console = document.getElementById("SWFUpload_Console");
|
||||
|
||||
if (!console) {
|
||||
documentForm = document.createElement("form");
|
||||
document.getElementsByTagName("body")[0].appendChild(documentForm);
|
||||
|
||||
console = document.createElement("textarea");
|
||||
console.id = "SWFUpload_Console";
|
||||
console.style.fontFamily = "monospace";
|
||||
console.setAttribute("wrap", "off");
|
||||
console.wrap = "off";
|
||||
console.style.overflow = "auto";
|
||||
console.style.width = "700px";
|
||||
console.style.height = "350px";
|
||||
console.style.margin = "5px";
|
||||
documentForm.appendChild(console);
|
||||
}
|
||||
|
||||
console.value += message + "\n";
|
||||
|
||||
console.scrollTop = console.scrollHeight - console.clientHeight;
|
||||
} catch (ex) {
|
||||
alert("Exception: " + ex.name + " Message: " + ex.message);
|
||||
}
|
||||
};
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
[Leo.C, Studio] (C)2004 - 2008
|
||||
|
||||
$Hanization: LeoChung $
|
||||
$E-Mail: who@imll.net $
|
||||
$HomePage: http://imll.net $
|
||||
$Date: 2008/11/8 18:02 $
|
||||
*/
|
||||
/*
|
||||
Queue Plug-in
|
||||
|
||||
Features:
|
||||
*Adds a cancelQueue() method for cancelling the entire queue.
|
||||
*All queued files are uploaded when startUpload() is called.
|
||||
*If false is returned from uploadComplete then the queue upload is stopped.
|
||||
If false is not returned (strict comparison) then the queue upload is continued.
|
||||
*Adds a QueueComplete event that is fired when all the queued files have finished uploading.
|
||||
Set the event handler with the queue_complete_handler setting.
|
||||
|
||||
*/
|
||||
|
||||
var SWFUpload;
|
||||
if (typeof(SWFUpload) === "function") {
|
||||
SWFUpload.queue = {};
|
||||
|
||||
SWFUpload.prototype.initSettings = (function (oldInitSettings) {
|
||||
return function () {
|
||||
if (typeof(oldInitSettings) === "function") {
|
||||
oldInitSettings.call(this);
|
||||
}
|
||||
|
||||
this.customSettings.queue_cancelled_flag = false;
|
||||
this.customSettings.queue_upload_count = 0;
|
||||
|
||||
this.settings.user_upload_complete_handler = this.settings.upload_complete_handler;
|
||||
this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler;
|
||||
|
||||
this.settings.queue_complete_handler = this.settings.queue_complete_handler || null;
|
||||
};
|
||||
})(SWFUpload.prototype.initSettings);
|
||||
|
||||
SWFUpload.prototype.startUpload = function (fileID) {
|
||||
this.customSettings.queue_cancelled_flag = false;
|
||||
this.callFlash("StartUpload", false, [fileID]);
|
||||
};
|
||||
|
||||
SWFUpload.prototype.cancelQueue = function () {
|
||||
this.customSettings.queue_cancelled_flag = true;
|
||||
this.stopUpload();
|
||||
|
||||
var stats = this.getStats();
|
||||
while (stats.files_queued > 0) {
|
||||
this.cancelUpload();
|
||||
stats = this.getStats();
|
||||
}
|
||||
};
|
||||
|
||||
SWFUpload.queue.uploadCompleteHandler = function (file) {
|
||||
var user_upload_complete_handler = this.settings.user_upload_complete_handler;
|
||||
var continueUpload;
|
||||
|
||||
if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) {
|
||||
this.customSettings.queue_upload_count++;
|
||||
}
|
||||
|
||||
if (typeof(user_upload_complete_handler) === "function") {
|
||||
continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true;
|
||||
} else {
|
||||
continueUpload = true;
|
||||
}
|
||||
|
||||
if (continueUpload) {
|
||||
var stats = this.getStats();
|
||||
if (stats.files_queued > 0 && this.customSettings.queue_cancelled_flag === false) {
|
||||
this.startUpload();
|
||||
} else if (this.customSettings.queue_cancelled_flag === false) {
|
||||
this.queueEvent("queue_complete_handler", [this.customSettings.queue_upload_count]);
|
||||
this.customSettings.queue_upload_count = 0;
|
||||
} else {
|
||||
this.customSettings.queue_cancelled_flag = false;
|
||||
this.customSettings.queue_upload_count = 0;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.1 KiB |
14
src/main/webapp/static/plugins/jquery.touchswipe/1.6/jquery.touchSwipe.min.js
vendored
Normal file
|
@ -21,6 +21,127 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @param dom dom 数据对象
|
||||
* @param fileName 文件名
|
||||
* @param data 数据
|
||||
* @param format
|
||||
* var tableNead = {
|
||||
column:[
|
||||
{filed: "projectName",label:"项目名称",width:50},
|
||||
{filed: "managerNickName",label:"成员名称",width:50},
|
||||
{filed: "pdmType",label:"种类",width:50,dictDataOptions: []},
|
||||
{filed: "pdmMoney",label:"收入金额",width:50},
|
||||
],
|
||||
countFiled:["pdmMoney"],
|
||||
};
|
||||
* @returns {*}
|
||||
*/
|
||||
function exportTable(dom, fileName, data,format) {
|
||||
/* 从表生成工作簿对象 */
|
||||
var wb = XLSX.utils.table_to_book(dom);
|
||||
var columnWidth = [];
|
||||
var table = [];
|
||||
var tableHead = [];
|
||||
//初始化头部字段
|
||||
format.column.forEach(function (value) {
|
||||
tableHead.push(value.label);
|
||||
columnWidth.push({
|
||||
"wpx": value.width
|
||||
});
|
||||
});
|
||||
table.push(tableHead);
|
||||
var tableFoot = new Array(format.column.length);
|
||||
|
||||
//遍历,将数据整理重新返回
|
||||
data.map(function (x) {
|
||||
var a = [];
|
||||
|
||||
//遍历中设定需要的那些字段数据
|
||||
format.column.forEach(function (value) {
|
||||
if (x.hasOwnProperty(value.filed)){
|
||||
//替换字典数据
|
||||
if (value.dictDataOptions != undefined && value.dictDataOptions.length > 0){
|
||||
//遍历字典数据,有就替换
|
||||
var dict = value.dictDataOptions.find(function (val) {
|
||||
return x[value.filed] == val.dictValue;
|
||||
})
|
||||
a.push(dict?dict.dictLabel:"");
|
||||
}else {
|
||||
a.push(x[value.filed]);
|
||||
if (format.countFiled != undefined && format.countFiled.indexOf(value.filed) >= 0) {
|
||||
tableFoot[0] = '总计';
|
||||
format.column.findIndex(function (value1, index) {
|
||||
if (value1.filed == value.filed){
|
||||
tableFoot[index] = tableFoot[index] == undefined ? x[value.filed] : tableFoot[index] + x[value.filed];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}else {
|
||||
a.push("");
|
||||
}
|
||||
});
|
||||
return a
|
||||
}).forEach(function (v, i) {
|
||||
// 遍历整理后的数据加入table
|
||||
table.push(v)
|
||||
});
|
||||
table.push(tableFoot);
|
||||
var sheet = XLSX2.utils.aoa_to_sheet(table);
|
||||
wb.Sheets.Sheet1 = sheet;
|
||||
wb.Sheets.Sheet1['!cols'] = columnWidth;
|
||||
/* 获取二进制字符串作为输出 */
|
||||
var wbout = XLSX.write(wb, {
|
||||
bookType: 'xlsx',
|
||||
bookSST: true,
|
||||
type: "array"
|
||||
});
|
||||
|
||||
try {
|
||||
//保存文件
|
||||
saveAs(
|
||||
//Blob 对象表示一个不可变、原始数据的类文件对象。
|
||||
//Blob 表示的不一定是JavaScript原生格式的数据。
|
||||
//File 接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
|
||||
//返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
|
||||
new Blob([wbout], {type: "application/octet-stream"}),
|
||||
//设置导出文件名称
|
||||
fileName + '.xlsx'
|
||||
);
|
||||
} catch (e) {
|
||||
if (typeof console !== "undefined") console.log(e, wbout);
|
||||
}
|
||||
return wbout;
|
||||
};
|
||||
|
||||
/**
|
||||
* 打印方法
|
||||
* @param name 模板的名字
|
||||
* @param data 需要绑定的数据
|
||||
*/
|
||||
function printFile(name,data){
|
||||
if (name != "" && name != null && name != undefined){
|
||||
ms.http.get(ms.manager+ "/mprint/printTemplate/get.do", {
|
||||
name: name
|
||||
}).then(function (res) {
|
||||
if(data != null && data != undefined && res.data != null){
|
||||
printVue.open(res.data,data);
|
||||
}else {
|
||||
console.error("未定义数据,或没有模板数据");
|
||||
}
|
||||
}).catch(function (err) {
|
||||
console.log(err);
|
||||
});
|
||||
}else {
|
||||
console.error("未定义模板名称");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 列表数据转化为树形结构的列表
|
||||
* @param source 数据源list
|
||||
|
@ -41,8 +162,9 @@
|
|||
branchArr.length > 0 ? father[children] = branchArr : '';
|
||||
return !father[parentId] || father[parentId] == '0' || father[parentId] == null ;
|
||||
});
|
||||
}
|
||||
//验证是否为子集
|
||||
} //验证是否为子集
|
||||
|
||||
|
||||
function childValidate(sourceList, id, parentId, key, parentKey) {
|
||||
var data = sourceList.find(function (x) {
|
||||
return x[key] == parentId;
|
||||
|
@ -56,6 +178,26 @@
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 科学计数改成普通计数
|
||||
* @param num
|
||||
* @returns {string|*}
|
||||
*/
|
||||
function getFullNum(num){
|
||||
//处理非数字
|
||||
if(isNaN(num)){return num};
|
||||
//处理不需要转换的数字
|
||||
var str = ''+num;
|
||||
if(!/e/i.test(str)){return num;};
|
||||
return (num).toFixed(18).replace(/\.?0+$/, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 数字转金额
|
||||
* */
|
||||
function moneyFormatter(cellValue) {
|
||||
return accounting.formatMoney(cellValue, '¥',2)
|
||||
}
|
||||
//日期处理
|
||||
var date = {
|
||||
//格式化时间
|
||||
|
@ -225,10 +367,14 @@
|
|||
getParameter: getParameter,
|
||||
treeData:treeData,
|
||||
childValidate:childValidate,
|
||||
moneyFormatter:moneyFormatter,
|
||||
exportTable:exportTable,
|
||||
printFile:printFile,
|
||||
date: date,
|
||||
array: array,
|
||||
log: log,
|
||||
convert: convert,
|
||||
getFullNum: getFullNum,
|
||||
store: store,
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
(function() {
|
||||
Vue.prototype.$uploadEvents={
|
||||
success:function(res,file, fileList) {
|
||||
file.url = ms.base+res;
|
||||
this.push(file);
|
||||
},
|
||||
preview:function(file) {
|
||||
window.open(file.url)
|
||||
},
|
||||
remove:function(file, fileList) {
|
||||
var index = -1;
|
||||
index = (void 0).findIndex(function (text) {
|
||||
return text == file;
|
||||
});
|
||||
if (index != -1) {
|
||||
this.splice(index, 1);
|
||||
}
|
||||
},
|
||||
exceed:function(file, fileList) {
|
||||
Vue.prototype.$notify({ title: '当前最多上传'+this.length+'个附件', type: 'warning' });
|
||||
},
|
||||
}
|
||||
Vue.prototype.$table = {}
|
||||
Vue.prototype.$table.moneyFormatter = function (row, column, cellValue, index) {
|
||||
if (cellValue != undefined) {
|
||||
return accounting.formatMoney(cellValue, '¥')
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
Vue.prototype.$table.percentageFormatter = function (row, column, cellValue, index) {
|
||||
if (cellValue != undefined) {
|
||||
return cellValue+"%";
|
||||
} else {
|
||||
return '-'
|
||||
}
|
||||
}
|
||||
}())
|
|
@ -0,0 +1,10 @@
|
|||
/*!
|
||||
* Legacy browser support
|
||||
*/
|
||||
[].map||(Array.prototype.map=function(a,b){for(var c=this,d=c.length,e=new Array(d),f=0;d>f;f++)f in c&&(e[f]=a.call(b,c[f],f,c));return e}),[].filter||(Array.prototype.filter=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if("function"!=typeof a)throw new TypeError;for(var d=[],e=arguments[1],f=0;c>f;f++)if(f in b){var g=b[f];a.call(e,g,f,b)&&d.push(g)}return d}),[].indexOf||(Array.prototype.indexOf=function(a){if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!==d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1});/*!
|
||||
* Cross-Browser Split 1.1.1
|
||||
* Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
|
||||
* Available under the MIT License
|
||||
* http://blog.stevenlevithan.com/archives/cross-browser-split
|
||||
*/
|
||||
var nativeSplit=String.prototype.split,compliantExecNpcg=void 0===/()??/.exec("")[1];String.prototype.split=function(a,b){var c=this;if("[object RegExp]"!==Object.prototype.toString.call(a))return nativeSplit.call(c,a,b);var d,e,f,g,h=[],i=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.extended?"x":"")+(a.sticky?"y":""),j=0;for(a=new RegExp(a.source,i+"g"),c+="",compliantExecNpcg||(d=new RegExp("^"+a.source+"$(?!\\s)",i)),b=void 0===b?-1>>>0:b>>>0;(e=a.exec(c))&&(f=e.index+e[0].length,!(f>j&&(h.push(c.slice(j,e.index)),!compliantExecNpcg&&e.length>1&&e[0].replace(d,function(){for(var a=1;a<arguments.length-2;a++)void 0===arguments[a]&&(e[a]=void 0)}),e.length>1&&e.index<c.length&&Array.prototype.push.apply(h,e.slice(1)),g=e[0].length,j=f,h.length>=b)));)a.lastIndex===e.index&&a.lastIndex++;return j===c.length?(g||!a.test(""))&&h.push(""):h.push(c.slice(j)),h.length>b?h.slice(0,b):h};
|
|
@ -0,0 +1,4 @@
|
|||
.picker,.picker__holder{width:100%;position:absolute}.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{overflow-y:auto;-webkit-overflow-scrolling:touch;background:#fff;border:1px solid #aaa;border-top-width:0;border-bottom-width:0;border-radius:0 0 5px 5px;box-sizing:border-box;min-width:176px;max-width:466px;max-height:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;-webkit-transform:translateY(-1em)perspective(600px)rotateX(10deg);transform:translateY(-1em)perspective(600px)rotateX(10deg);transition:-webkit-transform .15s ease-out,opacity .15s ease-out,max-height 0s .15s,border-width 0s .15s;transition:transform .15s ease-out,opacity .15s ease-out,max-height 0s .15s,border-width 0s .15s}/*!
|
||||
* Classic picker styling for pickadate.js
|
||||
* Demo: http://amsul.github.io/pickadate.js
|
||||
*/.picker__frame{padding:1px}.picker__wrap{margin:-1px}.picker--opened .picker__holder{max-height:25em;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1;border-top-width:1px;border-bottom-width:1px;-webkit-transform:translateY(0)perspective(600px)rotateX(0);transform:translateY(0)perspective(600px)rotateX(0);transition:-webkit-transform .15s ease-out,opacity .15s ease-out,max-height 0s,border-width 0s;transition:transform .15s ease-out,opacity .15s ease-out,max-height 0s,border-width 0s;box-shadow:0 6px 18px 1px rgba(0,0,0,.12)}
|
|
@ -0,0 +1 @@
|
|||
.picker__footer,.picker__header,.picker__table{text-align:center}.picker__day--highlighted,.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__box{padding:0 1em}.picker__header{position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}.picker__nav--next,.picker__nav--prev{top:-.33em}.picker__nav--prev{padding-right:1.5em}.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover,.picker__day--infocus:hover,.picker__day--outfocus:hover{color:#000;cursor:pointer;background:#b1dcfb}.picker__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:"\D7";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}
|
|
@ -0,0 +1 @@
|
|||
.picker--focused .picker__list-item--highlighted,.picker__list-item--highlighted:hover,.picker__list-item:hover{background:#b1dcfb;cursor:pointer;color:#000}.picker__list{list-style:none;padding:.75em 0 4.2em;margin:0}.picker__list-item{border-bottom:1px solid #ddd;border-top:1px solid #ddd;margin-bottom:-1px;position:relative;background:#fff;padding:.75em 1.25em}@media (min-height:46.75em){.picker__list-item{padding:.5em 1em}}.picker__list-item--highlighted,.picker__list-item:hover{border-color:#0089ec;z-index:10}.picker--focused .picker__list-item--selected,.picker__list-item--selected,.picker__list-item--selected:hover{background:#0089ec;color:#fff;z-index:10}.picker--focused .picker__list-item--disabled,.picker__list-item--disabled,.picker__list-item--disabled:hover{background:#f5f5f5;color:#ddd;cursor:default;border-color:#ddd;z-index:auto}.picker--time .picker__button--clear{display:block;width:80%;margin:1em auto 0;padding:1em 1.25em;background:0 0;border:0;font-weight:500;font-size:.67em;text-align:center;text-transform:uppercase;color:#666}.picker--time .picker__button--clear:focus,.picker--time .picker__button--clear:hover{background:#e20;border-color:#e20;cursor:pointer;color:#fff;outline:0}.picker--time .picker__button--clear:before{top:-.25em;color:#666;font-size:1.25em;font-weight:700}.picker--time .picker__button--clear:focus:before,.picker--time .picker__button--clear:hover:before{color:#fff;border-color:#fff}.picker--time{min-width:256px;max-width:320px}.picker--time .picker__holder{background:#f2f2f2}@media (min-height:40.125em){.picker--time .picker__holder{font-size:.875em}}.picker--time .picker__box{padding:0;position:relative}
|
|
@ -0,0 +1,4 @@
|
|||
.picker{font-size:16px;text-align:left;line-height:1.2;color:#000;position:absolute;z-index:10000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.picker__input{cursor:default}.picker__input.picker__input--active{border-color:#0089ec}.picker__holder{width:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;position:fixed;transition:background .15s ease-out,-webkit-transform 0s .15s;transition:background .15s ease-out,transform 0s .15s;-webkit-backface-visibility:hidden}/*!
|
||||
* Default mobile-first, responsive styling for pickadate.js
|
||||
* Demo: http://amsul.github.io/pickadate.js
|
||||
*/.picker__frame,.picker__holder{top:0;bottom:0;left:0;right:0;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}.picker__frame{position:absolute;margin:0 auto;min-width:256px;max-width:666px;width:100%;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;transition:all .15s ease-out}.picker__wrap{display:table;width:100%;height:100%}@media (min-height:33.875em){.picker__frame{overflow:visible;top:auto;bottom:-100%;max-height:80%}.picker__wrap{display:block}}.picker__box{background:#fff;display:table-cell;vertical-align:middle}@media (min-height:26.5em){.picker__box{font-size:1.25em}}@media (min-height:33.875em){.picker__box{display:block;font-size:1.33em;border:1px solid #777;border-top-color:#898989;border-bottom-width:0;border-radius:5px 5px 0 0;box-shadow:0 12px 36px 16px rgba(0,0,0,.24)}}@media (min-height:40.125em){.picker__frame{margin-bottom:7.5%}.picker__box{font-size:1.5em;border-bottom-width:1px;border-radius:5px}}.picker--opened .picker__holder{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);zoom:1;background:rgba(0,0,0,.32);transition:background .15s ease-out}.picker--opened .picker__frame{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1;opacity:1}@media (min-height:33.875em){.picker--opened .picker__frame{top:auto;bottom:0}}
|
|
@ -0,0 +1 @@
|
|||
.picker__footer,.picker__header,.picker__table{text-align:center}.picker__day--highlighted,.picker__select--month:focus,.picker__select--year:focus{border-color:#0089ec}.picker__box{padding:0 1em}.picker__header{position:relative;margin-top:.75em}.picker__month,.picker__year{font-weight:500;display:inline-block;margin-left:.25em;margin-right:.25em}.picker__year{color:#999;font-size:.8em;font-style:italic}.picker__select--month,.picker__select--year{border:1px solid #b7b7b7;height:2em;padding:.5em;margin-left:.25em;margin-right:.25em}.picker__select--month{width:35%}.picker__select--year{width:22.5%}.picker__nav--next,.picker__nav--prev{position:absolute;padding:.5em 1.25em;width:1em;height:1em;box-sizing:content-box;top:-.25em}.picker__nav--prev{left:-1em;padding-right:1.25em}.picker__nav--next{right:-1em;padding-left:1.25em}@media (min-width:24.5em){.picker__select--month,.picker__select--year{margin-top:-.5em}.picker__nav--next,.picker__nav--prev{top:-.33em}.picker__nav--prev{padding-right:1.5em}.picker__nav--next{padding-left:1.5em}}.picker__nav--next:before,.picker__nav--prev:before{content:" ";border-top:.5em solid transparent;border-bottom:.5em solid transparent;border-right:.75em solid #000;width:0;height:0;display:block;margin:0 auto}.picker__nav--next:before{border-right:0;border-left:.75em solid #000}.picker__nav--next:hover,.picker__nav--prev:hover{cursor:pointer;color:#000;background:#b1dcfb}.picker__nav--disabled,.picker__nav--disabled:before,.picker__nav--disabled:before:hover,.picker__nav--disabled:hover{cursor:default;background:0 0;border-right-color:#f5f5f5;border-left-color:#f5f5f5}.picker--focused .picker__day--highlighted,.picker__day--highlighted:hover,.picker__day--infocus:hover,.picker__day--outfocus:hover{color:#000;cursor:pointer;background:#b1dcfb}.picker__table{border-collapse:collapse;border-spacing:0;table-layout:fixed;font-size:inherit;width:100%;margin-top:.75em;margin-bottom:.5em}@media (min-height:33.875em){.picker__table{margin-bottom:.75em}}.picker__table td{margin:0;padding:0}.picker__weekday{width:14.285714286%;font-size:.75em;padding-bottom:.25em;color:#999;font-weight:500}@media (min-height:33.875em){.picker__weekday{padding-bottom:.5em}}.picker__day{padding:.3125em 0;font-weight:200;border:1px solid transparent}.picker__day--today{position:relative}.picker__day--today:before{content:" ";position:absolute;top:2px;right:2px;width:0;height:0;border-top:.5em solid #0059bc;border-left:.5em solid transparent}.picker__day--disabled:before{border-top-color:#aaa}.picker__day--outfocus{color:#ddd}.picker--focused .picker__day--selected,.picker__day--selected,.picker__day--selected:hover{background:#0089ec;color:#fff}.picker--focused .picker__day--disabled,.picker__day--disabled,.picker__day--disabled:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__day--highlighted.picker__day--disabled,.picker__day--highlighted.picker__day--disabled:hover{background:#bbb}.picker__button--clear,.picker__button--close,.picker__button--today{border:1px solid #fff;background:#fff;font-size:.8em;padding:.66em 0;font-weight:700;width:33%;display:inline-block;vertical-align:bottom}.picker__button--clear:hover,.picker__button--close:hover,.picker__button--today:hover{cursor:pointer;color:#000;background:#b1dcfb;border-bottom-color:#b1dcfb}.picker__button--clear:focus,.picker__button--close:focus,.picker__button--today:focus{background:#b1dcfb;border-color:#0089ec;outline:0}.picker__button--clear:before,.picker__button--close:before,.picker__button--today:before{position:relative;display:inline-block;height:0}.picker__button--clear:before,.picker__button--today:before{content:" ";margin-right:.45em}.picker__button--today:before{top:-.05em;width:0;border-top:.66em solid #0059bc;border-left:.66em solid transparent}.picker__button--clear:before{top:-.25em;width:.66em;border-top:3px solid #e20}.picker__button--close:before{content:"\D7";top:-.1em;vertical-align:top;font-size:1.1em;margin-right:.35em;color:#777}.picker__button--today[disabled],.picker__button--today[disabled]:hover{background:#f5f5f5;border-color:#f5f5f5;color:#ddd;cursor:default}.picker__button--today[disabled]:before{border-top-color:#aaa}
|