📄 widget.js
字号:
/* widget.js{{IS_NOTE Purpose: Description: History: Sun Jan 29 15:25:10 2006, Created by tomyeh}}IS_NOTECopyright (C) 2006 Potix Corporation. All Rights Reserved.{{IS_RIGHT This program is distributed under GPL Version 2.0 in the hope that it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/zk.load("zul.vd");////// textbox //zkTxbox = {};zkau.textbox = zkTxbox; //zkau depends on itzkTxbox._intervals = {};zkTxbox.init = function (cmp) { zk.listen(cmp, "focus", zkTxbox.onfocus); zk.listen(cmp, "blur", zkTxbox.onblur); zk.listen(cmp, "select", zkTxbox.onselect); if ($tag(cmp) == "TEXTAREA") zk.listen(cmp, "keyup", zkTxbox.onkey); //Bug 1486556: we have to enforce zkTxbox to send value back for validating //at the server if (getZKAttr($outer(cmp), "srvald")) { var old = cmp.value; cmp.defaultValue = old + "-"; if (old != cmp.value) cmp.value = old; //Bug 1490079 }};zkTxbox.onHide = function (cmp) { var inp = $real(cmp); if (inp) zkVld.closeErrbox(inp.id, true);};zkTxbox.onselect = function (evt) { var inp = zkau.evtel(evt); //backward compatible (2.4 or before) var cmp = $outer(inp); if (zkau.asap(cmp, "onSelection")) { var sr = zk.getSelectionRange(inp); zkau.send({uuid: cmp.id, cmd: "onSelection", data: [sr[0], sr[1], inp.value.substring(sr[0], sr[1])]}, 100); }};/** Handles onblur for text input. * Note: we don't use onChange because it won't work if user uses IE' auto-fill */zkTxbox.onblur = function (evt) { var inp = zkau.evtel(evt); //backward compatible (2.4 or before) //stop the scanning of onChaning first var interval = zkTxbox._intervals[inp.id]; if (interval) { clearInterval(interval); delete zkTxbox._intervals[inp.id]; } if (inp.removeAttribute) { inp.removeAttribute("zk_changing_last"); inp.removeAttribute("zk_changing_selbk"); } zkTxbox.updateChange(inp, zkTxbox._noonblur(inp)); zkau.onblur(evt); //fire onBlur after onChange};/** check any change. * @return false if failed (wrong data). */zkTxbox.updateChange = function (inp, noonblur) { if (zkVld.validating) return true; //to avoid deadloop (when both fields are invalid) if (inp && inp.id) { var msg = !noonblur ? zkVld.validate(inp.id): null; //It is too annoying (especial when checking non-empty) //if we alert user for something he doesn't input yet if (msg) { zkVld.errbox(inp.id, msg); inp.setAttribute("zk_err", "true"); zkau.send({uuid: $uuid(inp), cmd: "onError", data: [inp.value, msg]}, -1); return false; //failed } zkVld.closeErrbox(inp.id); } if (!noonblur) zkTxbox.onupdate(inp); return true;};/** Tests whether NOT to do onblur (if inp currentFocus are in the same * component). */zkTxbox._noonblur = function (inp) { var cf = zkau.currentFocus; if (inp && cf && inp != cf) { var el = inp; for (;; el = el.parentNode) { if (!el) return false; if (getZKAttr(el, "combo") == "true") break; if (getZKAttr(el, "type")) return false; } for (; cf; cf = $parent(cf)) if (cf == el) return true; } return false;};/** Called if a component updates a text programmingly. Eg., datebox. * It checks whether the content is really changed and sends event if so. */zkTxbox.onupdate = function (inp) { var newval = inp.value; if (newval != inp.defaultValue) { //changed inp.defaultValue = newval; var uuid = $uuid(inp); zkau.send({uuid: uuid, cmd: "onChange", data: [newval]}, zkau.asapTimeout(uuid, "onChange", 100)); } else if (inp.getAttribute("zk_err")) { inp.removeAttribute("zk_err"); zkau.send({uuid: $uuid(inp), cmd: "onError", data: [newval, null]}, -1); //clear error (even if not changed) }};zkTxbox.onkey = function (evt) { //Request 1565288 and 1738246: support maxlength for Textarea var inp = Event.element(evt); var maxlen = getZKAttr(inp, "maxlen"); if (maxlen) { maxlen = $int(maxlen); if (maxlen > 0 && inp.value != inp.defaultValue && inp.value.length > maxlen) inp.value = inp.value.substring(0, maxlen); }};zkTxbox.onfocus = function (evt) { zkau.onfocus(evt); //handling onChanging var inp = zkau.evtel(evt); //backward compatible (2.4 or before) if (inp && inp.id && zkau.asap($outer(inp), "onChanging")) { inp.setAttribute("zk_changing_last", inp.value); if (!zkTxbox._intervals[inp.id]) zkTxbox._intervals[inp.id] = setInterval("zkTxbox._scanChanging('"+inp.id+"')", 500); }};/** Scans whether any changes. */zkTxbox._scanChanging = function (id) { var inp = $e(id); if (inp && zkau.asap($outer(inp), "onChanging") && inp.getAttribute("zk_changing_last") != inp.value) { inp.setAttribute("zk_changing_last", inp.value); var selbk = inp.getAttribute("zk_changing_selbk"); inp.removeAttribute("zk_changing_selbk"); zkau.send({uuid: $uuid(id), cmd: "onChanging", data: [inp.value, selbk == inp.value], ignorable: true}, 100); }};zkTxbox.setAttr = function (cmp, nm, val) { if("z.sel" == nm){ var inp = $real(cmp); if ("all" == val) { zk.asyncSelect(inp.id); return true; //done } var ary = val.split(","); var start = $int(ary[0]), end = $int(ary[1]), len = inp.value.length; if (start < 0) start = 0; if (start > len) start = len; if (end < 0) end = 0; if (end > len) end = len; if (inp.setSelectionRange) { inp.setSelectionRange(start, end); inp.focus(); } else if (inp.createTextRange) { var range = inp.createTextRange(); if(start != end){ range.moveEnd('character', end - range.text.length); range.moveStart('character', start); }else{ range.move('character', start); } range.select(); } return true; } return false;}//////intbox//zkInbox = {};zkInbox.init = zkTxbox.init;zkInbox.setAttr = zkTxbox.setAttr ;zkInbox.onHide = zkTxbox.onHide;zkInbox.validate = function (cmp) { return zkVld.onlyInt(cmp.id);};//////decimalbox//zkDcbox = {};zkDcbox.init = zkTxbox.init;zkDcbox.setAttr = zkTxbox.setAttr ;zkDcbox.onHide = zkTxbox.onHide;zkDcbox.validate = function (cmp) { return zkVld.onlyNum(cmp.id);};//////doublebox//zkDbbox = {};zkDbbox.init = zkTxbox.init;zkDbbox.setAttr = zkTxbox.setAttr ;zkDbbox.onHide = zkTxbox.onHide;zkDbbox.validate = function (cmp) { return zkVld.onlyNum(cmp.id);};////// button //zkButton = {};zkButton.init = function (cmp) { zk.listen(cmp, "click", zkau.onclick); zk.listen(cmp, "dblclick", zkau.ondblclick); //we have to handle here since _onDocDClick won't receive it zk.listen(cmp, "focus", zkau.onfocus); zk.listen(cmp, "blur", zkau.onblur);};zkTbtn = {}; //toolbarbuttonzkTbtn.init = function (cmp) { zk.listen(cmp, "click", function (evt) { if ("javascript:;" == cmp.href) zkau.onclick(evt); else { var t = cmp.getAttribute("target"); if (cmp.href && !zk.isNewWindow(cmp.href, t)) zk.progress(); } }); zk.listen(cmp, "focus", zkau.onfocus); zk.listen(cmp, "blur", zkau.onblur);};////// checkbox and radio //zkCkbox = {};zkCkbox.init = function (cmp) { cmp = $real(cmp); zk.listen(cmp, "click", function () {zkCkbox.onclick(cmp);}); zk.listen(cmp, "focus", zkau.onfocus); zk.listen(cmp, "blur", zkau.onblur);};zkCkbox.setAttr = function (cmp, nm, val) { if ("style" == nm) { var lbl = zk.firstChild(cmp, "LABEL", true); if (lbl) zkau.setAttr(lbl, nm, zk.getTextStyle(val)); } zkau.setAttr(cmp, nm, val); return true;};zkCkbox.rmAttr = function (cmp, nm) { if ("style" == nm) { var lbl = zk.firstChild(cmp, "LABEL", true); if (lbl) zkau.rmAttr(lbl, nm); } zkau.rmAttr(cmp, nm); return true;};zkRadio = {};zkRadio.init = zkCkbox.init;zkRadio.setAttr = zkCkbox.setAttr;zkRadio.rmAttr = zkCkbox.rmAttr;/** Handles onclick for checkbox and radio. */zkCkbox.onclick = function (cmp) { var newval = cmp.checked; //20060426: if radio, we cannot detect whether a radio is unchecked //by the browser -- so always zk.send if (cmp.type == "radio" || newval != cmp.defaultChecked) { //changed cmp.defaultChecked = newval; var uuid = $uuid(cmp); zkau.send({uuid: uuid, cmd: "onCheck", data: [newval]}, zkau.asapTimeout(uuid, "onCheck")); }};////// groupbox, caption //zkGrbox = {};zkCapt = {};zkGrbox.init = zkGrbox._fixHgh = function (cmp) { var n = $e(cmp.id + "!cave"); if (n) { var hgh = cmp.style.height; if (hgh && hgh != "auto") { hgh = cmp.clientHeight; for (var p = n, q; q = p.previousSibling;) { if (q.offsetHeight) hgh -= q.offsetHeight; p = q; } for (var p = n, q; q = p.nextSibling;) { if (q.offsetHeight) hgh -= q.offsetHeight; p = q; } zk.setOffsetHeight(n, hgh); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -