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,' | ',