//代码提示框js 这块暂时没用到 Namespace.register("U.CD.Tip"); //一个包含提示值得数组 U.CD.Tip.d = ["getElementById", "getElementsByTagName", "toString", "valueOf", "appendChild", "apply", "call", "removeChild", "style", "getElementsByTagName", "getElementsByTagName", "getElementsByTagName"]; U.CD.Tip.d.style = ["width", "height", "top", "left", "backgroundColor", "color", "", "", ""]; //代码提示时响应此函数。 U.CD.Tip.Init = function () { //创建tips菜单在document.body中 var _TBOX = $$("div", { "id": "UCD_TP_TB", "style": { "display": "none"} }, document.body); //document.body for (var i = 0; i < U.CD.Tip.d.length; i++) {//循环提示值数组 var _ct = $$("div", { "className": "UCD_TP_TB_N" }, _TBOX); //追加变量图标 $$("div", { "className": "UCD_TP_TB_N_T", "innerHTML": "☆" }, _ct); //追加变量图标 $$("div", { "className": "UCD_TP_TB_N_D", "innerHTML": U.CD.Tip.d[i], "onmouseover": [U.CD.Tip.Active, ([i])], "onmousedown": [U.CD.Tip.SI, ([U.CD.Tip.d[i]])] }, _ct); //追加文件值和事件 } } //显示提示框函数 U.CD.Tip.Show = function () { var _T = $("#UCD_TP_TB")[0]; //提示框最大外框 //var _R = U.UF.E.GetSelectionRange(window, $("#UCD_CT_Code_CT")[0], { "TF": "UCD_CODE", "CB": U.CD.R.Wrap }); //获取光标位置。必须重新获取光标位置,奇怪,以后研究 var _R = U.CD.TipR; //从全局变量获取 var _G = _R.Parent(null, true); //获取当前光标选中的字符包含的div。 var _GWZ = _R.GetGBWZ(_G); //返回光标位于div行第几个的字符位置 var _if = U.M.GetElementInfo(_G); //获取div的各种间距 if (_T.style.display == "none") { //如果存在tips框 _T.style.display = "block"; //不用创建直接显示 //获取行的距离+字符间距约为10*字符序列 //高度要加上行高 _T.style.left = _if.BCRL + U.CD.Tip.GetStrWidth(_GWZ) + "px"; //_T.style.left = _if.BCRL + _GWZ * 10 + "px"; _T.style.top = _if.BCRT + 10 + "px"; _T.firstChild.style.backgroundColor = "silver"; _T.firstChild.focus(); //聚集 _T.onkeydown = U.M.apply(this, [[U.CD.Tip.KeyDown, ([_R])]]); //赋予键盘事件 } U.D.SetDTop(_T);//置于顶层 } //计算提示框的垂直位置,因为有些地方会导致下面看不到,以后再搞了。 U.CD.Tip.YPosition = function () { } //获取光标坐标位置的函数,其他地方没有的,需要封装在编辑器中。临时创建一个span,字体大小和字体设置得和编辑器一样,计算宽度,用完删除。 U.CD.Tip.GetStrWidth = function (_GWZ) { var i, _re = ""; for (i = 0; i < _GWZ; i++) { _re += "a"; } //有些空格及特殊字符会导致问题,现在采用追加"aaaaaaaaaaaaaaa"试一下 var _w, _a = $$("div", { "innerHTML": _re, "style": { "cssText": "font-family:Consolas; font-size:14px; position:absolute;top:5000px;left:0px;"} }, document.body); _w = _a.offsetWidth; document.body.removeChild(_a); return _w; //移除临时节点 } //在body区域按下左键,隐藏提示框,还差一个在iframe区域如何判断是否按下左键。光标置于提示区域之外都要隐藏//提示框外壳//判断鼠标是否在提示框之外。 U.CD.Tip.HidTip = function () { $("#UCD_TP_TB")[0].style.display = "none"; } //js实现hover; U.CD.Tip.Active = function (_index) { var _t = $("#UCD_TP_TB")[0], _z = _t.childNodes; //获取tips菜单框 //获取提示数组 for (var i = 0; i < _z.length; i++) { if (i == _index) { _z[i].style.backgroundColor = "rgb(255,236,181)"; } //选中的索引数字 else { _z[i].style.backgroundColor = ""; } } } //判断提示框的第几个元素被选中,也可做全局变量,暂时用局部变量。//循环选择返回选中的索引 U.CD.Tip.CurPosition = function () { var _t = $("#UCD_TP_TB")[0], _z = _t.childNodes; //获取tips菜单框 //获取提示数组 for (var i = 0; i < _z.length; i++) { if (_z[i].style.backgroundColor != "") return i; } return 0; //默认返回第一个。 } //选择提示菜单单击时追加代码到代码区域.tipvalue 这是选中的值。_R为所选择的光标,参数r为选项的值。 U.CD.Tip.SI = function (r) { var _R = U.CD.TipR; //从全局变量获取 var _G = _R.Replace(r); //追加值到光标后面 $("#UCD_TP_TB")[0].style.display = "none"; // //获取Tip菜单隐藏 //U.UF.EV.stopBubble();此处会触发代码区域的回车键,如何阻止? } //键盘控制函数,一个程序只能有1个键盘控制函数,因此把此键盘函数注入到主程序键盘中。 U.CD.Tip.KeyDown = function (_R) { var _k = event.keyCode, _i = 0, _t = $("#UCD_TP_TB")[0], _z = _t.childNodes.length, _d; //获取tips菜单框 ,_z为数组长度,_d为选中的提示符。//获取提示数组 _i = U.CD.Tip.CurPosition(); //获取提示框的当前位置 if (_t.style.display != "none") { if (_k == 38) { if (_i > 0) _i--; } //按下↑//初始>0//减一 if (_k == 40) { if (_i < _z) { _i++; } else { _i = _z - 1; } } //按下↓//小于数组长度//加一//选择最后一个 //按下回车键 if (_k == 10 || _k == 13) { _R.Replace(""); _d = _t.childNodes[_i]; U.CD.Tip.SI(U.CD.Tip.d[_i], _R); U.M.StopDefault(); return; } if (_k == 8 || _k == 27) { U.CD.Tip.HidTip(); _R.Replace(""); } //按下了退格键,则隐藏提示框_k == 8 表示Backspace键盘 27代码esc键盘 //创建光标,使用空字符串 U.CD.Tip.Active(_i); } } //判断是否该弹出提示框,条件为:从当前行往上找,没有找到script标签,则不弹出,如果找到script标签,则弹出。参数为当前行 //以后的工作更加繁重,因为还有css样式的智能弹出。这个工作量比较大了 U.CD.Tip.IsJs = function (h) { //如果上一行为跳出 如果上一行是否有"") break; //跳出循环。 if (_ch.substr(0, 7).toLowerCase() == "