Commit 7eb3b18276e82d92265b52d149b3abf86c6bcf45

Authored by ykxie
1 parent 76c2e18c

fix bug

src/ide.html
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 16
17 <script src="js/jquery-1.7.1.js"></script> 17 <script src="js/jquery-1.7.1.js"></script>
18 <script src="js/bootstrap.js"></script> 18 <script src="js/bootstrap.js"></script>
  19 + <script src="js/codemirror.js"></script>
19 <script type="text/javascript" src="js/zTree_v3-3.5.27/js/jquery.ztree.core.js"></script> 20 <script type="text/javascript" src="js/zTree_v3-3.5.27/js/jquery.ztree.core.js"></script>
20 <script src="js/gxb-ide.js"></script> 21 <script src="js/gxb-ide.js"></script>
21 22
@@ -26,29 +27,34 @@ @@ -26,29 +27,34 @@
26 </style> 27 </style>
27 <script> 28 <script>
28 $(function(){ 29 $(function(){
29 - var ide = new GxbIde(); 30 +
  31 + var ide = new GxbIde({
  32 + el: "#folder",
  33 + languageid: 10
  34 + });
30 console.log(ide); 35 console.log(ide);
31 36
32 - $.ajax({  
33 - type: "GET",  
34 - url: "js/tree.json",  
35 - dataType: "json",  
36 - contentType: "application/json",  
37 - success: function(res) {  
38 - console.log(res); 37 + // ide.RecordIde.Dir.init();
  38 + // $.ajax({
  39 + // type: "GET",
  40 + // url: "js/lang.json",
  41 + // dataType: "json",
  42 + // contentType: "application/json",
  43 + // success: function(res) {
  44 + // console.log(res);
39 45
40 - treeData = res.tree;  
41 - var folder = $("#folder");  
42 - ide.RecordIde.Dir.buildTree(folder, treeData); 46 + // treeData = res.lang.java;
  47 + // var folder = $("#folder");
  48 + // ide.RecordIde.Dir.buildTree(folder, treeData);
43 49
44 - // treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData); 50 + // // treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData);
45 51
46 - },  
47 - error: function(XMLHttpRequest, textStatus, errorThrown) {  
48 - console.log('Ajax tree.json error');  
49 - console.log(XMLHttpRequest);  
50 - }  
51 - }); 52 + // },
  53 + // error: function(XMLHttpRequest, textStatus, errorThrown) {
  54 + // console.log('Ajax lang.json error');
  55 + // console.log(XMLHttpRequest);
  56 + // }
  57 + // });
52 console.log(ide); 58 console.log(ide);
53 59
54 }) 60 })
src/js/gb.js
@@ -546,7 +546,7 @@ $(function() { @@ -546,7 +546,7 @@ $(function() {
546 treeData = playTreePathData.tree; 546 treeData = playTreePathData.tree;
547 treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData); 547 treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData);
548 548
549 - GBCodePlayBack.recordinit(treeData); 549 + GBCodePlayBack.recordinit();
550 550
551 $('#app').show(); 551 $('#app').show();
552 }else{ 552 }else{
@@ -587,7 +587,7 @@ $(function() { @@ -587,7 +587,7 @@ $(function() {
587 587
588 treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData); 588 treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData);
589 589
590 - GBCodePlayBack.recordinit(treeData); 590 + GBCodePlayBack.recordinit();
591 591
592 }, 592 },
593 error: function(XMLHttpRequest, textStatus, errorThrown) { 593 error: function(XMLHttpRequest, textStatus, errorThrown) {
@@ -2670,6 +2670,7 @@ $(function() { @@ -2670,6 +2670,7 @@ $(function() {
2670 if(!_datalist.length){ 2670 if(!_datalist.length){
2671 return false; 2671 return false;
2672 } 2672 }
  2673 +
2673 2674
2674 setHtmlButton(_languageid, 'JAVA'); 2675 setHtmlButton(_languageid, 'JAVA');
2675 2676
src/js/gxb-ide.js
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 ;(function(window){ 2 ;(function(window){
3 3
4 GxbIde = function(){ 4 GxbIde = function(){
5 - // this.init.apply(this, arguments); 5 + this.init.apply(this, arguments);
6 } 6 }
7 7
8 // 储存一个树结构和编辑器的对应关系 8 // 储存一个树结构和编辑器的对应关系
@@ -12,71 +12,378 @@ @@ -12,71 +12,378 @@
12 fileList, // 有值的文件数据结构 12 fileList, // 有值的文件数据结构
13 treeObj; // 获取ztree对象 13 treeObj; // 获取ztree对象
14 14
15 - var config = {  
16 - edit: {  
17 - enable: true  
18 - // editNameSelectAll: true 15 + var isReplayPage = false; // initJavaPage 判断输出
  16 +
  17 + var treeFoo = {
  18 + beforeClick: function (treeId, treeNode){
  19 + console.log('点击了 ' + treeNode.name);
  20 + console.log(treeNode);
  21 + // 判断是否点击了文件夹
  22 + if (treeNode.isParent) {
  23 + return false;
  24 + }
  25 + treeObj.expandNode(treeNode);
  26 +
  27 + // if (GBCodePlayBack.isRecordPlay == 1) {
  28 + // GBCodePlayBack.check_tree_time = new Date().getTime(); // 获取焦点的时间
  29 + // var recordobj = {
  30 + // intervaltime: GBCodePlayBack.check_tree_time - GBCodePlayBack.record_startime,
  31 + // editor: 'tab',
  32 + // changeobj: {
  33 + // from: {
  34 + // ch: 0,
  35 + // line: 0,
  36 + // },
  37 + // text: '',
  38 + // to: {
  39 + // ch: 0,
  40 + // line: 0,
  41 + // }
  42 + // },
  43 + // treefile: treeNode,
  44 + // trigger: 0,
  45 + // playTime: 0
  46 + // };
  47 + // GBCodePlayBack.records.push(recordobj);
  48 + // console.log(GBCodePlayBack.records);
  49 + // GBCodePlayBack.record_startime = GBCodePlayBack.check_tree_time;
  50 + // }
  51 +
  52 + // 处理显示目录树对应的编辑器目录
  53 + Dir.showEdite({'treeNode': treeNode});
19 }, 54 },
20 - view: {  
21 - addHoverDom: addHoverDom,  
22 - removeHoverDom: removeHoverDom,  
23 - selectedMulti: false,  
24 - showLine: false 55 + beforeDrag: function (treeId, treeNodes) {
  56 + return false;
25 }, 57 },
26 - data: {  
27 - simpleData: {  
28 - enable: true  
29 - } 58 + beforeEditName: function (treeId, treeNode) {
  59 + treeObj.selectNode(treeNode);
  60 + setTimeout(function() {
  61 + treeObj.editName(treeNode);
  62 + }, 0);
  63 + return false;
30 }, 64 },
31 - callback: {  
32 - beforeClick: beforeClick  
33 - }  
34 - }; 65 + renameAlert: function (str, treeNode){
  66 + setTimeout(function() {
  67 + treeObj.cancelEditName();
  68 + alert(str);
  69 + }, 0);
35 70
36 - function beforeClick(treeId, treeNodes) {  
37 - console.log('567890')  
38 - console.log('点击了 ' + treeNodes.name);  
39 - console.log('点击了 ' + treeNodes.isParent); 71 + // 这样写有bug 造成 编辑框死去焦点 获取焦点 死循环
  72 + // 优化体验再次进入编辑状态
  73 + // setTimeout(function() {
  74 + // treeObj.selectNode(treeNode);
  75 + // treeObj.editName(treeNode);
  76 + // }, 0);
  77 + },
  78 + beforeRename: function (treeId, treeNode, newName, isCancel) {
  79 + var _this = this;
  80 + // console.info('beforeRename');
  81 + if (newName.length == 0) {
  82 + treeFoo.renameAlert("文件名名称不能为空.", treeNode);
  83 + return false;
  84 + }else if(newName != treeNode.name){
  85 + for (var i = 0; i < treeLinkEditor.length; i++) {
  86 + // 判断是否重名
  87 + if(treeLinkEditor[i].file === newName){
  88 + treeFoo.renameAlert("文件名“" + newName + "”已被占用,请选取其他名称。", treeNode);
  89 + return false;
  90 + }else if(/.java$/.test(newName) && newName.split('.').length > 2){
  91 + treeFoo.renameAlert("文件名“" + newName + "”有误,请选取其他名称。", treeNode);
  92 + return false;
  93 + }else if(!newName.split('.')[0]){
  94 + treeFoo.renameAlert("文件名“" + newName + "”有误,请选取其他名称。", treeNode);
  95 + return false;
  96 + }else if(/[0-9]/.test(newName.substr(0,1))){
  97 + treeFoo.renameAlert("文件“" + newName + "”有误,首字母不能是数字,请选取其他名称。", treeNode);
  98 + return false;
  99 + }else if(!/.java$/.test(newName)){
  100 + treeFoo.renameAlert("文件后缀名“" + newName + "”有误,请选取其他名称。", treeNode);
  101 + return false;
  102 + }else{
  103 + // 更新 treeLinkEditor 存值
  104 + if(treeLinkEditor[i].file === treeNode.name){
  105 + var _temName = treeLinkEditor[i].name;
  106 + var _name = Dir.manageName(newName);
40 107
41 - } 108 + // 缓存值得更新
  109 + treeLinkEditor[i].name = _name;
  110 + treeLinkEditor[i].file = newName;
  111 + treeLinkEditor[i].filePath = Dir.getTreePath(treeNode.name, newName);
  112 + treeLinkEditor[i].record = _name + 'Record';
  113 + treeLinkEditor[i].replay = _name + 'Replay';
  114 + treeLinkEditor[i].CodeMirrorRecordId = treeLinkEditor[i].record + 'CodeMirror';
  115 + treeLinkEditor[i].CodeMirrorReplayId = treeLinkEditor[i].replay + 'CodeMirror';
42 116
43 - function addHoverDom(treeId, treeNodes) {  
44 - // console.info('addHoverDom');  
45 - // 修复第一个文件夹  
46 - if(treeNode.isParent){  
47 - $('a[title="'+ treeNode.name +'"]').find("#" + treeId + "_" + treeNode.id + "_edit").hide();  
48 - return false;  
49 - } 117 + mainPath = treeLinkEditor[i].filePath;
  118 + // 更新DOM相关
  119 + $('#'+ _temName +'RecordWrap').attr({
  120 + id: _name +'RecordWrap'
  121 + });
  122 + $('#'+ _temName + 'Record').attr({
  123 + id: _name + 'Record',
  124 + title: _name
  125 + });
  126 + $('#'+ _temName + 'RecordCodeMirror').attr({
  127 + id: _name + 'RecordCodeMirror'
  128 + });
  129 +
  130 + $('#'+ _temName +'ReplayWrap').attr({
  131 + id: _name +'ReplayWrap'
  132 + });
  133 + $('#'+ _temName + 'Replay').attr({
  134 + id: _name + 'Replay',
  135 + title: _name
  136 + });
  137 + $('#'+ _temName + 'ReplayCodeMirror').attr({
  138 + id: _name + 'ReplayCodeMirror'
  139 + });
  140 + // treeLinkEditor[i].CodeMirrorRecord.setValue(treeLinkEditor[i].CodeMirrorRecord.getValue() + '\n\n'+ _name);
  141 + }
  142 + }
  143 + }
  144 + }
  145 + return true;
  146 + },
  147 + onRename: function (e, treeId, treeNode, isCancel) {
  148 + console.info('onRename');
  149 + },
  150 + showRemoveBtn: function (treeId, treeNode) {
  151 + return !treeNode.isFirstNode;
  152 + },
  153 + showRenameBtn: function (treeId, treeNode) {
  154 + return !treeNode.isLastNode;
  155 + },
  156 + addHoverDom: function (treeId, treeNode) {
  157 + // console.info('addHoverDom');
  158 + // 修复第一个文件夹
  159 + if(treeNode.isParent){
  160 + $('a[title="'+ treeNode.name +'"]').find("#" + treeId + "_" + treeNode.id + "_edit").hide();
  161 + return false;
  162 + }
50 163
51 - // 不知道为什么 ztree 最后一项不显示编辑按钮  
52 - // 只能通过改变参数的值来让它显示编辑按钮  
53 - if(treeNode.isLastNode){  
54 - treeNode.isLastNode = false; 164 + // 不知道为什么 Dir 最后一项不显示编辑按钮
  165 + // 只能通过改变参数的值来让它显示编辑按钮
  166 + if(treeNode.isLastNode){
  167 + treeNode.isLastNode = false;
  168 + }
  169 + },
  170 + removeHoverDom: function (treeId, treeNode) {
  171 + // console.info('removeHoverDom');
  172 + if(!treeNode.isParent){
  173 + $("#folder_" + treeNode.tId + "_edit").unbind().remove();
  174 + }
55 } 175 }
56 } 176 }
57 177
58 - function removeHoverDom(treeId, treeNodes){  
59 -  
60 - } 178 + var config = {
  179 + view: {
  180 + addHoverDom: treeFoo.addHoverDom,
  181 + removeHoverDom: treeFoo.removeHoverDom,
  182 + selectedMulti: false,
  183 + showLine: false
  184 + }
  185 + ,edit: {
  186 + enable: true,
  187 + editNameSelectAll: true,
  188 + showRemoveBtn: false,
  189 + showRenameBtn: treeFoo.showRenameBtn
  190 + }
  191 + ,data: {
  192 + simpleData: { enable: true }
  193 + }
  194 + ,callback: {
  195 + /**
  196 + * ztree 每一项点击事件
  197 + * @Author syantao
  198 + * Created by Keystion on 2017-01-19
  199 + */
  200 + beforeClick: treeFoo.beforeClick,
  201 + beforeDrag: treeFoo.beforeDrag,
  202 + beforeEditName: treeFoo.beforeEditName,
  203 + beforeRename: treeFoo.beforeRename,
  204 + onRename: treeFoo.onRename
  205 + }
  206 + };
  207 +
61 208
62 // 初始化目录:增、删、改文件,文件夹目录结构 209 // 初始化目录:增、删、改文件,文件夹目录结构
63 var Dir = { 210 var Dir = {
64 treeData: {}, 211 treeData: {},
65 init: function(){ 212 init: function(){
66 - console.log('Dir'); 213 + },
  214 + defaultTree: function(el, lang){
  215 + var _this = this;
  216 + var _el = $(el);
  217 + var _lang = lang;
  218 +
  219 + $.ajax({
  220 + type: "GET",
  221 + url: "js/lang.json",
  222 + dataType: "json",
  223 + contentType: "application/json",
  224 + success: function(res) {
  225 + console.log(res);
  226 +
  227 + treeData = res.langs[_lang];
  228 +
  229 + console.log(treeData);
  230 +
  231 + _this.buildTree(_el, treeData);
  232 + initJavaPage(treeData)
  233 + // initJavaPage(treeData)
  234 +
  235 +
  236 + },
  237 + error: function(XMLHttpRequest, textStatus, errorThrown) {
  238 + console.log('Ajax langs.json error');
  239 + console.log(XMLHttpRequest);
  240 + }
  241 + });
67 }, 242 },
68 buildTree: function(select, treeData){ 243 buildTree: function(select, treeData){
69 - $.fn.zTree.init(select, config, treeData); 244 + // var treeData = treeData
  245 + // $.fn.zTree.init(select, config, treeData);
  246 + treeObj = $.fn.zTree.init(select, config, treeData);
70 }, 247 },
71 - getTreeData: function(){ 248 + /**
  249 + * 通过目录树的点击来显示对应的编辑器
  250 + * @Author syantao
  251 + * Created by Keystion on 2017-01-19
  252 + * @param {[type]} treeNode 点击了哪一个目录
  253 + * TODO treeNode放到一个变量或者隐藏域里面
  254 + */
  255 + showEdite: function (obj){
  256 + // console.info('ZTREE.showEdite');
  257 + // console.log(obj);
  258 + var _this = this,
  259 + _file,
  260 + _CodeMirrorRecordId,
  261 + _CodeMirrorReplayId,
  262 + _num = 0;
  263 +
  264 + console.log('---------------------------------------')
  265 + console.log(obj)
  266 + console.log('---------------------------------------')
  267 + // 判断是否是初始化选时候调用 showEdite
  268 + if(obj){
  269 + for (var i = 0; i < treeLinkEditor.length; i++) {
  270 + if(treeLinkEditor[i].name == _this.manageName(obj.treeNode.name)){
  271 + _num = i;
  272 + }
  273 + }
  274 + if(typeof obj.record != 'undefined' && obj.record){
  275 + $('#recordertab a:eq(0)').tab('show');
  276 + }else if(typeof obj.replay != 'undefined'&& obj.replay){
  277 + $('#recordertab a:eq(1)').tab('show');
  278 + }
  279 + }
  280 +
  281 + _file = treeLinkEditor[_num].file;
  282 + _CodeMirrorRecordId = treeLinkEditor[_num].CodeMirrorRecordId;
  283 + _CodeMirrorReplayId = treeLinkEditor[_num].CodeMirrorReplayId;
  284 + mainPath = treeLinkEditor[_num].filePath; // 更新mainPath值
  285 +
  286 + // 显示代码编辑器
  287 + $('#' + _CodeMirrorRecordId).show().parent().show().siblings().hide().find('.CodeMirror').hide();
  288 + $('#' + _CodeMirrorReplayId).show().parent().show().siblings().hide().find('.CodeMirror').hide();
72 289
  290 + // console.log('当前选中文件(mainPath):'+ mainPath);
  291 + // console.log('当前显示代码编辑器:'+ '#' + _CodeMirrorReplayId);
  292 +
  293 + // 更新目录树选中状态
  294 + _this.selectTreeItem(_file);
  295 + },
  296 + /**
  297 + * 根据id获取当前编辑器对应的目录树文件
  298 + * @Author syantao
  299 + * Created by Keystion on 2017-01-19
  300 + * @param {[type]} id 代码编辑器的id
  301 + */
  302 + getCurrentEditor: function (id){
  303 + // console.info('ZTREE.getCurrentEditor');
  304 + var _id = id || treeLinkEditor[0].CodeMirrorRecordId,
  305 + _name;
  306 +
  307 + for (var i = 0; i < treeLinkEditor.length; i++) {
  308 + if(treeLinkEditor[i].CodeMirrorRecordId == _id){
  309 + // console.log(treeLinkEditor[i]);
  310 + _name = treeLinkEditor[i].name;
  311 + }
  312 + }
  313 +
  314 + return _name;
  315 + },
  316 + /**
  317 + * 返回目录结构路径
  318 + * @Author syantao
  319 + * Created by Keystion on 2017-01-19
  320 + * @param {[type]} treeNode 点击了哪一个目录
  321 + * TODO treeNode放到一个变量或者隐藏域里面
  322 + */
  323 + // 根据提供的 name 获取 pId , 再根据 pId 获取 夫级 name
  324 + // newName 替换 name 更名需求
  325 + getTreePath: function (name, newName){
  326 +
  327 + var _pid, _folder, _filename;
  328 + for (var i = 0; i < treeData.length; i++) {
  329 + if(treeData[i].name == name){
  330 + _pid = treeData[i].pId;
  331 + if(newName){
  332 + _filename = newName;
  333 + }else{
  334 + _filename = treeData[i].name;
  335 + }
  336 + }
  337 + }
  338 + for (var i = 0; i < treeData.length; i++) {
  339 + if(treeData[i].id == _pid){
  340 + _folder = treeData[i].name;
  341 + }
  342 + }
  343 + return _folder + '/' + _filename;
  344 + },
  345 + /**
  346 + * 处理name
  347 + * @Author syantao
  348 + * Created by Keystion on 2017-01-23
  349 + * @param {[type]} name Class1.java
  350 + * @return {[type]} Class1
  351 + */
  352 + manageName: function (name){
  353 + // console.info('ZTREE.manageName');
  354 + if(!name){
  355 + return false;
  356 + }
  357 + return name.split('.')[0];
  358 + },
  359 + /**
  360 + * 通过文件名选中对应的目录
  361 + * @Author syantao
  362 + * Created by Keystion on 2017-01-23
  363 + * @param {[type]} name 例:Class1.java
  364 + */
  365 + selectTreeItem: function (name){
  366 + // console.info('ZTREE.selectTreeItem');
  367 + var _thisName = name || treeData[1].name;
  368 + // 处理菜单选中状态
  369 + var node = treeObj.getNodeByParam("name", _thisName, null);
  370 +
  371 + treeObj.selectNode(node, false, true);
73 } 372 }
74 } 373 }
75 374
  375 +
  376 +
  377 +
76 // 记录编写代码过程:输入代码、记录存放代码 378 // 记录编写代码过程:输入代码、记录存放代码
77 - var Coding = { 379 + var CodingEditer = {
  380 + recording_status: 1, //当前是否在录制
78 init: function(){ 381 init: function(){
79 - console.log('Coding'); 382 + console.log('CodingEditer');
  383 + },
  384 + onChange: function(editor, changeobj){
  385 + console.log(editor);
  386 + console.log(changeobj);
80 } 387 }
81 } 388 }
82 389
@@ -104,15 +411,115 @@ @@ -104,15 +411,115 @@
104 411
105 GxbIde.ide = GxbIde.prototype = { 412 GxbIde.ide = GxbIde.prototype = {
106 constructor: GxbIde, 413 constructor: GxbIde,
107 - init: function(){  
108 - this.Coding.init() 414 + options: {
  415 + el: "#dir",
  416 + languageid: null
  417 + },
  418 + init: function(options){
  419 + var _this = this;
  420 + _this.options = $.extend(_this.options, options);
  421 + _el = _this.options.el;
  422 + _lang = _this.options.lang;
  423 +
  424 + console.log(_el);
  425 +
  426 + Dir.defaultTree(_el, _lang);
109 } 427 }
110 } 428 }
111 429
112 - // 老师录制编辑  
113 - GxbIde.ide.RecordIde = $.extend({ Coding, Dir, ToolBox, Theme, Record })  
114 430
  431 + function initJavaPage(treeData){
  432 + console.info('initJavaPage');
  433 +
  434 + var _datalist = treeData || [];
  435 + var recordTemplate = '';
  436 + var replayTemplate = '';
  437 + var obj = []
  438 + if(!_datalist.length){
  439 + return false;
  440 + }
  441 +
  442 + // setHtmlButton(_languageid, 'JAVA');
  443 +
  444 + // 生成 textarea
  445 + for (var i = 0; i < _datalist.length; i++) {
  446 + if(!_datalist[i].isParent){
  447 + var _file = _datalist[i].name;
  448 + var _name = Dir.manageName(_file);
  449 + var defaultValue;
  450 + defaultValue = 'package '+ Dir.getTreePath(_file).split('/')[0] +';\n';
  451 + treeLinkEditor.push({
  452 + "name": _name,
  453 + "file": _file,
  454 + "filePath": Dir.getTreePath(_file),
  455 + "record": _name + 'Record',
  456 + "replay": _name + 'Replay'
  457 + });
  458 + // 判断是否是播放页面,如果是则不显示录制区相关dom
  459 + if(!isReplayPage){
  460 + recordTemplate += '<div id="'+ _name +'RecordWrap"><textarea id="'+ _name + 'Record" title="'+ _name +'" style="display: none;">'+defaultValue+'</textarea></div>'
  461 + }
  462 +
  463 + replayTemplate += '<div id="'+ _name +'ReplayWrap"><textarea id="'+ _name + 'Replay" title="'+ _name +'" style="display: none;"></textarea></div>'
  464 + }
  465 + }
  466 + // 判断是否是播放页面,如果是则不显示录制区相关dom
  467 + if(!isReplayPage){
  468 + $('#recordzone').append(recordTemplate);
  469 + }
  470 + $('#replayzone').append(replayTemplate);
  471 +
  472 + // 生成 CodeMirror
  473 + for (var i = 0; i < treeLinkEditor.length; i++) {
  474 + // 判断是否是播放页面,如果是则不显示录制区相关dom
  475 + if(!isReplayPage){
  476 + treeLinkEditor[i].CodeMirrorRecord = CodeMirror.fromTextArea($('#' + treeLinkEditor[i].record)[0], {
  477 + value: 'heoolo',
  478 + mode: "text/x-java",
  479 + lineNumbers: true,
  480 + smartIndent: false,
  481 + onChange: function(em, changeobj) {
  482 + if (CodingEditer.recording_status) {
  483 + CodingEditer.onChange(Dir.getCurrentEditor(em.getWrapperElement().getAttribute('id')), changeobj);
  484 + }
  485 + },
  486 + onFocus: function(em) {
  487 + },
  488 + onCursorActivity: function(em) {
  489 + }
  490 + });
  491 + treeLinkEditor[i].CodeMirrorRecordId = treeLinkEditor[i].record + 'CodeMirror';
  492 + $('#' + treeLinkEditor[i].record).next().attr('id', treeLinkEditor[i].CodeMirrorRecordId).hide();
  493 + }
  494 +
  495 + treeLinkEditor[i].CodeMirrorReplay = CodeMirror.fromTextArea($('#' + treeLinkEditor[i].replay)[0], {
  496 + value: '',
  497 + mode: "text/x-java",
  498 + lineNumbers: true,
  499 + smartIndent: false,
  500 + onChange: function(em, changeobj) {
  501 + },
  502 + onFocus: function(em) {
  503 + },
  504 + onCursorActivity: function(em) {
  505 + }
  506 + });
  507 + treeLinkEditor[i].CodeMirrorReplayId = treeLinkEditor[i].replay + 'CodeMirror';
  508 + $('#' + treeLinkEditor[i].replay).next().attr('id', treeLinkEditor[i].CodeMirrorReplayId).hide();
  509 + }
  510 +
  511 + // 默认显示第一个文件夹的第一个文件
  512 + Dir.showEdite();
  513 + }
  514 +
  515 +
  516 + // 老师录制编辑
  517 + GxbIde.ide.RecordIde = $.extend({ Dir, CodingEditer, ToolBox, Theme, Record })
115 518
116 window.GxbIde = GxbIde; 519 window.GxbIde = GxbIde;
117 520
118 -})(window)  
119 \ No newline at end of file 521 \ No newline at end of file
  522 +})(window)
  523 +
  524 +
  525 +
  526 +
src/js/lang.json 0 → 100644
  1 +{
  2 + "langs": {
  3 + "java": [
  4 + { "id": 1, "pId": 0, "name": "package1", "open": true, "isParent": true, "collapse": false },
  5 + { "id": 11, "pId": 1, "name": "default1.java", "type": "java" },
  6 + { "id": 12, "pId": 1, "name": "default2.java", "type": "java" },
  7 + { "id": 13, "pId": 1, "name": "default3.java", "type": "java" },
  8 + { "id": 14, "pId": 1, "name": "default4.java", "type": "java" },
  9 + { "id": 15, "pId": 1, "name": "default5.java", "type": "java" },
  10 + { "id": 2, "pId": 0, "name": "package2", "open": true, "isParent": true, "expand": true },
  11 + { "id": 21, "pId": 2, "name": "defaultA.java", "type": "java" },
  12 + { "id": 22, "pId": 2, "name": "defaultB.java", "type": "java" },
  13 + { "id": 23, "pId": 2, "name": "defaultC.java", "type": "java" },
  14 + { "id": 24, "pId": 2, "name": "defaultD.java", "type": "java" },
  15 + { "id": 25, "pId": 2, "name": "defaultE.java", "type": "java" }
  16 + ],
  17 + "html": [
  18 + { "id": 1, "pId": 0, "name": "folder1", "open": true, "isParent": true, "collapse": false },
  19 + { "id": 11, "pId": 1, "name": "default1.html", "type": "html" },
  20 + { "id": 12, "pId": 1, "name": "default2.html", "type": "html" },
  21 + { "id": 13, "pId": 1, "name": "default3.html", "type": "html" },
  22 + { "id": 14, "pId": 1, "name": "default4.html", "type": "html" },
  23 + { "id": 15, "pId": 1, "name": "default5.html", "type": "html" },
  24 + { "id": 2, "pId": 0, "name": "folder2", "open": true, "isParent": true, "expand": true },
  25 + { "id": 21, "pId": 2, "name": "defaultA.html", "type": "html" },
  26 + { "id": 22, "pId": 2, "name": "defaultB.html", "type": "html" },
  27 + { "id": 23, "pId": 2, "name": "defaultC.html", "type": "html" },
  28 + { "id": 24, "pId": 2, "name": "defaultD.html", "type": "html" },
  29 + { "id": 25, "pId": 2, "name": "defaultE.html", "type": "html" }
  30 + ]
  31 + }
  32 +}
0 \ No newline at end of file 33 \ No newline at end of file
src/js/treeLinkEditor.json
@@ -8,4 +8,4 @@ @@ -8,4 +8,4 @@
8 "CodeMirrorReplay": {}, 8 "CodeMirrorReplay": {},
9 "CodeMirrorRecordId": "Class1RecordCodeMirror", 9 "CodeMirrorRecordId": "Class1RecordCodeMirror",
10 "CodeMirrorReplayId": "Class1ReplayCodeMirror" 10 "CodeMirrorReplayId": "Class1ReplayCodeMirror"
11 -}]  
12 \ No newline at end of file 11 \ No newline at end of file
  12 +}]