@ -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> |