From 8400cd00519d5c2b9ad261bb84c71d187ce80329 Mon Sep 17 00:00:00 2001 From: YouWei Zhao Date: Fri, 16 Mar 2018 22:33:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=81=8D=E5=8E=86=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=A1=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/css/editor_mode.css | 6 +- _server/editor.js | 4 ++ _server/editor_mode.js | 124 ++++++++++++++++++++++++++++++++++-- 3 files changed, 127 insertions(+), 7 deletions(-) diff --git a/_server/css/editor_mode.css b/_server/css/editor_mode.css index 4f3562bc..f43f4ef1 100644 --- a/_server/css/editor_mode.css +++ b/_server/css/editor_mode.css @@ -167,10 +167,14 @@ div.etableInputDiv { border: none; } -.etableInputDiv input { +.etableInputDiv input[type="text"] { } +.etableInputDiv input[type="checkbox"] { + +} + .etableInputDiv select { } diff --git a/_server/editor.js b/_server/editor.js index afeedd01..96139039 100644 --- a/_server/editor.js +++ b/_server/editor.js @@ -323,6 +323,10 @@ editor.prototype.guid = function() { }); } +editor.prototype.HTMLescape = function(str_) { + return String(str_).split('').map(function(v){return '&#'+v.charCodeAt(0)+';'}).join(''); +} + editor.prototype.listen = function() { var uc = eui.getContext('2d'); diff --git a/_server/editor_mode.js b/_server/editor_mode.js index 4abbc578..02b7fd88 100644 --- a/_server/editor_mode.js +++ b/_server/editor_mode.js @@ -37,14 +37,39 @@ editor_mode.prototype.init_dom_ids = function(callback){ editor_mode.prototype.objToTable_ = function(obj,commentObj){ var outstr=["\n条目注释值\n"]; var guids=[]; + var defaultcobj={ + _type:'textarea', + _data:'', + _string:function(args){//object~[field,cfield,vobj,cobj] + var thiseval = args.vobj; + return (typeof(thiseval) === typeof('')) && thiseval[0]==='"'; + }, + _leaf:function(args){//object~[field,cfield,vobj,cobj] + var thiseval = args.vobj; + if (thiseval == null || thiseval == undefined)return true;//null,undefined + if (typeof(thiseval) === typeof(''))return true;//字符串 + if (Object.keys(thiseval).length === 0)return true;//数字,true,false,空数组,空对象 + return false; + }, + } var recursionParse = function(pfield,pcfield,pvobj,pcobj) { for(var ii in pvobj){ var field = pfield+"['"+ii+"']"; - var cfield = pcfield+"['"+ii+"']['_data']"; + var cfield = pcfield+"['_data']['"+ii+"']"; var vobj = pvobj[ii]; - var cobj = pcobj[ii]['_data']; - var isleaf = checkIsLeaf(vobj,cobj); - if (isleaf) { + var cobj = null; + if(pcobj && pcobj['_data'] && pcobj['_data'][ii]){ + cobj = Object.assign({},defaultcobj,pcobj['_data'][ii]); + } else { + if(pcobj && (pcobj['_data'] instanceof Function))cobj = Object.assign({},defaultcobj,pcobj['_data'](ii)); + else cobj = Object.assign({},defaultcobj); + } + var args = {field:field,cfield:cfield,vobj:vobj,cobj:cobj} + for(var key in cobj){ + if(key==='_data')continue; + if(cobj[key] instanceof Function)cobj[key]=cobj[key](args); + } + if (cobj._leaf) { var leafnode = editor_mode.objToTr_(obj,commentObj,field,cfield,vobj,cobj); outstr.push(leafnode[0]); guids.push(leafnode[1]); @@ -55,6 +80,93 @@ editor_mode.prototype.objToTable_ = function(obj,commentObj){ } } recursionParse("","",obj,commentObj); + var checkRange = function(evalstr,thiseval){ + if(evalstr){ + return eval(evalstr); + } + return true; + } + var listen = function(guids) { + guids.forEach(function(guid){ + // tr>td[title=field] + // >td[title=comment,cobj=cobj:json] + // >td>div>input[value=thiseval] + var thisTr = document.getElementById(guid); + var input = thisTr.children[2].children[0].children[0]; + var field = thisTr.children[0].getAttribute('title'); + var cobj = JSON.parse(thisTr.children[1].getAttribute('cobj')); + input.onchange = function(){ + var node = thisTr.parentNode; + while (!editor_mode._ids.hasOwnProperty(node.getAttribute('id'))) { + node = node.parentNode; + } + editor_mode.onmode(editor_mode._ids[node.getAttribute('id')]); + var thiseval=null; + if(input.checked!=null)input.value=input.checked; + try{ + thiseval = JSON.parse(input.value); + }catch(ee){ + printe(field+' : '+ee); + throw ee; + } + if(checkRange(cobj._range,thiseval)){ + editor_mode.addAction(['change',field,thiseval]); + } else { + printe(field+' : 输入的值不合要求,请鼠标放置在注释上查看说明'); + } + } + input.ondblclick = function(){ + if(cobj.type==='event')editor_blockly.import(guid,{type:cobj._event}); + if(cobj.type==='textarea')editor_multi.import(guid,{lint:cobj._lint}); + + } + }); + } + return {"HTML":outstr.join(''),"guids":guids,"listen":listen}; +} + +editor_mode.prototype.objToTr_ = function(obj,commentObj,field,cfield,vobj,cobj){ + var guid = editor.guid(); + var thiseval = vobj; + var comment = cobj._data; + + var charlength=10; + + var shortField = field.split("']").slice(-2)[0].split("['").slice(-1)[0]; + shortField = (shortField.length',shortField,'', + '',shortCommentHTMLescape,'', + '
',editor_mode.objToTd_(obj,commentObj,field,cfield,vobj,cobj),'
\n', + ]; + return [outstr.join(''),guid]; +} + +editor_mode.prototype.objToTd_ = function(obj,commentObj,field,cfield,vobj,cobj){ + var thiseval = vobj; + if(cobj._select){ + var values = cobj._select.values; + var outstr = [''); + return outstr.join(''); + } else if(cobj._input){ + return ["\n"].join(''); + } else if(cobj._bool){ + return ["\n"].join(''); + } else { + var num = 0;//editor_mode.indent(field); + return ["\n'].join(''); + } } editor_mode.prototype.objToTable = function(obj,commentObj){ @@ -149,8 +261,8 @@ editor_mode.prototype.objToTr = function(obj,commentObj,field){ var shortField = field.split("']").slice(-2)[0].split("['").slice(-1)[0]; shortField = (shortField.length',shortField,'', '',shortCommentHTMLescape,'',