first commit
1
康唯唯私活/Vr项目/code/dist/resources/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
ad35604f-b0f6-4a9f-868c-5be7a1bc5456
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
df33aa55-4803-471c-8433-67d71c001a1b
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/css/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
429b0bea-56d6-433c-8175-f896aee23802
|
||||
0
康唯唯私活/Vr项目/code/dist/resources/static/css/base.css
vendored
Executable file
1
康唯唯私活/Vr项目/code/dist/resources/static/css/home/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
2e267447-1860-4e47-888e-19827d3cd38a
|
||||
3
康唯唯私活/Vr项目/code/dist/resources/static/css/home/about.css
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.about {
|
||||
color: red;
|
||||
}
|
||||
38
康唯唯私活/Vr项目/code/dist/resources/static/css/home/error.css
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
.error {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: row;
|
||||
}
|
||||
.error img {
|
||||
width: 270px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.error .i-message {
|
||||
margin-left: 19px;
|
||||
}
|
||||
.error .i-message .action {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.error .i-message .action a[href="/"] {
|
||||
margin-right: 15px;
|
||||
}
|
||||
.error .i-message ul {
|
||||
padding-left: 20px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.error .i-message h3 {
|
||||
font-size: 17px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 27px;
|
||||
font-weight: 500;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.error .i-message a {
|
||||
color: #8d8d8d;
|
||||
}
|
||||
body,
|
||||
html,
|
||||
.error {
|
||||
height: 100%;
|
||||
}
|
||||
0
康唯唯私活/Vr项目/code/dist/resources/static/css/home/index.css
vendored
Executable file
4
康唯唯私活/Vr项目/code/dist/resources/static/css/home/register.css
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
.register {
|
||||
font-size: 30px;
|
||||
color: green;
|
||||
}
|
||||
3
康唯唯私活/Vr项目/code/dist/resources/static/css/home/test.css
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.Test {
|
||||
color: red;
|
||||
}
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/css/tpl/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
0fc03c51-4b6b-4a6c-adc2-ade3bd9367db
|
||||
0
康唯唯私活/Vr项目/code/dist/resources/static/css/tpl/colors.css
vendored
Executable file
0
康唯唯私活/Vr项目/code/dist/resources/static/css/tpl/mixins.css
vendored
Executable file
1
康唯唯私活/Vr项目/code/dist/resources/static/fonts/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
985602a4-c3a9-46b9-9aa9-754d85db7413
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/img/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
e1ffcee7-d2b8-48d7-a57d-3fd4e533a98a
|
||||
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner.png
vendored
Executable file
|
After Width: | Height: | Size: 340 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_1.png
vendored
Executable file
|
After Width: | Height: | Size: 232 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_2.png
vendored
Executable file
|
After Width: | Height: | Size: 492 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_3.png
vendored
Executable file
|
After Width: | Height: | Size: 492 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_4.jpg
vendored
Executable file
|
After Width: | Height: | Size: 142 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_5.jpg
vendored
Executable file
|
After Width: | Height: | Size: 200 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_6.jpg
vendored
Executable file
|
After Width: | Height: | Size: 123 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/banner_7.png
vendored
Executable file
|
After Width: | Height: | Size: 96 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/bgError.png
vendored
Executable file
|
After Width: | Height: | Size: 40 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/discountbanner.png
vendored
Executable file
|
After Width: | Height: | Size: 108 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/favicon.ico
vendored
Executable file
|
After Width: | Height: | Size: 40 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/getbg.png
vendored
Executable file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/spjcdet_img1.png
vendored
Executable file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/spjcdet_img2.jpg
vendored
Executable file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/spjcdet_img3.png
vendored
Executable file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/spjcdet_img4.png
vendored
Executable file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/wx.png
vendored
Executable file
|
After Width: | Height: | Size: 114 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/img/youh.png
vendored
Executable file
|
After Width: | Height: | Size: 3.9 KiB |
1
康唯唯私活/Vr项目/code/dist/resources/static/js/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
c2a34f1e-dabb-4ccf-a9b0-dbe3135588cb
|
||||
32
康唯唯私活/Vr项目/code/dist/resources/static/js/app.js
vendored
Executable file
@@ -0,0 +1,32 @@
|
||||
requirejs.config({
|
||||
baseUrl: '/js',
|
||||
waitSeconds: 0,
|
||||
paths: {
|
||||
app: 'app',
|
||||
jquery: 'lib/jquery.min',
|
||||
swiper: 'lib/swiper/swiper.min',
|
||||
zui: 'lib/zui/js/zui.min',
|
||||
utils: 'utils/index',
|
||||
config: 'config/index'
|
||||
},
|
||||
map: {
|
||||
'*': {
|
||||
'css': 'lib/css'
|
||||
}
|
||||
},
|
||||
shim : { // 按需加载css
|
||||
'app/index': { deps: ['css!/css/home/index.css','css!/js/lib/swiper/swiper.min.css'] },
|
||||
'app/about': { deps: ['css!/css/home/about.css'] },
|
||||
'app/register': { deps: ['css!/css/home/register.css'] }
|
||||
}
|
||||
});
|
||||
|
||||
// 读取每个页面自定义属性data-module获取js文件名,然后自动加载并调用非对应页面的js文件中的 init 方法
|
||||
requirejs(["jquery"],function ($) {
|
||||
var module = $('.pages').attr('data-module');
|
||||
if(module != undefined){
|
||||
requirejs([ `app/${ module }` ], function (module) {
|
||||
module.init();
|
||||
})
|
||||
}
|
||||
});
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/app/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
4765c3ab-e96b-4baf-b932-777ed1069641
|
||||
12
康唯唯私活/Vr项目/code/dist/resources/static/js/app/about.js
vendored
Executable file
@@ -0,0 +1,12 @@
|
||||
define(['jquery','utils'],function ($,utils) {
|
||||
function about() {
|
||||
|
||||
}
|
||||
|
||||
about.prototype = {
|
||||
init () {
|
||||
}
|
||||
};
|
||||
|
||||
return new about();
|
||||
});
|
||||
30
康唯唯私活/Vr项目/code/dist/resources/static/js/app/index.js
vendored
Executable file
@@ -0,0 +1,30 @@
|
||||
define(['jquery','swiper','utils', 'zui'],function ($,swiper,utils) {
|
||||
function Index() {
|
||||
|
||||
}
|
||||
|
||||
Index.prototype = {
|
||||
init () {
|
||||
new $.zui.Messager('zui弹窗。', {
|
||||
icon: 'heart',
|
||||
placement: 'center'
|
||||
}).show();
|
||||
},
|
||||
|
||||
//初始化 swiper 轮播图
|
||||
newSwiper () {
|
||||
// new swiper ('.swiper-container', {
|
||||
// direction: 'horizontal',
|
||||
// loop: true,
|
||||
// autoplay: true,
|
||||
// pagination: {
|
||||
// el: '.swiper-pagination',
|
||||
// clickable :true,
|
||||
// }
|
||||
// });
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
return new Index();
|
||||
})
|
||||
14
康唯唯私活/Vr项目/code/dist/resources/static/js/app/register.js
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
define(['jquery','swiper','utils'],function ($,swiper,utils) {
|
||||
function Register() {
|
||||
|
||||
}
|
||||
|
||||
Register.prototype = {
|
||||
init () {
|
||||
console.log("用户注册")
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
return new Register();
|
||||
});
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/config/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
4d771ed8-a00e-47ab-ac69-4f32d7793174
|
||||
10
康唯唯私活/Vr项目/code/dist/resources/static/js/config/index.js
vendored
Executable file
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* 网站前端的 config 配置文件
|
||||
*/
|
||||
define([], function () {
|
||||
return {
|
||||
|
||||
// 请求基地址
|
||||
baseURL: 'http://www.geekhelp.cn/bmy/api'
|
||||
}
|
||||
})
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
5f81b52a-66ad-4d15-9454-9c9186df3db5
|
||||
169
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/css.js
vendored
Executable file
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
* Require-CSS RequireJS css! loader plugin
|
||||
* 0.1.10
|
||||
* Guy Bedford 2014
|
||||
* MIT
|
||||
*/
|
||||
|
||||
/*
|
||||
*
|
||||
* Usage:
|
||||
* require(['css!./mycssFile']);
|
||||
*
|
||||
* Tested and working in (up to latest versions as of March 2013):
|
||||
* Android
|
||||
* iOS 6
|
||||
* IE 6 - 10
|
||||
* Chrome 3 - 26
|
||||
* Firefox 3.5 - 19
|
||||
* Opera 10 - 12
|
||||
*
|
||||
* browserling.com used for virtual testing environment
|
||||
*
|
||||
* Credit to B Cavalier & J Hann for the IE 6 - 9 method,
|
||||
* refined with help from Martin Cermak
|
||||
*
|
||||
* Sources that helped along the way:
|
||||
* - https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent
|
||||
* - http://www.phpied.com/when-is-a-stylesheet-really-loaded/
|
||||
* - https://github.com/cujojs/curl/blob/master/src/curl/plugin/css.js
|
||||
*
|
||||
*/
|
||||
|
||||
define(function() {
|
||||
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss)
|
||||
if (typeof window == 'undefined')
|
||||
return { load: function(n, r, load){ load() } };
|
||||
|
||||
var head = document.getElementsByTagName('head')[0];
|
||||
|
||||
var engine = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/) || 0;
|
||||
|
||||
// use <style> @import load method (IE < 9, Firefox < 18)
|
||||
var useImportLoad = false;
|
||||
|
||||
// set to false for explicit <link> load checking when onload doesn't work perfectly (webkit)
|
||||
var useOnload = true;
|
||||
|
||||
// trident / msie
|
||||
if (engine[1] || engine[7])
|
||||
useImportLoad = parseInt(engine[1]) < 6 || parseInt(engine[7]) <= 9;
|
||||
// webkit
|
||||
else if (engine[2] || engine[8] || 'WebkitAppearance' in document.documentElement.style)
|
||||
useOnload = false;
|
||||
// gecko
|
||||
else if (engine[4])
|
||||
useImportLoad = parseInt(engine[4]) < 18;
|
||||
|
||||
//>>excludeEnd('excludeRequireCss')
|
||||
//main api object
|
||||
var cssAPI = {};
|
||||
|
||||
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss)
|
||||
cssAPI.pluginBuilder = './css-builder';
|
||||
|
||||
// <style> @import load method
|
||||
var curStyle, curSheet;
|
||||
var createStyle = function () {
|
||||
curStyle = document.createElement('style');
|
||||
head.appendChild(curStyle);
|
||||
curSheet = curStyle.styleSheet || curStyle.sheet;
|
||||
}
|
||||
var ieCnt = 0;
|
||||
var ieLoads = [];
|
||||
var ieCurCallback;
|
||||
|
||||
var createIeLoad = function(url) {
|
||||
curSheet.addImport(url);
|
||||
curStyle.onload = function(){ processIeLoad() };
|
||||
|
||||
ieCnt++;
|
||||
if (ieCnt == 31) {
|
||||
createStyle();
|
||||
ieCnt = 0;
|
||||
}
|
||||
}
|
||||
var processIeLoad = function() {
|
||||
ieCurCallback();
|
||||
|
||||
var nextLoad = ieLoads.shift();
|
||||
|
||||
if (!nextLoad) {
|
||||
ieCurCallback = null;
|
||||
return;
|
||||
}
|
||||
|
||||
ieCurCallback = nextLoad[1];
|
||||
createIeLoad(nextLoad[0]);
|
||||
}
|
||||
var importLoad = function(url, callback) {
|
||||
if (!curSheet || !curSheet.addImport)
|
||||
createStyle();
|
||||
|
||||
if (curSheet && curSheet.addImport) {
|
||||
// old IE
|
||||
if (ieCurCallback) {
|
||||
ieLoads.push([url, callback]);
|
||||
}
|
||||
else {
|
||||
createIeLoad(url);
|
||||
ieCurCallback = callback;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// old Firefox
|
||||
curStyle.textContent = '@import "' + url + '";';
|
||||
|
||||
var loadInterval = setInterval(function() {
|
||||
try {
|
||||
curStyle.sheet.cssRules;
|
||||
clearInterval(loadInterval);
|
||||
callback();
|
||||
} catch(e) {}
|
||||
}, 10);
|
||||
}
|
||||
}
|
||||
|
||||
// <link> load method
|
||||
var linkLoad = function(url, callback) {
|
||||
var link = document.createElement('link');
|
||||
link.type = 'text/css';
|
||||
link.rel = 'stylesheet';
|
||||
if (useOnload)
|
||||
link.onload = function() {
|
||||
link.onload = function() {};
|
||||
// for style dimensions queries, a short delay can still be necessary
|
||||
setTimeout(callback, 7);
|
||||
}
|
||||
else
|
||||
var loadInterval = setInterval(function() {
|
||||
for (var i = 0; i < document.styleSheets.length; i++) {
|
||||
var sheet = document.styleSheets[i];
|
||||
if (sheet.href == link.href) {
|
||||
clearInterval(loadInterval);
|
||||
return callback();
|
||||
}
|
||||
}
|
||||
}, 10);
|
||||
link.href = url;
|
||||
head.appendChild(link);
|
||||
}
|
||||
|
||||
//>>excludeEnd('excludeRequireCss')
|
||||
cssAPI.normalize = function(name, normalize) {
|
||||
if (name.substr(name.length - 4, 4) == '.css')
|
||||
name = name.substr(0, name.length - 4);
|
||||
|
||||
return normalize(name);
|
||||
}
|
||||
|
||||
//>>excludeStart('excludeRequireCss', pragmas.excludeRequireCss)
|
||||
cssAPI.load = function(cssId, req, load, config) {
|
||||
|
||||
(useImportLoad ? importLoad : linkLoad)(req.toUrl(cssId + '.css'), load);
|
||||
|
||||
}
|
||||
|
||||
//>>excludeEnd('excludeRequireCss')
|
||||
return cssAPI;
|
||||
});
|
||||
2
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/jquery.min.js
vendored
Executable file
5
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/require.js
vendored
Executable file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/swiper/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
5bc44bb9-5c1f-469b-b2d2-2d2af5a5c101
|
||||
12
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/swiper/swiper.min.css
vendored
Normal file
13
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/swiper/swiper.min.js
vendored
Executable file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/swiper/swiper.min.js.map
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
c442cfa6-404c-49b4-b24d-0780498e1c91
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
67671134-a2dc-4eb5-b622-48c26de86b7c
|
||||
1322
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui-theme-black.css
vendored
Normal file
1322
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui-theme-blue.css
vendored
Normal file
1322
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui-theme-green.css
vendored
Normal file
1322
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui-theme-red.css
vendored
Normal file
1358
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui-theme.css
vendored
Normal file
8876
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui.css
vendored
Normal file
6775
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/css/zui.lite.css
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/fonts/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
b3e1de78-68eb-42a9-a8d5-f4165c940b0f
|
||||
BIN
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/fonts/zenicon.eot
vendored
Normal file
375
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/fonts/zenicon.svg
vendored
Normal file
|
After Width: | Height: | Size: 290 KiB |
BIN
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/fonts/zenicon.ttf
vendored
Normal file
BIN
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/fonts/zenicon.woff
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/js/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
7086563e-9be4-4c60-8b50-cb46c5554531
|
||||
6569
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/js/zui.js
vendored
Normal file
3523
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/js/zui.lite.js
vendored
Normal file
15
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/js/zui.lite.min.js
vendored
Normal file
16
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/js/zui.min.js
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
a24d0b39-db23-4f37-aacb-d1f42a26715d
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/ajaxFake/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
b1ef7413-7e2c-47fe-b42c-2b320e40211c
|
||||
117
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/ajaxFake/zui.ajaxFake.js
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
/*!
|
||||
* ZUI: Ajax 响应模拟工具 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
/* ========================================================================
|
||||
* ZUI: AjaxFake.js
|
||||
* http://zui.sexy
|
||||
* ========================================================================
|
||||
* Copyright (c) 2017-2018 cnezsoft.com; Licensed MIT
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
(function($) {
|
||||
'use strict';
|
||||
|
||||
var routers = [];
|
||||
var ajax = $.ajax;
|
||||
|
||||
var getMatchRouter = function(url) {
|
||||
for(var i = (routers.length - 1); i >= 0; --i) {
|
||||
var router = routers[i];
|
||||
if (router.urlMatch instanceof RegExp) {
|
||||
if (router.urlMatch.test(url)) {
|
||||
return router;
|
||||
}
|
||||
} else if (typeof router.urlMatch === 'function') {
|
||||
if (router.urlMatch(url)) {
|
||||
return router;
|
||||
}
|
||||
} else if (url.indexOf(router.urlMatch) === 0) {
|
||||
return router;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var ajaxFake = function(options) {
|
||||
var url = options.url;
|
||||
var router = getMatchRouter(url);
|
||||
if (router) {
|
||||
var onSuccess = function(data, textStatus) {
|
||||
var dataType = options.dataType;
|
||||
if (dataType === 'json') {
|
||||
if (typeof data === 'string') {
|
||||
data = $.parseJSON(data);
|
||||
}
|
||||
} else {
|
||||
if (typeof data !== 'string') {
|
||||
data = JSON.stringify(data);
|
||||
}
|
||||
}
|
||||
if (options.success) {
|
||||
options.success(data, textStatus);
|
||||
}
|
||||
if (options.complete) {
|
||||
options.complete(null, textStatus);
|
||||
}
|
||||
};
|
||||
var onError = function(textStatus, errorThrown) {
|
||||
if (options.error) {
|
||||
options.error(null, textStatus, errorThrown);
|
||||
}
|
||||
if (options.complete) {
|
||||
options.complete(null, textStatus);
|
||||
}
|
||||
};
|
||||
if (options.beforeSend) {
|
||||
options.beforeSend(null, options);
|
||||
}
|
||||
var processRouter = function() {
|
||||
var result = $.isFunction(router.route) ? router.route(options, onSuccess, onError) : router.route;
|
||||
if (result !== true) {
|
||||
if (result === false) {
|
||||
onError();
|
||||
} else {
|
||||
onSuccess(result);
|
||||
}
|
||||
}
|
||||
console.groupCollapsed('FakeAjax: ' + url + ' %c' + (result === false ? 'Error' : 'Success'), (result === false) ? 'color: red' : 'color: green');
|
||||
console.log('response', result);
|
||||
console.log('ajax options', options);
|
||||
console.groupEnd();
|
||||
return result;
|
||||
}
|
||||
if (router.delay) {
|
||||
setTimeout(processRouter, router.delay);
|
||||
} else {
|
||||
processRouter();
|
||||
}
|
||||
return router;
|
||||
}
|
||||
return ajax.apply(null, arguments);
|
||||
};
|
||||
|
||||
var fakeServer = function(urlMatch, route, options) {
|
||||
if (!$.ajax_origin) {
|
||||
$.ajax_origin = ajax;
|
||||
$.ajax = ajaxFake;
|
||||
}
|
||||
var router = {};
|
||||
if ($.isPlainObject(urlMatch)) {
|
||||
$.extend(router, urlMatch);
|
||||
} else {
|
||||
router.urlMatch = urlMatch;
|
||||
router.route = route;
|
||||
if ($.isPlainObject(options)) {
|
||||
$.extend(router, options);
|
||||
}
|
||||
}
|
||||
routers.push(router);
|
||||
};
|
||||
|
||||
$.fakeServer = fakeServer;
|
||||
}(jQuery));
|
||||
|
||||
7
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/ajaxFake/zui.ajaxFake.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* ZUI: Ajax 响应模拟工具 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
!function(e){"use strict";var r=[],n=e.ajax,o=function(e){for(var n=r.length-1;n>=0;--n){var o=r[n];if(o.urlMatch instanceof RegExp){if(o.urlMatch.test(e))return o}else if("function"==typeof o.urlMatch){if(o.urlMatch(e))return o}else if(0===e.indexOf(o.urlMatch))return o}},t=function(r){var t=r.url,u=o(t);if(u){var l=function(n,o){var t=r.dataType;"json"===t?"string"==typeof n&&(n=e.parseJSON(n)):"string"!=typeof n&&(n=JSON.stringify(n)),r.success&&r.success(n,o),r.complete&&r.complete(null,o)},a=function(e,n){r.error&&r.error(null,e,n),r.complete&&r.complete(null,e)};r.beforeSend&&r.beforeSend(null,r);var c=function(){var n=e.isFunction(u.route)?u.route(r,l,a):u.route;return n!==!0&&(n===!1?a():l(n)),console.groupCollapsed("FakeAjax: "+t+" %c"+(n===!1?"Error":"Success"),n===!1?"color: red":"color: green"),console.log("response",n),console.log("ajax options",r),console.groupEnd(),n};return u.delay?setTimeout(c,u.delay):c(),u}return n.apply(null,arguments)},u=function(o,u,l){e.ajax_origin||(e.ajax_origin=n,e.ajax=t);var a={};e.isPlainObject(o)?e.extend(a,o):(a.urlMatch=o,a.route=u,e.isPlainObject(l)&&e.extend(a,l)),r.push(a)};e.fakeServer=u}(jQuery);
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/array/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
56148a60-ef8e-4e84-b2aa-bf4431cc43fa
|
||||
243
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/array/zui.array.js
vendored
Normal file
@@ -0,0 +1,243 @@
|
||||
/*!
|
||||
* ZUI: 数组辅助方法 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
/* ========================================================================
|
||||
* ZUI: array.js
|
||||
* Array Polyfill.
|
||||
* http://zui.sexy
|
||||
* ========================================================================
|
||||
* Copyright (c) 2014-2016 cnezsoft.com; Licensed MIT
|
||||
* ======================================================================== */
|
||||
|
||||
// Some polyfills copy from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
var STR_FUNCTION = 'function';
|
||||
|
||||
/**
|
||||
* Calls a function for each element in the array.
|
||||
*/
|
||||
if(!Array.prototype.forEach) {
|
||||
Array.prototype.forEach = function(fun /*, thisp*/ ) {
|
||||
var len = this.length;
|
||||
if(typeof fun != STR_FUNCTION)
|
||||
throw new TypeError();
|
||||
|
||||
var thisp = arguments[1];
|
||||
for(var i = 0; i < len; i++) {
|
||||
if(i in this) {
|
||||
fun.call(thisp, this[i], i, this);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Judge an object is an real array
|
||||
*/
|
||||
if(!Array.isArray) {
|
||||
Array.isArray = function(obj) {
|
||||
return Object.toString.call(obj) === '[object Array]';
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found.
|
||||
*/
|
||||
if(!Array.prototype.lastIndexOf) {
|
||||
Array.prototype.lastIndexOf = function(elt /*, from*/ ) {
|
||||
var len = this.length;
|
||||
|
||||
var from = Number(arguments[1]);
|
||||
if(isNaN(from)) {
|
||||
from = len - 1;
|
||||
} else {
|
||||
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
|
||||
if(from < 0)
|
||||
from += len;
|
||||
else if(from >= len)
|
||||
from = len - 1;
|
||||
}
|
||||
|
||||
for(; from > -1; from--) {
|
||||
if(from in this &&
|
||||
this[from] === elt)
|
||||
return from;
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if every element in this array satisfies the provided testing function.
|
||||
*/
|
||||
if(!Array.prototype.every) {
|
||||
Array.prototype.every = function(fun /*, thisp*/ ) {
|
||||
var len = this.length;
|
||||
if(typeof fun != STR_FUNCTION)
|
||||
throw new TypeError();
|
||||
|
||||
var thisp = arguments[1];
|
||||
for(var i = 0; i < len; i++) {
|
||||
if(i in this &&
|
||||
!fun.call(thisp, this[i], i, this))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new array with all of the elements of this array for which the provided filtering function returns true.
|
||||
*/
|
||||
if(!Array.prototype.filter) {
|
||||
Array.prototype.filter = function(fun /*, thisp*/ ) {
|
||||
var len = this.length;
|
||||
if(typeof fun != STR_FUNCTION)
|
||||
throw new TypeError();
|
||||
|
||||
var res = [];
|
||||
var thisp = arguments[1];
|
||||
for(var i = 0; i < len; i++) {
|
||||
if(i in this) {
|
||||
var val = this[i]; // in case fun mutates this
|
||||
if(fun.call(thisp, val, i, this))
|
||||
res.push(val);
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found.
|
||||
*/
|
||||
if(!Array.prototype.indexOf) {
|
||||
Array.prototype.indexOf = function(elt /*, from*/ ) {
|
||||
var len = this.length;
|
||||
|
||||
var from = Number(arguments[1]) || 0;
|
||||
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
|
||||
if(from < 0)
|
||||
from += len;
|
||||
|
||||
for(; from < len; from++) {
|
||||
if(from in this &&
|
||||
this[from] === elt)
|
||||
return from;
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new array with the results of calling a provided function on every element in this array.
|
||||
*/
|
||||
if(!Array.prototype.map) {
|
||||
Array.prototype.map = function(fun /*, thisp*/ ) {
|
||||
var len = this.length;
|
||||
if(typeof fun != STR_FUNCTION)
|
||||
throw new TypeError();
|
||||
|
||||
var res = new Array(len);
|
||||
var thisp = arguments[1];
|
||||
for(var i = 0; i < len; i++) {
|
||||
if(i in this)
|
||||
res[i] = fun.call(thisp, this[i], i, this);
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new array with the results match the condistions
|
||||
* @param {plain object or function} conditions
|
||||
* @param {array} result
|
||||
* @return {array}
|
||||
*/
|
||||
if(!Array.prototype.where) {
|
||||
Array.prototype.where = function(conditions, result) {
|
||||
result = result || [];
|
||||
var cdt, ok, objVal;
|
||||
this.forEach(function(val) {
|
||||
ok = true;
|
||||
for(var key in conditions) {
|
||||
cdt = conditions[key];
|
||||
if(typeof cdt === STR_FUNCTION) {
|
||||
ok = cdt(val);
|
||||
} else {
|
||||
objVal = val[key];
|
||||
ok = (objVal && objVal === cdt);
|
||||
}
|
||||
if(!ok) break;
|
||||
}
|
||||
if(ok) result.push(val);
|
||||
});
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a object contains grouped result as object key
|
||||
* @param {string} key
|
||||
* @return {Object}
|
||||
*/
|
||||
if(!Array.prototype.groupBy) {
|
||||
Array.prototype.groupBy = function(key) {
|
||||
var result = {};
|
||||
this.forEach(function(val) {
|
||||
var keyName = val[key];
|
||||
if(!keyName) {
|
||||
keyName = 'unkown';
|
||||
}
|
||||
|
||||
if(!result[keyName]) {
|
||||
result[keyName] = [];
|
||||
}
|
||||
result[keyName].push(val);
|
||||
});
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if at least one element in this array satisfies the provided testing conditions.
|
||||
* @param {function or plain object} conditions
|
||||
* @return {Boolean}
|
||||
*/
|
||||
if(!Array.prototype.has) {
|
||||
Array.prototype.has = function(conditions) {
|
||||
var result = false,
|
||||
cdt, ok, objVal;
|
||||
this.forEach(function(val) {
|
||||
ok = true;
|
||||
for(var key in conditions) {
|
||||
cdt = conditions[key];
|
||||
if(typeof cdt === STR_FUNCTION) {
|
||||
ok = cdt(val);
|
||||
} else {
|
||||
objVal = val[key];
|
||||
ok = (objVal && objVal === cdt);
|
||||
}
|
||||
if(!ok) break;
|
||||
}
|
||||
if(ok) {
|
||||
result = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
}());
|
||||
7
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/array/zui.array.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* ZUI: 数组辅助方法 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
!function(){"use strict";var r="function";Array.prototype.forEach||(Array.prototype.forEach=function(t){var o=this.length;if(typeof t!=r)throw new TypeError;for(var e=arguments[1],i=0;i<o;i++)i in this&&t.call(e,this[i],i,this)}),Array.isArray||(Array.isArray=function(r){return"[object Array]"===Object.toString.call(r)}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(r){var t=this.length,o=Number(arguments[1]);for(isNaN(o)?o=t-1:(o=o<0?Math.ceil(o):Math.floor(o),o<0?o+=t:o>=t&&(o=t-1));o>-1;o--)if(o in this&&this[o]===r)return o;return-1}),Array.prototype.every||(Array.prototype.every=function(t){var o=this.length;if(typeof t!=r)throw new TypeError;for(var e=arguments[1],i=0;i<o;i++)if(i in this&&!t.call(e,this[i],i,this))return!1;return!0}),Array.prototype.filter||(Array.prototype.filter=function(t){var o=this.length;if(typeof t!=r)throw new TypeError;for(var e=[],i=arguments[1],n=0;n<o;n++)if(n in this){var a=this[n];t.call(i,a,n,this)&&e.push(a)}return e}),Array.prototype.indexOf||(Array.prototype.indexOf=function(r){var t=this.length,o=Number(arguments[1])||0;for(o=o<0?Math.ceil(o):Math.floor(o),o<0&&(o+=t);o<t;o++)if(o in this&&this[o]===r)return o;return-1}),Array.prototype.map||(Array.prototype.map=function(t){var o=this.length;if(typeof t!=r)throw new TypeError;for(var e=new Array(o),i=arguments[1],n=0;n<o;n++)n in this&&(e[n]=t.call(i,this[n],n,this));return e}),Array.prototype.where||(Array.prototype.where=function(t,o){o=o||[];var e,i,n;return this.forEach(function(a){i=!0;for(var y in t)if(e=t[y],typeof e===r?i=e(a):(n=a[y],i=n&&n===e),!i)break;i&&o.push(a)}),o}),Array.prototype.groupBy||(Array.prototype.groupBy=function(r){var t={};return this.forEach(function(o){var e=o[r];e||(e="unkown"),t[e]||(t[e]=[]),t[e].push(o)}),t}),Array.prototype.has||(Array.prototype.has=function(t){var o,e,i,n=!1;return this.forEach(function(a){e=!0;for(var y in t)if(o=t[y],typeof o===r?e=o(a):(i=a[y],e=i&&i===o),!e)break;if(e)return n=!0,!1}),n})}();
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/board/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
2e9f2774-f6c3-463b-b385-fa85133aea72
|
||||
102
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/board/zui.board.css
vendored
Normal file
@@ -0,0 +1,102 @@
|
||||
/*!
|
||||
* ZUI: 看板 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
.board-item {
|
||||
padding: 6px 10px;
|
||||
margin-bottom: 5px;
|
||||
background: #fff;
|
||||
border: 1px solid #ddd;
|
||||
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, .05);
|
||||
box-shadow: 0 1px 0 rgba(0, 0, 0, .05);
|
||||
-webkit-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
-o-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
}
|
||||
.board-item:hover {
|
||||
-webkit-box-shadow: 0 1px 1 rgba(0, 0, 0, .1);
|
||||
box-shadow: 0 1px 1 rgba(0, 0, 0, .1);
|
||||
}
|
||||
.board-item.board-item-empty {
|
||||
display: none;
|
||||
color: #808080;
|
||||
border-style: dashed;
|
||||
}
|
||||
.board-item.board-item-shadow {
|
||||
display: none;
|
||||
padding: 0;
|
||||
background: #ddd;
|
||||
border: none;
|
||||
border-color: #ddd;
|
||||
-webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, .1);
|
||||
box-shadow: inset 0 0 4px rgba(0, 0, 0, .1);
|
||||
-webkit-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
-o-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
}
|
||||
.board-item.drag-shadow {
|
||||
width: 250px;
|
||||
cursor: move;
|
||||
background-color: #fff;
|
||||
border-color: #c4c4c4;
|
||||
-webkit-box-shadow: 1px 1px 15px rgba(0, 0, 0, .25);
|
||||
box-shadow: 1px 1px 15px rgba(0, 0, 0, .25);
|
||||
opacity: .9;
|
||||
}
|
||||
.board-item.drag-from {
|
||||
background-color: #ebf2f9;
|
||||
}
|
||||
.board-list .board-item:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.board {
|
||||
float: left;
|
||||
width: 250px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.board.drop-in-empty .board-item-empty {
|
||||
height: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
border: transparent;
|
||||
}
|
||||
.board:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
.board > .panel-body {
|
||||
padding: 5px;
|
||||
background: #f1f1f1;
|
||||
}
|
||||
.boards:before,
|
||||
.boards:after {
|
||||
display: table;
|
||||
content: " ";
|
||||
}
|
||||
.boards:after {
|
||||
clear: both;
|
||||
}
|
||||
.boards.dragging .board.drop-in {
|
||||
border-color: #c4c4c4;
|
||||
-webkit-box-shadow: 1px 1px 15px rgba(0, 0, 0, .25);
|
||||
box-shadow: 1px 1px 15px rgba(0, 0, 0, .25);
|
||||
}
|
||||
.boards.dragging .board.drop-in .board-item-shadow {
|
||||
display: block;
|
||||
}
|
||||
.boards.dragging .board .board-item.board-item-empty {
|
||||
display: block;
|
||||
}
|
||||
.boards.dragging .board-item.disable-drop {
|
||||
display: none;
|
||||
}
|
||||
.boards.drop-in .board-item.drag-from {
|
||||
height: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
border: transparent;
|
||||
}
|
||||
128
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/board/zui.board.js
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
/*!
|
||||
* ZUI: 看板 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
/* ========================================================================
|
||||
* ZUI: boards.js
|
||||
* http://zui.sexy
|
||||
* ========================================================================
|
||||
* Copyright (c) 2014-2016 cnezsoft.com; Licensed MIT
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
(function($) {
|
||||
'use strict';
|
||||
|
||||
if(!$.fn.droppable) throw new Error('Droppable requires for boards');
|
||||
|
||||
var Boards = function(element, options) {
|
||||
this.$ = $(element);
|
||||
this.options = this.getOptions(options);
|
||||
|
||||
this.getLang();
|
||||
this.init();
|
||||
};
|
||||
|
||||
Boards.DEFAULTS = {
|
||||
// lang: null,
|
||||
langs: {
|
||||
'zh_cn': {
|
||||
append2end: '移动到末尾'
|
||||
},
|
||||
'zh_tw': {
|
||||
append2end: '移动到末尾'
|
||||
},
|
||||
'en': {
|
||||
append2end: 'Move to the end.'
|
||||
}
|
||||
}
|
||||
}; // default options
|
||||
|
||||
Boards.prototype.getOptions = function(options) {
|
||||
options = $.extend({lang: $.zui.clientLang()}, Boards.DEFAULTS, this.$.data(), options);
|
||||
return options;
|
||||
};
|
||||
|
||||
Boards.prototype.getLang = function() {
|
||||
var options = this.options;
|
||||
this.lang = options.langs[options.lang] || options.langs[Boards.DEFAULTS.lang];
|
||||
};
|
||||
|
||||
Boards.prototype.init = function() {
|
||||
var idSeed = 1;
|
||||
var lang = this.lang;
|
||||
this.$.find('.board-item:not(".disable-drop"), .board:not(".disable-drop")').each(function() {
|
||||
var $this = $(this);
|
||||
if($this.attr('id')) {
|
||||
$this.attr('data-id', $this.attr('id'));
|
||||
} else if(!$this.attr('data-id')) {
|
||||
$this.attr('data-id', 'board' + (idSeed++));
|
||||
}
|
||||
|
||||
if($this.hasClass('board')) {
|
||||
$this.find('.board-list').append('<div class="board-item board-item-empty"><i class="icon-plus"></i> {append2end}</div>'.format(lang))
|
||||
.append('<div class="board-item board-item-shadow"></div>'.format(lang));
|
||||
}
|
||||
});
|
||||
|
||||
this.bind();
|
||||
};
|
||||
|
||||
Boards.prototype.bind = function(items) {
|
||||
var $boards = this.$,
|
||||
setting = this.options;
|
||||
|
||||
$boards.droppable($.extend({
|
||||
before: setting.before,
|
||||
target: '.board-item:not(".disable-drop, .board-item-shadow")',
|
||||
flex: true,
|
||||
selector: '.board-item:not(".disable-drop, .board-item-shadow")',
|
||||
start: function(e) {
|
||||
$boards.addClass('dragging').find('.board-item-shadow').height(e.element.outerHeight());
|
||||
},
|
||||
drag: function(e) {
|
||||
$boards.find('.board.drop-in-empty').removeClass('drop-in-empty');
|
||||
if(e.isIn) {
|
||||
var board = e.target.closest('.board').addClass('drop-in');
|
||||
var shadow = board.find('.board-item-shadow');
|
||||
var target = e.target;
|
||||
|
||||
$boards.addClass('drop-in').find('.board.drop-in').not(board).removeClass('drop-in');
|
||||
|
||||
shadow.insertBefore(target);
|
||||
|
||||
board.toggleClass('drop-in-empty', target.hasClass('board-item-empty'));
|
||||
}
|
||||
},
|
||||
drop: function(e) {
|
||||
if(e.isNew) {
|
||||
var result;
|
||||
if($.isFunction(setting['drop'])) {
|
||||
result = setting['drop'](e);
|
||||
}
|
||||
if(result !== false) e.element.insertBefore(e.target);
|
||||
}
|
||||
},
|
||||
finish: function() {
|
||||
$boards.removeClass('dragging').removeClass('drop-in').find('.board.drop-in').removeClass('drop-in');
|
||||
}
|
||||
}, setting.droppable));
|
||||
};
|
||||
|
||||
$.fn.boards = function(option) {
|
||||
return this.each(function() {
|
||||
var $this = $(this);
|
||||
var data = $this.data('zui.boards');
|
||||
var options = typeof option == 'object' && option;
|
||||
|
||||
if(!data) $this.data('zui.boards', (data = new Boards(this, options)));
|
||||
|
||||
if(typeof option == 'string') data[option]();
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.boards.Constructor = Boards;
|
||||
}(jQuery));
|
||||
6
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/board/zui.board.min.css
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* ZUI: 看板 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/.board-item{padding:6px 10px;margin-bottom:5px;background:#fff;border:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.05);box-shadow:0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.board-item:hover{-webkit-box-shadow:0 1px 1 rgba(0,0,0,.1);box-shadow:0 1px 1 rgba(0,0,0,.1)}.board-item.board-item-empty{display:none;color:grey;border-style:dashed}.board-item.board-item-shadow{display:none;padding:0;background:#ddd;border:none;border-color:#ddd;-webkit-box-shadow:inset 0 0 4px rgba(0,0,0,.1);box-shadow:inset 0 0 4px rgba(0,0,0,.1);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.board-item.drag-shadow{width:250px;cursor:move;background-color:#fff;border-color:#c4c4c4;-webkit-box-shadow:1px 1px 15px rgba(0,0,0,.25);box-shadow:1px 1px 15px rgba(0,0,0,.25);opacity:.9}.board-item.drag-from{background-color:#ebf2f9}.board-list .board-item:last-child{margin-bottom:0}.board{float:left;width:250px;margin-right:10px}.board.drop-in-empty .board-item-empty{height:0;padding:0;margin:0;overflow:hidden;border:transparent}.board:last-child{margin-right:0}.board>.panel-body{padding:5px;background:#f1f1f1}.boards:after,.boards:before{display:table;content:" "}.boards:after{clear:both}.boards.dragging .board.drop-in{border-color:#c4c4c4;-webkit-box-shadow:1px 1px 15px rgba(0,0,0,.25);box-shadow:1px 1px 15px rgba(0,0,0,.25)}.boards.dragging .board.drop-in .board-item-shadow{display:block}.boards.dragging .board .board-item.board-item-empty{display:block}.boards.dragging .board-item.disable-drop{display:none}.boards.drop-in .board-item.drag-from{height:0;padding:0;margin:0;overflow:hidden;border:transparent}
|
||||
7
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/board/zui.board.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* ZUI: 看板 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
!function(t){"use strict";if(!t.fn.droppable)throw new Error("Droppable requires for boards");var o=function(o,a){this.$=t(o),this.options=this.getOptions(a),this.getLang(),this.init()};o.DEFAULTS={langs:{zh_cn:{append2end:"移动到末尾"},zh_tw:{append2end:"移动到末尾"},en:{append2end:"Move to the end."}}},o.prototype.getOptions=function(a){return a=t.extend({lang:t.zui.clientLang()},o.DEFAULTS,this.$.data(),a)},o.prototype.getLang=function(){var t=this.options;this.lang=t.langs[t.lang]||t.langs[o.DEFAULTS.lang]},o.prototype.init=function(){var o=1,a=this.lang;this.$.find('.board-item:not(".disable-drop"), .board:not(".disable-drop")').each(function(){var i=t(this);i.attr("id")?i.attr("data-id",i.attr("id")):i.attr("data-id")||i.attr("data-id","board"+o++),i.hasClass("board")&&i.find(".board-list").append('<div class="board-item board-item-empty"><i class="icon-plus"></i> {append2end}</div>'.format(a)).append('<div class="board-item board-item-shadow"></div>'.format(a))}),this.bind()},o.prototype.bind=function(o){var a=this.$,i=this.options;a.droppable(t.extend({before:i.before,target:'.board-item:not(".disable-drop, .board-item-shadow")',flex:!0,selector:'.board-item:not(".disable-drop, .board-item-shadow")',start:function(t){a.addClass("dragging").find(".board-item-shadow").height(t.element.outerHeight())},drag:function(t){if(a.find(".board.drop-in-empty").removeClass("drop-in-empty"),t.isIn){var o=t.target.closest(".board").addClass("drop-in"),i=o.find(".board-item-shadow"),e=t.target;a.addClass("drop-in").find(".board.drop-in").not(o).removeClass("drop-in"),i.insertBefore(e),o.toggleClass("drop-in-empty",e.hasClass("board-item-empty"))}},drop:function(o){if(o.isNew){var a;t.isFunction(i.drop)&&(a=i.drop(o)),a!==!1&&o.element.insertBefore(o.target)}},finish:function(){a.removeClass("dragging").removeClass("drop-in").find(".board.drop-in").removeClass("drop-in")}},i.droppable))},t.fn.boards=function(a){return this.each(function(){var i=t(this),e=i.data("zui.boards"),n="object"==typeof a&&a;e||i.data("zui.boards",e=new o(this,n)),"string"==typeof a&&e[a]()})},t.fn.boards.Constructor=o}(jQuery);
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/bootbox/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
9a1bd055-15ce-4244-ae7a-73d0c3e802e9
|
||||
3
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/bootbox/bootbox.css
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.bootbox.modal .modal-dialog {
|
||||
width: 400px;
|
||||
}
|
||||
847
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/bootbox/bootbox.js
vendored
Normal file
@@ -0,0 +1,847 @@
|
||||
/* ========================================================================
|
||||
* Bootbox: bootbox.js [v4.4.0]
|
||||
* http://bootboxjs.com/
|
||||
*
|
||||
* ZUI: The file has been changed in ZUI. It will not keep update with the
|
||||
* official version in the future.
|
||||
* http://zui.sexy
|
||||
* ========================================================================
|
||||
* http://bootboxjs.com/license.txt
|
||||
* Improvement in ZUI:
|
||||
* 1. Determine client language and apply setting automatically.
|
||||
* 2. Changed button position.
|
||||
* ======================================================================== */
|
||||
|
||||
/*! bootbox.js v4.4.0 http://bootboxjs.com/license.txt */
|
||||
|
||||
// @see https://github.com/makeusabrew/bootbox/issues/180
|
||||
// @see https://github.com/makeusabrew/bootbox/issues/186
|
||||
(function(root, factory) {
|
||||
|
||||
'use strict';
|
||||
if(typeof define === "function" && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(["jquery"], factory);
|
||||
} else if(typeof exports === "object") {
|
||||
// Node. Does not work with strict CommonJS, but
|
||||
// only CommonJS-like environments that support module.exports,
|
||||
// like Node.
|
||||
module.exports = factory(require("jquery"));
|
||||
} else {
|
||||
// Browser globals (root is window)
|
||||
root.bootbox = factory(root.jQuery);
|
||||
}
|
||||
|
||||
}(this, function init($, undefined) {
|
||||
|
||||
'use strict';
|
||||
|
||||
// the base DOM structure needed to create a modal
|
||||
var templates = {
|
||||
dialog: "<div class='bootbox modal' tabindex='-1' role='dialog'>" +
|
||||
"<div class='modal-dialog'>" +
|
||||
"<div class='modal-content'>" +
|
||||
"<div class='modal-body'><div class='bootbox-body'></div></div>" +
|
||||
"</div>" +
|
||||
"</div>" +
|
||||
"</div>",
|
||||
header: "<div class='modal-header'>" +
|
||||
"<h4 class='modal-title'></h4>" +
|
||||
"</div>",
|
||||
footer: "<div class='modal-footer'></div>",
|
||||
closeButton: "<button type='button' class='bootbox-close-button close' data-dismiss='modal' aria-hidden='true'>×</button>",
|
||||
form: "<form class='bootbox-form'></form>",
|
||||
inputs: {
|
||||
text: "<input class='bootbox-input bootbox-input-text form-control' autocomplete=off type=text />",
|
||||
textarea: "<textarea class='bootbox-input bootbox-input-textarea form-control'></textarea>",
|
||||
email: "<input class='bootbox-input bootbox-input-email form-control' autocomplete='off' type='email' />",
|
||||
select: "<select class='bootbox-input bootbox-input-select form-control'></select>",
|
||||
checkbox: "<div class='checkbox'><label><input class='bootbox-input bootbox-input-checkbox' type='checkbox' /></label></div>",
|
||||
date: "<input class='bootbox-input bootbox-input-date form-control' autocomplete=off type='date' />",
|
||||
time: "<input class='bootbox-input bootbox-input-time form-control' autocomplete=off type='time' />",
|
||||
number: "<input class='bootbox-input bootbox-input-number form-control' autocomplete=off type='number' />",
|
||||
password: "<input class='bootbox-input bootbox-input-password form-control' autocomplete='off' type='password' />"
|
||||
}
|
||||
};
|
||||
|
||||
var defaults = {
|
||||
// default language
|
||||
locale: $.zui && $.zui.clientLang ? $.zui.clientLang() : 'zh_cn',
|
||||
// show backdrop or not. Default to static so user has to interact with dialog
|
||||
backdrop: "static",
|
||||
// animate the modal in/out
|
||||
animate: true,
|
||||
// additional class string applied to the top level dialog
|
||||
className: null,
|
||||
// whether or not to include a close button
|
||||
closeButton: true,
|
||||
// show the dialog immediately by default
|
||||
show: true,
|
||||
// dialog container
|
||||
container: "body"
|
||||
};
|
||||
|
||||
// our public object; augmented after our private API
|
||||
var exports = {};
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
function _t(key) {
|
||||
var locale = locales[defaults.locale];
|
||||
return locale ? locale[key] : locales.en[key];
|
||||
}
|
||||
|
||||
function processCallback(e, dialog, callback) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
// by default we assume a callback will get rid of the dialog,
|
||||
// although it is given the opportunity to override this
|
||||
|
||||
// so, if the callback can be invoked and it *explicitly returns false*
|
||||
// then we'll set a flag to keep the dialog active...
|
||||
var preserveDialog = $.isFunction(callback) && callback.call(dialog, e) === false;
|
||||
|
||||
// ... otherwise we'll bin it
|
||||
if(!preserveDialog) {
|
||||
dialog.modal("hide");
|
||||
}
|
||||
}
|
||||
|
||||
function getKeyLength(obj) {
|
||||
// @TODO defer to Object.keys(x).length if available?
|
||||
var k, t = 0;
|
||||
for(k in obj) {
|
||||
t++;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
function each(collection, iterator) {
|
||||
var index = 0;
|
||||
$.each(collection, function(key, value) {
|
||||
iterator(key, value, index++);
|
||||
});
|
||||
}
|
||||
|
||||
function sanitize(options) {
|
||||
var buttons;
|
||||
var total;
|
||||
|
||||
if(typeof options !== "object") {
|
||||
throw new Error("Please supply an object of options");
|
||||
}
|
||||
|
||||
if(!options.message) {
|
||||
throw new Error("Please specify a message");
|
||||
}
|
||||
|
||||
// make sure any supplied options take precedence over defaults
|
||||
options = $.extend({}, defaults, options);
|
||||
|
||||
if(!options.buttons) {
|
||||
options.buttons = {};
|
||||
}
|
||||
|
||||
buttons = options.buttons;
|
||||
|
||||
total = getKeyLength(buttons);
|
||||
|
||||
each(buttons, function(key, button, index) {
|
||||
|
||||
if($.isFunction(button)) {
|
||||
// short form, assume value is our callback. Since button
|
||||
// isn't an object it isn't a reference either so re-assign it
|
||||
button = buttons[key] = {
|
||||
callback: button
|
||||
};
|
||||
}
|
||||
|
||||
// before any further checks make sure by now button is the correct type
|
||||
if($.type(button) !== "object") {
|
||||
throw new Error("button with key " + key + " must be an object");
|
||||
}
|
||||
|
||||
if(!button.label) {
|
||||
// the lack of an explicit label means we'll assume the key is good enough
|
||||
button.label = key;
|
||||
}
|
||||
|
||||
if(!button.className) {
|
||||
if((total === 2 && (key === 'ok' || key === 'confirm')) || total === 1) {
|
||||
// always add a primary to the main option in a two-button dialog
|
||||
button.className = "btn-primary";
|
||||
} else {
|
||||
button.className = "btn-default";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
/**
|
||||
* map a flexible set of arguments into a single returned object
|
||||
* if args.length is already one just return it, otherwise
|
||||
* use the properties argument to map the unnamed args to
|
||||
* object properties
|
||||
* so in the latter case:
|
||||
* mapArguments(["foo", $.noop], ["message", "callback"])
|
||||
* -> { message: "foo", callback: $.noop }
|
||||
*/
|
||||
function mapArguments(args, properties) {
|
||||
var argn = args.length;
|
||||
var options = {};
|
||||
|
||||
if(argn < 1 || argn > 2) {
|
||||
throw new Error("Invalid argument length");
|
||||
}
|
||||
|
||||
if(argn === 2 || typeof args[0] === "string") {
|
||||
options[properties[0]] = args[0];
|
||||
options[properties[1]] = args[1];
|
||||
} else {
|
||||
options = args[0];
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
/**
|
||||
* merge a set of default dialog options with user supplied arguments
|
||||
*/
|
||||
function mergeArguments(defaults, args, properties) {
|
||||
return $.extend(
|
||||
// deep merge
|
||||
true,
|
||||
// ensure the target is an empty, unreferenced object
|
||||
{},
|
||||
// the base options object for this type of dialog (often just buttons)
|
||||
defaults,
|
||||
// args could be an object or array; if it's an array properties will
|
||||
// map it to a proper options object
|
||||
mapArguments(
|
||||
args,
|
||||
properties
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* this entry-level method makes heavy use of composition to take a simple
|
||||
* range of inputs and return valid options suitable for passing to bootbox.dialog
|
||||
*/
|
||||
function mergeDialogOptions(className, labels, properties, args) {
|
||||
// build up a base set of dialog properties
|
||||
var baseOptions = {
|
||||
className: "bootbox-" + className,
|
||||
buttons: createLabels.apply(null, labels)
|
||||
};
|
||||
|
||||
// ensure the buttons properties generated, *after* merging
|
||||
// with user args are still valid against the supplied labels
|
||||
return validateButtons(
|
||||
// merge the generated base properties with user supplied arguments
|
||||
mergeArguments(
|
||||
baseOptions,
|
||||
args,
|
||||
// if args.length > 1, properties specify how each arg maps to an object key
|
||||
properties
|
||||
),
|
||||
labels
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* from a given list of arguments return a suitable object of button labels
|
||||
* all this does is normalise the given labels and translate them where possible
|
||||
* e.g. "ok", "confirm" -> { ok: "OK, cancel: "Annuleren" }
|
||||
*/
|
||||
function createLabels() {
|
||||
var buttons = {};
|
||||
|
||||
for(var i = 0, j = arguments.length; i < j; i++) {
|
||||
var argument = arguments[i];
|
||||
var key = argument.toLowerCase();
|
||||
var value = argument.toUpperCase();
|
||||
|
||||
buttons[key] = {
|
||||
label: _t(value)
|
||||
};
|
||||
}
|
||||
|
||||
return buttons;
|
||||
}
|
||||
|
||||
function validateButtons(options, buttons) {
|
||||
var allowedButtons = {};
|
||||
each(buttons, function(key, value) {
|
||||
allowedButtons[value] = true;
|
||||
});
|
||||
|
||||
each(options.buttons, function(key) {
|
||||
if(allowedButtons[key] === undefined) {
|
||||
throw new Error("button key " + key + " is not allowed (options are " + buttons.join("\n") + ")");
|
||||
}
|
||||
});
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
exports.alert = function() {
|
||||
var options;
|
||||
|
||||
options = mergeDialogOptions("alert", ["ok"], ["message", "callback"], arguments);
|
||||
|
||||
if(options.callback && !$.isFunction(options.callback)) {
|
||||
throw new Error("alert requires callback property to be a function when provided");
|
||||
}
|
||||
|
||||
/**
|
||||
* overrides
|
||||
*/
|
||||
options.buttons.ok.callback = options.onEscape = function() {
|
||||
if($.isFunction(options.callback)) {
|
||||
return options.callback.call(this);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
return exports.dialog(options);
|
||||
};
|
||||
|
||||
exports.confirm = function() {
|
||||
var options;
|
||||
|
||||
// ZUI change begin
|
||||
options = mergeDialogOptions("confirm", ["confirm", "cancel"], ["message", "callback"], arguments);
|
||||
// OLD WAY: options = mergeDialogOptions("confirm", ["cancel", "confirm"], ["message", "callback"], arguments);
|
||||
// ZUI change end
|
||||
|
||||
/**
|
||||
* overrides; undo anything the user tried to set they shouldn't have
|
||||
*/
|
||||
options.buttons.cancel.callback = options.onEscape = function() {
|
||||
return options.callback.call(this, false);
|
||||
};
|
||||
|
||||
options.buttons.confirm.callback = function() {
|
||||
return options.callback.call(this, true);
|
||||
};
|
||||
|
||||
// confirm specific validation
|
||||
if(!$.isFunction(options.callback)) {
|
||||
throw new Error("confirm requires a callback");
|
||||
}
|
||||
|
||||
return exports.dialog(options);
|
||||
};
|
||||
|
||||
exports.prompt = function() {
|
||||
var options;
|
||||
var defaults;
|
||||
var dialog;
|
||||
var form;
|
||||
var input;
|
||||
var shouldShow;
|
||||
var inputOptions;
|
||||
|
||||
// we have to create our form first otherwise
|
||||
// its value is undefined when gearing up our options
|
||||
// @TODO this could be solved by allowing message to
|
||||
// be a function instead...
|
||||
form = $(templates.form);
|
||||
|
||||
// prompt defaults are more complex than others in that
|
||||
// users can override more defaults
|
||||
// @TODO I don't like that prompt has to do a lot of heavy
|
||||
// lifting which mergeDialogOptions can *almost* support already
|
||||
// just because of 'value' and 'inputType' - can we refactor?
|
||||
defaults = {
|
||||
className: "bootbox-prompt",
|
||||
buttons: createLabels("cancel", "confirm"),
|
||||
value: "",
|
||||
inputType: "text"
|
||||
};
|
||||
|
||||
options = validateButtons(
|
||||
// ZUI change begin
|
||||
mergeArguments(defaults, arguments, ["title", "callback"]), ["confirm", "cancel"]
|
||||
// OLD WAY: mergeArguments(defaults, arguments, ["title", "callback"]), ["cancel", "confirm"]arguments);
|
||||
// ZUI change end
|
||||
);
|
||||
|
||||
// capture the user's show value; we always set this to false before
|
||||
// spawning the dialog to give us a chance to attach some handlers to
|
||||
// it, but we need to make sure we respect a preference not to show it
|
||||
shouldShow = (options.show === undefined) ? true : options.show;
|
||||
|
||||
/**
|
||||
* overrides; undo anything the user tried to set they shouldn't have
|
||||
*/
|
||||
options.message = form;
|
||||
|
||||
options.buttons.cancel.callback = options.onEscape = function() {
|
||||
return options.callback.call(this, null);
|
||||
};
|
||||
|
||||
options.buttons.confirm.callback = function() {
|
||||
var value;
|
||||
|
||||
switch(options.inputType) {
|
||||
case "text":
|
||||
case "textarea":
|
||||
case "email":
|
||||
case "select":
|
||||
case "date":
|
||||
case "time":
|
||||
case "number":
|
||||
case "password":
|
||||
value = input.val();
|
||||
break;
|
||||
|
||||
case "checkbox":
|
||||
var checkedItems = input.find("input:checked");
|
||||
|
||||
// we assume that checkboxes are always multiple,
|
||||
// hence we default to an empty array
|
||||
value = [];
|
||||
|
||||
each(checkedItems, function(_, item) {
|
||||
value.push($(item).val());
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
return options.callback.call(this, value);
|
||||
};
|
||||
|
||||
options.show = false;
|
||||
|
||||
// prompt specific validation
|
||||
if(!options.title) {
|
||||
throw new Error("prompt requires a title");
|
||||
}
|
||||
|
||||
if(!$.isFunction(options.callback)) {
|
||||
throw new Error("prompt requires a callback");
|
||||
}
|
||||
|
||||
if(!templates.inputs[options.inputType]) {
|
||||
throw new Error("invalid prompt type");
|
||||
}
|
||||
|
||||
// create the input based on the supplied type
|
||||
input = $(templates.inputs[options.inputType]);
|
||||
|
||||
switch(options.inputType) {
|
||||
case "text":
|
||||
case "textarea":
|
||||
case "email":
|
||||
case "date":
|
||||
case "time":
|
||||
case "number":
|
||||
case "password":
|
||||
input.val(options.value);
|
||||
break;
|
||||
|
||||
case "select":
|
||||
var groups = {};
|
||||
inputOptions = options.inputOptions || [];
|
||||
|
||||
if(!$.isArray(inputOptions)) {
|
||||
throw new Error("Please pass an array of input options");
|
||||
}
|
||||
|
||||
if(!inputOptions.length) {
|
||||
throw new Error("prompt with select requires options");
|
||||
}
|
||||
|
||||
each(inputOptions, function(_, option) {
|
||||
|
||||
// assume the element to attach to is the input...
|
||||
var elem = input;
|
||||
|
||||
if(option.value === undefined || option.text === undefined) {
|
||||
throw new Error("given options in wrong format");
|
||||
}
|
||||
|
||||
// ... but override that element if this option sits in a group
|
||||
|
||||
if(option.group) {
|
||||
// initialise group if necessary
|
||||
if(!groups[option.group]) {
|
||||
groups[option.group] = $("<optgroup/>").attr("label", option.group);
|
||||
}
|
||||
|
||||
elem = groups[option.group];
|
||||
}
|
||||
|
||||
elem.append("<option value='" + option.value + "'>" + option.text + "</option>");
|
||||
});
|
||||
|
||||
each(groups, function(_, group) {
|
||||
input.append(group);
|
||||
});
|
||||
|
||||
// safe to set a select's value as per a normal input
|
||||
input.val(options.value);
|
||||
break;
|
||||
|
||||
case "checkbox":
|
||||
var values = $.isArray(options.value) ? options.value : [options.value];
|
||||
inputOptions = options.inputOptions || [];
|
||||
|
||||
if(!inputOptions.length) {
|
||||
throw new Error("prompt with checkbox requires options");
|
||||
}
|
||||
|
||||
if(!inputOptions[0].value || !inputOptions[0].text) {
|
||||
throw new Error("given options in wrong format");
|
||||
}
|
||||
|
||||
// checkboxes have to nest within a containing element, so
|
||||
// they break the rules a bit and we end up re-assigning
|
||||
// our 'input' element to this container instead
|
||||
input = $("<div/>");
|
||||
|
||||
each(inputOptions, function(_, option) {
|
||||
var checkbox = $(templates.inputs[options.inputType]);
|
||||
|
||||
checkbox.find("input").attr("value", option.value);
|
||||
checkbox.find("label").append(option.text);
|
||||
|
||||
// we've ensured values is an array so we can always iterate over it
|
||||
each(values, function(_, value) {
|
||||
if(value === option.value) {
|
||||
checkbox.find("input").prop("checked", true);
|
||||
}
|
||||
});
|
||||
|
||||
input.append(checkbox);
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
// @TODO provide an attributes option instead
|
||||
// and simply map that as keys: vals
|
||||
if(options.placeholder) {
|
||||
input.attr("placeholder", options.placeholder);
|
||||
}
|
||||
|
||||
if(options.pattern) {
|
||||
input.attr("pattern", options.pattern);
|
||||
}
|
||||
|
||||
if(options.maxlength) {
|
||||
input.attr("maxlength", options.maxlength);
|
||||
}
|
||||
|
||||
// now place it in our form
|
||||
form.append(input);
|
||||
|
||||
form.on("submit", function(e) {
|
||||
e.preventDefault();
|
||||
// Fix for SammyJS (or similar JS routing library) hijacking the form post.
|
||||
e.stopPropagation();
|
||||
// @TODO can we actually click *the* button object instead?
|
||||
// e.g. buttons.confirm.click() or similar
|
||||
dialog.find(".btn-primary").click();
|
||||
});
|
||||
|
||||
dialog = exports.dialog(options);
|
||||
|
||||
// clear the existing handler focusing the submit button...
|
||||
dialog.off("shown.zui.modal");
|
||||
|
||||
// ...and replace it with one focusing our input, if possible
|
||||
dialog.on("shown.zui.modal", function() {
|
||||
// need the closure here since input isn't
|
||||
// an object otherwise
|
||||
input.focus();
|
||||
});
|
||||
|
||||
if(shouldShow === true) {
|
||||
dialog.modal("show");
|
||||
}
|
||||
|
||||
return dialog;
|
||||
};
|
||||
|
||||
exports.dialog = function(options) {
|
||||
options = sanitize(options);
|
||||
|
||||
|
||||
var dialog = $(templates.dialog);
|
||||
var innerDialog = dialog.find(".modal-dialog");
|
||||
var body = dialog.find(".modal-body");
|
||||
var buttons = options.buttons;
|
||||
var buttonStr = "";
|
||||
var callbacks = {
|
||||
onEscape: options.onEscape
|
||||
};
|
||||
|
||||
if($.fn.modal === undefined) {
|
||||
throw new Error(
|
||||
"$.fn.modal is not defined; please double check you have included " +
|
||||
"the Bootstrap JavaScript library. See http://getbootstrap.com/javascript/ " +
|
||||
"for more details."
|
||||
);
|
||||
}
|
||||
|
||||
each(buttons, function(key, button) {
|
||||
|
||||
// @TODO I don't like this string appending to itself; bit dirty. Needs reworking
|
||||
// can we just build up button elements instead? slower but neater. Then button
|
||||
// can just become a template too
|
||||
buttonStr += "<button data-bb-handler='" + key + "' type='button' class='btn " + button.className + "'>" + button.label + "</button>";
|
||||
callbacks[key] = button.callback;
|
||||
});
|
||||
|
||||
body.find(".bootbox-body").html(options.message);
|
||||
|
||||
if(options.animate === true) {
|
||||
dialog.addClass("fade");
|
||||
}
|
||||
|
||||
if(options.className) {
|
||||
dialog.addClass(options.className);
|
||||
}
|
||||
|
||||
if(options.size === "large") {
|
||||
innerDialog.addClass("modal-lg");
|
||||
} else if(options.size === "small") {
|
||||
innerDialog.addClass("modal-sm");
|
||||
}
|
||||
|
||||
if(options.title) {
|
||||
body.before(templates.header);
|
||||
}
|
||||
|
||||
if(options.closeButton) {
|
||||
var closeButton = $(templates.closeButton);
|
||||
|
||||
if(options.title) {
|
||||
dialog.find(".modal-header").prepend(closeButton);
|
||||
} else {
|
||||
closeButton.css("margin-top", "-10px").prependTo(body);
|
||||
}
|
||||
}
|
||||
|
||||
if(options.title) {
|
||||
dialog.find(".modal-title").html(options.title);
|
||||
}
|
||||
|
||||
if(buttonStr.length) {
|
||||
body.after(templates.footer);
|
||||
dialog.find(".modal-footer").html(buttonStr);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Bootstrap event listeners; used handle extra
|
||||
* setup & teardown required after the underlying
|
||||
* modal has performed certain actions
|
||||
*/
|
||||
|
||||
dialog.on("hidden.zui.modal", function(e) {
|
||||
// ensure we don't accidentally intercept hidden events triggered
|
||||
// by children of the current dialog. We shouldn't anymore now BS
|
||||
// namespaces its events; but still worth doing
|
||||
if(e.target === this) {
|
||||
dialog.remove();
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
dialog.on("show.zui.modal", function() {
|
||||
// sadly this doesn't work; show is called *just* before
|
||||
// the backdrop is added so we'd need a setTimeout hack or
|
||||
// otherwise... leaving in as would be nice
|
||||
if (options.backdrop) {
|
||||
dialog.next(".modal-backdrop").addClass("bootbox-backdrop");
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
dialog.on("shown.zui.modal", function() {
|
||||
dialog.find(".btn-primary:first").focus();
|
||||
});
|
||||
|
||||
/**
|
||||
* Bootbox event listeners; experimental and may not last
|
||||
* just an attempt to decouple some behaviours from their
|
||||
* respective triggers
|
||||
*/
|
||||
|
||||
if(options.backdrop !== "static") {
|
||||
// A boolean true/false according to the Bootstrap docs
|
||||
// should show a dialog the user can dismiss by clicking on
|
||||
// the background.
|
||||
// We always only ever pass static/false to the actual
|
||||
// $.modal function because with `true` we can't trap
|
||||
// this event (the .modal-backdrop swallows it)
|
||||
// However, we still want to sort of respect true
|
||||
// and invoke the escape mechanism instead
|
||||
dialog.on("click.dismiss.zui.modal", function(e) {
|
||||
// @NOTE: the target varies in >= 3.3.x releases since the modal backdrop
|
||||
// moved *inside* the outer dialog rather than *alongside* it
|
||||
if(dialog.children(".modal-backdrop").length) {
|
||||
e.currentTarget = dialog.children(".modal-backdrop").get(0);
|
||||
}
|
||||
|
||||
if(e.target !== e.currentTarget) {
|
||||
return;
|
||||
}
|
||||
|
||||
dialog.trigger("escape.close.bb");
|
||||
});
|
||||
}
|
||||
|
||||
dialog.on("escape.close.bb", function(e) {
|
||||
if(callbacks.onEscape) {
|
||||
processCallback(e, dialog, callbacks.onEscape);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Standard jQuery event listeners; used to handle user
|
||||
* interaction with our dialog
|
||||
*/
|
||||
|
||||
dialog.on("click", ".modal-footer button", function(e) {
|
||||
var callbackKey = $(this).data("bb-handler");
|
||||
|
||||
processCallback(e, dialog, callbacks[callbackKey]);
|
||||
});
|
||||
|
||||
dialog.on("click", ".bootbox-close-button", function(e) {
|
||||
// onEscape might be falsy but that's fine; the fact is
|
||||
// if the user has managed to click the close button we
|
||||
// have to close the dialog, callback or not
|
||||
processCallback(e, dialog, callbacks.onEscape);
|
||||
});
|
||||
|
||||
dialog.on("keyup", function(e) {
|
||||
if(e.which === 27) {
|
||||
dialog.trigger("escape.close.bb");
|
||||
}
|
||||
});
|
||||
|
||||
// the remainder of this method simply deals with adding our
|
||||
// dialogent to the DOM, augmenting it with Bootstrap's modal
|
||||
// functionality and then giving the resulting object back
|
||||
// to our caller
|
||||
|
||||
$(options.container).append(dialog);
|
||||
|
||||
dialog.modal({
|
||||
backdrop: options.backdrop ? "static" : false,
|
||||
keyboard: false,
|
||||
show: false
|
||||
});
|
||||
|
||||
if(options.show) {
|
||||
dialog.modal("show");
|
||||
}
|
||||
|
||||
// @TODO should we return the raw element here or should
|
||||
// we wrap it in an object on which we can expose some neater
|
||||
// methods, e.g. var d = bootbox.alert(); d.hide(); instead
|
||||
// of d.modal("hide");
|
||||
|
||||
/*
|
||||
function BBDialog(elem) {
|
||||
this.elem = elem;
|
||||
}
|
||||
|
||||
BBDialog.prototype = {
|
||||
hide: function() {
|
||||
return this.elem.modal("hide");
|
||||
},
|
||||
show: function() {
|
||||
return this.elem.modal("show");
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
return dialog;
|
||||
|
||||
};
|
||||
|
||||
exports.setDefaults = function() {
|
||||
var values = {};
|
||||
|
||||
if(arguments.length === 2) {
|
||||
// allow passing of single key/value...
|
||||
values[arguments[0]] = arguments[1];
|
||||
} else {
|
||||
// ... and as an object too
|
||||
values = arguments[0];
|
||||
}
|
||||
|
||||
$.extend(defaults, values);
|
||||
};
|
||||
|
||||
exports.hideAll = function() {
|
||||
$(".bootbox").modal("hide");
|
||||
|
||||
return exports;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* standard locales. Please add more according to ISO 639-1 standard. Multiple language variants are
|
||||
* unlikely to be required. If this gets too large it can be split out into separate JS files.
|
||||
*/
|
||||
var locales = {
|
||||
en: {
|
||||
OK: "OK",
|
||||
CANCEL: "Cancel",
|
||||
CONFIRM: "OK"
|
||||
},
|
||||
zh_cn: {
|
||||
OK: "确认",
|
||||
CANCEL: "取消",
|
||||
CONFIRM: "确认"
|
||||
},
|
||||
zh_tw: {
|
||||
OK: "確認",
|
||||
CANCEL: "取消",
|
||||
CONFIRM: "確認"
|
||||
}
|
||||
};
|
||||
|
||||
exports.addLocale = function(name, values) {
|
||||
$.each(["OK", "CANCEL", "CONFIRM"], function(_, v) {
|
||||
if(!values[v]) {
|
||||
throw new Error("Please supply a translation for '" + v + "'");
|
||||
}
|
||||
});
|
||||
|
||||
locales[name] = {
|
||||
OK: values.OK,
|
||||
CANCEL: values.CANCEL,
|
||||
CONFIRM: values.CONFIRM
|
||||
};
|
||||
|
||||
return exports;
|
||||
};
|
||||
|
||||
exports.removeLocale = function(name) {
|
||||
delete locales[name];
|
||||
|
||||
return exports;
|
||||
};
|
||||
|
||||
exports.setLocale = function(name) {
|
||||
return exports.setDefaults("locale", name);
|
||||
};
|
||||
|
||||
exports.init = function(_$) {
|
||||
return init(_$ || $);
|
||||
};
|
||||
|
||||
return exports;
|
||||
}));
|
||||
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/bootbox/bootbox.min.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.bootbox.modal .modal-dialog{width:400px}
|
||||
2
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/bootbox/bootbox.min.js
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/calendar/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
72e34dfb-a649-4eaf-a2ac-ed1c6a4f49df
|
||||
156
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/calendar/zui.calendar.css
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
/*!
|
||||
* ZUI: 日历 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
.calendar {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.calendar > header {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.calendar > header .btn-toolbar > .btn-group {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.calendar > header .calendar-caption {
|
||||
line-height: 30px;
|
||||
}
|
||||
.calendar .table {
|
||||
margin-bottom: 0;
|
||||
table-layout: fixed;
|
||||
}
|
||||
.calendar .table > thead > tr > th,
|
||||
.calendar .table > tbody > tr > td {
|
||||
width: 14.28571428571429%;
|
||||
padding: 0;
|
||||
}
|
||||
.calendar .table > thead > tr > th {
|
||||
color: #808080;
|
||||
text-align: center;
|
||||
background-color: #fff;
|
||||
}
|
||||
.calendar .weekends-empty .table > thead > tr > th,
|
||||
.calendar .weekends-empty .table > tbody > tr > td {
|
||||
width: 20%;
|
||||
}
|
||||
.calendar .weekends-empty .table > thead > tr > th.weekend-head,
|
||||
.calendar .weekends-empty .table > tbody > tr > td.weekend-day {
|
||||
width: 40px;
|
||||
min-width: 40px;
|
||||
}
|
||||
.calendar .day {
|
||||
opacity: .7;
|
||||
}
|
||||
.calendar .day > .heading {
|
||||
padding: 2px 5px;
|
||||
text-align: right;
|
||||
}
|
||||
.calendar .day > .heading > .month {
|
||||
padding: 1px 2px;
|
||||
color: #fff;
|
||||
background-color: #b3b3b3;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.calendar .day > .content {
|
||||
height: 100%;
|
||||
min-height: 70px;
|
||||
}
|
||||
.calendar .cell-day {
|
||||
background-color: #f1f1f1;
|
||||
}
|
||||
.calendar .cell-day.past > .day > .content {
|
||||
opacity: .7;
|
||||
}
|
||||
.calendar .cell-day.current-month {
|
||||
background: none;
|
||||
}
|
||||
.calendar .cell-day.current-month > .day {
|
||||
opacity: 1;
|
||||
}
|
||||
.calendar .cell-day.current {
|
||||
background-color: #fff0d5;
|
||||
-webkit-box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #808080;
|
||||
box-shadow: inset 1px 1px 0 #808080, inset -1px -1px 0 #808080;
|
||||
}
|
||||
.calendar .cell-day.current > .day > .content {
|
||||
padding: 0;
|
||||
}
|
||||
.calendar .cell-day.current > .day > .heading {
|
||||
background-color: rgba(0, 0, 0, .1);
|
||||
}
|
||||
.calendar .cell-day.drop-to {
|
||||
background-color: #fff0d5;
|
||||
opacity: 1;
|
||||
}
|
||||
.calendar .event {
|
||||
padding: 1px 5px;
|
||||
margin: 0 1px 1px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
background-color: #3280fc;
|
||||
opacity: .95;
|
||||
-webkit-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
-o-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
}
|
||||
a.calendar .event:hover {
|
||||
background-color: #0462f7;
|
||||
}
|
||||
.calendar .event:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.calendar .event.drag-shadow {
|
||||
cursor: move;
|
||||
}
|
||||
.calendar .event.drag-from {
|
||||
opacity: .25;
|
||||
}
|
||||
.calendar .event.color-red {
|
||||
color: #fff;
|
||||
background-color: #ea644a;
|
||||
}
|
||||
a.calendar .event.color-red:hover {
|
||||
background-color: #e53d1c;
|
||||
}
|
||||
.calendar .event.color-green {
|
||||
color: #fff;
|
||||
background-color: #38b03f;
|
||||
}
|
||||
a.calendar .event.color-green:hover {
|
||||
background-color: #2c8931;
|
||||
}
|
||||
.calendar .event.color-yellow {
|
||||
color: #fff;
|
||||
background-color: #f1a325;
|
||||
}
|
||||
a.calendar .event.color-yellow:hover {
|
||||
background-color: #d5890e;
|
||||
}
|
||||
.calendar .event.color-blue {
|
||||
color: #fff;
|
||||
background-color: #03b8cf;
|
||||
}
|
||||
a.calendar .event.color-blue:hover {
|
||||
background-color: #028b9d;
|
||||
}
|
||||
.calendar .event.color-brown {
|
||||
color: #fff;
|
||||
background-color: #bd7b46;
|
||||
}
|
||||
a.calendar .event.color-brown:hover {
|
||||
background-color: #996337;
|
||||
}
|
||||
.calendar .event.color-purple {
|
||||
color: #fff;
|
||||
background-color: #8666b8;
|
||||
}
|
||||
a.calendar .event.color-purple:hover {
|
||||
background-color: #6c4aa1;
|
||||
}
|
||||
.calendar.limit-event-title .event {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
738
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/calendar/zui.calendar.js
vendored
Normal file
@@ -0,0 +1,738 @@
|
||||
/*!
|
||||
* ZUI: 日历 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
/* ========================================================================
|
||||
* ZUI: calendar.js
|
||||
* http://zui.sexy
|
||||
* ========================================================================
|
||||
* Copyright (c) 2014 cnezsoft.com; Licensed MIT
|
||||
* ======================================================================== */
|
||||
|
||||
(function($, window) {
|
||||
'use strict';
|
||||
var NAME = 'zui.calendar';
|
||||
var NUMBER_TYPE_NAME = 'number';
|
||||
var STRING_TYPE_NAME = 'string';
|
||||
var UNDEFINED_TYPE_NAME = 'undefined';
|
||||
var presetColors = {
|
||||
"primary": 1,
|
||||
"green": 2,
|
||||
"red": 3,
|
||||
"blue": 4,
|
||||
"yellow": 5,
|
||||
"brown": 6,
|
||||
"purple": 7
|
||||
};
|
||||
|
||||
var getNearbyLastWeekDay = function(date, lastWeek) {
|
||||
lastWeek = lastWeek || 1;
|
||||
|
||||
var d = date.clone();
|
||||
while(d.getDay() != lastWeek) {
|
||||
d.addDays(-1);
|
||||
}
|
||||
d.clearTime();
|
||||
return d;
|
||||
},
|
||||
|
||||
getFirstDayOfMonth = function(date) {
|
||||
var d = date.clone();
|
||||
d.setDate(1);
|
||||
return d;
|
||||
},
|
||||
|
||||
calculateDays = function(start, end) {
|
||||
var s = start.clone().clearTime();
|
||||
var e = end.clone().clearTime();
|
||||
return Math.round((e.getTime() - s.getTime()) / Date.ONEDAY_TICKS) + 1;
|
||||
},
|
||||
|
||||
everyDayTo = function(start, end, callback) {
|
||||
var a = start.clone();
|
||||
var i = 0;
|
||||
while(a <= end) {
|
||||
callback(a.clone(), i++);
|
||||
a.addDays(1);
|
||||
}
|
||||
};
|
||||
|
||||
var Calendar = function(element, options) {
|
||||
this.name = NAME;
|
||||
this.$ = $(element);
|
||||
this.id = this.$.attr('id') || (NAME + $.zui.uuid());
|
||||
this.$.attr('id', this.id);
|
||||
this.storeName = NAME + '.' + this.id;
|
||||
|
||||
this.getOptions(options);
|
||||
this.getLang();
|
||||
|
||||
this.resetData(this.options.data);
|
||||
|
||||
this.storeData = $.zui.store.pageGet(this.storeName, {
|
||||
date: 'today',
|
||||
view: 'month'
|
||||
});
|
||||
|
||||
this.date = this.options.startDate || 'today';
|
||||
this.view = this.options.startView || 'month';
|
||||
|
||||
this.$.toggleClass('limit-event-title', options.limitEventTitle);
|
||||
|
||||
if(this.options.withHeader) {
|
||||
var $header = this.$.children('.calender-header');
|
||||
if(!$header.length) {
|
||||
$header = $('<header class="calender-header"><div class="btn-toolbar"><div class="btn-group"><button type="button" class="btn btn-today">{today}</button></div><div class="btn-group"><button type="button" class="btn btn-prev"><i class="icon-chevron-left"></i></button><button type="button" class="btn btn-next"><i class="icon-chevron-right"></i></button></div><div class="btn-group"><span class="calendar-caption"></span></div></div></header>'.format(this.lang));
|
||||
this.$.append($header);
|
||||
}
|
||||
this.$caption = $header.find('.calendar-caption');
|
||||
this.$todayBtn = $header.find('.btn-today');
|
||||
this.$header = $header;
|
||||
}
|
||||
|
||||
var $views = this.$.children('.calendar-views');
|
||||
if(!$views.length) {
|
||||
$views = $('<div class="calendar-views"></div>');
|
||||
this.$.append($views);
|
||||
}
|
||||
this.$views = $views;
|
||||
|
||||
this.display();
|
||||
|
||||
this.bindEvents();
|
||||
};
|
||||
|
||||
// default options
|
||||
Calendar.DEFAULTS = {
|
||||
langs: {
|
||||
zh_cn: {
|
||||
weekNames: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
|
||||
monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
|
||||
today: '今天',
|
||||
year: '{0}年',
|
||||
month: '{0}月',
|
||||
yearMonth: '{0}年{1}月'
|
||||
},
|
||||
zh_tw: {
|
||||
weekNames: ['週一', '週二', '週三', '週四', '週五', '週六', '週日'],
|
||||
monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
|
||||
today: '今天',
|
||||
year: '{0}年',
|
||||
month: '{0}月',
|
||||
yearMonth: '{0}年{1}月'
|
||||
},
|
||||
en: {
|
||||
weekNames: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
|
||||
monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
||||
today: 'Today',
|
||||
year: '{0}',
|
||||
month: '{0}',
|
||||
yearMonth: '{2}, {0}'
|
||||
}
|
||||
},
|
||||
data: {
|
||||
calendars: {
|
||||
defaultCal: {
|
||||
color: '#229F24'
|
||||
}
|
||||
},
|
||||
events: []
|
||||
},
|
||||
// startView: "month", // default view when load complete
|
||||
// startDate: 'today', // default date when load complete
|
||||
limitEventTitle: true,
|
||||
storage: true,
|
||||
withHeader: true,
|
||||
dragThenDrop: true, // drag an event and drop at another day,
|
||||
// hideEmptyWeekends: false // Auto hide empty weekends
|
||||
};
|
||||
|
||||
Calendar.prototype.resetData = function(data) {
|
||||
var that = this;
|
||||
that.data = data = data || that.data;
|
||||
if (data.calendars) {
|
||||
this.calendars = {};
|
||||
that.addCalendars(data.calendars, true);
|
||||
}
|
||||
if (data.events) {
|
||||
this.events = [];
|
||||
that.addEvents(data.events, true);
|
||||
}
|
||||
that.sortEvents();
|
||||
};
|
||||
|
||||
// Sort events by start datetime
|
||||
Calendar.prototype.sortEvents = function() {
|
||||
var that = this;
|
||||
var events = that.events;
|
||||
if(!$.isArray(events)) {
|
||||
events = [];
|
||||
}
|
||||
|
||||
events.sort(that.options.eventSorter || function(a, b) {
|
||||
if (a.allDay) {
|
||||
return 1;
|
||||
} else if (b.allDay) {
|
||||
return -1;
|
||||
}
|
||||
var result = a.start > b.start ? 1 : (a.start < b.start ? (-1) : 0);
|
||||
if (result === 0) {
|
||||
result = a.id < b.id ? (-1) : 1;
|
||||
}
|
||||
return result;
|
||||
});
|
||||
|
||||
that.events = events;
|
||||
};
|
||||
|
||||
Calendar.prototype.bindEvents = function() {
|
||||
var $e = this.$,
|
||||
that = this;
|
||||
|
||||
$e.on('click', '.btn-today', function() {
|
||||
that.date = new Date();
|
||||
that.display();
|
||||
$e.callComEvent(that, 'clickTodayBtn');
|
||||
}).on('click', '.btn-next', function() {
|
||||
if(that.view === 'month') {
|
||||
that.date.addMonths(1);
|
||||
}
|
||||
that.display();
|
||||
$e.callComEvent(that, 'clickNextBtn');
|
||||
}).on('click', '.btn-prev', function() {
|
||||
if(that.view === 'month') {
|
||||
that.date.addMonths(-1);
|
||||
}
|
||||
that.display();
|
||||
$e.callComEvent(that, 'clickPrevBtn');
|
||||
}).on('click', '.event', function(event) {
|
||||
$e.callComEvent(that, 'clickEvent', {
|
||||
element: this,
|
||||
event: $(this).data('event'),
|
||||
events: that.events
|
||||
});
|
||||
event.stopPropagation();
|
||||
}).on('click', '.cell-day', function() {
|
||||
$e.callComEvent(that, 'clickCell', {
|
||||
element: this,
|
||||
view: that.view,
|
||||
date: new Date($(this).children('.day').attr('data-date')),
|
||||
events: that.events
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Calendar.prototype.addCalendars = function(calendars, silence) {
|
||||
var that = this;
|
||||
if(!that.calendars) that.calendars = {};
|
||||
|
||||
if($.isPlainObject(calendars)) {
|
||||
calendars = [calendars];
|
||||
}
|
||||
$.each(calendars, function(index, cal) {
|
||||
if(!silence && false === that.$.callComEvent(this, 'beforeAddCalendars', {
|
||||
newCalendar: cal,
|
||||
data: that.data
|
||||
})) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!cal.color) cal.color = 'primary';
|
||||
if(!presetColors[cal.color.toLowerCase()]) {
|
||||
var c = new $.zui.Color(cal.color);
|
||||
cal.textColor = c.contrast().hexStr();
|
||||
} else {
|
||||
cal.presetColor = true;
|
||||
}
|
||||
that.calendars[cal.name] = cal;
|
||||
});
|
||||
|
||||
if(!silence) {
|
||||
that.display();
|
||||
that.$.callComEvent(that, 'addCalendars', {
|
||||
newCalendars: calendars,
|
||||
data: that.data
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Calendar.prototype.addEvents = function(events, silence) {
|
||||
var that = this;
|
||||
if(!that.events) that.events = [];
|
||||
|
||||
if($.isPlainObject(events)) {
|
||||
events = [events];
|
||||
}
|
||||
$.each(events, function(index, e) {
|
||||
if(!silence && false === that.$.callComEvent(that, 'beforeAddEvent', {
|
||||
newEvent: e,
|
||||
data: that.data
|
||||
})) {
|
||||
return;
|
||||
}
|
||||
|
||||
var startType = typeof e.start;
|
||||
var endType = typeof e.end;
|
||||
if(startType === NUMBER_TYPE_NAME || startType === STRING_TYPE_NAME) {
|
||||
e.start = new Date(e.start);
|
||||
}
|
||||
if(endType === NUMBER_TYPE_NAME || endType === STRING_TYPE_NAME) {
|
||||
e.end = new Date(e.end);
|
||||
}
|
||||
if(typeof e.id === UNDEFINED_TYPE_NAME) {
|
||||
e.id = $.zui.uuid();
|
||||
}
|
||||
|
||||
if(e.allDay) {
|
||||
e.start.clearTime();
|
||||
if (!e.end) {
|
||||
e.end = e.start.clone();
|
||||
}
|
||||
e.end.clearTime().addDays(1).addMilliseconds(-1);
|
||||
}
|
||||
|
||||
e.days = calculateDays(e.start, e.end);
|
||||
|
||||
that.events.push(e);
|
||||
});
|
||||
|
||||
if(!silence) {
|
||||
that.sortEvents();
|
||||
that.display();
|
||||
that.$.callComEvent(that, 'addEvents', {
|
||||
newEvents: events,
|
||||
data: that.data
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Calendar.prototype.getEvent = function(id) {
|
||||
var events = this.events;
|
||||
for(var i = 0; i < events.length; i++) {
|
||||
if(events[i].id == id) {
|
||||
return events[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
Calendar.prototype.updateEvents = function(events) {
|
||||
var eventsParams = {
|
||||
data: this.data,
|
||||
changes: []
|
||||
},
|
||||
that = this;
|
||||
|
||||
if($.isPlainObject(events)) {
|
||||
events = [events];
|
||||
}
|
||||
var event, chgs, eventParam;
|
||||
$.each(events, function(index, changes) {
|
||||
event = changes.event;
|
||||
chgs = changes.changes;
|
||||
eventParam = {
|
||||
event: event,
|
||||
changes: []
|
||||
};
|
||||
if(typeof event === STRING_TYPE_NAME) {
|
||||
event = that.getEvent(event);
|
||||
}
|
||||
if(event) {
|
||||
if($.isPlainObject(chgs)) {
|
||||
chgs = [chgs];
|
||||
}
|
||||
$.each(changes, function(idx, chge) {
|
||||
if(false !== that.$.callComEvent(that, 'beforeChange', {
|
||||
event: event,
|
||||
change: chge.change,
|
||||
to: chge.to,
|
||||
from: event[chge.change]
|
||||
})) {
|
||||
eventParam.changes.push($.extend(true, {}, chge, {
|
||||
from: event[chge.change]
|
||||
}));
|
||||
event[chge.change] = chge.to;
|
||||
}
|
||||
});
|
||||
}
|
||||
eventsParams.changes.push(eventParam);
|
||||
});
|
||||
|
||||
that.sortEvents();
|
||||
that.display();
|
||||
that.$.callComEvent(that, 'change', eventsParams);
|
||||
};
|
||||
|
||||
Calendar.prototype.removeEvents = function(events) {
|
||||
if(!$.isArray(events)) {
|
||||
events = [events];
|
||||
}
|
||||
var id, event, idx, evts = this.events,
|
||||
that = this,
|
||||
removedEvents = [];
|
||||
$.each(events, function(index, value) {
|
||||
id = $.isPlainObject(value) ? value.id : value;
|
||||
idx = -1;
|
||||
for(var i = 0; i < evts.length; i++) {
|
||||
if(evts[i].id == id) {
|
||||
idx = i;
|
||||
event = evts[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(idx >= 0 && fasle !== that.$.callComEvent(that, 'beforeRemoveEvent', {
|
||||
event: event,
|
||||
eventId: id,
|
||||
data: that.data
|
||||
})) {
|
||||
evts.splice(idx, 1);
|
||||
removedEvents.push(event);
|
||||
}
|
||||
});
|
||||
|
||||
that.sortEvents();
|
||||
that.display();
|
||||
that.$.callComEvent(that, 'removeEvents', {
|
||||
removedEvents: removedEvents,
|
||||
data: that.data
|
||||
});
|
||||
};
|
||||
|
||||
Calendar.prototype.getOptions = function(options) {
|
||||
this.options = $.extend(true, {}, Calendar.DEFAULTS, this.$.data(), options, true);
|
||||
};
|
||||
|
||||
Calendar.prototype.getLang = function() {
|
||||
this.lang = this.options.langs[(this.options.lang || ($.zui && $.zui.clientLang ? $.zui.clientLang() : 'zh_cn')).replace('-', '_')];
|
||||
};
|
||||
|
||||
Calendar.prototype.display = function(view, date) {
|
||||
var that = this;
|
||||
var viewType = typeof view;
|
||||
var dateType = typeof date;
|
||||
|
||||
if(viewType === UNDEFINED_TYPE_NAME) {
|
||||
view = that.view;
|
||||
} else {
|
||||
that.view = view;
|
||||
}
|
||||
|
||||
if(dateType === UNDEFINED_TYPE_NAME) {
|
||||
date = that.date;
|
||||
} else {
|
||||
that.date = date;
|
||||
}
|
||||
|
||||
if(date === 'today') {
|
||||
date = new Date();
|
||||
that.date = date;
|
||||
}
|
||||
|
||||
if(typeof date === STRING_TYPE_NAME) {
|
||||
date = new Date(date);
|
||||
that.date = date;
|
||||
}
|
||||
|
||||
if(that.options.storage) {
|
||||
$.zui.store.pageSet(that.storeName, {
|
||||
date: date,
|
||||
view: view
|
||||
});
|
||||
}
|
||||
|
||||
var eventPramas = {
|
||||
view: view,
|
||||
date: date
|
||||
};
|
||||
|
||||
var doDisplay = function() {
|
||||
switch(view) {
|
||||
case 'month':
|
||||
that.displayMonth(date);
|
||||
break;
|
||||
}
|
||||
|
||||
that.$.callComEvent(that, 'display', eventPramas);
|
||||
};
|
||||
|
||||
var beforeDisplayResult = that.$.callComEvent(that, 'beforeDisplay', [eventPramas, doDisplay]);
|
||||
if (beforeDisplayResult !== false) {
|
||||
doDisplay();
|
||||
}
|
||||
};
|
||||
|
||||
Calendar.prototype.displayMonth = function(date) {
|
||||
var that = this;
|
||||
date = date || that.date;
|
||||
var options = that.options,
|
||||
lang = that.lang,
|
||||
i,
|
||||
$views = that.$views,
|
||||
$e = that.$;
|
||||
|
||||
var $view = that.$monthView;
|
||||
if(!$view || !$view.length) {
|
||||
$view = $('<div class="calendar-view month"><table class="table table-bordered"><thead><tr class="week-head"></tr></thead><tbody class="month-days"></tbody></table></div>');
|
||||
|
||||
var $weekHead = $view.find('.week-head'),
|
||||
$monthDays = $view.find('.month-days'),
|
||||
$tr;
|
||||
|
||||
for(i = 0; i < 7; i++) {
|
||||
$('<th>' + lang.weekNames[i] + '</th>').toggleClass('weekend-head', i >= 5).appendTo($weekHead);
|
||||
}
|
||||
|
||||
for(i = 0; i < 6; i++) {
|
||||
$tr = $('<tr class="week-days"></tr>');
|
||||
for(var j = 0; j < 7; j++) {
|
||||
$('<td class="cell-day"><div class="day"><div class="heading"><span class="month"></span> <span class="number"></span></div><div class="content"><div class="events"></div></div></div></td>').toggleClass('weekend-day', j >= 5).appendTo($tr);
|
||||
}
|
||||
$monthDays.append($tr);
|
||||
}
|
||||
|
||||
$views.append($view);
|
||||
that.$monthView = $view;
|
||||
}
|
||||
|
||||
var $weeks = $view.find('.week-days'),
|
||||
$days = $view.find('.day'),
|
||||
firstDayOfMonth = getFirstDayOfMonth(date),
|
||||
// lastDayOfMonth = getLastDayOfMonth(date),
|
||||
$week,
|
||||
$day,
|
||||
$cell,
|
||||
year,
|
||||
day,
|
||||
month,
|
||||
today = new Date();
|
||||
var firstDay = getNearbyLastWeekDay(firstDayOfMonth),
|
||||
thisYear = date.getFullYear(),
|
||||
thisMonth = date.getMonth(),
|
||||
todayMonth = today.getMonth(),
|
||||
todayYear = today.getFullYear(),
|
||||
todayDate = today.getDate();
|
||||
var lastDay = firstDay.clone().addDays(6 * 7).addMilliseconds(-1),
|
||||
printDate = firstDay.clone().addDays(1).addMilliseconds(-1);
|
||||
var events = that.getEvents(firstDay, lastDay),
|
||||
calendars = that.calendars,
|
||||
printDateId, isFirstDayOfWeek, $event, cal, $dayEvents;
|
||||
|
||||
var isEmptyWeekends = true;
|
||||
$weeks.each(function(weekIdx) {
|
||||
$week = $(this);
|
||||
$week.find('.day').each(function(dayIndex) {
|
||||
isFirstDayOfWeek = dayIndex === 0;
|
||||
$day = $(this);
|
||||
$cell = $day.closest('.cell-day');
|
||||
year = printDate.getFullYear();
|
||||
day = printDate.getDate();
|
||||
month = printDate.getMonth();
|
||||
printDateId = printDate.toDateString();
|
||||
$day.attr('data-date', printDateId).data('date', printDate.clone());
|
||||
$day.find('.heading > .number').text(day);
|
||||
|
||||
$day.find('.heading > .month')
|
||||
.toggle((weekIdx === 0 && dayIndex === 0) || day === 1)
|
||||
.text(((month === 0 && day === 1) ? (lang.year.format(year) + ' ') : '') + lang.monthNames[month]);
|
||||
$cell.toggleClass('current-month', month === thisMonth);
|
||||
$cell.toggleClass('current', (day === todayDate && month === todayMonth && year === todayYear));
|
||||
$cell.toggleClass('past', printDate < today);
|
||||
$cell.toggleClass('future', printDate > today);
|
||||
$dayEvents = $day.find('.events').empty();
|
||||
|
||||
var dayEvents = events[printDateId];
|
||||
if(dayEvents) {
|
||||
var eventsMap = dayEvents.events,
|
||||
stripCount = 0,
|
||||
e;
|
||||
for(i = 0; i <= dayEvents.maxPos; ++i) {
|
||||
e = eventsMap[i];
|
||||
if(!e || (e.placeholder && !isFirstDayOfWeek)) {
|
||||
stripCount++;
|
||||
continue;
|
||||
}
|
||||
if (isEmptyWeekends && dayIndex >= 5) {
|
||||
isEmptyWeekends = false;
|
||||
}
|
||||
if (options.eventCreator) {
|
||||
$event = options.eventCreator(e, $cell, that);
|
||||
} else {
|
||||
$event = $('<div data-id="' + e.id + '" class="event" title="' + e.desc + '"><span class="time">' + e.start.format('hh:mm') + '</span> <span class="title">' + e.title + '</span></div>');
|
||||
$event.find('.time').toggle(!e.allDay);
|
||||
$event.data('event', e);
|
||||
$event.attr('data-days', e.days);
|
||||
}
|
||||
$event.toggleClass('event-all-day', !!e.allDay).data('event', e).attr('data-days', e.days);
|
||||
|
||||
if(e.calendar) {
|
||||
cal = calendars[e.calendar];
|
||||
if(cal) {
|
||||
if(cal.presetColor) {
|
||||
$event.addClass('color-' + cal.color);
|
||||
} else {
|
||||
$event.css({
|
||||
'background-color': cal.color,
|
||||
color: cal.textColor
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(e.days) {
|
||||
if(!e.placeholder) {
|
||||
$event.css('width', Math.min(7 - dayIndex, e.days) + '00%');
|
||||
} else if(isFirstDayOfWeek) {
|
||||
$event.css('width', Math.min(7, e.days - e.holderPos) + '00%');
|
||||
}
|
||||
}
|
||||
|
||||
if(stripCount > 0) {
|
||||
$event.css('margin-top', stripCount * 22);
|
||||
stripCount = 0;
|
||||
}
|
||||
|
||||
$dayEvents.append($event);
|
||||
}
|
||||
}
|
||||
|
||||
if (options.dayFormater) {
|
||||
options.dayFormater($cell, printDate, dayEvents, that);
|
||||
}
|
||||
|
||||
printDate.addDays(1);
|
||||
});
|
||||
});
|
||||
if (options.hideEmptyWeekends) {
|
||||
$view.toggleClass('weekends-empty', isEmptyWeekends);
|
||||
}
|
||||
|
||||
if(options.withHeader) {
|
||||
that.$caption.text(lang.yearMonth.format(thisYear, thisMonth + 1, lang.monthNames[thisMonth]));
|
||||
that.$todayBtn.toggleClass('disabled', thisMonth === todayMonth && thisYear === todayYear);
|
||||
}
|
||||
|
||||
if(options.dragThenDrop) {
|
||||
if(!$.fn.droppable) {
|
||||
return console.error('Calendar dragThenDrop option requires droppable.js');
|
||||
}
|
||||
if(!$view.data('zui.droppable')) {
|
||||
$view.droppable($.extend({
|
||||
target: '.cell-day',
|
||||
selector: '.event',
|
||||
flex: true,
|
||||
start: function() {
|
||||
that.$.addClass('event-dragging');
|
||||
},
|
||||
drop: function(e) {
|
||||
var et = e.element.data('event'),
|
||||
newDate = e.target.children('.day').attr('data-date');
|
||||
if(!et || !newDate) return;
|
||||
var startDate = et.start.clone();
|
||||
if(startDate.toDateString() != newDate) {
|
||||
newDate = new Date(newDate);
|
||||
newDate.setHours(startDate.getHours());
|
||||
newDate.setMinutes(startDate.getMinutes());
|
||||
newDate.setSeconds(startDate.getSeconds());
|
||||
|
||||
if(false !== that.$.callComEvent(that, 'beforeChange', {
|
||||
event: et,
|
||||
change: 'start',
|
||||
to: newDate
|
||||
})) {
|
||||
var oldEnd = et.end.clone();
|
||||
|
||||
et.end.addMilliseconds(et.end.getTime() - startDate.getTime());
|
||||
et.start = newDate;
|
||||
|
||||
that.display();
|
||||
|
||||
that.$.callComEvent(that, 'change', {
|
||||
data: that.data,
|
||||
changes: [{
|
||||
event: et,
|
||||
changes: [{
|
||||
change: 'start',
|
||||
from: startDate,
|
||||
to: et.start
|
||||
}, {
|
||||
change: 'end',
|
||||
from: oldEnd,
|
||||
to: et.end
|
||||
}]
|
||||
}]
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
finish: function() {
|
||||
that.$.removeClass('event-dragging');
|
||||
}
|
||||
}, ($.isPlainObject(options.dragThenDrop)) ? options.dragThenDrop : null));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Calendar.prototype.getEvents = function(start, end) {
|
||||
var events = {};
|
||||
var calendars = this.calendars;
|
||||
var addEventToDay = function(day, event, position) {
|
||||
var dayId = day.toDateString();
|
||||
var dayEvents = events[dayId];
|
||||
if(!dayEvents) {
|
||||
dayEvents = {
|
||||
maxPos: -1,
|
||||
events: {}
|
||||
};
|
||||
}
|
||||
|
||||
if(typeof position === 'undefined') {
|
||||
for(var i = 0; i < 100; ++i) {
|
||||
if(!dayEvents.events[i]) {
|
||||
position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dayEvents.maxPos = Math.max(position, dayEvents.maxPos);
|
||||
dayEvents.events[position] = event;
|
||||
events[dayId] = dayEvents;
|
||||
return position;
|
||||
};
|
||||
$.each(this.events, function(index, e) {
|
||||
if(e.start >= start && e.start <= end) {
|
||||
var position = addEventToDay(e.start, e);
|
||||
if(e.days > 1) {
|
||||
var placeholder = $.extend({
|
||||
placeholder: true
|
||||
}, e);
|
||||
everyDayTo(e.start.clone().addDays(1), e.end, function(thisDay, i) {
|
||||
addEventToDay(thisDay.clone(), $.extend({
|
||||
holderPos: i
|
||||
}, placeholder), position);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
return events;
|
||||
};
|
||||
|
||||
$.fn.calendar = function(option) {
|
||||
return this.each(function() {
|
||||
var $this = $(this);
|
||||
var data = $this.data(NAME);
|
||||
var options = typeof option == 'object' && option;
|
||||
|
||||
if(!data) $this.data(NAME, (data = new Calendar(this, options)));
|
||||
|
||||
if(typeof option == STRING_TYPE_NAME) data[option]();
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.calendar.Constructor = Calendar;
|
||||
}(jQuery, window));
|
||||
|
||||
6
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/calendar/zui.calendar.min.css
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* ZUI: 日历 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/.calendar{margin-bottom:20px}.calendar>header{margin-bottom:10px}.calendar>header .btn-toolbar>.btn-group{margin-right:10px}.calendar>header .calendar-caption{line-height:30px}.calendar .table{margin-bottom:0;table-layout:fixed}.calendar .table>tbody>tr>td,.calendar .table>thead>tr>th{width:14.28571428571429%;padding:0}.calendar .table>thead>tr>th{color:grey;text-align:center;background-color:#fff}.calendar .weekends-empty .table>tbody>tr>td,.calendar .weekends-empty .table>thead>tr>th{width:20%}.calendar .weekends-empty .table>tbody>tr>td.weekend-day,.calendar .weekends-empty .table>thead>tr>th.weekend-head{width:40px;min-width:40px}.calendar .day{opacity:.7}.calendar .day>.heading{padding:2px 5px;text-align:right}.calendar .day>.heading>.month{padding:1px 2px;color:#fff;background-color:#b3b3b3;border-radius:3px}.calendar .day>.content{height:100%;min-height:70px}.calendar .cell-day{background-color:#f1f1f1}.calendar .cell-day.past>.day>.content{opacity:.7}.calendar .cell-day.current-month{background:0 0}.calendar .cell-day.current-month>.day{opacity:1}.calendar .cell-day.current{background-color:#fff0d5;-webkit-box-shadow:inset 1px 1px 0 grey,inset -1px -1px 0 grey;box-shadow:inset 1px 1px 0 grey,inset -1px -1px 0 grey}.calendar .cell-day.current>.day>.content{padding:0}.calendar .cell-day.current>.day>.heading{background-color:rgba(0,0,0,.1)}.calendar .cell-day.drop-to{background-color:#fff0d5;opacity:1}.calendar .event{padding:1px 5px;margin:0 1px 1px;color:#fff;cursor:pointer;background-color:#3280fc;opacity:.95;-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}a.calendar .event:hover{background-color:#0462f7}.calendar .event:hover{opacity:1}.calendar .event.drag-shadow{cursor:move}.calendar .event.drag-from{opacity:.25}.calendar .event.color-red{color:#fff;background-color:#ea644a}a.calendar .event.color-red:hover{background-color:#e53d1c}.calendar .event.color-green{color:#fff;background-color:#38b03f}a.calendar .event.color-green:hover{background-color:#2c8931}.calendar .event.color-yellow{color:#fff;background-color:#f1a325}a.calendar .event.color-yellow:hover{background-color:#d5890e}.calendar .event.color-blue{color:#fff;background-color:#03b8cf}a.calendar .event.color-blue:hover{background-color:#028b9d}.calendar .event.color-brown{color:#fff;background-color:#bd7b46}a.calendar .event.color-brown:hover{background-color:#996337}.calendar .event.color-purple{color:#fff;background-color:#8666b8}a.calendar .event.color-purple:hover{background-color:#6c4aa1}.calendar.limit-event-title .event{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||
7
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/calendar/zui.calendar.min.js
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chart/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
8dea4730-7315-4fa6-924c-091fde301968
|
||||
3306
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chart/zui.chart.js
vendored
Normal file
14
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chart/zui.chart.min.js
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosen/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
c4e853fd-4f2b-4f62-b560-39aaeed10a01
|
||||
472
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosen/chosen.css
vendored
Normal file
@@ -0,0 +1,472 @@
|
||||
/*!
|
||||
* Chosen, a Select Box Enhancer for jQuery and Prototype
|
||||
* by Patrick Filler for Harvest, http://getharvest.com
|
||||
*
|
||||
* Copyright (c) 2011-2016 Harvest http://getharvest.com
|
||||
* MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
|
||||
*/
|
||||
.chosen-container {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
font-size: 13px;
|
||||
vertical-align: middle;
|
||||
zoom: 1;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
*display: inline;
|
||||
}
|
||||
.chosen-container .chosen-drop {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
z-index: 1010;
|
||||
display: none;
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
border: 1px solid #cbcbcb;
|
||||
border: 1px solid rgba(0, 0, 0, .15);
|
||||
border-top: 0;
|
||||
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
||||
}
|
||||
.chosen-container .chosen-drop.chosen-drop-size-limited {
|
||||
border-top: 1px solid rgba(0, 0, 0, .15);
|
||||
}
|
||||
.chosen-container .chosen-drop.chosen-auto-max-width {
|
||||
min-width: 100%;
|
||||
border-top: 1px solid rgba(0, 0, 0, .15);
|
||||
opacity: .5;
|
||||
}
|
||||
.chosen-container .chosen-drop.chosen-auto-max-width > .chosen-results > li {
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container .chosen-drop.chosen-auto-max-width.in {
|
||||
opacity: 1;
|
||||
}
|
||||
.chosen-container .chosen-drop.chosen-auto-max-width.in > .chosen-results > li {
|
||||
display: block;
|
||||
white-space: normal;
|
||||
}
|
||||
.chosen-container.chosen-with-drop .chosen-drop {
|
||||
display: block;
|
||||
}
|
||||
.chosen-container a {
|
||||
cursor: pointer;
|
||||
}
|
||||
.chosen-container.chosen-up .chosen-drop {
|
||||
top: inherit;
|
||||
bottom: 100%;
|
||||
margin-top: auto;
|
||||
margin-bottom: -1px;
|
||||
border-radius: 2px 2px 0 0;
|
||||
-webkit-box-shadow: 0 -3px 5px rgba(0, 0, 0, .175);
|
||||
box-shadow: 0 -3px 5px rgba(0, 0, 0, .175);
|
||||
}
|
||||
.chosen-container.chosen-highlight-selected .result-selected {
|
||||
color: #3280fc;
|
||||
background: #ebf2f9;
|
||||
}
|
||||
.chosen-container-single .chosen-single {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
padding: 5px 8px;
|
||||
overflow: hidden;
|
||||
line-height: 1.53846154;
|
||||
color: #222;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
background-color: #fff;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
}
|
||||
.chosen-container-single .chosen-default {
|
||||
color: #808080;
|
||||
}
|
||||
.chosen-container-single .chosen-single > span {
|
||||
display: block;
|
||||
margin-right: 26px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container-single .chosen-single-with-deselect span {
|
||||
margin-right: 38px;
|
||||
}
|
||||
.chosen-container-single .chosen-single abbr {
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
right: 24px;
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-size: 19.5px;
|
||||
font-weight: bold;
|
||||
line-height: 14px;
|
||||
color: #000;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
filter: alpha(opacity=20);
|
||||
opacity: .2;
|
||||
}
|
||||
.chosen-container-single .chosen-single abbr:before {
|
||||
content: '×';
|
||||
}
|
||||
.chosen-container-single .chosen-single abbr:hover,
|
||||
.chosen-container-single .chosen-single abbr:focus {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
filter: alpha(opacity=50);
|
||||
opacity: .5;
|
||||
}
|
||||
.chosen-container-single .chosen-single div {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: block;
|
||||
height: 100%;
|
||||
padding: 5px 8px;
|
||||
}
|
||||
.chosen-container-single .chosen-single div b {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-bottom: 2px;
|
||||
margin-left: 2px;
|
||||
vertical-align: middle;
|
||||
border-top: 4px dashed;
|
||||
border-top: 4px solid \9;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
}
|
||||
.chosen-container-single .chosen-search {
|
||||
position: relative;
|
||||
z-index: 1010;
|
||||
padding: 3px 4px;
|
||||
margin: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container-single .chosen-search input[type="text"] {
|
||||
width: 100%;
|
||||
height: 27px;
|
||||
padding: 2px 26px 2px 8px;
|
||||
margin: 1px 0;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
outline: 0;
|
||||
}
|
||||
.chosen-container-single .chosen-search input[type="text"]:focus {
|
||||
border-color: #145ccd;
|
||||
}
|
||||
.chosen-container-single .chosen-search:before {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
display: block;
|
||||
font-family: ZenIcon;
|
||||
font-size: 14px;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
line-height: 1;
|
||||
color: #808080;
|
||||
text-transform: none;
|
||||
content: '\e603';
|
||||
|
||||
speak: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.chosen-container-single .chosen-drop {
|
||||
margin-top: -1px;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
border-radius: 0 0 4px 4px;
|
||||
}
|
||||
.chosen-container-single.chosen-container-single-nosearch .chosen-search {
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
}
|
||||
.chosen-container .chosen-results {
|
||||
position: relative;
|
||||
max-height: 240px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
.chosen-container .chosen-results li {
|
||||
display: none;
|
||||
padding: 5px 10px;
|
||||
margin: 0;
|
||||
line-height: 15px;
|
||||
list-style: none;
|
||||
-webkit-transition: background-color .2s cubic-bezier(.175, .885, .32, 1);
|
||||
-o-transition: background-color .2s cubic-bezier(.175, .885, .32, 1);
|
||||
transition: background-color .2s cubic-bezier(.175, .885, .32, 1);
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
}
|
||||
.chosen-container .chosen-results li.active-result {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
.chosen-container .chosen-results li.disabled-result {
|
||||
display: list-item;
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-container .chosen-results li.highlighted {
|
||||
color: #fff;
|
||||
background-color: #3280fc;
|
||||
}
|
||||
.chosen-container .chosen-results li.no-results {
|
||||
display: list-item;
|
||||
background: #f4f4f4;
|
||||
}
|
||||
.chosen-container .chosen-results li.group-result {
|
||||
display: list-item;
|
||||
font-weight: bold;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-container .chosen-results li.group-option {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.chosen-container .chosen-results li em {
|
||||
font-style: normal;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
min-height: 30px \0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
cursor: text;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
|
||||
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices:before,
|
||||
.chosen-container-multi .chosen-choices:after {
|
||||
display: table;
|
||||
content: " ";
|
||||
}
|
||||
.chosen-container-multi .chosen-choices:after {
|
||||
clear: both;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li {
|
||||
display: block;
|
||||
float: left;
|
||||
padding: 0 6px;
|
||||
margin: 5px 0 0 6px;
|
||||
list-style: none;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field {
|
||||
padding: 0;
|
||||
margin-bottom: 4px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
|
||||
height: 20px;
|
||||
font-size: 100%;
|
||||
color: #808080;
|
||||
background: transparent !important;
|
||||
border: 0 !important;
|
||||
border-radius: 0;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field .default {
|
||||
color: #999;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-field:before {
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
bottom: 8px;
|
||||
display: block;
|
||||
font-family: ZenIcon;
|
||||
font-size: 14px;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
line-height: 1;
|
||||
color: #808080;
|
||||
text-transform: none;
|
||||
content: '\e603';
|
||||
opacity: 0;
|
||||
-webkit-transition: opacity .2s cubic-bezier(.175, .885, .32, 1);
|
||||
-o-transition: opacity .2s cubic-bezier(.175, .885, .32, 1);
|
||||
transition: opacity .2s cubic-bezier(.175, .885, .32, 1);
|
||||
|
||||
speak: none;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice {
|
||||
position: relative;
|
||||
padding: 3px 20px 3px 5px;
|
||||
line-height: 12px;
|
||||
cursor: default;
|
||||
background-color: #f1f1f1;
|
||||
-webkit-background-clip: padding-box;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 3px;
|
||||
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, .05);
|
||||
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, .05);
|
||||
-webkit-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
-o-transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
transition: all .4s cubic-bezier(.175, .885, .32, 1);
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice:hover {
|
||||
background-color: #fff;
|
||||
border-color: #c4c4c4;
|
||||
-webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, .1);
|
||||
box-shadow: 0 1px 0 rgba(0, 0, 0, .1);
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-size: 15.6px;
|
||||
font-weight: bold;
|
||||
line-height: 14px;
|
||||
color: #000;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
filter: alpha(opacity=20);
|
||||
opacity: .2;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before {
|
||||
content: '×';
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover,
|
||||
.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
filter: alpha(opacity=50);
|
||||
opacity: .5;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice-disabled {
|
||||
padding-right: 5px;
|
||||
color: #666;
|
||||
background-color: #e4e4e4;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice-focus {
|
||||
background: #d4d4d4;
|
||||
}
|
||||
.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
|
||||
background-position: -42px -10px;
|
||||
}
|
||||
.chosen-container-multi .chosen-results {
|
||||
padding: 5px 0;
|
||||
margin: 0;
|
||||
}
|
||||
.chosen-container-multi .chosen-drop .result-selected {
|
||||
display: list-item;
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-container-active .chosen-single {
|
||||
border-color: #145ccd;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(20, 92, 205, .6);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(20, 92, 205, .6);
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop .chosen-single {
|
||||
border: 1px solid #cbcbcb;
|
||||
border: 1px solid rgba(0, 0, 0, .15);
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop .chosen-single div {
|
||||
background: transparent;
|
||||
border-left: none;
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop .chosen-single div b {
|
||||
content: "";
|
||||
border-top: 0 dotted;
|
||||
border-bottom: 4px solid;
|
||||
}
|
||||
.chosen-container-active.chosen-with-drop.chosen-up .chosen-single {
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
||||
box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
|
||||
}
|
||||
.chosen-container-active .chosen-choices {
|
||||
border-color: #145ccd;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(20, 92, 205, .6);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(20, 92, 205, .6);
|
||||
}
|
||||
.chosen-container-active .chosen-choices li.search-field input[type="text"] {
|
||||
color: #111 !important;
|
||||
}
|
||||
.chosen-container-active .chosen-choices li.search-field:before {
|
||||
opacity: 1;
|
||||
}
|
||||
.chosen-disabled {
|
||||
cursor: default;
|
||||
opacity: .5 !important;
|
||||
}
|
||||
.chosen-disabled .chosen-single {
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-disabled .chosen-choices .search-choice .search-choice-close {
|
||||
cursor: default;
|
||||
}
|
||||
.chosen-compact.chosen-container-single .chosen-single > .chosen-search {
|
||||
left: 0;
|
||||
display: none;
|
||||
padding: 3px 4px;
|
||||
opacity: 0;
|
||||
}
|
||||
.chosen-compact.chosen-container-single .chosen-single > .chosen-search > input {
|
||||
height: 25px;
|
||||
padding: 2px 26px 2px 4px;
|
||||
font-size: inherit;
|
||||
}
|
||||
.chosen-compact.chosen-container-single .chosen-single > .chosen-search:before {
|
||||
top: 9px;
|
||||
}
|
||||
.chosen-compact.chosen-with-search.chosen-with-drop .chosen-single > .chosen-search {
|
||||
display: block;
|
||||
opacity: 1;
|
||||
}
|
||||
1369
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosen/chosen.js
vendored
Normal file
7
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosen/chosen.min.css
vendored
Normal file
11
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosen/chosen.min.js
vendored
Normal file
1
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosenicons/.pydio
vendored
Normal file
@@ -0,0 +1 @@
|
||||
6a9fde46-66da-411d-9445-83a09c3b02ba
|
||||
27
康唯唯私活/Vr项目/code/dist/resources/static/js/lib/zui/lib/chosenicons/zui.chosenicons.css
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
/*!
|
||||
* ZUI: 图标选择器 - v1.9.1 - 2019-05-10
|
||||
* http://zui.sexy
|
||||
* GitHub: https://github.com/easysoft/zui.git
|
||||
* Copyright (c) 2019 cnezsoft.com; Licensed MIT
|
||||
*/
|
||||
|
||||
.chosen-container.chosen-icons .chosen-results {
|
||||
padding: 5px;
|
||||
}
|
||||
.chosen-container.chosen-icons .chosen-results li {
|
||||
border-radius: 4px;
|
||||
}
|
||||
.chosen-container.chosen-icons .chosen-results li.group-result {
|
||||
padding: 5px 0;
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
border-radius: 0;
|
||||
}
|
||||
.chosen-container.chosen-icons .chosen-results li.group-option {
|
||||
display: inline-block;
|
||||
width: 30px;
|
||||
padding: 8px;
|
||||
font-size: 14px;
|
||||
line-height: 14px;
|
||||
text-align: center;
|
||||
}
|
||||