@ -0,0 +1,70 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="utf-8"/> |
||||
|
<link rel="shortcut icon" href="./favicon.svg" type="image/svg+xml"/> |
||||
|
<link rel="stylesheet" href="./vender/jquery/zTreeStyle/zTreeStyle.css" type="text/css"> |
||||
|
<script src = "./vender/jquery/jquery.js"></script> |
||||
|
<script src = "./vender/jquery/jquery.ztree.core.min.js"></script> |
||||
|
<script src = "./vender/jquery/jquery.ztree.exedit.min.js"></script> |
||||
|
<script src = "./vender/jquery/jquery.ztree.exhide.min.js"></script> |
||||
|
<script src = "./vender/codemirror.js"></script> |
||||
|
<script src = "./vender/fabric.js"></script> |
||||
|
<!-- 局域网环境, 请去 https://www.x-emr.cn/download.html 下载 editor.js替换以下路径 --> |
||||
|
<script src="./js/editor.js"></script> |
||||
|
<script> |
||||
|
$(function() { |
||||
|
//配置项可以不设置,会使用默认设置 |
||||
|
let option = { |
||||
|
license:'WQ7peJQ3Kov4+1UWJXy8anvGMs9q9Krx1RVy/0b1Cu2NsyX+AAHehvZTkM9MfZ4U05PB87yFuHfWTM7F7EL4FQplorJA7Qm6naoINcGznSdFEEdN+EiwMNdPCFulVg3mu65at1ldCyqYtg3rmPhtUOwAc5oIYmi05xlXlRJnzvw=', |
||||
|
mode:'form', //默认模式 form:表单模式,design:设计模式 |
||||
|
pdfUrl:'https://www.x-emr.cn/pdf/post', //pdf生成服务 |
||||
|
dictionary: [ //知识库 |
||||
|
{type:'symptoms', title: '体征', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'}, |
||||
|
{type:'signs', title: '症状', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'}, |
||||
|
{type:'meta', title: '卫生信息数据元', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'}, |
||||
|
{type:'stand', title: '电子病历数据集', isParent:true, treeUrl:'https://www.x-emr.cn/dict', itemUrl:'https://www.x-emr.cn/dictitem'}, |
||||
|
{type:'insutance', title: '国家医保标准', isParent:true, treeUrl:'https://www.x-emr.cn/insutance', itemUrl:'https://www.x-emr.cn/institem'}, |
||||
|
{type:'province', title: 'A省数据平台标准', isParent:true, treeUrl:'https://www.x-emr.cn/province', itemUrl:'https://www.x-emr.cn/provitem'}, |
||||
|
] |
||||
|
} |
||||
|
|
||||
|
//用于父页面调用 |
||||
|
if(window.frameElement){ |
||||
|
//1.初始化前 |
||||
|
let e1 = new Event('before-init') |
||||
|
e1.editor = editor |
||||
|
e1.option = option |
||||
|
window.frameElement.dispatchEvent(e1) |
||||
|
|
||||
|
if(window.frameElement.getAttribute('mode')) { |
||||
|
option.mode = window.frameElement.getAttribute('mode') |
||||
|
} |
||||
|
//2.编辑器初始化 |
||||
|
editor.init(option) |
||||
|
|
||||
|
//如果有组件有doc属性 |
||||
|
if(window.frameElement.getAttribute('doc')) { |
||||
|
editor.loadUrl(window.frameElement.getAttribute('doc'), '1').then(function(){ |
||||
|
let e3 = new Event('doc-loaded') |
||||
|
e3.editor = editor |
||||
|
window.frameElement.dispatchEvent(e3) |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
//3.初始化后 |
||||
|
let e2 = new Event('after-init') |
||||
|
e2.editor = editor |
||||
|
window.frameElement.dispatchEvent(e2) |
||||
|
}else{ |
||||
|
editor.init(option) |
||||
|
editor.loadUrl('https://www.x-emr.cn/doc/999.html') |
||||
|
} |
||||
|
}) |
||||
|
</script> |
||||
|
</head> |
||||
|
<body> |
||||
|
<!-- 默认id 为editor --> |
||||
|
<div id="editor" style="width:100%; height:100%;"></div> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,66 @@ |
|||||
|
<html> |
||||
|
<head> |
||||
|
<meta http-equiv="content-type" content="text/xml; charset=gb2312" /> |
||||
|
<title>My97DatePicker</title> |
||||
|
<script type="text/javascript" src="config.js" charset=gb2312></script> |
||||
|
<script> |
||||
|
//var l = location; |
||||
|
if(parent==window) |
||||
|
location.href = 'http://www.my97.net'; |
||||
|
/* |
||||
|
else{ |
||||
|
var start=l.href.indexOf('#')+1; |
||||
|
if(start>0){ |
||||
|
document.domain = l.href.substr(start); |
||||
|
} |
||||
|
} |
||||
|
*/ |
||||
|
var $d, $dp, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false; |
||||
|
|
||||
|
//说明是flat此时,拷贝一份$dp |
||||
|
if ($pdp.eCont) { |
||||
|
$dp = {}; |
||||
|
for (var p in $pdp) { |
||||
|
$dp[p] = $pdp[p]; |
||||
|
} |
||||
|
} |
||||
|
else{ |
||||
|
$dp = $pdp; |
||||
|
} |
||||
|
|
||||
|
$dp.getLangIndex = function(name){ |
||||
|
var arr = langList; |
||||
|
for (var i = 0; i < arr.length; i++) { |
||||
|
if (arr[i].name == name) { |
||||
|
return i; |
||||
|
} |
||||
|
} |
||||
|
return -1; |
||||
|
} |
||||
|
|
||||
|
$dp.getLang = function(name){ |
||||
|
var index = $dp.getLangIndex(name); |
||||
|
if (index == -1) { |
||||
|
index = 0; |
||||
|
} |
||||
|
return langList[index]; |
||||
|
} |
||||
|
|
||||
|
//根据语言设置选择语言 |
||||
|
$dp.realLang = $dp.getLang($dp.lang); |
||||
|
document.write("<script src='lang/" + $dp.realLang.name + ".js' charset='" + $dp.realLang.charset + "'><\/script>"); |
||||
|
|
||||
|
//导入皮肤列表文件 |
||||
|
for (var i = 0; i < skinList.length; i++) { |
||||
|
document.write('<link rel="stylesheet" type="text/css" href="skin/' + skinList[i].name + '/datepicker.css" title="' + skinList[i].name + '" charset="' + skinList[i].charset + '" disabled="true"/>'); |
||||
|
} |
||||
|
|
||||
|
</script> |
||||
|
<script type="text/javascript" src="calendar.js" charset="gb2312"></script> |
||||
|
</head> |
||||
|
<body leftmargin="0" topmargin="0" onLoad="$c.autoSize()" tabindex=0> |
||||
|
</body> |
||||
|
</html> |
||||
|
<script> |
||||
|
new My97DP(); |
||||
|
</script> |
@ -0,0 +1,678 @@ |
|||||
|
/* |
||||
|
* My97 DatePicker 4.8.5 |
||||
|
* License: http://www.my97.net/license.asp
|
||||
|
*/ |
||||
|
var $dp, WdatePicker; |
||||
|
(function () { |
||||
|
var Config = { |
||||
|
$langList: [{ |
||||
|
name: 'en', |
||||
|
charset: 'UTF-8' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'zh-cn', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'zh-tw', |
||||
|
charset: 'GBK' |
||||
|
} |
||||
|
], |
||||
|
$skinList: [{ |
||||
|
name: 'default', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'whyGreen', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'blue', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'green', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'simple', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'ext', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'blueFresh', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'twoer', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'YcloudRed', |
||||
|
charset: 'gb2312' |
||||
|
}, |
||||
|
{ |
||||
|
name: 'thinkpap', |
||||
|
charset: 'gb2312' |
||||
|
} |
||||
|
], |
||||
|
$wdate: false, |
||||
|
$crossFrame: false, |
||||
|
$preLoad: false, |
||||
|
$dpPath: '', |
||||
|
doubleCalendar: false, |
||||
|
enableKeyboard: true, |
||||
|
enableInputMask: true, |
||||
|
autoUpdateOnChanged: null, |
||||
|
weekMethod: 'MSExcel', |
||||
|
position: {}, |
||||
|
lang: 'auto', |
||||
|
skin: 'default', |
||||
|
dateFmt: 'yyyy年MM月dd日 HH时mm分', |
||||
|
realDateFmt: 'yyyy-MM-dd', |
||||
|
realTimeFmt: 'HH:mm:ss', |
||||
|
realFullFmt: '%Date %Time', |
||||
|
minDate: '0001-01-01 00:00:00', |
||||
|
maxDate: '9999-12-31 23:59:59', |
||||
|
minTime: '00:00:00', |
||||
|
maxTime: '23:59:59', |
||||
|
startDate: '', |
||||
|
alwaysUseStartDate: false, |
||||
|
yearOffset: 1911, |
||||
|
firstDayOfWeek: 0, |
||||
|
isShowWeek: false, |
||||
|
highLineWeekDay: true, |
||||
|
isShowClear: true, |
||||
|
isShowToday: true, |
||||
|
isShowOK: true, |
||||
|
isShowOthers: true, |
||||
|
readOnly: false, |
||||
|
errDealMode: 0, |
||||
|
autoPickDate: null, |
||||
|
qsEnabled: true, |
||||
|
autoShowQS: false, |
||||
|
hmsMenuCfg: { |
||||
|
H: [1, 6], |
||||
|
m: [5, 6], |
||||
|
s: [15, 4] |
||||
|
}, |
||||
|
|
||||
|
opposite: false, |
||||
|
specialDates: null, |
||||
|
specialDays: null, |
||||
|
disabledDates: null, |
||||
|
disabledDays: null, |
||||
|
onpicking: null, |
||||
|
onpicked: null, |
||||
|
onclearing: null, |
||||
|
oncleared: null, |
||||
|
ychanging: null, |
||||
|
ychanged: null, |
||||
|
Mchanging: null, |
||||
|
Mchanged: null, |
||||
|
dchanging: null, |
||||
|
dchanged: null, |
||||
|
Hchanging: null, |
||||
|
Hchanged: null, |
||||
|
mchanging: null, |
||||
|
mchanged: null, |
||||
|
schanging: null, |
||||
|
schanged: null, |
||||
|
eCont: null, |
||||
|
vel: null, |
||||
|
elProp: '', |
||||
|
errMsg: '', |
||||
|
quickSel: [], |
||||
|
has: {}, |
||||
|
getRealLang: function () { |
||||
|
var arr = Config.$langList; |
||||
|
for (var i = 0; i < arr.length; i++) { |
||||
|
if (arr[i].name == this.lang) { |
||||
|
return arr[i] |
||||
|
} |
||||
|
} |
||||
|
return arr[0] |
||||
|
} |
||||
|
}; |
||||
|
WdatePicker = main; |
||||
|
var w = window, |
||||
|
emptyEl = { |
||||
|
innerHTML: '' |
||||
|
}, |
||||
|
d = 'document', |
||||
|
de = 'documentElement', |
||||
|
tag = 'getElementsByTagName', |
||||
|
dptop, jsPath, $IE, $FF, $OPERA; |
||||
|
var ua = navigator.userAgent, |
||||
|
isTablet = /(?:iPad|PlayBook)/.test(ua) || (/(?:Android)/.test(ua) && !/(?:Mobile)/.test(ua)), |
||||
|
isPhone = /(?:iPhone)/.test(ua) || /(?:Android)/.test(ua) && /(?:Mobile)/.test(ua); |
||||
|
var appName = navigator.appName; |
||||
|
if (appName == 'Microsoft Internet Explorer') $IE = true; |
||||
|
else if (appName == 'Opera') $OPERA = true; |
||||
|
else $FF = true; |
||||
|
jsPath = Config.$dpPath || getJsPath(); |
||||
|
if (Config.$wdate) { |
||||
|
loadCSS(jsPath + 'skin/WdatePicker.css') |
||||
|
} |
||||
|
dptop = w; |
||||
|
if (Config.$crossFrame) { |
||||
|
try { |
||||
|
while (dptop.parent != dptop && dptop.parent[d][tag]('frameset').length == 0) { |
||||
|
dptop = dptop.parent |
||||
|
} |
||||
|
} catch (e) {} |
||||
|
} |
||||
|
if (!dptop.$dp) { |
||||
|
dptop.$dp = { |
||||
|
ff: $FF, |
||||
|
ie: $IE, |
||||
|
opera: $OPERA, |
||||
|
status: 0, |
||||
|
defMinDate: Config.minDate, |
||||
|
defMaxDate: Config.maxDate, |
||||
|
isTablet: isTablet, |
||||
|
isPhone: isPhone, |
||||
|
isTouch: isTablet || isPhone |
||||
|
} |
||||
|
} |
||||
|
initTopDP(); |
||||
|
if (Config.$preLoad && $dp.status == 0) { |
||||
|
dpAttachEvent(w, 'onload', function () { |
||||
|
main(null, true) |
||||
|
}) |
||||
|
} |
||||
|
var docEventName = $dp.isTouch ? 'ontouchstart' : 'onmousedown'; |
||||
|
if (!w[d].docMD) { |
||||
|
dpAttachEvent(w[d], docEventName, disposeDP, true); |
||||
|
w[d].docMD = true |
||||
|
} |
||||
|
if (!dptop[d].docMD) { |
||||
|
dpAttachEvent(dptop[d], docEventName, disposeDP, true); |
||||
|
dptop[d].docMD = true |
||||
|
} |
||||
|
dpAttachEvent(w, 'onunload', function () { |
||||
|
if ($dp.dd) { |
||||
|
display($dp.dd, "none") |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
function initTopDP() { |
||||
|
try { |
||||
|
dptop[d], dptop.$dp = dptop.$dp || {} |
||||
|
} catch (e) { |
||||
|
dptop = w; |
||||
|
$dp = $dp || {} |
||||
|
} |
||||
|
var obj = { |
||||
|
win: w, |
||||
|
$: function (el) { |
||||
|
return (typeof el == 'string') ? w[d].getElementById(el) : el |
||||
|
}, |
||||
|
$D: function (id, arg) { |
||||
|
return this.$DV(this.$(id).value, arg) |
||||
|
}, |
||||
|
$DV: function (v, arg) { |
||||
|
if (v != '') { |
||||
|
this.dt = $dp.cal.splitDate(v, $dp.cal.dateFmt); |
||||
|
if (arg) { |
||||
|
for (var p in arg) { |
||||
|
if (this.dt[p] === undefined) { |
||||
|
this.errMsg = 'invalid property:' + p |
||||
|
} else { |
||||
|
this.dt[p] += arg[p]; |
||||
|
if (p == 'M') { |
||||
|
var offset = arg['M'] > 0 ? 1 : 0; |
||||
|
var tmpday = new Date(this.dt['y'], this.dt['M'], 0).getDate(); |
||||
|
this.dt['d'] = Math.min(tmpday + offset, this.dt['d']) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (this.dt.refresh()) { |
||||
|
return this.dt |
||||
|
} |
||||
|
} |
||||
|
return '' |
||||
|
}, |
||||
|
show: function () { |
||||
|
var divs = dptop[d].getElementsByTagName('div'), |
||||
|
maxZIndex = 1e5; |
||||
|
for (var i = 0; i < divs.length; i++) { |
||||
|
var curZ = parseInt(divs[i].style.zIndex); |
||||
|
if (curZ > maxZIndex) { |
||||
|
maxZIndex = curZ |
||||
|
} |
||||
|
} |
||||
|
this.dd.style.zIndex = maxZIndex + 2; |
||||
|
display(this.dd, "block"); |
||||
|
display(this.dd.firstChild, "") |
||||
|
}, |
||||
|
unbind: function (el) { |
||||
|
el = this.$(el); |
||||
|
if (el.initcfg) { |
||||
|
dpDetachEvent(el, 'onclick', function () { |
||||
|
main(el.initcfg) |
||||
|
}); |
||||
|
dpDetachEvent(el, 'onfocus', function () { |
||||
|
main(el.initcfg) |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
hide: function () { |
||||
|
display(this.dd, "none") |
||||
|
}, |
||||
|
attachEvent: dpAttachEvent |
||||
|
}; |
||||
|
for (var p in obj) { |
||||
|
dptop.$dp[p] = obj[p]; |
||||
|
} |
||||
|
$dp = dptop.$dp |
||||
|
} |
||||
|
|
||||
|
function dpAttachEvent(o, sType, fHandler, useCapture) { |
||||
|
if (o.addEventListener) { |
||||
|
var shortTypeName = sType.replace(/on/, ""); |
||||
|
fHandler._ieEmuEventHandler = function (e) { |
||||
|
return fHandler(e) |
||||
|
}; |
||||
|
o.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, useCapture) |
||||
|
} else { |
||||
|
o.attachEvent(sType, fHandler) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function dpDetachEvent(o, sType, fHandler) { |
||||
|
if (o.removeEventListener) { |
||||
|
var shortTypeName = sType.replace(/on/, ""); |
||||
|
fHandler._ieEmuEventHandler = function (e) { |
||||
|
return fHandler(e) |
||||
|
}; |
||||
|
o.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false) |
||||
|
} else { |
||||
|
o.detachEvent(sType, fHandler) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function compareCfg(o1, o2, issub) { |
||||
|
if (typeof o1 != typeof o2) return false; |
||||
|
if (typeof o1 == 'object') { |
||||
|
if (!issub) { |
||||
|
for (var o in o1) { |
||||
|
if (typeof o2[o] == 'undefined') return false; |
||||
|
if (!compareCfg(o1[o], o2[o], true)) return false |
||||
|
} |
||||
|
} |
||||
|
return true |
||||
|
} else if (typeof o1 == 'function' && typeof o2 == 'function') { |
||||
|
return o1.toString() == o2.toString() |
||||
|
} else { |
||||
|
return o1 == o2 |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getJsPath() { |
||||
|
var path, tmp, scripts = w[d][tag]("script"); |
||||
|
for (var i = 0; i < scripts.length; i++) { |
||||
|
path = scripts[i].getAttribute('src') || ''; |
||||
|
path = path.substr(0, path.toLowerCase().indexOf('wdatepicker.js')); |
||||
|
var tmp = path.lastIndexOf("/"); |
||||
|
if (tmp > 0) path = path.substring(0, tmp + 1); |
||||
|
if (path) break |
||||
|
} |
||||
|
return path |
||||
|
} |
||||
|
|
||||
|
function loadCSS(path, title, charset) { |
||||
|
var head = w[d][tag]('HEAD').item(0), |
||||
|
style = w[d].createElement('link'); |
||||
|
if (head) { |
||||
|
style.href = path; |
||||
|
style.rel = 'stylesheet'; |
||||
|
style.type = 'text/css'; |
||||
|
if (title) style.title = title; |
||||
|
if (charset) style.charset = charset; |
||||
|
head.appendChild(style) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getAbsM(w) { |
||||
|
w = w || dptop; |
||||
|
var lm = 0, |
||||
|
tm = 0; |
||||
|
while (w != dptop) { |
||||
|
var ifs = w.parent[d][tag]('iframe'); |
||||
|
for (var i = 0; i < ifs.length; i++) { |
||||
|
try { |
||||
|
if (ifs[i].contentWindow == w) { |
||||
|
var rc = getBound(ifs[i]); |
||||
|
lm += rc.left; |
||||
|
tm += rc.top; |
||||
|
break |
||||
|
} |
||||
|
} catch (e) {} |
||||
|
} |
||||
|
w = w.parent |
||||
|
} |
||||
|
return { |
||||
|
'leftM': lm, |
||||
|
'topM': tm |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getBound(o, ignoreScr) { |
||||
|
if (o.getBoundingClientRect) { |
||||
|
return o.getBoundingClientRect() |
||||
|
} else { |
||||
|
var patterns = { |
||||
|
ROOT_TAG: /^body|html$/i, |
||||
|
OP_SCROLL: /^(?:inline|table-row)$/i |
||||
|
}; |
||||
|
var hssFixed = false, |
||||
|
win = null, |
||||
|
t = o.offsetTop, |
||||
|
l = o.offsetLeft, |
||||
|
r = o.offsetWidth, |
||||
|
b = o.offsetHeight; |
||||
|
var parentNode = o.offsetParent; |
||||
|
if (parentNode != o) { |
||||
|
while (parentNode) { |
||||
|
l += parentNode.offsetLeft; |
||||
|
t += parentNode.offsetTop; |
||||
|
if (getStyle(parentNode, 'position').toLowerCase() == 'fixed') hssFixed = true; |
||||
|
else if (parentNode.tagName.toLowerCase() == "body") win = parentNode.ownerDocument.defaultView; |
||||
|
parentNode = parentNode.offsetParent |
||||
|
} |
||||
|
} |
||||
|
parentNode = o.parentNode; |
||||
|
while (parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName)) { |
||||
|
if (parentNode.scrollTop || parentNode.scrollLeft) { |
||||
|
if (!patterns.OP_SCROLL.test(display(parentNode))) { |
||||
|
if (!$OPERA || parentNode.style.overflow !== 'visible') { |
||||
|
l -= parentNode.scrollLeft; |
||||
|
t -= parentNode.scrollTop |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
parentNode = parentNode.parentNode |
||||
|
} |
||||
|
if (!hssFixed) { |
||||
|
var scr = getScroll(win); |
||||
|
l -= scr.left; |
||||
|
t -= scr.top |
||||
|
} |
||||
|
r += l; |
||||
|
b += t; |
||||
|
return { |
||||
|
'left': l, |
||||
|
'top': t, |
||||
|
'right': r, |
||||
|
'bottom': b |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getWH(w) { |
||||
|
w = w || dptop; |
||||
|
var doc = w[d], |
||||
|
width = (w.innerWidth) ? w.innerWidth : (doc[de] && doc[de].clientWidth) ? doc[de].clientWidth : doc.body.offsetWidth, |
||||
|
height = (w.innerHeight) ? w.innerHeight : (doc[de] && doc[de].clientHeight) ? doc[de].clientHeight : doc.body.offsetHeight; |
||||
|
return { |
||||
|
'width': width, |
||||
|
'height': height |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getScroll(w) { |
||||
|
w = w || dptop; |
||||
|
var doc = w[d], |
||||
|
doce = doc[de], |
||||
|
db = doc.body; |
||||
|
doc = (doce && doce.scrollTop != null && (doce.scrollTop > db.scrollTop || doce.scrollLeft > db.scrollLeft)) ? doce : db; |
||||
|
return { |
||||
|
'top': doc.scrollTop, |
||||
|
'left': doc.scrollLeft |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function disposeDP(e) { |
||||
|
try { |
||||
|
var src = e ? (e.srcElement || e.target) : null; |
||||
|
if ($dp.cal && !$dp.eCont && $dp.dd && src != $dp.el && $dp.dd.style.display == 'block') { |
||||
|
$dp.cal.close() |
||||
|
} |
||||
|
} catch (e) {} |
||||
|
} |
||||
|
|
||||
|
function dpLoaded() { |
||||
|
$dp.status = 2 |
||||
|
} |
||||
|
var isDptopReady, dptopInterval; |
||||
|
|
||||
|
function main(initcfg, preLoad) { |
||||
|
if (!$dp) return; |
||||
|
initcfg.el = initcfg.el || w[d].activeElement; |
||||
|
if ($dp.isTouch) { |
||||
|
try { |
||||
|
initcfg.el.readOnly = true; |
||||
|
initcfg.el.blur() |
||||
|
} catch (e) {} |
||||
|
} |
||||
|
initTopDP(); |
||||
|
var cfg = {}; |
||||
|
for (var p in initcfg) { |
||||
|
cfg[p] = initcfg[p] |
||||
|
} |
||||
|
for (var p in Config) { |
||||
|
if (p.substring(0, 1) != '$' && cfg[p] === undefined) { |
||||
|
cfg[p] = Config[p] |
||||
|
} |
||||
|
} |
||||
|
if (preLoad) { |
||||
|
if (!dptopReady()) { |
||||
|
dptopInterval = dptopInterval || setInterval(function () { |
||||
|
if (dptop[d].readyState == 'complete') { |
||||
|
clearInterval(dptopInterval); |
||||
|
} |
||||
|
main(null, true) |
||||
|
}, 50); |
||||
|
return |
||||
|
} |
||||
|
if ($dp.status == 0) { |
||||
|
$dp.status = 1; |
||||
|
cfg.el = emptyEl; |
||||
|
showPicker(cfg, true) |
||||
|
} else { |
||||
|
return |
||||
|
} |
||||
|
} else if (cfg.eCont) { |
||||
|
cfg.eCont = $dp.$(cfg.eCont); |
||||
|
cfg.el = emptyEl; |
||||
|
cfg.autoPickDate = true; |
||||
|
cfg.qsEnabled = false; |
||||
|
showPicker(cfg) |
||||
|
} else { |
||||
|
if (Config.$preLoad && $dp.status != 2) return; |
||||
|
if (!cfg.el) { |
||||
|
var evt = SearchEvent(); |
||||
|
if (w.event === evt || evt) { |
||||
|
cfg.srcEl = evt.srcElement || evt.target; |
||||
|
evt.cancelBubble = true |
||||
|
} |
||||
|
} |
||||
|
cfg.el = cfg.el = $dp.$(cfg.el || cfg.srcEl); |
||||
|
if (cfg.el == null) { |
||||
|
alert('WdatePicker:el is null!\nexample:onclick="WdatePicker({el:this})"'); |
||||
|
return |
||||
|
} |
||||
|
try { |
||||
|
if (!cfg.el || cfg.el['My97Mark'] === true || cfg.el.disabled || ($dp.dd && display($dp.dd) != 'none' && $dp.dd.style.left != '-970px')) { |
||||
|
if (cfg.el['My97Mark']) cfg.el['My97Mark'] = false; |
||||
|
return |
||||
|
} |
||||
|
} catch (e) {} |
||||
|
if (evt && cfg.el.nodeType == 1 && !compareCfg(cfg.el.initcfg, initcfg)) { |
||||
|
$dp.unbind(cfg.el); |
||||
|
dpAttachEvent(cfg.el, evt.type == 'focus' ? 'onclick' : 'onfocus', function () { |
||||
|
main(initcfg) |
||||
|
}); |
||||
|
cfg.el.initcfg = initcfg; |
||||
|
} |
||||
|
showPicker(cfg) |
||||
|
} |
||||
|
|
||||
|
function dptopReady() { |
||||
|
if ($IE && dptop != w && dptop[d].readyState != 'complete') return false; |
||||
|
return true |
||||
|
} |
||||
|
|
||||
|
function SearchEvent() { |
||||
|
if ($FF) { |
||||
|
try { |
||||
|
var count = 0; |
||||
|
func = SearchEvent.caller; |
||||
|
while (func != null) { |
||||
|
var arg0 = func.arguments[0]; |
||||
|
if (arg0 && (arg0 + '').indexOf('Event') >= 0 || (count++) > 97) { |
||||
|
return arg0 |
||||
|
} |
||||
|
func = func.caller |
||||
|
} |
||||
|
} catch (e) {} |
||||
|
return null |
||||
|
} |
||||
|
return event |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function getStyle(obj, attribute) { |
||||
|
return obj.currentStyle ? obj.currentStyle[attribute] : document.defaultView.getComputedStyle(obj, false)[attribute] |
||||
|
} |
||||
|
|
||||
|
function display(obj, value) { |
||||
|
if (obj) { |
||||
|
if (value != null) obj.style.display = value; |
||||
|
else return getStyle(obj, 'display') |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function showPicker(cfg, preLoad) { |
||||
|
var nodeName = cfg.el ? cfg.el.nodeName : 'INPUT'; |
||||
|
if (preLoad || cfg.eCont || new RegExp(/input|textarea|div|field|span|p|a/ig).test(nodeName)) { |
||||
|
cfg.elProp = cfg.elProp || nodeName == 'INPUT' ? 'value' : 'innerHTML' |
||||
|
} else { |
||||
|
return |
||||
|
} |
||||
|
if (cfg.lang == 'auto') { |
||||
|
cfg.lang = $IE ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase() |
||||
|
} |
||||
|
if (!cfg.eCont) { |
||||
|
for (var p in cfg) { |
||||
|
$dp[p] = cfg[p] |
||||
|
} |
||||
|
} |
||||
|
if (!$dp.dd || cfg.eCont || ($dp.dd && (cfg.getRealLang().name != $dp.dd.lang || cfg.skin != $dp.dd.skin))) { |
||||
|
if (cfg.eCont) { |
||||
|
ddInit(cfg.eCont, cfg) |
||||
|
} else { |
||||
|
$dp.dd = dptop[d].createElement("DIV"); |
||||
|
$dp.dd.style.cssText = 'position:absolute'; |
||||
|
dptop[d].body.appendChild($dp.dd); |
||||
|
ddInit($dp.dd, cfg); |
||||
|
if (preLoad) { |
||||
|
$dp.dd.style.left = $dp.dd.style.top = '-970px' |
||||
|
} else { |
||||
|
$dp.show(); |
||||
|
setPos($dp) |
||||
|
} |
||||
|
} |
||||
|
} else if ($dp.cal) { |
||||
|
$dp.show(); |
||||
|
$dp.cal.init(); |
||||
|
if (!$dp.eCont) setPos($dp) |
||||
|
} |
||||
|
|
||||
|
function ddInit(cont, cfg) { |
||||
|
var dm = dptop[d].domain, |
||||
|
isCross = false, |
||||
|
defHtml = '<iframe hideFocus=true width=9 height=7 frameborder=0 border=0 scrolling=no src="about:blank"></iframe>'; |
||||
|
cont.innerHTML = defHtml; |
||||
|
var langList = Config.$langList, |
||||
|
skinList = Config.$skinList, |
||||
|
doc; |
||||
|
try { |
||||
|
doc = cont.lastChild.contentWindow[d] |
||||
|
} catch (e) { |
||||
|
isCross = true; |
||||
|
cont.removeChild(cont.lastChild); |
||||
|
var ifr = dptop[d].createElement("iframe"); |
||||
|
ifr.hideFocus = true; |
||||
|
ifr.frameBorder = 0; |
||||
|
ifr.scrolling = 'no'; |
||||
|
ifr.src = "javascript:(function(){var d=document;d.open();d.domain='" + dm + "';})()"; |
||||
|
cont.appendChild(ifr); |
||||
|
setTimeout(function () { |
||||
|
doc = cont.lastChild.contentWindow[d]; |
||||
|
ddWrite() |
||||
|
}, 97); |
||||
|
return |
||||
|
} |
||||
|
ddWrite(); |
||||
|
|
||||
|
function ddWrite() { |
||||
|
var realLang = cfg.getRealLang(), |
||||
|
ver = '4.9.0b3'; |
||||
|
cont.lang = realLang.name; |
||||
|
cont.skin = cfg.skin; |
||||
|
var h = ['<head><script>', '', 'var doc=document, $d, $dp, $cfg=doc.cfg, $pdp = parent.$dp, $dt, $tdt, $sdt, $lastInput, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;', 'if($cfg.eCont){$dp = {};for(var p in $pdp)$dp[p]=$pdp[p];}else{$dp=$pdp;};for(var p in $cfg){$dp[p]=$cfg[p];}', 'if(!$dp.isTouch)doc.oncontextmenu=function(){try{$c._fillQS(!$dp.has.d,1);showB($d.qsDivSel);}catch(e){};return false;};', '</script><script src=', jsPath, 'lang/', realLang.name, '.js?' + ver + ' charset=', realLang.charset, '></script>']; |
||||
|
if (isCross) h[1] = 'document.domain="' + dm + '";'; |
||||
|
for (var i = 0; i < skinList.length; i++) { |
||||
|
if (skinList[i].name == cfg.skin) { |
||||
|
h.push('<link rel="stylesheet" type="text/css" href="' + jsPath + 'skin/' + skinList[i].name + '/datepicker.css?'); |
||||
|
h.push(ver); |
||||
|
h.push('" charset="' + skinList[i].charset + '"/>') |
||||
|
} |
||||
|
} |
||||
|
h.push('<script src="' + jsPath + 'calendar.js?'); |
||||
|
h.push(ver); |
||||
|
h.push('"></script>'); |
||||
|
h.push('</head><body leftmargin="0" topmargin="0" tabindex=0></body></html>'); |
||||
|
h.push('<script>var t;t=t||setInterval(function(){if((typeof(doc.ready)=="boolean"&&doc.ready)||doc.readyState=="complete"){new My97DP();$cfg.onload();$c.autoSize();$cfg.setPos($dp);clearInterval(t);}},20);</script>'); |
||||
|
cfg.setPos = setPos; |
||||
|
cfg.onload = dpLoaded; |
||||
|
doc.write('<html>'); |
||||
|
doc.cfg = cfg; |
||||
|
doc.write(h.join('')); |
||||
|
doc.close() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function setPos(dp) { |
||||
|
var l = dp.position.left, |
||||
|
t = dp.position.top, |
||||
|
el = dp.el; |
||||
|
if (el == emptyEl) return; |
||||
|
if (el != dp.srcEl && (display(el) == 'none' || el.type == 'hidden')) el = dp.srcEl; |
||||
|
var objxy = getBound(el), |
||||
|
mm = getAbsM(w), |
||||
|
currWH = getWH(dptop), |
||||
|
scr = getScroll(dptop), |
||||
|
ddHeight = $dp.dd.offsetHeight, |
||||
|
ddWidth = $dp.dd.offsetWidth; |
||||
|
if (isNaN(t)) t = 0; |
||||
|
if ((mm.topM + objxy.bottom + ddHeight > currWH.height) && (mm.topM + objxy.top - ddHeight > 0)) { |
||||
|
t += scr.top + mm.topM + objxy.top - ddHeight - 2 |
||||
|
} else { |
||||
|
t += scr.top + mm.topM + objxy.bottom; |
||||
|
var offsetT = t - scr.top + ddHeight - currWH.height; |
||||
|
if (offsetT > 0) t -= offsetT |
||||
|
} |
||||
|
if (isNaN(l)) l = 0; |
||||
|
l += scr.left + Math.min(mm.leftM + objxy.left, currWH.width - ddWidth - 5) - ($IE ? 2 : 0); |
||||
|
dp.dd.style.top = (t + 2) + 'px'; |
||||
|
dp.dd.style.left = l + 'px' |
||||
|
} |
||||
|
} |
||||
|
})(); |
@ -0,0 +1,14 @@ |
|||||
|
var $lang={ |
||||
|
errAlertMsg: "Invalid date or the date out of range,redo or not?", |
||||
|
aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], |
||||
|
aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], |
||||
|
aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], |
||||
|
aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"], |
||||
|
clearStr: "Clear", |
||||
|
todayStr: "Today", |
||||
|
okStr: "OK", |
||||
|
updateStr: "OK", |
||||
|
timeStr: "Time", |
||||
|
quickStr: "Quick Selection", |
||||
|
err_1: 'MinDate Cannot be bigger than MaxDate!' |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
var $lang={ |
||||
|
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?", |
||||
|
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], |
||||
|
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], |
||||
|
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"], |
||||
|
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"], |
||||
|
clearStr: "\u6E05\u7A7A", |
||||
|
todayStr: "\u4ECA\u5929", |
||||
|
okStr: "\u786E\u5B9A", |
||||
|
updateStr: "\u786E\u5B9A", |
||||
|
timeStr: "\u65F6\u95F4", |
||||
|
quickStr: "\u5FEB\u901F\u9009\u62E9", |
||||
|
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!' |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
var $lang={ |
||||
|
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?", |
||||
|
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], |
||||
|
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], |
||||
|
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"], |
||||
|
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"], |
||||
|
clearStr: "\u6E05\u7A7A", |
||||
|
todayStr: "\u4ECA\u5929", |
||||
|
okStr: "\u78BA\u5B9A", |
||||
|
updateStr: "\u78BA\u5B9A", |
||||
|
timeStr: "\u6642\u9593", |
||||
|
quickStr: "\u5FEB\u901F\u9078\u64C7", |
||||
|
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!' |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
.Wdate{ |
||||
|
border:#999 1px solid; |
||||
|
height:20px; |
||||
|
background:#fff url(datePicker.gif) no-repeat right; |
||||
|
} |
||||
|
.Wdate::-ms-clear{display:none;} |
||||
|
|
||||
|
.WdateFmtErr{ |
||||
|
font-weight:bold; |
||||
|
color:red; |
||||
|
} |
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,328 @@ |
|||||
|
/** |
||||
|
* yyh & kimi from mb518.com |
||||
|
* 2019-3-25 |
||||
|
**/ |
||||
|
.WdateDiv { |
||||
|
width: 216px; |
||||
|
background-color: #FFF; |
||||
|
border-radius: 5px; |
||||
|
border: 1px solid #cecece; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv2 { |
||||
|
width: 432px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv > div:nth-child(3) { |
||||
|
padding: 0px 0.375em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .NavImg a { |
||||
|
cursor: pointer; |
||||
|
display: block; |
||||
|
width: 1em; |
||||
|
height: 1em; |
||||
|
margin-top: 0.5em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .NavImgll a { |
||||
|
float: left; |
||||
|
background: url(img.gif) no-repeat; |
||||
|
background-size: 400%; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .NavImgl a { |
||||
|
float: left; |
||||
|
background: url(img.gif) no-repeat -1em 0; |
||||
|
background-size: 400%; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .NavImgr a { |
||||
|
float: right; |
||||
|
background: url(img.gif) no-repeat -2em 0; |
||||
|
background-size: 400%; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .NavImgrr a { |
||||
|
float: right; |
||||
|
background: url(img.gif) no-repeat -3em 0; |
||||
|
background-size: 400%; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTitle { |
||||
|
height: 1.875em; |
||||
|
padding: 0.1875em 0.3125em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTitle > div:nth-child(3), |
||||
|
.WdateDiv #dpTitle > div:nth-child(4) { |
||||
|
margin: 0px 0.8125em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .yminput { |
||||
|
margin-top: 0.375em; |
||||
|
text-align: center; |
||||
|
border: 0px; |
||||
|
height: 1.75em; |
||||
|
width: 3.125em; |
||||
|
color: #333; |
||||
|
background-color: #eefaff; |
||||
|
outline: none; |
||||
|
cursor: pointer; |
||||
|
font-size: 0.8125em; |
||||
|
border-radius: 0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .yminputfocus { |
||||
|
font-size: 0.8125em; |
||||
|
margin-top: 0.375em; |
||||
|
text-align: center; |
||||
|
border: 0; |
||||
|
color: #333; |
||||
|
height: 1.25em; |
||||
|
width: 3.125em; |
||||
|
outline: none; |
||||
|
background-color: #eefaff; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .menuSel { |
||||
|
z-index: 1; |
||||
|
position: absolute; |
||||
|
background-color: #FFFFFF; |
||||
|
display: none; |
||||
|
padding: 0.3125em; |
||||
|
border-radius: 3px; |
||||
|
box-shadow: rgb(204, 204, 204) 0px 0px 2px 2px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .menu { |
||||
|
cursor: pointer; |
||||
|
background-color: #fff; |
||||
|
color: #333; |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .menuOn { |
||||
|
cursor: pointer; |
||||
|
text-align: center; |
||||
|
background-color: #d6f2ff; |
||||
|
border-radius: 3px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .invalidMenu { |
||||
|
color: #aaa; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .YMenu { |
||||
|
margin-top: 1.875em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .MMenu { |
||||
|
margin-top: 1.875em; |
||||
|
box-shadow: rgb(204, 204, 204) 0px 0px 2px 2px; |
||||
|
padding: 0.3125em; |
||||
|
border-radius: 3px; |
||||
|
*width: 3.875em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .hhMenu { |
||||
|
margin-top: -5.625em; |
||||
|
margin-left: 1.625em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .mmMenu { |
||||
|
margin-top: -2.875em; |
||||
|
margin-left: 1.625em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .ssMenu { |
||||
|
margin-top: -1.5em; |
||||
|
margin-left: 1.625em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wweek { |
||||
|
text-align: center; |
||||
|
background: #DAF3F5; |
||||
|
border-right: #BDEBEE 1px solid; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .MTitle { |
||||
|
background-color: #f3f3f3; |
||||
|
border-radius: 5px; |
||||
|
color: #666; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayTable2 { |
||||
|
border-collapse: collapse; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayTable2 table { |
||||
|
border: 0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayTable { |
||||
|
font-size: 0.75em; |
||||
|
line-height: 1.5em; |
||||
|
color: #333; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayTable td { |
||||
|
text-align: center; |
||||
|
border-bottom: 1px solid #f3f3f3; |
||||
|
padding: 0.1875em 0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wday { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayOn { |
||||
|
cursor: pointer; |
||||
|
border-radius: 3px; |
||||
|
background-color: #C0EBEF; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wwday { |
||||
|
cursor: pointer; |
||||
|
color: #ab1e1e; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WwdayOn { |
||||
|
cursor: pointer; |
||||
|
border-radius: 3px; |
||||
|
background-color: #C0EBEF; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wtoday { |
||||
|
cursor: pointer; |
||||
|
color: blue; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wselday { |
||||
|
background-color: #35baf6; |
||||
|
border-radius: 3px; |
||||
|
color: #fff; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WspecialDay { |
||||
|
background-color: #66F4DF; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WotherDay { |
||||
|
cursor: pointer; |
||||
|
color: #8585e1; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WotherDayOn { |
||||
|
cursor: pointer; |
||||
|
background-color: #d6f2ff; |
||||
|
border-radius: 3px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WinvalidDay { |
||||
|
color: #aaa; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime { |
||||
|
margin: 0.1875em 0 0.1875em 0.625em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime #dpTimeStr { |
||||
|
margin-left: 0.0625em; |
||||
|
color: #333; |
||||
|
font-size: 0.75em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime table:nth-child(4) { |
||||
|
font-size: 100%; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime table:nth-child(-n+3) { |
||||
|
font-size: 0.75em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime input { |
||||
|
-webkit-appearance: none; |
||||
|
font-size: 0.75em; |
||||
|
height: 1.25em; |
||||
|
width: 1.875em; |
||||
|
text-align: center; |
||||
|
color: #333; |
||||
|
border: 0; |
||||
|
background-color: #eefaff; |
||||
|
border-radius: 0; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime input:disabled { |
||||
|
background-color: #e7e7e7; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime .tB { |
||||
|
border-right: 0px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime .tE { |
||||
|
border-left: 0; |
||||
|
border-right: 0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime .tm { |
||||
|
width: 0.9375em; |
||||
|
border-left: 0; |
||||
|
border-right: 0; |
||||
|
} |
||||
|
|
||||
|
/*.WdateDiv #dpTime button { |
||||
|
font-size: 0.75em; |
||||
|
}*/ |
||||
|
|
||||
|
.WdateDiv #dpTime #dpTimeUp { |
||||
|
height: 0.625em; |
||||
|
width: 0.8125em; |
||||
|
border: 0px; |
||||
|
background: url(img.gif) no-repeat -2em -1em; |
||||
|
background-size: 450%; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime #dpTimeDown { |
||||
|
height: 0.625em; |
||||
|
width: 0.8125em; |
||||
|
border: 0px; |
||||
|
background: url(img.gif) no-repeat -2em -1.625em; |
||||
|
background-size: 450%; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpQS { |
||||
|
float: left; |
||||
|
margin-right: 0.1875em; |
||||
|
margin-top: 0.3125em; |
||||
|
background: url(img.gif) no-repeat 0px -1em; |
||||
|
background-size: 320%; |
||||
|
width: 1.25em; |
||||
|
height: 1.25em; |
||||
|
cursor: pointer; |
||||
|
margin-left: 0.375em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpControl { |
||||
|
text-align: right; |
||||
|
margin-top: 0.1875em; |
||||
|
padding: 0 0.3125em; |
||||
|
padding-bottom: 0.1875em; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .dpButton { |
||||
|
font-size: 0.75em; |
||||
|
-webkit-appearance: none; |
||||
|
padding-top: 0; |
||||
|
height: 1.75em; |
||||
|
width: 2.8125em; |
||||
|
border: 0; |
||||
|
margin-top: 0.1875em; |
||||
|
margin-right: 0.1875em; |
||||
|
background: #35baf6; |
||||
|
color: #fff; |
||||
|
border-radius: 0; |
||||
|
} |
After Width: | Height: | Size: 2.4 KiB |
@ -0,0 +1,309 @@ |
|||||
|
/* |
||||
|
* My97 DatePicker 4.7 |
||||
|
* 皮肤名称:ext |
||||
|
* 皮肤作者:CssRain |
||||
|
* 作者blog:http://www.CssRain.cn |
||||
|
* 作者邮箱:cssrain@gmail.com |
||||
|
*/ |
||||
|
|
||||
|
/* 日期选择容器 DIV */ |
||||
|
.WdateDiv{ |
||||
|
width:180px; |
||||
|
background-color:#fff; |
||||
|
border:1px solid #718BB7; |
||||
|
} |
||||
|
/* 双月日历的宽度 */ |
||||
|
.WdateDiv2{ |
||||
|
width:360px; |
||||
|
} |
||||
|
.WdateDiv *{font-size:9pt;} |
||||
|
|
||||
|
/**************************** |
||||
|
* 导航图标 全部是A标签 |
||||
|
***************************/ |
||||
|
.WdateDiv .NavImg a{ |
||||
|
margin-top:3px; |
||||
|
cursor:pointer; |
||||
|
display:block; |
||||
|
width:15px; |
||||
|
height:15px; |
||||
|
} |
||||
|
.WdateDiv .NavImgll a{ |
||||
|
background:url(left-btn2.gif) no-repeat center center; |
||||
|
float:left; |
||||
|
margin-left:2px; |
||||
|
} |
||||
|
.WdateDiv .NavImgl a{ |
||||
|
background:url(left-btn.gif) no-repeat center center; |
||||
|
float:left; |
||||
|
margin-left:2px; |
||||
|
} |
||||
|
.WdateDiv .NavImgr a{ |
||||
|
background:url(right-btn.gif) no-repeat center center; |
||||
|
float:right; |
||||
|
margin-right:2px; |
||||
|
} |
||||
|
.WdateDiv .NavImgrr a{ |
||||
|
background:url(right-btn2.gif) no-repeat center center; |
||||
|
float:right; |
||||
|
margin-right:2px; |
||||
|
} |
||||
|
|
||||
|
/**************************** |
||||
|
* 年份月份相关 |
||||
|
***************************/ |
||||
|
/* 年份月份栏 DIV */ |
||||
|
.WdateDiv #dpTitle{ |
||||
|
height:22px; |
||||
|
background:transparent url(hd-sprite.gif) repeat-x scroll 0 -83px; |
||||
|
color:#FFFFFF; |
||||
|
font-family:"sans serif",tahoma,verdana,helvetica; |
||||
|
font-size:12px; |
||||
|
font-size-adjust:none; |
||||
|
font-stretch:normal; |
||||
|
font-style:normal; |
||||
|
font-variant:normal; |
||||
|
font-weight:bold; |
||||
|
padding-top:2px; |
||||
|
} |
||||
|
/* 年份月份输入框 INPUT */ |
||||
|
.WdateDiv .yminput{ |
||||
|
margin-top:2px; |
||||
|
text-align:center; |
||||
|
border:0px; |
||||
|
height:20px; |
||||
|
width:50px; |
||||
|
color:#FFF; |
||||
|
background-color:transparent; |
||||
|
cursor:pointer; |
||||
|
} |
||||
|
/* 年份月份输入框获得焦点时的样式 INPUT */ |
||||
|
.WdateDiv .yminputfocus{ |
||||
|
margin-top:2px; |
||||
|
text-align:center; |
||||
|
border:#939393 1px solid; |
||||
|
font-weight:bold; |
||||
|
color:#034c50; |
||||
|
height:16px; |
||||
|
width:50px; |
||||
|
} |
||||
|
/* 菜单选择框 DIV */ |
||||
|
.WdateDiv .menuSel{ |
||||
|
z-index:1; |
||||
|
position:absolute; |
||||
|
background-color:#FFFFFF; |
||||
|
border:1px solid #718BB7; |
||||
|
display:none; |
||||
|
} |
||||
|
/* 菜单的样式 TD */ |
||||
|
.WdateDiv .menu{ |
||||
|
cursor:pointer; |
||||
|
background-color:#fff; |
||||
|
color:#11777C; |
||||
|
} |
||||
|
/* 菜单的mouseover样式 TD */ |
||||
|
.WdateDiv .menuOn{ |
||||
|
cursor:pointer; |
||||
|
background-color: #B3CEEF; |
||||
|
} |
||||
|
/* 菜单无效时的样式 TD */ |
||||
|
.WdateDiv .invalidMenu{ |
||||
|
color:#aaa; |
||||
|
} |
||||
|
/* 年选择框的偏移 DIV */ |
||||
|
.WdateDiv .YMenu{ |
||||
|
margin-top:16px; |
||||
|
} |
||||
|
/* 月选择框的偏移 DIV */ |
||||
|
.WdateDiv .MMenu{ |
||||
|
margin-top:16px; |
||||
|
*width:62px; |
||||
|
} |
||||
|
/* 时选择框的位置 DIV */ |
||||
|
.WdateDiv .hhMenu{ |
||||
|
margin-top:-90px; |
||||
|
margin-left:26px; |
||||
|
} |
||||
|
/* 分选择框的位置 DIV */ |
||||
|
.WdateDiv .mmMenu{ |
||||
|
margin-top:-46px; |
||||
|
margin-left:26px; |
||||
|
} |
||||
|
/* 秒选择框的位置 DIV */ |
||||
|
.WdateDiv .ssMenu{ |
||||
|
margin-top:-24px; |
||||
|
margin-left:26px; |
||||
|
} |
||||
|
|
||||
|
/**************************** |
||||
|
* 周相关 |
||||
|
***************************/ |
||||
|
.WdateDiv .Wweek { |
||||
|
text-align:center; |
||||
|
background:#DAF3F5; |
||||
|
border-right:#BDEBEE 1px solid; |
||||
|
} |
||||
|
/**************************** |
||||
|
* 星期,日期相关 |
||||
|
***************************/ |
||||
|
/* 星期栏 TR */ |
||||
|
.WdateDiv .MTitle{ |
||||
|
color:#233D6D; |
||||
|
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top; |
||||
|
color:#233D6D; |
||||
|
cursor:default; |
||||
|
font-size:10px; |
||||
|
padding-top:2px; |
||||
|
} |
||||
|
.WdateDiv .MTitle td{ |
||||
|
border-bottom:1px solid #A3BAD9; |
||||
|
} |
||||
|
.WdateDiv .WdayTable2{ |
||||
|
border-collapse:collapse; |
||||
|
border:black 1px solid; |
||||
|
} |
||||
|
.WdateDiv .WdayTable2 table{ |
||||
|
border:0; |
||||
|
} |
||||
|
/* 日期栏表格 TABLE */ |
||||
|
.WdateDiv .WdayTable{ |
||||
|
line-height:20px; |
||||
|
color:black; |
||||
|
} |
||||
|
.WdateDiv .WdayTable td{ |
||||
|
text-align:center; |
||||
|
} |
||||
|
/* 日期格的样式 TD */ |
||||
|
.WdateDiv .Wday{ |
||||
|
cursor:pointer; |
||||
|
} |
||||
|
/* 日期格的mouseover样式 TD */ |
||||
|
.WdateDiv .WdayOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#B3CEEF; |
||||
|
} |
||||
|
/* 周末日期格的样式 TD */ |
||||
|
.WdateDiv .Wwday{ |
||||
|
cursor:pointer; |
||||
|
color:#ab1e1e; |
||||
|
} |
||||
|
/* 周末日期格的mouseover样式 TD */ |
||||
|
.WdateDiv .WwdayOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#B3CEEF; |
||||
|
} |
||||
|
.WdateDiv .Wtoday{ |
||||
|
cursor:pointer; |
||||
|
color:red; |
||||
|
} |
||||
|
.WdateDiv .Wselday{ |
||||
|
background-color:#B3CEEF; |
||||
|
} |
||||
|
.WdateDiv .WspecialDay{ |
||||
|
background-color:#66F4DF; |
||||
|
} |
||||
|
/* 其他月份的日期 */ |
||||
|
.WdateDiv .WotherDay{ |
||||
|
cursor:pointer; |
||||
|
color:#AAAAAA; |
||||
|
} |
||||
|
/* 其他月份的日期mouseover样式 */ |
||||
|
.WdateDiv .WotherDayOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#B3CEEF; |
||||
|
} |
||||
|
/* 无效日期的样式,即在日期范围以外日期格的样式,不能选择的日期 */ |
||||
|
.WdateDiv .WinvalidDay{ |
||||
|
color:#aaa; |
||||
|
} |
||||
|
|
||||
|
/**************************** |
||||
|
* 时间相关 |
||||
|
***************************/ |
||||
|
/* 时间栏 DIV */ |
||||
|
.WdateDiv #dpTime{ |
||||
|
width:120px; |
||||
|
text-align:left; |
||||
|
margin-left:32px; |
||||
|
height:20px; |
||||
|
line-height:20px; |
||||
|
padding-top:1px; |
||||
|
} |
||||
|
/* 时间文字 SPAN */ |
||||
|
.WdateDiv #dpTime #dpTimeStr{ |
||||
|
margin-left:1px; |
||||
|
color:#233D6D; |
||||
|
} |
||||
|
/* 时间输入框 INPUT */ |
||||
|
.WdateDiv #dpTime input{ |
||||
|
height:16px; |
||||
|
width:18px; |
||||
|
text-align:center; |
||||
|
color:#333; |
||||
|
border:#A3BAD9 1px solid; |
||||
|
} |
||||
|
/* 时间 时 INPUT */ |
||||
|
.WdateDiv #dpTime .tB{ |
||||
|
border-right:0px; |
||||
|
} |
||||
|
/* 时间 分和间隔符 ':' INPUT */ |
||||
|
.WdateDiv #dpTime .tE{ |
||||
|
border-left:0; |
||||
|
border-right:0; |
||||
|
} |
||||
|
/* 时间 秒 INPUT */ |
||||
|
.WdateDiv #dpTime .tm{ |
||||
|
width:7px; |
||||
|
border-left:0; |
||||
|
border-right:0; |
||||
|
} |
||||
|
/* 时间右边的向上按钮 BUTTON */ |
||||
|
.WdateDiv #dpTime #dpTimeUp{ |
||||
|
height:8px; |
||||
|
width:13px; |
||||
|
border:0px; |
||||
|
background:url(img.gif) no-repeat -32px -16px; |
||||
|
cursor:pointer; |
||||
|
margin-bottom:0; |
||||
|
padding-bottom:0; |
||||
|
} |
||||
|
/* 时间右边的向下按钮 BUTTON */ |
||||
|
.WdateDiv #dpTime #dpTimeDown{ |
||||
|
height:8px; |
||||
|
width:13px; |
||||
|
border:0px; |
||||
|
background:url(img.gif) no-repeat -48px -16px; |
||||
|
cursor:pointer; |
||||
|
margin-top:0; |
||||
|
padding-top:0; |
||||
|
} |
||||
|
/**************************** |
||||
|
* 其他 |
||||
|
***************************/ |
||||
|
.WdateDiv #dpQS { |
||||
|
float:left; |
||||
|
margin-left:3px; |
||||
|
margin-top:9px; |
||||
|
background:url(dateselect.gif) no-repeat; |
||||
|
width:20px; |
||||
|
height:20px; |
||||
|
cursor:pointer; |
||||
|
} |
||||
|
.WdateDiv #dpControl { |
||||
|
text-align:right; |
||||
|
margin-top:3px; |
||||
|
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top; |
||||
|
border-top:1px solid #A3BAD9; |
||||
|
padding:4px; |
||||
|
} |
||||
|
.WdateDiv .dpButton{ |
||||
|
width:44px; |
||||
|
height:22px; |
||||
|
background:#083772 none repeat scroll 0 0; |
||||
|
border-color:#3366CC #000055 #000055 #3366CC; |
||||
|
border-style:solid; |
||||
|
border-width:1px; |
||||
|
color:white; |
||||
|
cursor:pointer; |
||||
|
|
||||
|
} |
After Width: | Height: | Size: 190 B |
After Width: | Height: | Size: 873 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 870 B |
After Width: | Height: | Size: 113 B |
After Width: | Height: | Size: 871 B |
After Width: | Height: | Size: 113 B |
After Width: | Height: | Size: 307 B |
@ -0,0 +1,256 @@ |
|||||
|
/* |
||||
|
* My97 DatePicker 4.8 Skin:whyGreen |
||||
|
*/ |
||||
|
.WdateDiv{ |
||||
|
width:180px; |
||||
|
background-color:#fff; |
||||
|
border:#C5E1E4 1px solid; |
||||
|
padding:2px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv2{ |
||||
|
width:360px; |
||||
|
} |
||||
|
.WdateDiv *{font-size:9pt;} |
||||
|
|
||||
|
.WdateDiv .NavImg a{ |
||||
|
cursor:pointer; |
||||
|
display:block; |
||||
|
width:16px; |
||||
|
height:16px; |
||||
|
margin-top:1px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .NavImgll a{ |
||||
|
float:left; |
||||
|
background:url(img.gif) no-repeat; |
||||
|
} |
||||
|
.WdateDiv .NavImgl a{ |
||||
|
float:left; |
||||
|
background:url(img.gif) no-repeat -16px 0px; |
||||
|
} |
||||
|
.WdateDiv .NavImgr a{ |
||||
|
float:right; |
||||
|
background:url(img.gif) no-repeat -32px 0px; |
||||
|
} |
||||
|
.WdateDiv .NavImgrr a{ |
||||
|
float:right; |
||||
|
background:url(img.gif) no-repeat -48px 0px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTitle{ |
||||
|
height:24px; |
||||
|
padding:1px; |
||||
|
border:#c5d9e8 1px solid; |
||||
|
background:url(bg.jpg); |
||||
|
margin-bottom:2px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .yminput{ |
||||
|
margin-top:2px; |
||||
|
text-align:center; |
||||
|
border:0px; |
||||
|
height:20px; |
||||
|
width:50px; |
||||
|
color:#034c50; |
||||
|
background-color:transparent; |
||||
|
cursor:pointer; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .yminputfocus{ |
||||
|
margin-top:2px; |
||||
|
text-align:center; |
||||
|
border:#939393 1px solid; |
||||
|
font-weight:bold; |
||||
|
color:#034c50; |
||||
|
height:20px; |
||||
|
width:50px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .menuSel{ |
||||
|
z-index:1; |
||||
|
position:absolute; |
||||
|
background-color:#FFFFFF; |
||||
|
border:#A3C6C8 1px solid; |
||||
|
display:none; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .menu{ |
||||
|
cursor:pointer; |
||||
|
background-color:#fff; |
||||
|
color:#11777C; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .menuOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#BEEBEE; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .invalidMenu{ |
||||
|
color:#aaa; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .YMenu{ |
||||
|
margin-top:20px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .MMenu{ |
||||
|
margin-top:20px; |
||||
|
*width:62px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .hhMenu{ |
||||
|
margin-top:-90px; |
||||
|
margin-left:26px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .mmMenu{ |
||||
|
margin-top:-46px; |
||||
|
margin-left:26px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .ssMenu{ |
||||
|
margin-top:-24px; |
||||
|
margin-left:26px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wweek { |
||||
|
text-align:center; |
||||
|
background:#DAF3F5; |
||||
|
border-right:#BDEBEE 1px solid; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .MTitle{ |
||||
|
color:#13777e; |
||||
|
background-color:#bdebee; |
||||
|
} |
||||
|
.WdateDiv .WdayTable2{ |
||||
|
border-collapse:collapse; |
||||
|
border:#BEE9F0 1px solid; |
||||
|
} |
||||
|
.WdateDiv .WdayTable2 table{ |
||||
|
border:0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayTable{ |
||||
|
line-height:20px; |
||||
|
color:#13777e; |
||||
|
background-color:#edfbfb; |
||||
|
border:#BEE9F0 1px solid; |
||||
|
} |
||||
|
.WdateDiv .WdayTable td{ |
||||
|
text-align:center; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wday{ |
||||
|
cursor:pointer; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WdayOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#74d2d9 ; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .Wwday{ |
||||
|
cursor:pointer; |
||||
|
color:#ab1e1e; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WwdayOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#74d2d9; |
||||
|
} |
||||
|
.WdateDiv .Wtoday{ |
||||
|
cursor:pointer; |
||||
|
color:blue; |
||||
|
} |
||||
|
.WdateDiv .Wselday{ |
||||
|
background-color:#A7E2E7; |
||||
|
} |
||||
|
.WdateDiv .WspecialDay{ |
||||
|
background-color:#66F4DF; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WotherDay{ |
||||
|
cursor:pointer; |
||||
|
color:#0099CC; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WotherDayOn{ |
||||
|
cursor:pointer; |
||||
|
background-color:#C0EBEF; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv .WinvalidDay{ |
||||
|
color:#aaa; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime{ |
||||
|
float:left; |
||||
|
margin-top:3px; |
||||
|
margin-right:30px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime #dpTimeStr{ |
||||
|
margin-left:1px; |
||||
|
color:#497F7F; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime input{ |
||||
|
height:20px; |
||||
|
width:18px; |
||||
|
text-align:center; |
||||
|
color:#333; |
||||
|
border:#61CAD0 1px solid; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime .tB{ |
||||
|
border-right:0px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime .tE{ |
||||
|
border-left:0; |
||||
|
border-right:0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime .tm{ |
||||
|
width:7px; |
||||
|
border-left:0; |
||||
|
border-right:0; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime #dpTimeUp{ |
||||
|
height:10px; |
||||
|
width:13px; |
||||
|
border:0px; |
||||
|
background:url(img.gif) no-repeat -32px -16px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpTime #dpTimeDown{ |
||||
|
height:10px; |
||||
|
width:13px; |
||||
|
border:0px; |
||||
|
background:url(img.gif) no-repeat -48px -16px; |
||||
|
} |
||||
|
|
||||
|
.WdateDiv #dpQS { |
||||
|
float:left; |
||||
|
margin-right:3px; |
||||
|
margin-top:3px; |
||||
|
background:url(img.gif) no-repeat 0px -16px; |
||||
|
width:20px; |
||||
|
height:20px; |
||||
|
cursor:pointer; |
||||
|
} |
||||
|
.WdateDiv #dpControl { |
||||
|
text-align:right; |
||||
|
margin-top:3px; |
||||
|
} |
||||
|
.WdateDiv .dpButton{ |
||||
|
height:20px; |
||||
|
width:45px; |
||||
|
margin-top:2px; |
||||
|
border:#38B1B9 1px solid; |
||||
|
background-color:#CFEBEE; |
||||
|
color:#08575B; |
||||
|
} |
After Width: | Height: | Size: 1.6 KiB |
@ -0,0 +1,190 @@ |
|||||
|
/*jslint adsafe: false, bitwise: true, browser: true, cap: false, css: false, |
||||
|
debug: false, devel: true, eqeqeq: true, es5: false, evil: false, |
||||
|
forin: false, fragment: false, immed: true, laxbreak: false, newcap: true, |
||||
|
nomen: false, on: false, onevar: true, passfail: false, plusplus: true, |
||||
|
regexp: false, rhino: true, safe: false, strict: false, sub: false, |
||||
|
undef: true, white: false, widget: false, windows: false */ |
||||
|
/*global jQuery: false, window: false */ |
||||
|
"use strict"; |
||||
|
|
||||
|
/* |
||||
|
* Original code (c) 2010 Nick Galbreath |
||||
|
* http://code.google.com/p/stringencoders/source/browse/#svn/trunk/javascript
|
||||
|
* |
||||
|
* jQuery port (c) 2010 Carlo Zottmann |
||||
|
* http://github.com/carlo/jquery-base64
|
||||
|
* |
||||
|
* Permission is hereby granted, free of charge, to any person |
||||
|
* obtaining a copy of this software and associated documentation |
||||
|
* files (the "Software"), to deal in the Software without |
||||
|
* restriction, including without limitation the rights to use, |
||||
|
* copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
* copies of the Software, and to permit persons to whom the |
||||
|
* Software is furnished to do so, subject to the following |
||||
|
* conditions: |
||||
|
* |
||||
|
* The above copyright notice and this permission notice shall be |
||||
|
* included in all copies or substantial portions of the Software. |
||||
|
* |
||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
||||
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
||||
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
||||
|
* OTHER DEALINGS IN THE SOFTWARE. |
||||
|
*/ |
||||
|
|
||||
|
/* base64 encode/decode compatible with window.btoa/atob |
||||
|
* |
||||
|
* window.atob/btoa is a Firefox extension to convert binary data (the "b") |
||||
|
* to base64 (ascii, the "a"). |
||||
|
* |
||||
|
* It is also found in Safari and Chrome. It is not available in IE. |
||||
|
* |
||||
|
* if (!window.btoa) window.btoa = $.base64.encode |
||||
|
* if (!window.atob) window.atob = $.base64.decode |
||||
|
* |
||||
|
* The original spec's for atob/btoa are a bit lacking |
||||
|
* https://developer.mozilla.org/en/DOM/window.atob
|
||||
|
* https://developer.mozilla.org/en/DOM/window.btoa
|
||||
|
* |
||||
|
* window.btoa and $.base64.encode takes a string where charCodeAt is [0,255] |
||||
|
* If any character is not [0,255], then an exception is thrown. |
||||
|
* |
||||
|
* window.atob and $.base64.decode take a base64-encoded string |
||||
|
* If the input length is not a multiple of 4, or contains invalid characters |
||||
|
* then an exception is thrown. |
||||
|
*/ |
||||
|
|
||||
|
jQuery.base64 = ( function( $ ) { |
||||
|
|
||||
|
var _PADCHAR = "=", |
||||
|
_ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", |
||||
|
_VERSION = "1.0"; |
||||
|
|
||||
|
|
||||
|
function _getbyte64( s, i ) { |
||||
|
// This is oddly fast, except on Chrome/V8.
|
||||
|
// Minimal or no improvement in performance by using a
|
||||
|
// object with properties mapping chars to value (eg. 'A': 0)
|
||||
|
|
||||
|
var idx = _ALPHA.indexOf( s.charAt( i ) ); |
||||
|
|
||||
|
if ( idx === -1 ) { |
||||
|
throw "Cannot decode base64"; |
||||
|
} |
||||
|
|
||||
|
return idx; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
function _decode( s ) { |
||||
|
var pads = 0, |
||||
|
i, |
||||
|
b10, |
||||
|
imax = s.length, |
||||
|
x = []; |
||||
|
|
||||
|
s = String( s ); |
||||
|
|
||||
|
if ( imax === 0 ) { |
||||
|
return s; |
||||
|
} |
||||
|
|
||||
|
if ( imax % 4 !== 0 ) { |
||||
|
throw "Cannot decode base64"; |
||||
|
} |
||||
|
|
||||
|
if ( s.charAt( imax - 1 ) === _PADCHAR ) { |
||||
|
pads = 1; |
||||
|
|
||||
|
if ( s.charAt( imax - 2 ) === _PADCHAR ) { |
||||
|
pads = 2; |
||||
|
} |
||||
|
|
||||
|
// either way, we want to ignore this last block
|
||||
|
imax -= 4; |
||||
|
} |
||||
|
|
||||
|
for ( i = 0; i < imax; i += 4 ) { |
||||
|
b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 ) | _getbyte64( s, i + 3 ); |
||||
|
x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff, b10 & 0xff ) ); |
||||
|
} |
||||
|
|
||||
|
switch ( pads ) { |
||||
|
case 1: |
||||
|
b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 ); |
||||
|
x.push( String.fromCharCode( b10 >> 16, ( b10 >> 8 ) & 0xff ) ); |
||||
|
break; |
||||
|
|
||||
|
case 2: |
||||
|
b10 = ( _getbyte64( s, i ) << 18) | ( _getbyte64( s, i + 1 ) << 12 ); |
||||
|
x.push( String.fromCharCode( b10 >> 16 ) ); |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
return x.join( "" ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
function _getbyte( s, i ) { |
||||
|
var x = s.charCodeAt( i ); |
||||
|
|
||||
|
if ( x > 255 ) { |
||||
|
throw "INVALID_CHARACTER_ERR: DOM Exception 5"; |
||||
|
} |
||||
|
|
||||
|
return x; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
function _encode( s ) { |
||||
|
if ( arguments.length !== 1 ) { |
||||
|
throw "SyntaxError: exactly one argument required"; |
||||
|
} |
||||
|
|
||||
|
s = String( s ); |
||||
|
|
||||
|
var i, |
||||
|
b10, |
||||
|
x = [], |
||||
|
imax = s.length - s.length % 3; |
||||
|
|
||||
|
if ( s.length === 0 ) { |
||||
|
return s; |
||||
|
} |
||||
|
|
||||
|
for ( i = 0; i < imax; i += 3 ) { |
||||
|
b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 ) | _getbyte( s, i + 2 ); |
||||
|
x.push( _ALPHA.charAt( b10 >> 18 ) ); |
||||
|
x.push( _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) ); |
||||
|
x.push( _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) ); |
||||
|
x.push( _ALPHA.charAt( b10 & 0x3f ) ); |
||||
|
} |
||||
|
|
||||
|
switch ( s.length - imax ) { |
||||
|
case 1: |
||||
|
b10 = _getbyte( s, i ) << 16; |
||||
|
x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _PADCHAR + _PADCHAR ); |
||||
|
break; |
||||
|
|
||||
|
case 2: |
||||
|
b10 = ( _getbyte( s, i ) << 16 ) | ( _getbyte( s, i + 1 ) << 8 ); |
||||
|
x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) + _PADCHAR ); |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
return x.join( "" ); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
return { |
||||
|
decode: _decode, |
||||
|
encode: _encode, |
||||
|
VERSION: _VERSION |
||||
|
}; |
||||
|
|
||||
|
}( jQuery ) ); |
||||
|
|
@ -0,0 +1,255 @@ |
|||||
|
/* @license |
||||
|
* jQuery.print, version 1.5.1 |
||||
|
* (c) Sathvik Ponangi, Doers' Guild |
||||
|
* Licence: CC-By (http://creativecommons.org/licenses/by/3.0/)
|
||||
|
*--------------------------------------------------------------------------*/ |
||||
|
(function ($) { |
||||
|
"use strict"; |
||||
|
// A nice closure for our definitions
|
||||
|
function getjQueryObject(string) { |
||||
|
// Make string a vaild jQuery thing
|
||||
|
var jqObj = $(""); |
||||
|
try { |
||||
|
jqObj = $(string) |
||||
|
.clone(); |
||||
|
} catch (e) { |
||||
|
jqObj = $("<span />") |
||||
|
.html(string); |
||||
|
} |
||||
|
return jqObj; |
||||
|
} |
||||
|
|
||||
|
function printFrame(frameWindow, content, options) { |
||||
|
// Print the selected window/iframe
|
||||
|
var def = $.Deferred(); |
||||
|
try { |
||||
|
frameWindow = frameWindow.contentWindow || frameWindow.contentDocument || frameWindow; |
||||
|
var wdoc = frameWindow.document || frameWindow.contentDocument || frameWindow; |
||||
|
if(options.doctype) { |
||||
|
wdoc.write(options.doctype); |
||||
|
} |
||||
|
wdoc.write(content); |
||||
|
wdoc.close(); |
||||
|
var printed = false; |
||||
|
var callPrint = function () { |
||||
|
if(printed) { |
||||
|
return; |
||||
|
} |
||||
|
// Fix for IE : Allow it to render the iframe
|
||||
|
frameWindow.focus(); |
||||
|
try { |
||||
|
// Fix for IE11 - printng the whole page instead of the iframe content
|
||||
|
if (!frameWindow.document.execCommand('print', false, null)) { |
||||
|
// document.execCommand returns false if it failed -http://stackoverflow.com/a/21336448/937891
|
||||
|
frameWindow.print(); |
||||
|
} |
||||
|
// focus body as it is losing focus in iPad and content not getting printed
|
||||
|
$('body').focus(); |
||||
|
} catch (e) { |
||||
|
frameWindow.print(); |
||||
|
} |
||||
|
frameWindow.close(); |
||||
|
printed = true; |
||||
|
def.resolve(); |
||||
|
} |
||||
|
// Print once the frame window loads - seems to work for the new-window option but unreliable for the iframe
|
||||
|
$(frameWindow).on("load", callPrint); |
||||
|
// Fallback to printing directly if the frame doesn't fire the load event for whatever reason
|
||||
|
setTimeout(callPrint, options.timeout); |
||||
|
} catch (err) { |
||||
|
def.reject(err); |
||||
|
} |
||||
|
return def; |
||||
|
} |
||||
|
|
||||
|
function printContentInIFrame(content, options) { |
||||
|
var $iframe = $(options.iframe + ""); |
||||
|
var iframeCount = $iframe.length; |
||||
|
if (iframeCount === 0) { |
||||
|
// Create a new iFrame if none is given
|
||||
|
$iframe = $('<iframe height="0" width="0" border="0" wmode="Opaque"/>') |
||||
|
.prependTo('body') |
||||
|
.css({ |
||||
|
"position": "absolute", |
||||
|
"top": -999, |
||||
|
"left": -999 |
||||
|
}); |
||||
|
} |
||||
|
var frameWindow = $iframe.get(0); |
||||
|
return printFrame(frameWindow, content, options) |
||||
|
.done(function () { |
||||
|
// Success
|
||||
|
setTimeout(function () { |
||||
|
// Wait for IE
|
||||
|
if (iframeCount === 0) { |
||||
|
// Destroy the iframe if created here
|
||||
|
$iframe.remove(); |
||||
|
} |
||||
|
}, 1000); |
||||
|
}) |
||||
|
.fail(function (err) { |
||||
|
// Use the pop-up method if iframe fails for some reason
|
||||
|
console.error("Failed to print from iframe", err); |
||||
|
printContentInNewWindow(content, options); |
||||
|
}) |
||||
|
.always(function () { |
||||
|
try { |
||||
|
options.deferred.resolve(); |
||||
|
} catch (err) { |
||||
|
console.warn('Error notifying deferred', err); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function printContentInNewWindow(content, options) { |
||||
|
// Open a new window and print selected content
|
||||
|
var frameWindow = window.open(); |
||||
|
return printFrame(frameWindow, content, options) |
||||
|
.always(function () { |
||||
|
try { |
||||
|
options.deferred.resolve(); |
||||
|
} catch (err) { |
||||
|
console.warn('Error notifying deferred', err); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function isNode(o) { |
||||
|
/* http://stackoverflow.com/a/384380/937891 */ |
||||
|
return !!(typeof Node === "object" ? o instanceof Node : o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string"); |
||||
|
} |
||||
|
$.print = $.fn.print = function () { |
||||
|
// Print a given set of elements
|
||||
|
var options, $this, self = this; |
||||
|
// console.log("Printing", this, arguments);
|
||||
|
if (self instanceof $) { |
||||
|
// Get the node if it is a jQuery object
|
||||
|
self = self.get(0); |
||||
|
} |
||||
|
if (isNode(self)) { |
||||
|
// If `this` is a HTML element, i.e. for
|
||||
|
// $(selector).print()
|
||||
|
$this = $(self); |
||||
|
if (arguments.length > 0) { |
||||
|
options = arguments[0]; |
||||
|
} |
||||
|
} else { |
||||
|
if (arguments.length > 0) { |
||||
|
// $.print(selector,options)
|
||||
|
$this = $(arguments[0]); |
||||
|
if (isNode($this[0])) { |
||||
|
if (arguments.length > 1) { |
||||
|
options = arguments[1]; |
||||
|
} |
||||
|
} else { |
||||
|
// $.print(options)
|
||||
|
options = arguments[0]; |
||||
|
$this = $("html"); |
||||
|
} |
||||
|
} else { |
||||
|
// $.print()
|
||||
|
$this = $("html"); |
||||
|
} |
||||
|
} |
||||
|
// Default options
|
||||
|
var defaults = { |
||||
|
globalStyles: true, |
||||
|
mediaPrint: false, |
||||
|
stylesheet: null, |
||||
|
noPrintSelector: ".no-print", |
||||
|
iframe: true, |
||||
|
append: null, |
||||
|
prepend: null, |
||||
|
manuallyCopyFormValues: true, |
||||
|
deferred: $.Deferred(), |
||||
|
timeout: 750, |
||||
|
title: null, |
||||
|
doctype: '<!doctype html>' |
||||
|
}; |
||||
|
// Merge with user-options
|
||||
|
options = $.extend({}, defaults, (options || {})); |
||||
|
var $styles = $(""); |
||||
|
if (options.globalStyles) { |
||||
|
// Apply the stlyes from the current sheet to the printed page
|
||||
|
$styles = $("style, link, meta, base, title"); |
||||
|
} else if (options.mediaPrint) { |
||||
|
// Apply the media-print stylesheet
|
||||
|
$styles = $("link[media=print]"); |
||||
|
} |
||||
|
if (options.stylesheet) { |
||||
|
// Add a custom stylesheet if given
|
||||
|
$styles = $.merge($styles, $('<link rel="stylesheet" href="' + options.stylesheet + '">')); |
||||
|
} |
||||
|
// Create a copy of the element to print
|
||||
|
var copy = $this.clone(); |
||||
|
// Wrap it in a span to get the HTML markup string
|
||||
|
copy = $("<span/>") |
||||
|
.append(copy); |
||||
|
// Remove unwanted elements
|
||||
|
copy.find(options.noPrintSelector) |
||||
|
.remove(); |
||||
|
// Add in the styles
|
||||
|
copy.append($styles.clone()); |
||||
|
// Update title
|
||||
|
if (options.title) { |
||||
|
var title = $("title", copy); |
||||
|
if (title.length === 0) { |
||||
|
title = $("<title />"); |
||||
|
copy.append(title); |
||||
|
} |
||||
|
title.text(options.title); |
||||
|
} |
||||
|
// Appedned content
|
||||
|
copy.append(getjQueryObject(options.append)); |
||||
|
// Prepended content
|
||||
|
copy.prepend(getjQueryObject(options.prepend)); |
||||
|
if (options.manuallyCopyFormValues) { |
||||
|
// Manually copy form values into the HTML for printing user-modified input fields
|
||||
|
// http://stackoverflow.com/a/26707753
|
||||
|
copy.find("input") |
||||
|
.each(function () { |
||||
|
var $field = $(this); |
||||
|
if ($field.is("[type='radio']") || $field.is("[type='checkbox']")) { |
||||
|
if ($field.prop("checked")) { |
||||
|
$field.attr("checked", "checked"); |
||||
|
} |
||||
|
} else { |
||||
|
$field.attr("value", $field.val()); |
||||
|
} |
||||
|
}); |
||||
|
copy.find("select").each(function () { |
||||
|
var $field = $(this); |
||||
|
$field.find(":selected").attr("selected", "selected"); |
||||
|
}); |
||||
|
copy.find("textarea").each(function () { |
||||
|
// Fix for https://github.com/DoersGuild/jQuery.print/issues/18#issuecomment-96451589
|
||||
|
var $field = $(this); |
||||
|
$field.text($field.val()); |
||||
|
}); |
||||
|
} |
||||
|
// Get the HTML markup string
|
||||
|
var content = copy.html(); |
||||
|
// Notify with generated markup & cloned elements - useful for logging, etc
|
||||
|
try { |
||||
|
options.deferred.notify('generated_markup', content, copy); |
||||
|
} catch (err) { |
||||
|
console.warn('Error notifying deferred', err); |
||||
|
} |
||||
|
// Destroy the copy
|
||||
|
copy.remove(); |
||||
|
if (options.iframe) { |
||||
|
// Use an iframe for printing
|
||||
|
try { |
||||
|
printContentInIFrame(content, options); |
||||
|
} catch (e) { |
||||
|
// Use the pop-up method if iframe fails for some reason
|
||||
|
console.error("Failed to print from iframe", e.stack, e.message); |
||||
|
printContentInNewWindow(content, options); |
||||
|
} |
||||
|
} else { |
||||
|
// Use a new window for printing
|
||||
|
printContentInNewWindow(content, options); |
||||
|
} |
||||
|
return this; |
||||
|
}; |
||||
|
})(jQuery); |
After Width: | Height: | Size: 601 B |
After Width: | Height: | Size: 580 B |
After Width: | Height: | Size: 570 B |
After Width: | Height: | Size: 762 B |
After Width: | Height: | Size: 399 B |
After Width: | Height: | Size: 710 B |
After Width: | Height: | Size: 432 B |
After Width: | Height: | Size: 534 B |
After Width: | Height: | Size: 529 B |
After Width: | Height: | Size: 467 B |
After Width: | Height: | Size: 45 B |
After Width: | Height: | Size: 381 B |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,97 @@ |
|||||
|
/*------------------------------------- |
||||
|
zTree Style |
||||
|
|
||||
|
version: 3.5.19 |
||||
|
author: Hunter.z |
||||
|
email: hunter.z@263.net |
||||
|
website: http://code.google.com/p/jquerytree/ |
||||
|
|
||||
|
-------------------------------------*/ |
||||
|
|
||||
|
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif} |
||||
|
.ztree {margin:0; padding:5px; color:#333} |
||||
|
.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0} |
||||
|
.ztree li ul{ margin:0; padding:0 0 0 18px} |
||||
|
.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;} |
||||
|
|
||||
|
.ztree li a {padding:1px 3px 0 0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent; |
||||
|
text-decoration:none; vertical-align:top; display: inline-block} |
||||
|
.ztree li a:hover {text-decoration:underline} |
||||
|
.ztree li a.curSelectedNode {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} |
||||
|
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:16px; border:1px #FFB951 solid; opacity:0.8;} |
||||
|
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:16px; border:1px #316AC5 solid; |
||||
|
opacity:0.8; filter:alpha(opacity=80)} |
||||
|
.ztree li a.tmpTargetNode_prev {} |
||||
|
.ztree li a.tmpTargetNode_next {} |
||||
|
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0; |
||||
|
font-size:12px; border:1px #7EC4CC solid; *border:0px} |
||||
|
.ztree li span {line-height:16px; margin-right:2px} |
||||
|
.ztree li span.button {line-height:0; margin:0; width:16px; height:16px; display: inline-block; vertical-align:middle; |
||||
|
border:0 none; cursor: pointer;outline:none; |
||||
|
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; |
||||
|
background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} |
||||
|
|
||||
|
.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto} |
||||
|
.ztree li span.button.chk.checkbox_false_full {background-position:0 0} |
||||
|
.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px} |
||||
|
.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px} |
||||
|
.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px} |
||||
|
.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px} |
||||
|
.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0} |
||||
|
.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px} |
||||
|
.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px} |
||||
|
.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px} |
||||
|
.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px} |
||||
|
.ztree li span.button.chk.radio_false_full {background-position:-28px 0} |
||||
|
.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px} |
||||
|
.ztree li span.button.chk.radio_false_part {background-position:-28px -28px} |
||||
|
.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px} |
||||
|
.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px} |
||||
|
.ztree li span.button.chk.radio_true_full {background-position:-42px 0} |
||||
|
.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px} |
||||
|
.ztree li span.button.chk.radio_true_part {background-position:-42px -28px} |
||||
|
.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px} |
||||
|
.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px} |
||||
|
|
||||
|
.ztree li span.button.switch {width:18px; height:18px} |
||||
|
.ztree li span.button.root_open{background-position:-92px -54px} |
||||
|
.ztree li span.button.root_close{background-position:-74px -54px} |
||||
|
.ztree li span.button.roots_open{background-position:-92px 0} |
||||
|
.ztree li span.button.roots_close{background-position:-74px 0} |
||||
|
.ztree li span.button.center_open{background-position:-92px -18px} |
||||
|
.ztree li span.button.center_close{background-position:-74px -18px} |
||||
|
.ztree li span.button.bottom_open{background-position:-92px -36px} |
||||
|
.ztree li span.button.bottom_close{background-position:-74px -36px} |
||||
|
.ztree li span.button.noline_open{background-position:-92px -72px} |
||||
|
.ztree li span.button.noline_close{background-position:-74px -72px} |
||||
|
.ztree li span.button.root_docu{ background:none;} |
||||
|
.ztree li span.button.roots_docu{background-position:-56px 0} |
||||
|
.ztree li span.button.center_docu{background-position:-56px -18px} |
||||
|
.ztree li span.button.bottom_docu{background-position:-56px -36px} |
||||
|
.ztree li span.button.noline_docu{ background:none;} |
||||
|
|
||||
|
.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle} |
||||
|
.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle} |
||||
|
.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle} |
||||
|
.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle} |
||||
|
.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle} |
||||
|
|
||||
|
.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle} |
||||
|
|
||||
|
ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)} |
||||
|
|
||||
|
span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute; |
||||
|
background-color:transparent; background-repeat:no-repeat; background-attachment: scroll; |
||||
|
background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")} |
||||
|
|
||||
|
ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)} |
||||
|
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute} |
||||
|
|
||||
|
/* level style*/ |
||||
|
/*.ztree li span.button.level0 { |
||||
|
display:none; |
||||
|
} |
||||
|
.ztree li ul.level0 { |
||||
|
padding:0; |
||||
|
background:none; |
||||
|
}*/ |
@ -0,0 +1,7 @@ |
|||||
|
/** |
||||
|
* 选择列表插件 |
||||
|
* varstion 2.0.0 |
||||
|
* by Houfeng |
||||
|
* Houfeng@DCloud.io |
||||
|
**/ |
||||
|
.mui-pciker-list li,.mui-picker,.mui-picker-inner{box-sizing:border-box;overflow:hidden}.mui-picker{background-color:#ddd;position:relative;height:200px;border:1px solid rgba(0,0,0,.1);-webkit-user-select:none;user-select:none}.mui-dtpicker,.mui-poppicker{left:0;background-color:#eee;box-shadow:0 -5px 7px 0 rgba(0,0,0,.1);-webkit-transition:.3s;width:100%}.mui-picker-inner{position:relative;width:100%;height:100%;-webkit-mask-box-image:-webkit-linear-gradient(bottom,transparent,transparent 5%,#fff 20%,#fff 80%,transparent 95%,transparent);-webkit-mask-box-image:linear-gradient(top,transparent,transparent 5%,#fff 20%,#fff 80%,transparent 95%,transparent)}.mui-pciker-list,.mui-pciker-rule{box-sizing:border-box;padding:0;margin:-18px 0 0;width:100%;height:36px;line-height:36px;position:absolute;left:0;top:50%}.mui-pciker-rule-bg{z-index:0}.mui-pciker-rule-ft{z-index:2;border-top:solid 1px rgba(0,0,0,.1);border-bottom:solid 1px rgba(0,0,0,.1)}.mui-pciker-list{z-index:1;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform:perspective(750pt) rotateY(0) rotateX(0);transform:perspective(750pt) rotateY(0) rotateX(0)}.mui-pciker-list li{width:100%;height:100%;position:absolute;text-align:center;vertical-align:middle;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-size:1pc;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#888;padding:0 8px;white-space:nowrap;-webkit-text-overflow:ellipsis;text-overflow:ellipsis;cursor:default;visibility:hidden}.mui-pciker-list li.highlight,.mui-pciker-list li.visible{visibility:visible}.mui-pciker-list li.highlight{color:#222}.mui-poppicker{position:fixed;z-index:999;border-top:solid 1px #ccc;bottom:0;-webkit-transform:translateY(300px)}.mui-poppicker.mui-active{-webkit-transform:translateY(0)}.mui-android-5-1 .mui-poppicker{bottom:-300px;-webkit-transition-property:bottom;-webkit-transform:none}.mui-android-5-1 .mui-poppicker.mui-active{bottom:0;-webkit-transition-property:bottom;-webkit-transform:none}.mui-poppicker-header{padding:6px;font-size:14px;color:#888}.mui-poppicker-header .mui-btn{font-size:9pt;padding:5px 10px}.mui-poppicker-btn-cancel{float:left}.mui-poppicker-btn-ok{float:right}.mui-poppicker-clear{clear:both;height:0;line-height:0;font-size:0;overflow:hidden}.mui-poppicker-body{position:relative;width:100%;height:200px;border-top:solid 1px #ddd}.mui-poppicker-body .mui-picker{width:100%;height:100%;margin:0;border:none;float:left}.mui-dtpicker{position:fixed;z-index:999999;border-top:solid 1px #ccc;bottom:0;-webkit-transform:translateY(300px)}.mui-dtpicker.mui-active{-webkit-transform:translateY(0)}.mui-dtpicker-active-for-page{overflow:hidden!important}.mui-android-5-1 .mui-dtpicker{bottom:-300px;-webkit-transition-property:bottom;-webkit-transform:none}.mui-android-5-1 .mui-dtpicker.mui-active{bottom:0;-webkit-transition-property:bottom;-webkit-transform:none}.mui-dtpicker-header{padding:6px;font-size:14px;color:#888}.mui-dtpicker-header button{font-size:9pt;padding:5px 10px}.mui-dtpicker-header button:last-child{float:right}.mui-dtpicker-body{position:relative;width:100%;height:200px}.mui-ios .mui-dtpicker-body{-webkit-perspective:75pc;perspective:75pc;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.mui-dtpicker-title h5{display:inline-block;width:20%;margin:0;padding:8px;text-align:center;border-top:solid 1px #ddd;background-color:#f0f0f0;border-bottom:solid 1px #ccc}[data-type=hour] [data-id=title-i],[data-type=hour] [data-id=picker-i],[data-type=month] [data-id=title-i],[data-type=month] [data-id=picker-d],[data-type=month] [data-id=title-d],[data-type=month] [data-id=picker-h],[data-type=month] [data-id=title-h],[data-type=month] [data-id=picker-i],[data-type=time] [data-id=picker-y],[data-type=time] [data-id=picker-m],[data-type=time] [data-id=picker-d],[data-type=time] [data-id=title-y],[data-type=time] [data-id=title-m],[data-type=time] [data-id=title-d],[data-type=date] [data-id=title-i],[data-type=date] [data-id=picker-h],[data-type=date] [data-id=title-h],[data-type=date] [data-id=picker-i]{display:none}.mui-dtpicker .mui-picker{width:20%;height:100%;margin:0;float:left;border:none}[data-type=hour] [data-id=picker-h],[data-type=hour] [data-id=title-h],[data-type=datetime] [data-id=picker-h],[data-type=datetime] [data-id=title-h]{border-left:dotted 1px #ccc}[data-type=datetime] .mui-picker,[data-type=time] .mui-dtpicker-title h5{width:20%}[data-type=date] .mui-dtpicker-title h5,[data-type=date] .mui-picker{width:33.3%}[data-type=hour] .mui-dtpicker-title h5,[data-type=hour] .mui-picker{width:25%}[data-type=month] .mui-dtpicker-title h5,[data-type=month] .mui-picker,[data-type=time] .mui-dtpicker-title h5,[data-type=time] .mui-picker{width:50%} |
@ -0,0 +1,519 @@ |
|||||
|
/** @license |
||||
|
jSignature v2 SVG export plugin. |
||||
|
|
||||
|
*/ |
||||
|
/** |
||||
|
Copyright (c) 2012 Willow Systems Corp http://willow-systems.com
|
||||
|
MIT License <http://www.opensource.org/licenses/mit-license.php>
|
||||
|
*/ |
||||
|
|
||||
|
;(function(){ |
||||
|
'use strict' |
||||
|
|
||||
|
/** @preserve |
||||
|
Simplify.js BSD |
||||
|
(c) 2012, Vladimir Agafonkin |
||||
|
mourner.github.com/simplify-js |
||||
|
|
||||
|
*/ |
||||
|
;(function(a,b){function c(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d}function d(a,b,c){var d=b.x,e=b.y,f=c.x-d,g=c.y-e,h;if(f!==0||g!==0)h=((a.x-d)*f+(a.y-e)*g)/(f*f+g*g),h>1?(d=c.x,e=c.y):h>0&&(d+=f*h,e+=g*h);return f=a.x-d,g=a.y-e,f*f+g*g}function e(a,b){var d,e=a.length,f,g=a[0],h=[g];for(d=1;d<e;d++)f=a[d],c(f,g)>b&&(h.push(f),g=f);return g!==f&&h.push(f),h}function f(a,c){var e=a.length,f=typeof Uint8Array!=b+""?Uint8Array:Array,g=new f(e),h=0,i=e-1,j,k,l,m,n=[],o=[],p=[];g[h]=g[i]=1;while(i){k=0;for(j=h+1;j<i;j++)l=d(a[j],a[h],a[i]),l>k&&(m=j,k=l);k>c&&(g[m]=1,n.push(h),o.push(m),n.push(m),o.push(i)),h=n.pop(),i=o.pop()}for(j=0;j<e;j++)g[j]&&p.push(a[j]);return p}"use strict";var g=a;g.simplify=function(a,c,d){var g=c!==b?c*c:1;return d||(a=e(a,g)),a=f(a,g),a}})(window); |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
Vector class. Allows us to simplify representation and manipulation of coordinate-pair |
||||
|
representing shift against (0, 0) |
||||
|
|
||||
|
@public |
||||
|
@class |
||||
|
@param |
||||
|
@returns {Type} |
||||
|
*/ |
||||
|
function Vector(x,y){ |
||||
|
this.x = x |
||||
|
this.y = y |
||||
|
this.reverse = function(){ |
||||
|
return new this.constructor( |
||||
|
this.x * -1 |
||||
|
, this.y * -1 |
||||
|
) |
||||
|
} |
||||
|
this._length = null |
||||
|
this.getLength = function(){ |
||||
|
if (!this._length){ |
||||
|
this._length = Math.sqrt( Math.pow(this.x, 2) + Math.pow(this.y, 2) ) |
||||
|
} |
||||
|
return this._length |
||||
|
} |
||||
|
|
||||
|
var polarity = function (e){ |
||||
|
return Math.round(e / Math.abs(e)) |
||||
|
} |
||||
|
this.resizeTo = function(length){ |
||||
|
// proportionally changes x,y such that the hypotenuse (vector length) is = new length
|
||||
|
if (this.x === 0 && this.y === 0){ |
||||
|
this._length = 0 |
||||
|
} else if (this.x === 0){ |
||||
|
this._length = length |
||||
|
this.y = length * polarity(this.y) |
||||
|
} else if(this.y === 0){ |
||||
|
this._length = length |
||||
|
this.x = length * polarity(this.x) |
||||
|
} else { |
||||
|
var proportion = Math.abs(this.y / this.x) |
||||
|
, x = Math.sqrt(Math.pow(length, 2) / (1 + Math.pow(proportion, 2))) |
||||
|
, y = proportion * x |
||||
|
this._length = length |
||||
|
this.x = x * polarity(this.x) |
||||
|
this.y = y * polarity(this.y) |
||||
|
} |
||||
|
return this |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Calculates the angle between 'this' vector and another. |
||||
|
* @public |
||||
|
* @function |
||||
|
* @returns {Number} The angle between the two vectors as measured in PI. |
||||
|
*/ |
||||
|
this.angleTo = function(vectorB) { |
||||
|
var divisor = this.getLength() * vectorB.getLength() |
||||
|
if (divisor === 0) { |
||||
|
return 0 |
||||
|
} else { |
||||
|
// JavaScript floating point math is screwed up.
|
||||
|
// because of it, the core of the formula can, on occasion, have values
|
||||
|
// over 1.0 and below -1.0.
|
||||
|
return Math.acos( |
||||
|
Math.min( |
||||
|
Math.max( |
||||
|
( this.x * vectorB.x + this.y * vectorB.y ) / divisor |
||||
|
, -1.0 |
||||
|
) |
||||
|
, 1.0 |
||||
|
) |
||||
|
) / Math.PI |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function Point(x,y){ |
||||
|
this.x = x |
||||
|
this.y = y |
||||
|
|
||||
|
this.getVectorToCoordinates = function (x, y) { |
||||
|
return new Vector(x - this.x, y - this.y) |
||||
|
} |
||||
|
this.getVectorFromCoordinates = function (x, y) { |
||||
|
return this.getVectorToCoordinates(x, y).reverse() |
||||
|
} |
||||
|
this.getVectorToPoint = function (point) { |
||||
|
return new Vector(point.x - this.x, point.y - this.y) |
||||
|
} |
||||
|
this.getVectorFromPoint = function (point) { |
||||
|
return this.getVectorToPoint(point).reverse() |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
Allows one to round a number to arbitrary precision. |
||||
|
Math.round() rounds to whole only. |
||||
|
Number.toFixed(precision) returns a string. |
||||
|
I need float to float, but with arbitrary precision, hence: |
||||
|
|
||||
|
@public |
||||
|
@function |
||||
|
@param number {Number} |
||||
|
@param position {Number} number of digits right of decimal point to keep. If negative, rounding to the left of decimal. |
||||
|
@returns {Type} |
||||
|
*/ |
||||
|
function round (number, position){ |
||||
|
var tmp = Math.pow(10, position) |
||||
|
return Math.round( number * tmp ) / tmp |
||||
|
} |
||||
|
|
||||
|
// /**
|
||||
|
// * This is a simple, points-to-lines (not curves) renderer.
|
||||
|
// * Keeping it around so we can activate it from time to time and see
|
||||
|
// * if smoothing logic is off much.
|
||||
|
// * @public
|
||||
|
// * @function
|
||||
|
// * @returns {String} Like so "l 1 2 3 5' with stroke as long line chain.
|
||||
|
// */
|
||||
|
// function compressstroke(stroke, shiftx, shifty){
|
||||
|
// // we combine strokes data into string like this:
|
||||
|
// // 'M 53 7 l 1 2 3 4 -5 -6 5 -6'
|
||||
|
// // see SVG documentation for Path element's 'd' argument.
|
||||
|
// var lastx = stroke.x[0]
|
||||
|
// , lasty = stroke.y[0]
|
||||
|
// , i
|
||||
|
// , l = stroke.x.length
|
||||
|
// , answer = ['M', lastx - shiftx, lasty - shifty, 'l']
|
||||
|
//
|
||||
|
// if (l === 1){
|
||||
|
// // meaning this was just a DOT, not a stroke.
|
||||
|
// // instead of creating a circle, we just create a short line
|
||||
|
// answer.concat(1, -1)
|
||||
|
// } else {
|
||||
|
// for(i = 1; i < l; i++){
|
||||
|
// answer = answer.concat(stroke.x[i] - lastx, stroke.y[i] - lasty)
|
||||
|
// lastx = stroke.x[i]
|
||||
|
// lasty = stroke.y[i]
|
||||
|
// }
|
||||
|
// }
|
||||
|
// return answer.join(' ')
|
||||
|
// }
|
||||
|
|
||||
|
function segmentToCurve(stroke, positionInStroke, lineCurveThreshold){ |
||||
|
'use strict' |
||||
|
// long lines (ones with many pixels between them) do not look good when they are part of a large curvy stroke.
|
||||
|
// You know, the jaggedy crocodile spine instead of a pretty, smooth curve. Yuck!
|
||||
|
// We want to approximate pretty curves in-place of those ugly lines.
|
||||
|
// To approximate a very nice curve we need to know the direction of line before and after.
|
||||
|
// Hence, on long lines we actually wait for another point beyond it to come back from
|
||||
|
// mousemoved before we draw this curve.
|
||||
|
|
||||
|
// So for "prior curve" to be calc'ed we need 4 points
|
||||
|
// A, B, C, D (we are on D now, A is 3 points in the past.)
|
||||
|
// and 3 lines:
|
||||
|
// pre-line (from points A to B),
|
||||
|
// this line (from points B to C), (we call it "this" because if it was not yet, it's the only one we can draw for sure.)
|
||||
|
// post-line (from points C to D) (even through D point is 'current' we don't know how we can draw it yet)
|
||||
|
//
|
||||
|
// Well, actually, we don't need to *know* the point A, just the vector A->B
|
||||
|
|
||||
|
// Again, we can only derive curve between points positionInStroke-1 and positionInStroke
|
||||
|
// Thus, since we can only draw a line if we know one point ahead of it, we need to shift our focus one point ahead.
|
||||
|
positionInStroke += 1 |
||||
|
// Let's hope the code that calls us knows we do that and does not call us with positionInStroke = index of last point.
|
||||
|
|
||||
|
var Cpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1]) |
||||
|
, Dpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke]) |
||||
|
, CDvector = Cpoint.getVectorToPoint(Dpoint) |
||||
|
// Again, we have a chance here to draw only PREVIOUS line segment - BC
|
||||
|
|
||||
|
// So, let's start with BC curve.
|
||||
|
// if there is only 2 points in stroke array (C, D), we don't have "history" long enough to have point B, let alone point A.
|
||||
|
// so positionInStroke should start with 2, ie
|
||||
|
// we are here when there are at least 3 points in stroke array.
|
||||
|
var Bpoint = new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2]) |
||||
|
, BCvector = Bpoint.getVectorToPoint(Cpoint) |
||||
|
, ABvector |
||||
|
, rounding = 2 |
||||
|
|
||||
|
if ( BCvector.getLength() > lineCurveThreshold ){ |
||||
|
// Yey! Pretty curves, here we come!
|
||||
|
if(positionInStroke > 2) { |
||||
|
ABvector = (new Point(stroke.x[positionInStroke-3], stroke.y[positionInStroke-3])).getVectorToPoint(Bpoint) |
||||
|
} else { |
||||
|
ABvector = new Vector(0,0) |
||||
|
} |
||||
|
var minlenfraction = 0.05 |
||||
|
, maxlen = BCvector.getLength() * 0.35 |
||||
|
, ABCangle = BCvector.angleTo(ABvector.reverse()) |
||||
|
, BCDangle = CDvector.angleTo(BCvector.reverse()) |
||||
|
, BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo( |
||||
|
Math.max(minlenfraction, ABCangle) * maxlen |
||||
|
) |
||||
|
, CtoCP2vector = (new Vector(BCvector.x + CDvector.x, BCvector.y + CDvector.y)).reverse().resizeTo( |
||||
|
Math.max(minlenfraction, BCDangle) * maxlen |
||||
|
) |
||||
|
, BtoCP2vector = new Vector(BCvector.x + CtoCP2vector.x, BCvector.y + CtoCP2vector.y) |
||||
|
|
||||
|
// returing curve for BC segment
|
||||
|
// all coords are vectors against Bpoint
|
||||
|
return [ |
||||
|
'c' // bezier curve
|
||||
|
, round( BtoCP1vector.x, rounding ) |
||||
|
, round( BtoCP1vector.y, rounding ) |
||||
|
, round( BtoCP2vector.x, rounding ) |
||||
|
, round( BtoCP2vector.y, rounding ) |
||||
|
, round( BCvector.x, rounding ) |
||||
|
, round( BCvector.y, rounding ) |
||||
|
] |
||||
|
} else { |
||||
|
return [ |
||||
|
'l' // line
|
||||
|
, round( BCvector.x, rounding ) |
||||
|
, round( BCvector.y, rounding ) |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function lastSegmentToCurve(stroke, lineCurveThreshold){ |
||||
|
'use strict' |
||||
|
// Here we tidy up things left unfinished
|
||||
|
|
||||
|
// What's left unfinished there is the curve between the last points
|
||||
|
// in the stroke
|
||||
|
// We can also be called when there is only one point in the stroke (meaning, the
|
||||
|
// stroke was just a dot), in which case there is nothing for us to do.
|
||||
|
|
||||
|
// So for "this curve" to be calc'ed we need 3 points
|
||||
|
// A, B, C
|
||||
|
// and 2 lines:
|
||||
|
// pre-line (from points A to B),
|
||||
|
// this line (from points B to C)
|
||||
|
// Well, actually, we don't need to *know* the point A, just the vector A->B
|
||||
|
// so, we really need points B, C and AB vector.
|
||||
|
var positionInStroke = stroke.x.length - 1 |
||||
|
|
||||
|
// there must be at least 2 points in the stroke.for us to work. Hope calling code checks for that.
|
||||
|
var Cpoint = new Point(stroke.x[positionInStroke], stroke.y[positionInStroke]) |
||||
|
, Bpoint = new Point(stroke.x[positionInStroke-1], stroke.y[positionInStroke-1]) |
||||
|
, BCvector = Bpoint.getVectorToPoint(Cpoint) |
||||
|
, rounding = 2 |
||||
|
|
||||
|
if (positionInStroke > 1 && BCvector.getLength() > lineCurveThreshold){ |
||||
|
// we have at least 3 elems in stroke
|
||||
|
var ABvector = (new Point(stroke.x[positionInStroke-2], stroke.y[positionInStroke-2])).getVectorToPoint(Bpoint) |
||||
|
, ABCangle = BCvector.angleTo(ABvector.reverse()) |
||||
|
, minlenfraction = 0.05 |
||||
|
, maxlen = BCvector.getLength() * 0.35 |
||||
|
, BtoCP1vector = new Vector(ABvector.x + BCvector.x, ABvector.y + BCvector.y).resizeTo( |
||||
|
Math.max(minlenfraction, ABCangle) * maxlen |
||||
|
) |
||||
|
|
||||
|
return [ |
||||
|
'c' // bezier curve
|
||||
|
, round( BtoCP1vector.x, rounding ) |
||||
|
, round( BtoCP1vector.y, rounding ) |
||||
|
, round( BCvector.x, rounding ) // CP2 is same as Cpoint
|
||||
|
, round( BCvector.y, rounding ) // CP2 is same as Cpoint
|
||||
|
, round( BCvector.x, rounding ) |
||||
|
, round( BCvector.y, rounding ) |
||||
|
] |
||||
|
} else { |
||||
|
// Since there is no AB leg, there is no curve to draw. This is just line
|
||||
|
return [ |
||||
|
'l' // simple line
|
||||
|
, round( BCvector.x, rounding ) |
||||
|
, round( BCvector.y, rounding ) |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function addstroke(stroke, shiftx, shifty){ |
||||
|
'use strict' |
||||
|
// we combine strokes data into string like this:
|
||||
|
// 'M 53 7 l 1 2 c 3 4 -5 -6 5 -6'
|
||||
|
// see SVG documentation for Path element's 'd' argument.
|
||||
|
var lines = [ |
||||
|
'M' // move to
|
||||
|
, round( (stroke.x[0] - shiftx), 2) |
||||
|
, round( (stroke.y[0] - shifty), 2) |
||||
|
] |
||||
|
// processing all points but first and last.
|
||||
|
, i = 1 // index zero item in there is STARTING point. we already extracted it.
|
||||
|
, l = stroke.x.length - 1 // this is a trick. We are leaving last point coordinates for separate processing.
|
||||
|
, lineCurveThreshold = 1 |
||||
|
|
||||
|
for(; i < l; i++){ |
||||
|
lines.push.apply(lines, segmentToCurve(stroke, i, lineCurveThreshold)) |
||||
|
} |
||||
|
if (l > 0 /* effectively more than 1, since we "-1" above */){ |
||||
|
lines.push.apply(lines, lastSegmentToCurve(stroke, i, lineCurveThreshold)) |
||||
|
} else if (l === 0){ |
||||
|
// meaning we only have ONE point in the stroke (and otherwise refer to the stroke as "dot")
|
||||
|
lines.push.apply(lines, ['l' , 1, 1]) |
||||
|
} |
||||
|
return lines.join(' ') |
||||
|
} |
||||
|
|
||||
|
function simplifystroke(stroke){ |
||||
|
var d = [] |
||||
|
, newstroke = {'x':[], 'y':[]} |
||||
|
, i, l |
||||
|
|
||||
|
for (i = 0, l = stroke.x.length; i < l; i++){ |
||||
|
d.push({'x':stroke.x[i], 'y':stroke.y[i]}) |
||||
|
} |
||||
|
d = simplify(d, 0.7, true) |
||||
|
for (i = 0, l = d.length; i < l; i++){ |
||||
|
newstroke.x.push(d[i].x) |
||||
|
newstroke.y.push(d[i].y) |
||||
|
} |
||||
|
return newstroke |
||||
|
} |
||||
|
|
||||
|
// generate SVG style from settings
|
||||
|
function styleFromSettings(settings){ |
||||
|
var styles = []; |
||||
|
var meta = [ |
||||
|
// ["style attr", "key in settings", "default value"]
|
||||
|
["fill", undefined, "none"], |
||||
|
["stroke", "color", "#000000"], |
||||
|
["stroke-width", "lineWidth", 2], |
||||
|
["stroke-linecap", undefined, "round"], |
||||
|
["stroke-linejoin", undefined, "round"] |
||||
|
]; |
||||
|
for (var i = meta.length - 1; i >= 0; i--){ |
||||
|
var attr = meta[i][0] |
||||
|
, key = meta[i][1] |
||||
|
, defaultVal = meta[i][2]; |
||||
|
styles.push(attr + '="' + (key in settings && settings[key] ? settings[key] : defaultVal) + '"'); |
||||
|
} |
||||
|
return styles.join(' '); |
||||
|
} |
||||
|
|
||||
|
function compressstrokes(data, settings){ |
||||
|
'use strict' |
||||
|
var answer = [ |
||||
|
'<?xml version="1.0" encoding="UTF-8" standalone="no"?>' |
||||
|
, '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">' |
||||
|
] |
||||
|
, i , l = data.length |
||||
|
, stroke |
||||
|
, xlimits = [] |
||||
|
, ylimits = [] |
||||
|
, sizex = 0 |
||||
|
, sizey = 0 |
||||
|
, shiftx = 0 |
||||
|
, shifty = 0 |
||||
|
, minx, maxx, miny, maxy, padding = 1 |
||||
|
, simplifieddata = [] |
||||
|
|
||||
|
if(l !== 0){ |
||||
|
for(i = 0; i < l; i++){ |
||||
|
stroke = simplifystroke( data[i] ) |
||||
|
simplifieddata.push(stroke) |
||||
|
xlimits = xlimits.concat(stroke.x) |
||||
|
ylimits = ylimits.concat(stroke.y) |
||||
|
} |
||||
|
|
||||
|
minx = Math.min.apply(null, xlimits) - padding |
||||
|
maxx = Math.max.apply(null, xlimits) + padding |
||||
|
miny = Math.min.apply(null, ylimits) - padding |
||||
|
maxy = Math.max.apply(null, ylimits) + padding |
||||
|
shiftx = minx < 0? 0 : minx |
||||
|
shifty = miny < 0? 0 : miny |
||||
|
sizex = maxx - minx |
||||
|
sizey = maxy - miny |
||||
|
} |
||||
|
|
||||
|
answer.push( |
||||
|
'<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="'+ |
||||
|
sizex.toString() + |
||||
|
'" height="'+ |
||||
|
sizey.toString() + |
||||
|
'">' |
||||
|
) |
||||
|
|
||||
|
// // This is a nice idea: use style declaration on top, and mark the lines with 'class="f"'
|
||||
|
// // thus saving space in svg...
|
||||
|
// // alas, many SVG renderers don't understand "class" and render the strokes in default "fill = black, no stroke" style. Ugh!!!
|
||||
|
// // TODO: Rewrite ImageMagic / GraphicsMagic, InkScape, http://svg.codeplex.com/ to support style + class. until then, we hardcode the stroke style within the path.
|
||||
|
// answer.push(
|
||||
|
// '<style type="text/css"><![CDATA[.f {fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}]]></style>'
|
||||
|
// )
|
||||
|
|
||||
|
// // This set is accompaniment to "simple line renderer" - compressstroke
|
||||
|
// answer.push(
|
||||
|
// '<style type="text/css"><![CDATA[.t {fill:none;stroke:#FF0000;stroke-width:2}]]></style>'
|
||||
|
// )
|
||||
|
// for(i = 0; i < l; i++){
|
||||
|
// stroke = data[i]
|
||||
|
// // This one is accompaniment to "simple line renderer"
|
||||
|
// answer.push('<path class="t" d="'+ compressstroke(stroke, shiftx, shifty) +'"/>')
|
||||
|
// }
|
||||
|
|
||||
|
for(i = 0, l = simplifieddata.length; i < l; i++){ |
||||
|
stroke = simplifieddata[i] |
||||
|
answer.push('<path ' + styleFromSettings(settings) + ' d="'+ addstroke(stroke, shiftx, shifty) + '"/>') |
||||
|
} |
||||
|
answer.push('</svg>') |
||||
|
return answer.join('') |
||||
|
} |
||||
|
|
||||
|
if (typeof btoa !== 'function') |
||||
|
{ |
||||
|
var btoa = function(data) { |
||||
|
/** @preserve |
||||
|
base64 encoder |
||||
|
MIT, GPL |
||||
|
http://phpjs.org/functions/base64_encode
|
||||
|
+ original by: Tyler Akins (http://rumkin.com)
|
||||
|
+ improved by: Bayron Guevara |
||||
|
+ improved by: Thunder.m |
||||
|
+ improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
|
+ bugfixed by: Pellentesque Malesuada |
||||
|
+ improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||
|
+ improved by: Rafal Kukawski (http://kukawski.pl)
|
||||
|
|
||||
|
*/ |
||||
|
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" |
||||
|
, b64a = b64.split('') |
||||
|
, o1, o2, o3, h1, h2, h3, h4, bits, i = 0, |
||||
|
ac = 0, |
||||
|
enc = "", |
||||
|
tmp_arr = []; |
||||
|
|
||||
|
do { // pack three octets into four hexets
|
||||
|
o1 = data.charCodeAt(i++); |
||||
|
o2 = data.charCodeAt(i++); |
||||
|
o3 = data.charCodeAt(i++); |
||||
|
|
||||
|
bits = o1 << 16 | o2 << 8 | o3; |
||||
|
|
||||
|
h1 = bits >> 18 & 0x3f; |
||||
|
h2 = bits >> 12 & 0x3f; |
||||
|
h3 = bits >> 6 & 0x3f; |
||||
|
h4 = bits & 0x3f; |
||||
|
|
||||
|
// use hexets to index into b64, and append result to encoded string
|
||||
|
tmp_arr[ac++] = b64a[h1] + b64a[h2] + b64a[h3] + b64a[h4]; |
||||
|
} while (i < data.length); |
||||
|
|
||||
|
enc = tmp_arr.join(''); |
||||
|
var r = data.length % 3; |
||||
|
return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); |
||||
|
|
||||
|
// end of base64 encoder MIT, GPL
|
||||
|
} |
||||
|
} |
||||
|
|
||||
|
var unencodedmime = 'image/svg+xml' |
||||
|
function getUnencodedSVG(data, settings){ |
||||
|
return [unencodedmime , compressstrokes(data, settings)]; |
||||
|
} |
||||
|
|
||||
|
var base64encodedmime = 'image/svg+xml;base64' |
||||
|
function getBase64encodedSVG(data, settings){ |
||||
|
|
||||
|
return [base64encodedmime , btoa( compressstrokes(data, settings) )]; |
||||
|
} |
||||
|
|
||||
|
function Initializer($){ |
||||
|
var mothership = $.fn['jSignature'] |
||||
|
mothership( |
||||
|
'addPlugin' |
||||
|
,'export' |
||||
|
,'svg' // alias
|
||||
|
,getUnencodedSVG |
||||
|
) |
||||
|
mothership( |
||||
|
'addPlugin' |
||||
|
,'export' |
||||
|
,unencodedmime // full name
|
||||
|
,getUnencodedSVG |
||||
|
) |
||||
|
mothership( |
||||
|
'addPlugin' |
||||
|
,'export' |
||||
|
,'svgbase64' // alias
|
||||
|
,getBase64encodedSVG |
||||
|
) |
||||
|
mothership( |
||||
|
'addPlugin' |
||||
|
,'export' |
||||
|
,base64encodedmime // full name
|
||||
|
,getBase64encodedSVG |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
// //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
|
||||
|
// //Need to revisit this later.
|
||||
|
|
||||
|
if(typeof $ === 'undefined') {throw new Error("We need jQuery for some of the functionality. jQuery is not detected. Failing to initialize...")} |
||||
|
Initializer($) |
||||
|
|
||||
|
})(); |
@ -0,0 +1,165 @@ |
|||||
|
/** @license |
||||
|
jSignature v2 jSignature's Undo Button and undo functionality plugin |
||||
|
|
||||
|
*/ |
||||
|
/** |
||||
|
Copyright (c) 2011 Willow Systems Corp http://willow-systems.com
|
||||
|
MIT License <http://www.opensource.org/licenses/mit-license.php>
|
||||
|
*/ |
||||
|
|
||||
|
;(function(){ |
||||
|
|
||||
|
var apinamespace = 'jSignature' |
||||
|
|
||||
|
function attachHandlers(buttonRenderer, apinamespace, extensionName) { |
||||
|
var $undoButton = buttonRenderer.call(this) |
||||
|
|
||||
|
;(function(jSignatureInstance, $undoButton, apinamespace) { |
||||
|
jSignatureInstance.events.subscribe( |
||||
|
apinamespace + '.change' |
||||
|
, function(){ |
||||
|
if (jSignatureInstance.dataEngine.data.length) { |
||||
|
$undoButton.show() |
||||
|
} else { |
||||
|
$undoButton.hide() |
||||
|
} |
||||
|
} |
||||
|
) |
||||
|
})( this, $undoButton, apinamespace ) |
||||
|
|
||||
|
;(function(jSignatureInstance, $undoButton, apinamespace) { |
||||
|
|
||||
|
var eventName = apinamespace + '.undo' |
||||
|
|
||||
|
$undoButton.bind('click', function(){ |
||||
|
jSignatureInstance.events.publish(eventName) |
||||
|
}) |
||||
|
|
||||
|
// This one creates new "undo" event listener to jSignature instance
|
||||
|
// It handles the actual undo-ing.
|
||||
|
jSignatureInstance.events.subscribe( |
||||
|
eventName |
||||
|
, function(){ |
||||
|
var data = jSignatureInstance.dataEngine.data |
||||
|
if (data.length) { |
||||
|
data.pop() |
||||
|
jSignatureInstance.resetCanvas(data) |
||||
|
} |
||||
|
} |
||||
|
) |
||||
|
})( |
||||
|
this |
||||
|
, $undoButton |
||||
|
, this.events.topics.hasOwnProperty( apinamespace + '.undo' ) ? |
||||
|
// oops, seems some other plugin or code has already claimed "jSignature.undo" event
|
||||
|
// we will use this extension's name for event name prefix
|
||||
|
extensionName : |
||||
|
// Great! we will use 'jSignature' for event name prefix.
|
||||
|
apinamespace |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
function ExtensionInitializer(extensionName){ |
||||
|
// we are called very early in instance's life.
|
||||
|
// right after the settings are resolved and
|
||||
|
// jSignatureInstance.events is created
|
||||
|
// and right before first ("jSignature.initializing") event is called.
|
||||
|
// You don't really need to manupilate
|
||||
|
// jSignatureInstance directly, just attach
|
||||
|
// a bunch of events to jSignatureInstance.events
|
||||
|
// (look at the source of jSignatureClass to see when these fire)
|
||||
|
// and your special pieces of code will attach by themselves.
|
||||
|
|
||||
|
// this function runs every time a new instance is set up.
|
||||
|
// this means every var you create will live only for one instance
|
||||
|
// unless you attach it to something outside, like "window."
|
||||
|
// and pick it up later from there.
|
||||
|
|
||||
|
// when globalEvents' events fire, 'this' is globalEvents object
|
||||
|
// when jSignatureInstance's events fire, 'this' is jSignatureInstance
|
||||
|
|
||||
|
// Here,
|
||||
|
// this = is new jSignatureClass's instance.
|
||||
|
|
||||
|
// The way you COULD approch setting this up is:
|
||||
|
// if you have multistep set up, attach event to "jSignature.initializing"
|
||||
|
// that attaches other events to be fired further lower the init stream.
|
||||
|
// Or, if you know for sure you rely on only one jSignatureInstance's event,
|
||||
|
// just attach to it directly
|
||||
|
|
||||
|
var apinamespace = 'jSignature' |
||||
|
|
||||
|
this.events.subscribe( |
||||
|
// name of the event
|
||||
|
apinamespace + '.attachingEventHandlers' |
||||
|
// event handlers, can pass args too, but in majority of cases,
|
||||
|
// 'this' which is jSignatureClass object instance pointer is enough to get by.
|
||||
|
, function(){ |
||||
|
|
||||
|
// hooking up "undo" button to lower edge of Canvas.
|
||||
|
// but only when options passed to jSignature('init', options)
|
||||
|
// contain "undoButton":renderingFunction pair.
|
||||
|
// or "undoButton":true (in which case default, internal rendering fn is used)
|
||||
|
if (this.settings[extensionName]) { |
||||
|
var oursettings = this.settings[extensionName] |
||||
|
if (typeof oursettings !== 'function') { |
||||
|
// we make it a function.
|
||||
|
|
||||
|
// we allow people to override the button rendering code,
|
||||
|
// but when developler is OK with default look (and just passes "truthy" value)
|
||||
|
// this defines default look for the button:
|
||||
|
// centered against canvas, hanging on its lower side.
|
||||
|
oursettings = function(){ |
||||
|
// this === jSignatureInstance
|
||||
|
var undoButtonSytle = 'position:absolute;display:none;margin:0 !important;top:auto' |
||||
|
, $undoButton = $('<input type="button" value="撤销" style="'+undoButtonSytle+'" />') |
||||
|
.appendTo(this.$controlbarLower) |
||||
|
|
||||
|
// this centers the button against the canvas.
|
||||
|
var buttonWidth = $undoButton.width() |
||||
|
$undoButton.css( |
||||
|
'left' |
||||
|
, Math.round(( this.canvas.width - buttonWidth ) / 2) |
||||
|
) |
||||
|
// IE 7 grows the button. Correcting for that.
|
||||
|
if ( buttonWidth !== $undoButton.width() ) { |
||||
|
$undoButton.width(buttonWidth) |
||||
|
} |
||||
|
|
||||
|
return $undoButton |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
attachHandlers.call( |
||||
|
this |
||||
|
, oursettings |
||||
|
, apinamespace |
||||
|
, extensionName |
||||
|
) |
||||
|
} |
||||
|
} |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
var ExtensionAttacher = function(){ |
||||
|
$.fn[apinamespace]( |
||||
|
'addPlugin' |
||||
|
,'instance' // type of plugin
|
||||
|
,'UndoButton' // extension name
|
||||
|
,ExtensionInitializer |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// //Because plugins are minified together with jSignature, multiple defines per (minified) file blow up and dont make sense
|
||||
|
// //Need to revisit this later.
|
||||
|
|
||||
|
// if ( typeof define === "function" && define.amd != null) {
|
||||
|
// // AMD-loader compatible resource declaration
|
||||
|
// // you need to call this one with jQuery as argument.
|
||||
|
// define(function(){return Initializer} )
|
||||
|
// } else {
|
||||
|
ExtensionAttacher() |
||||
|
// }
|
||||
|
|
||||
|
})(); |
@ -0,0 +1,17 @@ |
|||||
|
<template> |
||||
|
<iframe src="editor.html" v-bind="objectOfAttrs" /> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
objectOfAttrs: { |
||||
|
width: '100%', |
||||
|
height: '90%', |
||||
|
frameborder: 0 |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
@ -0,0 +1,53 @@ |
|||||
|
<template> |
||||
|
<div class="flex formManage"> |
||||
|
<div class="leftContent">新增表单</div> |
||||
|
<div class="flex1" style="background: #FFFFFF;padding:0 10px"> |
||||
|
<div style="padding: 10px 0"> |
||||
|
<el-button type="primary" size="mini" @click="saveForm">保存</el-button> |
||||
|
<el-button type="primary" size="mini" @click="setForm">设置</el-button> |
||||
|
</div> |
||||
|
<editor mode="design" @after-init.native="onAfterInit" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
<script> |
||||
|
import Editor from '@/components/formEditor/Editor.vue' |
||||
|
|
||||
|
export default { |
||||
|
name: 'Index', |
||||
|
components: { Editor }, |
||||
|
data() { |
||||
|
return { |
||||
|
editor: null, |
||||
|
formList: [] |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
onAfterInit(e) { |
||||
|
this.editor = e.editor |
||||
|
this.editor.execCommand('new') |
||||
|
}, |
||||
|
saveForm() { |
||||
|
const html = this.editor.getHtml() |
||||
|
console.log(this.editor.getBindObject()) |
||||
|
window.sessionStorage.setItem('form', encodeURIComponent(html)) |
||||
|
}, |
||||
|
setForm() { |
||||
|
const html = decodeURIComponent(window.sessionStorage.getItem('form')) |
||||
|
this.editor.loadHtml(html) |
||||
|
this.editor.execCommand('design') |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
.formManage{ |
||||
|
width: 100%; |
||||
|
height: calc(100vh - 50px - 20px); |
||||
|
} |
||||
|
.leftContent{ |
||||
|
width: 240px; |
||||
|
background: #fff; |
||||
|
margin-right: 10px; |
||||
|
} |
||||
|
</style> |