Commit 6e5f7a7d535d80dd26e454942920fe609aaac7f4

Authored by 商艳涛
1 parent 34312ede

保存录制数据

src/index.html
@@ -43,6 +43,9 @@ @@ -43,6 +43,9 @@
43 <script src="js/jshint-2.6.min.js"></script> 43 <script src="js/jshint-2.6.min.js"></script>
44 <script src="js/jstorage.js"></script> 44 <script src="js/jstorage.js"></script>
45 45
  46 + <script src="js/05-util.js"></script>
  47 + <script src="js/03-http.js"></script>
  48 +
46 <script src="js/jquery.validationEngine.js"></script> 49 <script src="js/jquery.validationEngine.js"></script>
47 <script src="js/jquery.validationEngine-zh.js"></script> 50 <script src="js/jquery.validationEngine-zh.js"></script>
48 <script src="js/jquery.isotope.js"></script> 51 <script src="js/jquery.isotope.js"></script>
@@ -160,9 +163,9 @@ @@ -160,9 +163,9 @@
160 <audio id="audio" autoplay></audio> 163 <audio id="audio" autoplay></audio>
161 </div> 164 </div>
162 <div class="save-wrap"> 165 <div class="save-wrap">
163 - <input type="button" id="upload" class="upload-teach" disabled="disabled" value="保存">  
164 - <input type="button" id="savecorde" class="upload-stud" style="display: none;" disabled="disabled" value="保存">  
165 - <input type="button" id="cancel" value="关闭"> 166 + <input type="button" id="upload" class="upload-teach" disabled="disabled" value="保存 - upload">
  167 + <input type="button" id="savecorde" class="upload-stud" style="display: none;" disabled="disabled" value="保存 - savecorde">
  168 + <input type="button" id="cancel" value="关闭 - cancel">
166 </div> 169 </div>
167 </div> 170 </div>
168 </div> 171 </div>
@@ -213,7 +216,8 @@ @@ -213,7 +216,8 @@
213 216
214 // 结束播放事件 217 // 结束播放事件
215 audio.addEventListener("ended", function() { 218 audio.addEventListener("ended", function() {
216 - console.log('结束播放事件'); 219 + console.info('audio.addEventListener("ended"');
  220 + console.log('audio 播放结束');
217 Hourglass.stopTimer(); 221 Hourglass.stopTimer();
218 $('.audio-play').attr('data', '1') 222 $('.audio-play').attr('data', '1')
219 $('.audio-play').prop('disabled', false); 223 $('.audio-play').prop('disabled', false);
@@ -224,8 +228,9 @@ @@ -224,8 +228,9 @@
224 }) 228 })
225 229
226 function uploadAudio(ob) { 230 function uploadAudio(ob) {
227 - $('.upload-tip').show();  
228 - recorder.upload(); 231 + // $('.upload-tip').show();
  232 + // recorder.upload();
  233 + $('#savecorde').trigger('click');
229 } 234 }
230 </script> 235 </script>
231 </body> 236 </body>
src/js/gb.js
@@ -40,6 +40,9 @@ $(function() { @@ -40,6 +40,9 @@ $(function() {
40 * Created by Keystion on 2017-01-19 40 * Created by Keystion on 2017-01-19
41 */ 41 */
42 beforeClick: function(treeId, treeNode){ 42 beforeClick: function(treeId, treeNode){
  43 + console.info('ZTREE.config.callback.beforeClick');
  44 + console.log('点击了 ' + treeNode.name);
  45 + console.log(treeNode);
43 // 判断是否点击了文件夹 46 // 判断是否点击了文件夹
44 if (treeNode.isParent) { 47 if (treeNode.isParent) {
45 return false; 48 return false;
@@ -47,11 +50,8 @@ $(function() { @@ -47,11 +50,8 @@ $(function() {
47 treeObj = $.fn.zTree.getZTreeObj("folder"); 50 treeObj = $.fn.zTree.getZTreeObj("folder");
48 treeObj.expandNode(treeNode); 51 treeObj.expandNode(treeNode);
49 52
50 - console.info('点击了 ' + treeNode.name);  
51 - console.info(treeNode);  
52 -  
53 // 处理显示目录树对应的编辑器目录 53 // 处理显示目录树对应的编辑器目录
54 - ZTREE.showEdite(treeNode); 54 + ZTREE.showEdite({'treeNode': treeNode});
55 } 55 }
56 } 56 }
57 }, 57 },
@@ -62,35 +62,42 @@ $(function() { @@ -62,35 +62,42 @@ $(function() {
62 * @param {[type]} treeNode 点击了哪一个目录 62 * @param {[type]} treeNode 点击了哪一个目录
63 * TODO treeNode放到一个变量或者隐藏域里面 63 * TODO treeNode放到一个变量或者隐藏域里面
64 */ 64 */
65 - showEdite: function (treeNode){ 65 + showEdite: function (obj){
  66 + console.info('ZTREE.showEdite');
  67 + console.log(obj);
66 var _this = this, 68 var _this = this,
67 _file, 69 _file,
68 _CodeMirrorRecordId, 70 _CodeMirrorRecordId,
69 _CodeMirrorReplayId, 71 _CodeMirrorReplayId,
70 _num = 0; 72 _num = 0;
71 // 判断是否是初始化选时候调用 showEdite 73 // 判断是否是初始化选时候调用 showEdite
72 - if(treeNode){ 74 + if(obj){
73 for (var i = 0; i < treeLinkEditor.length; i++) { 75 for (var i = 0; i < treeLinkEditor.length; i++) {
74 - if(treeLinkEditor[i].name == _this.manageName(treeNode.name)){ 76 + if(treeLinkEditor[i].name == _this.manageName(obj.treeNode.name)){
75 _num = i; 77 _num = i;
76 } 78 }
77 } 79 }
  80 + if(typeof obj.record != 'undefined' && obj.record){
  81 + $('#recordertab a:eq(0)').tab('show');
  82 + }else if(typeof obj.replay != 'undefined'&& obj.replay){
  83 + $('#recordertab a:eq(1)').tab('show');
  84 + }
78 } 85 }
79 86
80 _file = treeLinkEditor[_num].file; 87 _file = treeLinkEditor[_num].file;
81 _CodeMirrorRecordId = treeLinkEditor[_num].CodeMirrorRecordId; 88 _CodeMirrorRecordId = treeLinkEditor[_num].CodeMirrorRecordId;
82 _CodeMirrorReplayId = treeLinkEditor[_num].CodeMirrorReplayId; 89 _CodeMirrorReplayId = treeLinkEditor[_num].CodeMirrorReplayId;
83 mainPath = treeLinkEditor[_num].filePath; // 更新mainPath值 90 mainPath = treeLinkEditor[_num].filePath; // 更新mainPath值
84 -  
85 - // 更新目录树选中状态  
86 - _this.selectTreeItem(_file);  
87 91
88 // 显示代码编辑器 92 // 显示代码编辑器
89 $('#' + _CodeMirrorRecordId).show().parent().show().siblings().hide().find('.CodeMirror').hide(); 93 $('#' + _CodeMirrorRecordId).show().parent().show().siblings().hide().find('.CodeMirror').hide();
90 $('#' + _CodeMirrorReplayId).show().parent().show().siblings().hide().find('.CodeMirror').hide(); 94 $('#' + _CodeMirrorReplayId).show().parent().show().siblings().hide().find('.CodeMirror').hide();
  95 +
  96 + console.log('当前选中文件(mainPath):'+ mainPath);
  97 + console.log('当前显示代码编辑器:'+ '#' + _CodeMirrorReplayId);
91 98
92 - console.info('当前选中文件(mainPath):'+ mainPath);  
93 - console.info('当前显示代码编辑器:'+ '#' + _CodeMirrorReplayId); 99 + // 更新目录树选中状态
  100 + _this.selectTreeItem(_file);
94 }, 101 },
95 /** 102 /**
96 * 返回目录结构路径 103 * 返回目录结构路径
@@ -101,6 +108,7 @@ $(function() { @@ -101,6 +108,7 @@ $(function() {
101 */ 108 */
102 // 根据提供的 name 获取 pId , 再根据 pId 获取 夫级 name 109 // 根据提供的 name 获取 pId , 再根据 pId 获取 夫级 name
103 getTreePath: function (name){ 110 getTreePath: function (name){
  111 + console.info('ZTREE.getTreePath');
104 var _pid, _folder, _filename; 112 var _pid, _folder, _filename;
105 for (var i = 0; i < treeData.length; i++) { 113 for (var i = 0; i < treeData.length; i++) {
106 if(treeData[i].name == name){ 114 if(treeData[i].name == name){
@@ -123,6 +131,7 @@ $(function() { @@ -123,6 +131,7 @@ $(function() {
123 * @return {[type]} Class1 131 * @return {[type]} Class1
124 */ 132 */
125 ,manageName: function (name){ 133 ,manageName: function (name){
  134 + console.info('ZTREE.manageName');
126 if(!name){ 135 if(!name){
127 return false; 136 return false;
128 } 137 }
@@ -135,6 +144,7 @@ $(function() { @@ -135,6 +144,7 @@ $(function() {
135 * @param {[type]} id 代码编辑器的id 144 * @param {[type]} id 代码编辑器的id
136 */ 145 */
137 ,getCurrentEditor: function (id){ 146 ,getCurrentEditor: function (id){
  147 + console.info('ZTREE.getCurrentEditor');
138 var _id = id || treeLinkEditor[0].CodeMirrorRecordId, 148 var _id = id || treeLinkEditor[0].CodeMirrorRecordId,
139 _name; 149 _name;
140 150
@@ -155,6 +165,7 @@ $(function() { @@ -155,6 +165,7 @@ $(function() {
155 * @return {[type]} Array/false false 每一个编辑器均无值 165 * @return {[type]} Array/false false 每一个编辑器均无值
156 */ 166 */
157 ,getTreeData: function(name){ 167 ,getTreeData: function(name){
  168 + console.info('ZTREE.getTreeData');
158 var _arr = []; 169 var _arr = [];
159 // 判断是否是需要返回单文件结果 170 // 判断是否是需要返回单文件结果
160 if(name){ 171 if(name){
@@ -191,6 +202,7 @@ $(function() { @@ -191,6 +202,7 @@ $(function() {
191 * @param {[type]} name 例:Class1.java 202 * @param {[type]} name 例:Class1.java
192 */ 203 */
193 ,selectTreeItem: function (name){ 204 ,selectTreeItem: function (name){
  205 + console.info('ZTREE.selectTreeItem');
194 var _thisName = name || treeData[1].name; 206 var _thisName = name || treeData[1].name;
195 // 处理菜单选中状态 207 // 处理菜单选中状态
196 var node = treeObj.getNodeByParam("name", _thisName, null); 208 var node = treeObj.getNodeByParam("name", _thisName, null);
@@ -203,7 +215,7 @@ $(function() { @@ -203,7 +215,7 @@ $(function() {
203 event.preventDefault(); 215 event.preventDefault();
204 /* Act on the event */ 216 /* Act on the event */
205 217
206 - ZTREE.resetCodeMirrorValue(); 218 + GBCodePlayBack.resetCodeMirrorValue();
207 219
208 }); 220 });
209 221
@@ -238,6 +250,7 @@ $(function() { @@ -238,6 +250,7 @@ $(function() {
238 isPause: 1, // 是否暂停 1:不暂停,0:暂停 250 isPause: 1, // 是否暂停 1:不暂停,0:暂停
239 isRcording: 0, // 是否录制 1:录制中,0:暂停中 251 isRcording: 0, // 是否录制 1:录制中,0:暂停中
240 recordinit: function(codereplaytype, preload) { 252 recordinit: function(codereplaytype, preload) {
  253 + console.info('GBCodePlayBack.recordinit');
241 /* #STRAT:生成CodeMirror Editor for JS/CSS/HTML */ 254 /* #STRAT:生成CodeMirror Editor for JS/CSS/HTML */
242 if (codereplaytype) { 255 if (codereplaytype) {
243 GBCodePlayBack.isgblibreplay = 1; // 标记GB课程库代码回放 , 1为课程库回放,否则是一般代码回放 256 GBCodePlayBack.isgblibreplay = 1; // 标记GB课程库代码回放 , 1为课程库回放,否则是一般代码回放
@@ -639,6 +652,9 @@ $(function() { @@ -639,6 +652,9 @@ $(function() {
639 652
640 /* #STRAT: 播放和暂停控制元素 */ 653 /* #STRAT: 播放和暂停控制元素 */
641 $('#play').unbind('click').click(function() { 654 $('#play').unbind('click').click(function() {
  655 + console.info('$(\'#play\').unbind(\'click\')');
  656 + console.log('开始播放')
  657 +
642 var myAudio = $('#play_audio'); 658 var myAudio = $('#play_audio');
643 659
644 //禁用修改 660 //禁用修改
@@ -659,6 +675,15 @@ $(function() { @@ -659,6 +675,15 @@ $(function() {
659 } 675 }
660 } 676 }
661 if (!playstatus) { 677 if (!playstatus) {
  678 + console.log('if (!playstatus) {');
  679 + // TOTO
  680 + // GBCodePlayBack.resetCodeMirrorValue();
  681 + // 会触发编辑器的onChange事件导致 GBCodePlayBack.records 数组会添加一个空记录
  682 + // 播放之前删除
  683 + console.log(GBCodePlayBack.records);
  684 + GBCodePlayBack.records.pop();
  685 + console.log(GBCodePlayBack.records);
  686 +
662 var playbackrecord = GBCodePlayBack.records, 687 var playbackrecord = GBCodePlayBack.records,
663 currenteditor = ''; 688 currenteditor = '';
664 var starttime = playbackrecord[0].intervaltime; 689 var starttime = playbackrecord[0].intervaltime;
@@ -726,15 +751,15 @@ $(function() { @@ -726,15 +751,15 @@ $(function() {
726 751
727 // 播放录制代码过程 752 // 播放录制代码过程
728 $('.audio-play').unbind('click').click(function() { 753 $('.audio-play').unbind('click').click(function() {
  754 + alert(1)
729 var resultData = { 755 var resultData = {
730 output: '', 756 output: '',
731 stderr: '', 757 stderr: '',
732 cmpinfo: '', 758 cmpinfo: '',
733 result: 1 759 result: 1
734 } 760 }
735 - GBCodePlayBack.htmlplayereditor.setValue(''); 761 + GBCodePlayBack.resetCodeMirrorValue();
736 compileResult(resultData); 762 compileResult(resultData);
737 -  
738 var data = $(this).attr('data'); 763 var data = $(this).attr('data');
739 if (_role == 0) { 764 if (_role == 0) {
740 $('.audio-play').attr('disabled', true); 765 $('.audio-play').attr('disabled', true);
@@ -1042,6 +1067,8 @@ $(function() { @@ -1042,6 +1067,8 @@ $(function() {
1042 }) 1067 })
1043 // 保存代码 1068 // 保存代码
1044 $('#savecorde').unbind('click').click(function() { 1069 $('#savecorde').unbind('click').click(function() {
  1070 + console.info('$(\'#savecorde\').unbind(\'click\')');
  1071 +
1045 $('#savemsg').addClass('hidden'); 1072 $('#savemsg').addClass('hidden');
1046 $('.upload-tip').show(); 1073 $('.upload-tip').show();
1047 1074
@@ -1056,7 +1083,13 @@ $(function() { @@ -1056,7 +1083,13 @@ $(function() {
1056 pickup = 0; 1083 pickup = 0;
1057 1084
1058 1085
1059 - var replaydto = { 'replaytitle': replaytitle, 'replaydesc': replaydesc, 'pickup': pickup, 'languageid': languageid, 'saveformat': saveformat }; 1086 + var replaydto = {
  1087 + 'replaytitle': replaytitle,
  1088 + 'replaydesc': replaydesc,
  1089 + 'pickup': pickup,
  1090 + 'languageid': languageid,
  1091 + 'saveformat': saveformat
  1092 + };
1060 1093
1061 var uploadeddemoimg = $('#previewcoverimg').data('demoimg'); 1094 var uploadeddemoimg = $('#previewcoverimg').data('demoimg');
1062 1095
@@ -1084,86 +1117,130 @@ $(function() { @@ -1084,86 +1117,130 @@ $(function() {
1084 eventtagid = $('#eventtagid').data('tagid'); 1117 eventtagid = $('#eventtagid').data('tagid');
1085 } 1118 }
1086 1119
1087 - replaydto.html = GBCodePlayBack.htmleditor.getValue();  
1088 - replaydto.css = GBCodePlayBack.csseditor.getValue();  
1089 - replaydto.javascript = GBCodePlayBack.jseditor.getValue();  
1090 - replaydto.audioUrl = $('.audio-url').val();  
1091 - replaydto.deleteFlag = 1  
1092 -  
1093 - //保存序列化录制内容  
1094 - var recorddatas = []; 1120 + // 单个文件路径及内容 数组
  1121 + var programmingFileList = ZTREE.getTreeData();
1095 for (var i = 0; i < GBCodePlayBack.records.length; i++) { 1122 for (var i = 0; i < GBCodePlayBack.records.length; i++) {
1096 - var recorddata = {  
1097 - intervaltime: GBCodePlayBack.records[i].intervaltime,  
1098 - editor: GBCodePlayBack.records[i].editor,  
1099 - changeobj: JSON.stringify(GBCodePlayBack.records[i].changeobj),  
1100 - cmpinfo: GBCodePlayBack.records[i].cmpinfo,  
1101 - output: GBCodePlayBack.records[i].output,  
1102 - result: GBCodePlayBack.records[i].result,  
1103 - stderr: GBCodePlayBack.records[i].stderr  
1104 - }  
1105 -  
1106 - recorddatas.push(recorddata);  
1107 - } 1123 + GBCodePlayBack.records[i].changeobj = JSON.stringify(GBCodePlayBack.records[i].changeobj)
  1124 + }
  1125 + var postData = {
  1126 + "mainPath": mainPath,
  1127 + "mainArgus": "lixxx",
  1128 + "runtimeArgus": $('#runtimeArgus').val(),
  1129 + "pickup": pickup,
  1130 + "userId": _userId,
  1131 + "replaytitle": replaytitle,
  1132 + "languageid": languageid,
  1133 + "replaydesc": replaydesc,
  1134 + "image": uploadeddemoimg,
  1135 + "deleteFlag": 1,
  1136 + "viewcount": "0",
  1137 + "saveformat": saveformat,
  1138 + "audioUrl": "/uploads/programming_audio/link/17/01/24/38029c9698e144d2bd590b35eb6af56e",
  1139 + "programmingFileList": programmingFileList,
  1140 + "codeRecordMultiList": GBCodePlayBack.records
  1141 + }
  1142 +
  1143 + console.log('============');
  1144 + console.log(postData);
1108 1145
1109 - //回放入库  
1110 - recorddatas.deleteFlag = 1 1146 + $.ajax({
  1147 + type: "post",
  1148 + url: "http://192.168.80.140:8080/gxb-web/programmingMulti/api",
  1149 + data: JSON.stringify(postData),
  1150 + dataType: "json",
  1151 + contentType: "application/json",
  1152 + success: function(data) {
  1153 + console.log(data);
  1154 + $('.upload-tip').hide();
  1155 + },
  1156 + error: function() {
  1157 + $('.upload-tip').hide();
  1158 + alert('代码保存失败重新保存')
  1159 + }
  1160 + });
1111 1161
1112 - var keepTimer = $('.recording-time').val()  
1113 - replaydto.totaltime = parseInt(keepTimer);  
1114 - if (_role == 0) {  
1115 - replaydto.codeRecordList = recorddatas;  
1116 - $.ajax({  
1117 - type: "post",  
1118 - url: gxb_api + "/programming/codeReplay/api",  
1119 - data: JSON.stringify(replaydto),  
1120 - dataType: "json",  
1121 - contentType: "application/json",  
1122 - success: function(data) {  
1123 - $(window).unbind('beforeunload');  
1124 - var _data = {  
1125 - "programId": data.codeReplayId,  
1126 - "programLanguageName": data.languageName,  
1127 - "programAudioLength": keepTimer  
1128 - }  
1129 - $('.upload-tip').hide(); 1162 + // replaydto.html = GBCodePlayBack.htmleditor.getValue();
  1163 + // replaydto.css = GBCodePlayBack.csseditor.getValue();
  1164 + // replaydto.javascript = GBCodePlayBack.jseditor.getValue();
  1165 + // // replaydto.audioUrl = $('.audio-url').val();
  1166 + // replaydto.audioUrl = '/uploads/programming_audio/link/17/01/24/38029c9698e144d2bd590b35eb6af56e';
  1167 + // replaydto.deleteFlag = 1
  1168 +
  1169 + // //保存序列化录制内容
  1170 + // var recorddatas = [];
  1171 + // for (var i = 0; i < GBCodePlayBack.records.length; i++) {
  1172 + // console.log(GBCodePlayBack.records);
  1173 + // var recorddata = {
  1174 + // intervaltime: GBCodePlayBack.records[i].intervaltime,
  1175 + // editor: GBCodePlayBack.records[i].editor,
  1176 + // changeobj: JSON.stringify(GBCodePlayBack.records[i].changeobj),
  1177 + // cmpinfo: GBCodePlayBack.records[i].cmpinfo,
  1178 + // output: GBCodePlayBack.records[i].output,
  1179 + // result: GBCodePlayBack.records[i].result,
  1180 + // stderr: GBCodePlayBack.records[i].stderr
  1181 + // }
1130 1182
1131 - $('#cancel').prop("disabled", false); 1183 + // recorddatas.push(recorddata);
  1184 + // }
1132 1185
1133 - window.opener.postMessage(_data, _source);  
1134 - window.close();  
1135 - },  
1136 - error: function() {  
1137 - $('.upload-tip').hide();  
1138 - alert('代码保存失败重新保存')  
1139 - }  
1140 - });  
1141 - } else if (_role == 1) {  
1142 - replaydto.studentRecordList = recorddatas;  
1143 - $.ajax({  
1144 - type: "post",  
1145 - url: gxb_api + "/programming/student/studentReplay/api",  
1146 - data: JSON.stringify(replaydto),  
1147 - dataType: "json",  
1148 - contentType: "application/json",  
1149 - success: function(data) {  
1150 - $(window).unbind('beforeunload');  
1151 - var _data = {  
1152 - "programId": data.studentReplayId,  
1153 - "programLanguageName": data.languageName,  
1154 - "programAudioLength": keepTimer  
1155 - }  
1156 - $('.upload-tip').hide();  
1157 - $('#cancel').prop("disabled", false);  
1158 - window.opener.postMessage(_data, _source);  
1159 - window.close();  
1160 - },  
1161 - error: function() {  
1162 - $('.upload-tip').hide();  
1163 - alert('代码保存失败重新保存')  
1164 - }  
1165 - });  
1166 - } 1186 + // //回放入库
  1187 + // recorddatas.deleteFlag = 1
  1188 +
  1189 + // var keepTimer = $('.recording-time').val()
  1190 + // replaydto.totaltime = parseInt(keepTimer);
  1191 + // if (_role == 0) {
  1192 + // replaydto.codeRecordList = recorddatas;
  1193 + // $.ajax({
  1194 + // type: "post",
  1195 + // url: gxb_api + "/programming/codeReplay/api",
  1196 + // data: JSON.stringify(replaydto),
  1197 + // dataType: "json",
  1198 + // contentType: "application/json",
  1199 + // success: function(data) {
  1200 + // $(window).unbind('beforeunload');
  1201 + // var _data = {
  1202 + // "programId": data.codeReplayId,
  1203 + // "programLanguageName": data.languageName,
  1204 + // "programAudioLength": keepTimer
  1205 + // }
  1206 + // $('.upload-tip').hide();
  1207 +
  1208 + // $('#cancel').prop("disabled", false);
  1209 +
  1210 + // window.opener.postMessage(_data, _source);
  1211 + // window.close();
  1212 + // },
  1213 + // error: function() {
  1214 + // $('.upload-tip').hide();
  1215 + // alert('代码保存失败重新保存')
  1216 + // }
  1217 + // });
  1218 + // } else if (_role == 1) {
  1219 + // replaydto.studentRecordList = recorddatas;
  1220 + // $.ajax({
  1221 + // type: "post",
  1222 + // url: gxb_api + "/programming/student/studentReplay/api",
  1223 + // data: JSON.stringify(replaydto),
  1224 + // dataType: "json",
  1225 + // contentType: "application/json",
  1226 + // success: function(data) {
  1227 + // $(window).unbind('beforeunload');
  1228 + // var _data = {
  1229 + // "programId": data.studentReplayId,
  1230 + // "programLanguageName": data.languageName,
  1231 + // "programAudioLength": keepTimer
  1232 + // }
  1233 + // $('.upload-tip').hide();
  1234 + // $('#cancel').prop("disabled", false);
  1235 + // window.opener.postMessage(_data, _source);
  1236 + // window.close();
  1237 + // },
  1238 + // error: function() {
  1239 + // $('.upload-tip').hide();
  1240 + // alert('代码保存失败重新保存')
  1241 + // }
  1242 + // });
  1243 + // }
1167 1244
1168 }); 1245 });
1169 1246
@@ -1409,6 +1486,7 @@ $(function() { @@ -1409,6 +1486,7 @@ $(function() {
1409 }, 600); 1486 }, 600);
1410 }, 1487 },
1411 resizeWindow: function(thisiframe) { 1488 resizeWindow: function(thisiframe) {
  1489 + console.info('GBCodePlayBack.resizeWindow');
1412 /* #STRAT: 编辑器自适应窗口 */ 1490 /* #STRAT: 编辑器自适应窗口 */
1413 var calcHeight = function() { 1491 var calcHeight = function() {
1414 var app = $('#app') 1492 var app = $('#app')
@@ -1522,6 +1600,7 @@ $(function() { @@ -1522,6 +1600,7 @@ $(function() {
1522 /* #END: 编辑器自适应窗口 */ 1600 /* #END: 编辑器自适应窗口 */
1523 }, 1601 },
1524 onChange: function(editor, changeobj) { // 监听输入事件 editor: 输入语言;changeobj:输入内容{from,text,to} 1602 onChange: function(editor, changeobj) { // 监听输入事件 editor: 输入语言;changeobj:输入内容{from,text,to}
  1603 + console.info('GBCodePlayBack.onChange');
1525 var intervaltime = 100, 1604 var intervaltime = 100,
1526 currenttime = new Date().getTime(); 1605 currenttime = new Date().getTime();
1527 // if(!GBCodePlayBack.record_startime) GBCodePlayBack.record_startime = currenttime; 1606 // if(!GBCodePlayBack.record_startime) GBCodePlayBack.record_startime = currenttime;
@@ -1548,10 +1627,11 @@ $(function() { @@ -1548,10 +1627,11 @@ $(function() {
1548 }; 1627 };
1549 GBCodePlayBack.records.push(recordobj); 1628 GBCodePlayBack.records.push(recordobj);
1550 GBCodePlayBack.record_startime = currenttime; //设定起始时间 1629 GBCodePlayBack.record_startime = currenttime; //设定起始时间
1551 - console.log('GBCodePlayBack.onChange');  
1552 console.log(GBCodePlayBack.records); 1630 console.log(GBCodePlayBack.records);
1553 }, 1631 },
1554 changeValueCallback: function(record, replay_type, offset) { 1632 changeValueCallback: function(record, replay_type, offset) {
  1633 + console.info('GBCodePlayBack.changeValueCallback');
  1634 + console.log(record);
1555 var obj = record.changeobj, 1635 var obj = record.changeobj,
1556 editor = record.editor; 1636 editor = record.editor;
1557 1637
@@ -1562,14 +1642,20 @@ $(function() { @@ -1562,14 +1642,20 @@ $(function() {
1562 GBCodePlayBack.active_editor = editor; 1642 GBCodePlayBack.active_editor = editor;
1563 } 1643 }
1564 1644
1565 - if (editor === 'html') {  
1566 - processChangeObject(GBCodePlayBack.htmlplayereditor, obj);  
1567 - } else if (editor === 'css') {  
1568 - processChangeObject(GBCodePlayBack.cssplayereditor, obj);  
1569 - } else if (editor === 'js') {  
1570 - processChangeObject(GBCodePlayBack.jsplayereditor, obj); 1645 + for (var i = 0; i < treeLinkEditor.length; i++) {
  1646 + if(editor == treeLinkEditor[i].name){
  1647 + processChangeObject(treeLinkEditor[i].CodeMirrorReplay, obj);
  1648 + }
1571 } 1649 }
1572 1650
  1651 + // if (editor === 'html') {
  1652 + // processChangeObject(GBCodePlayBack.htmlplayereditor, obj);
  1653 + // } else if (editor === 'css') {
  1654 + // processChangeObject(GBCodePlayBack.cssplayereditor, obj);
  1655 + // } else if (editor === 'js') {
  1656 + // processChangeObject(GBCodePlayBack.jsplayereditor, obj);
  1657 + // }
  1658 +
1573 record.trigger = 1; //标记已运行 1659 record.trigger = 1; //标记已运行
1574 record.playTime = new Date().getTime(); // 播放开始时间 1660 record.playTime = new Date().getTime(); // 播放开始时间
1575 GBCodePlayBack.codeTimes = 1; // 1661 GBCodePlayBack.codeTimes = 1; //
@@ -1618,7 +1704,6 @@ $(function() { @@ -1618,7 +1704,6 @@ $(function() {
1618 .addClass('glyphicon-play') 1704 .addClass('glyphicon-play')
1619 .removeClass('glyphicon-pause'); 1705 .removeClass('glyphicon-pause');
1620 1706
1621 -  
1622 $('#recordertab a:first').tab('show'); 1707 $('#recordertab a:first').tab('show');
1623 1708
1624 /* 移动设备的下一节和代码编写控制 */ 1709 /* 移动设备的下一节和代码编写控制 */
@@ -1708,36 +1793,34 @@ $(function() { @@ -1708,36 +1793,34 @@ $(function() {
1708 treeLinkEditor[i].CodeMirrorRecord.setValue(""); 1793 treeLinkEditor[i].CodeMirrorRecord.setValue("");
1709 } 1794 }
1710 } 1795 }
1711 -  
1712 - GBCodePlayBack.records = [];  
1713 - console.log(GBCodePlayBack.records);  
1714 } 1796 }
1715 } 1797 }
1716 1798
1717 $('.record-before').hide(); 1799 $('.record-before').hide();
1718 -  
1719 // 动态获取目录结构 1800 // 动态获取目录结构
1720 $.ajax({ 1801 $.ajax({
1721 - url: 'js/tree.json'  
1722 - ,type: 'GET'  
1723 - ,dataType: 'json'  
1724 - })  
1725 - .done(function(res) {  
1726 - treeData = res.tree; 1802 + type: "GET",
  1803 + url: "js/tree.json",
  1804 + dataType: "json",
  1805 + contentType: "application/json",
  1806 + success: function(res) {
  1807 + console.info("Ajax tree.json success");
  1808 + treeData = res.tree;
1727 1809
1728 - treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData); 1810 + treeObj = $.fn.zTree.init($("#folder"), ZTREE.config, treeData);
1729 1811
1730 - GBCodePlayBack.recordinit(treeData);  
1731 - })  
1732 - .fail(function() {  
1733 - console.log("error");  
1734 - })  
1735 - .always(function() {  
1736 - console.log("get tree.json complete"); 1812 + GBCodePlayBack.recordinit(treeData);
  1813 + },
  1814 + error: function(XMLHttpRequest, textStatus, errorThrown) {
  1815 + console.log('Ajax tree.json error');
  1816 + console.log(XMLHttpRequest);
  1817 + }
1737 }); 1818 });
1738 1819
1739 // 开始录制 1820 // 开始录制
1740 $('#start-recording').click(function() { 1821 $('#start-recording').click(function() {
  1822 + console.info('$(\'#start-recording\').click(');
  1823 +
1741 // 切换到录制区域 1824 // 切换到录制区域
1742 $('#recordertab a:eq(0)').tab('show'); 1825 $('#recordertab a:eq(0)').tab('show');
1743 1826
@@ -1755,6 +1838,8 @@ $(function() { @@ -1755,6 +1838,8 @@ $(function() {
1755 runResult() 1838 runResult()
1756 1839
1757 if (data == 1) { 1840 if (data == 1) {
  1841 + console.log('开始录制');
  1842 +
1758 GBCodePlayBack.isRcording = 1; 1843 GBCodePlayBack.isRcording = 1;
1759 $("#countdown").find('img').attr('src', 'img/ready-go.gif'); 1844 $("#countdown").find('img').attr('src', 'img/ready-go.gif');
1760 $("#countdown").find('img').load(function() { 1845 $("#countdown").find('img').load(function() {
@@ -1768,8 +1853,14 @@ $(function() { @@ -1768,8 +1853,14 @@ $(function() {
1768 }, 1000); 1853 }, 1000);
1769 }) 1854 })
1770 } else { 1855 } else {
  1856 + console.log('结束录制');
  1857 +
1771 GBCodePlayBack.isRcording = 0; 1858 GBCodePlayBack.isRcording = 0;
1772 - GBCodePlayBack.htmleditor.setOption('readOnly', true); 1859 + for (var i = 0; i < treeLinkEditor.length; i++) {
  1860 + treeLinkEditor[i].CodeMirrorRecord.setOption('readOnly', true);
  1861 + treeLinkEditor[i].CodeMirrorReplay.setOption('readOnly', true);
  1862 + }
  1863 + // GBCodePlayBack.htmleditor.setOption('readOnly', true);
1773 $("#countdown").hide(); 1864 $("#countdown").hide();
1774 $("#re-recoding").show(); 1865 $("#re-recoding").show();
1775 $("#start-recording").hide(); 1866 $("#start-recording").hide();
@@ -1811,6 +1902,7 @@ $(function() { @@ -1811,6 +1902,7 @@ $(function() {
1811 1902
1812 // 使用服务端编译语言 1903 // 使用服务端编译语言
1813 $('#compileBtnGroup').unbind("click").on('click', '#CompileBtn', function(event){ 1904 $('#compileBtnGroup').unbind("click").on('click', '#CompileBtn', function(event){
  1905 + console.info('$(\'#compileBtnGroup\').unbind("click")')
1814 event.preventDefault(); 1906 event.preventDefault();
1815 var ladda = Ladda.create(this); 1907 var ladda = Ladda.create(this);
1816 $('#CompileBtn').find('ladda-spinner').remove(); 1908 $('#CompileBtn').find('ladda-spinner').remove();
@@ -1862,6 +1954,7 @@ $(function() { @@ -1862,6 +1954,7 @@ $(function() {
1862 1954
1863 // 保存编译结果 1955 // 保存编译结果
1864 $('#save_compile').unbind("click").click(function(){ 1956 $('#save_compile').unbind("click").click(function(){
  1957 + console.info('$(\'#save_compile\').unbind("click")');
1865 var length = GBCodePlayBack.records.length - 1; 1958 var length = GBCodePlayBack.records.length - 1;
1866 recodingConf() 1959 recodingConf()
1867 1960
@@ -1877,12 +1970,14 @@ $(function() { @@ -1877,12 +1970,14 @@ $(function() {
1877 1970
1878 // 不保存编译结果 1971 // 不保存编译结果
1879 $('#cancel_compile').unbind('click').click(function(){ 1972 $('#cancel_compile').unbind('click').click(function(){
1880 - recodingConf()  
1881 - contrlPause() 1973 + console.info('$(\'#cancel_compile\').unbind(\'click\')');
  1974 + recodingConf();
  1975 + contrlPause();
1882 }) 1976 })
1883 1977
1884 // 继续录制配置 1978 // 继续录制配置
1885 function recodingConf(){ 1979 function recodingConf(){
  1980 + console.info('recodingConf')
1886 Hourglass.pauseTimer(); 1981 Hourglass.pauseTimer();
1887 $("#CompileBtn").data('run', 1); 1982 $("#CompileBtn").data('run', 1);
1888 GBCodePlayBack.record_startime = new Date().getTime(); 1983 GBCodePlayBack.record_startime = new Date().getTime();
@@ -1891,6 +1986,7 @@ $(function() { @@ -1891,6 +1986,7 @@ $(function() {
1891 1986
1892 // 切换自动/手动运行代码 1987 // 切换自动/手动运行代码
1893 function autoRun(autorun){ 1988 function autoRun(autorun){
  1989 + console.info('autoRun')
1894 if(autorun===1){ 1990 if(autorun===1){
1895 $('#runnow').prop('disabled',false).html('手动运行').attr('data-original-title', '手动运行'); 1991 $('#runnow').prop('disabled',false).html('手动运行').attr('data-original-title', '手动运行');
1896 }else{ 1992 }else{
@@ -1900,6 +1996,9 @@ $(function() { @@ -1900,6 +1996,9 @@ $(function() {
1900 1996
1901 // 编译结果 1997 // 编译结果
1902 function runResult(){ 1998 function runResult(){
  1999 + console.info('runResult')
  2000 + // console.log(typeof GBCodePlayBack.htmleditor);
  2001 + // console.log(typeof GBCodePlayBack.htmlplayereditor);
1903 if(typeof GBCodePlayBack.htmleditor !== 'undefined'){ 2002 if(typeof GBCodePlayBack.htmleditor !== 'undefined'){
1904 GBCodePlayBack.generateResult(GBCodePlayBack.htmleditor.getValue()); 2003 GBCodePlayBack.generateResult(GBCodePlayBack.htmleditor.getValue());
1905 return false; 2004 return false;
@@ -2040,11 +2139,12 @@ $(function() { @@ -2040,11 +2139,12 @@ $(function() {
2040 2139
2041 // 开始录制 2140 // 开始录制
2042 function startReacoder() { 2141 function startReacoder() {
  2142 + console.info('startReacoder');
2043 HZRecorder.get(function(rec) { 2143 HZRecorder.get(function(rec) {
2044 recorder = rec; 2144 recorder = rec;
2045 recorder.start(); 2145 recorder.start();
2046 2146
2047 - GBCodePlayBack.htmleditor.setValue(''); 2147 + GBCodePlayBack.resetCodeMirrorValue();
2048 GBCodePlayBack.records = []; 2148 GBCodePlayBack.records = [];
2049 GBCodePlayBack.record_startime = new Date().getTime(); 2149 GBCodePlayBack.record_startime = new Date().getTime();
2050 2150
@@ -2058,6 +2158,9 @@ $(function() { @@ -2058,6 +2158,9 @@ $(function() {
2058 2158
2059 // 结束录制 2159 // 结束录制
2060 function stopReacoder() { 2160 function stopReacoder() {
  2161 + console.info('stopReacoder');
  2162 + console.log(GBCodePlayBack.records);
  2163 +
2061 $('#start-recording').removeClass('recording').addClass('new-recording').attr('data', '1').attr('data-original-title', '重新录制'); 2164 $('#start-recording').removeClass('recording').addClass('new-recording').attr('data', '1').attr('data-original-title', '重新录制');
2062 $('.recording-time').removeClass('twinkle'); 2165 $('.recording-time').removeClass('twinkle');
2063 Hourglass.stopTimer(); 2166 Hourglass.stopTimer();
@@ -2076,6 +2179,7 @@ $(function() { @@ -2076,6 +2179,7 @@ $(function() {
2076 } 2179 }
2077 2180
2078 function initJavaPage(treeData){ 2181 function initJavaPage(treeData){
  2182 + console.info('initJavaPage');
2079 var _datalist = treeData || []; 2183 var _datalist = treeData || [];
2080 var recordTemplate = ''; 2184 var recordTemplate = '';
2081 var replayTemplate = ''; 2185 var replayTemplate = '';
@@ -2088,15 +2192,17 @@ $(function() { @@ -2088,15 +2192,17 @@ $(function() {
2088 2192
2089 for (var i = 0; i < _datalist.length; i++) { 2193 for (var i = 0; i < _datalist.length; i++) {
2090 if(!_datalist[i].isParent){ 2194 if(!_datalist[i].isParent){
  2195 + var _file = _datalist[i].name;
  2196 + var _name = ZTREE.manageName(_file);
2091 treeLinkEditor.push({ 2197 treeLinkEditor.push({
2092 - "name": ZTREE.manageName(_datalist[i].name),  
2093 - "file": _datalist[i].name,  
2094 - "filePath": ZTREE.getTreePath(_datalist[i].name),  
2095 - "record": ZTREE.manageName(_datalist[i].name) + 'Record',  
2096 - "replay": ZTREE.manageName(_datalist[i].name) + 'Replay' 2198 + "name": _name,
  2199 + "file": _file,
  2200 + "filePath": ZTREE.getTreePath(_file),
  2201 + "record": _name + 'Record',
  2202 + "replay": _name + 'Replay'
2097 }); 2203 });
2098 - recordTemplate += '<div id="'+ ZTREE.manageName(_datalist[i].name) +'RecordWrap"><textarea id="'+ ZTREE.manageName(_datalist[i].name) + 'Record" title="'+ ZTREE.manageName(_datalist[i].name) +'" style="display: none;"></textarea></div>'  
2099 - replayTemplate += '<div id="'+ ZTREE.manageName(_datalist[i].name) +'ReplayWrap"><textarea id="'+ ZTREE.manageName(_datalist[i].name) + 'Replay" title="'+ ZTREE.manageName(_datalist[i].name) +'" style="display: none;"></textarea></div>' 2204 + recordTemplate += '<div id="'+ _name +'RecordWrap"><textarea id="'+ _name + 'Record" title="'+ _name +'" style="display: none;"></textarea></div>'
  2205 + replayTemplate += '<div id="'+ _name +'ReplayWrap"><textarea id="'+ _name + 'Replay" title="'+ _name +'" style="display: none;"></textarea></div>'
2100 } 2206 }
2101 } 2207 }
2102 2208
@@ -2111,16 +2217,19 @@ $(function() { @@ -2111,16 +2217,19 @@ $(function() {
2111 lineNumbers: true, 2217 lineNumbers: true,
2112 smartIndent: false, 2218 smartIndent: false,
2113 onChange: function(em, changeobj) { 2219 onChange: function(em, changeobj) {
2114 - console.log('onChange');  
2115 - console.log(em);  
2116 - console.log(changeobj); 2220 + // console.log('onChange');
  2221 + // console.log(em);
  2222 + // console.log(changeobj);
2117 2223
2118 - if (GBCodePlayBack.recording_status) {  
2119 - GBCodePlayBack.onChange(ZTREE.getCurrentEditor(em.getWrapperElement().getAttribute('id')), changeobj);  
2120 - }  
2121 - if (GBCodePlayBack.autorun) {  
2122 - GBCodePlayBack.generateResult(GBCodePlayBack.htmleditor.getValue(), GBCodePlayBack.csseditor.getValue(), GBCodePlayBack.jseditor.getValue());  
2123 - } 2224 + // 是否需要在开始录制之后采取设置值
  2225 + // if(GBCodePlayBack.isRcording == 1){
  2226 + if (GBCodePlayBack.recording_status) {
  2227 + GBCodePlayBack.onChange(ZTREE.getCurrentEditor(em.getWrapperElement().getAttribute('id')), changeobj);
  2228 + }
  2229 + if (GBCodePlayBack.autorun) {
  2230 + GBCodePlayBack.generateResult(GBCodePlayBack.htmleditor.getValue(), GBCodePlayBack.csseditor.getValue(), GBCodePlayBack.jseditor.getValue());
  2231 + }
  2232 + // }
2124 }, 2233 },
2125 onFocus: function(em) { 2234 onFocus: function(em) {
2126 // console.log('onFocus'); 2235 // console.log('onFocus');
@@ -2261,8 +2370,51 @@ $(function() { @@ -2261,8 +2370,51 @@ $(function() {
2261 GBCodePlayBack.recordtimeoutcontrolls = []; 2370 GBCodePlayBack.recordtimeoutcontrolls = [];
2262 GBCodePlayBack.recordtimeouts = []; 2371 GBCodePlayBack.recordtimeouts = [];
2263 } 2372 }
2264 - 2373 + function getEditor(obj, key){
  2374 + var currentObj;
  2375 + for (var i = 0; i < treeLinkEditor.length; i++) {
  2376 + if(treeLinkEditor[i].CodeMirrorReplay === obj){
  2377 + currentObj = treeLinkEditor[i];
  2378 + }
  2379 + }
  2380 + console.log('getEditor');
  2381 + console.log(currentObj);
  2382 + switch (key) {
  2383 + case 'name':
  2384 + return currentObj.name;
  2385 + break;
  2386 + case 'file':
  2387 + return currentObj.file;
  2388 + break;
  2389 + case 'filePath':
  2390 + return currentObj.file;
  2391 + break;
  2392 + case 'record':
  2393 + return currentObj.record;
  2394 + break;
  2395 + case 'replay':
  2396 + return currentObj.replay;
  2397 + break;
  2398 + case 'CodeMirrorRecord':
  2399 + return currentObj.CodeMirrorRecord;
  2400 + break;
  2401 + case 'CodeMirrorReplay':
  2402 + return currentObj.CodeMirrorReplay;
  2403 + break;
  2404 + case 'CodeMirrorRecordId':
  2405 + return currentObj.CodeMirrorRecordId;
  2406 + break;
  2407 + case 'CodeMirrorReplayId':
  2408 + return currentObj.CodeMirrorReplayId;
  2409 + break;
  2410 + default:
  2411 + break;
  2412 + }
  2413 + }
2265 function processChangeObject(playbackcm, obj) { 2414 function processChangeObject(playbackcm, obj) {
  2415 + console.log('processChangeObject');
  2416 + // 菜单选中
  2417 + ZTREE.showEdite({'treeNode': {'name': getEditor(playbackcm, 'name')},'replay': true});
2266 for (var i = 0; i < obj.text.length; i++) { 2418 for (var i = 0; i < obj.text.length; i++) {
2267 /* 设置鼠标行标示 */ 2419 /* 设置鼠标行标示 */
2268 if (playbackcm.getTextArea().id === "HTMLplayer") { 2420 if (playbackcm.getTextArea().id === "HTMLplayer") {
@@ -2398,6 +2550,7 @@ $(function() { @@ -2398,6 +2550,7 @@ $(function() {
2398 2550
2399 // 缓存languageid title 2551 // 缓存languageid title
2400 function setHtmlButton(languageid, title) { 2552 function setHtmlButton(languageid, title) {
  2553 + console.info('setHtmlButton');
2401 $('#htmlbutton').data('languageid', languageid).attr('data-original-title', '当前课程环境:' + title).html(title).trigger('click'); 2554 $('#htmlbutton').data('languageid', languageid).attr('data-original-title', '当前课程环境:' + title).html(title).trigger('click');
2402 } 2555 }
2403 2556
src/js/recorder/Myna.js
@@ -173,6 +173,7 @@ @@ -173,6 +173,7 @@
173 //上传 173 //上传
174 this.upload = function(url, callback) { 174 this.upload = function(url, callback) {
175 var file = audioData.encodeWAV(); 175 var file = audioData.encodeWAV();
  176 + var $this = $(this);
176 console.log(file); 177 console.log(file);
177 var megabyte = 1024 * 1024; 178 var megabyte = 1024 * 1024;
178 var defaultChnkSize = 5 * megabyte; 179 var defaultChnkSize = 5 * megabyte;
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 -}] 11 -}]
  12 +}]
12 \ No newline at end of file 13 \ No newline at end of file