Commit fc1e371bf47bec5118bd2c71c949a37835abb912
1 parent
7869a178
add function
Showing
4 changed files
with
176 additions
and
172 deletions
src/live/js/main.js
0 → 100644
| 1 | +$(function(){ | |
| 2 | + var teacherId = document.getElementById('teacher'); | |
| 3 | + var socket = io('http://localhost:3000'); | |
| 4 | + | |
| 5 | + // 初始化codemirror页面 | |
| 6 | + var teacher = CodeMirror.fromTextArea(teacherId, { | |
| 7 | + value: '输入HTML代码', | |
| 8 | + mode: 'text/javascript', | |
| 9 | + lineNumbers: true, | |
| 10 | + smartIndent: false | |
| 11 | + }); | |
| 12 | + | |
| 13 | + // 记录每次操作的变化 | |
| 14 | + CodeMirror.on(teacher,"change", function(instance, changeObj) { | |
| 15 | + // console.log(instance); | |
| 16 | + // console.log(changeObj); | |
| 17 | + var changeObjStr = JSON.stringify(changeObj); | |
| 18 | + | |
| 19 | + socket.emit('teacher.programming', changeObjStr); | |
| 20 | + | |
| 21 | + socket.emit('programming.content', teacher.getValue()); | |
| 22 | + | |
| 23 | + buildOperate('teacher', changeObj); | |
| 24 | + | |
| 25 | + console.log(IDELive.operations); | |
| 26 | + | |
| 27 | + }); | |
| 28 | + | |
| 29 | + // 链接时执行初始化代码 | |
| 30 | + socket.on('programming.content', function(msg) { | |
| 31 | + console.log('programming.content ---- ' + msg); | |
| 32 | + teacher.setValue(msg); | |
| 33 | + }); | |
| 34 | + | |
| 35 | + var IDELive = { | |
| 36 | + operations: [] // 存储录制时的动作对象 | |
| 37 | + } | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + $('#CompileBtn').on('click', function(){ | |
| 44 | + console.log('编译' + teacher.getValue()); | |
| 45 | + var el = document.querySelector('#CompileBtn') | |
| 46 | + var l = Ladda.create(el); | |
| 47 | + l.start(); | |
| 48 | + | |
| 49 | + var input = $('#input').val() || ''; | |
| 50 | + var code = teacher.getValue(); | |
| 51 | + var compileData = { | |
| 52 | + code: code, | |
| 53 | + langid: 10, | |
| 54 | + input: input | |
| 55 | + } | |
| 56 | + $.ajax({ | |
| 57 | + type: "post", | |
| 58 | + url: gxb_api + "/submit/submitCode/api", | |
| 59 | + data: JSON.stringify(compileData), | |
| 60 | + dataType: "json", | |
| 61 | + contentType: "application/json", | |
| 62 | + success: function(data) { | |
| 63 | + console.log(data); | |
| 64 | + l.remove(); | |
| 65 | + compileResult(data); | |
| 66 | + }, | |
| 67 | + error: function(){ | |
| 68 | + l.stop(); | |
| 69 | + alert('错误'); | |
| 70 | + } | |
| 71 | + }); | |
| 72 | + }) | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + /** | |
| 77 | + * 组合录入代码 | |
| 78 | + * by Kira 2017-5-17 | |
| 79 | + */ | |
| 80 | + function buildOperate(editor, changeobj){ | |
| 81 | + var intervaltime, | |
| 82 | + currenttime = new Date().getTime(); | |
| 83 | + | |
| 84 | + var intervaltime = currenttime - IDELive.record_startime; | |
| 85 | + | |
| 86 | + var operateObj = { | |
| 87 | + intervaltime: intervaltime, | |
| 88 | + editor: editor, | |
| 89 | + changeobj: changeobj, | |
| 90 | + currenttime: currenttime, | |
| 91 | + trigger: 0 | |
| 92 | + }; | |
| 93 | + IDELive.operations.push( operateObj); // 添加每次输入对象 | |
| 94 | + IDELive.record_startime = currenttime; //设定起始时间 | |
| 95 | + } | |
| 96 | + | |
| 97 | + // 编译结果 | |
| 98 | + function compileResult(data){ | |
| 99 | + if(data.result){ | |
| 100 | + | |
| 101 | + $('#cmpinfo').html('<p class="text-warning">' + data.cmpinfo.replace(/\n/g, "<br />") + "</p>"); | |
| 102 | + $('#stderr').html('<p class="text-danger">' + data.stderr.replace(/\n/g, "<br />") + "</p>"); | |
| 103 | + $('#output').html('<p class="text-success">' + data.output.replace(/\n/g, "<br />") + "</p>"); | |
| 104 | + | |
| 105 | + if(data.cmpinfo.length){ | |
| 106 | + $('#cmprun-tabs a[href="#cmpinfo"]').tab('show'); | |
| 107 | + }else if(data.stderr.length){ | |
| 108 | + $('#cmprun-tabs a[href="#stderr"]').tab('show'); | |
| 109 | + }else if(data.output.length){ | |
| 110 | + $('#cmprun-tabs a[href="#output"]').tab('show'); | |
| 111 | + } | |
| 112 | + | |
| 113 | + if(!data.cmpinfo.length){ | |
| 114 | + $('#cmpinfo').prepend('<p class="alert alert-success"><i class="glyphicon glyphicon-ok-sign"></i> 编译已成功</p>'); | |
| 115 | + } | |
| 116 | + | |
| 117 | + if(!data.stderr.length){ | |
| 118 | + $('#stderr').prepend('<p class="alert alert-success"><i class="glyphicon glyphicon-ok-sign"></i> 无输出错误</p>'); | |
| 119 | + } | |
| 120 | + | |
| 121 | + if(!data.output.length){ | |
| 122 | + $('#output').prepend('<p class="alert alert-warning"><i class="glyphicon glyphicon-exclamation-sign"></i> 代码编译错误或者运行相关功能受限制</p>'); | |
| 123 | + } | |
| 124 | + | |
| 125 | + }else{ | |
| 126 | + $('#cmpinfo').html('<p class="alert alert-danger"><i class="glyphicon glyphicon-exclamation-sign"></i> 云端编译超时,请稍后重新尝试</p>'); | |
| 127 | + $('#cmprun-tabs a[href="#cmpinfo"]').tab('show'); | |
| 128 | + } | |
| 129 | + } | |
| 130 | +}) | |
| 0 | 131 | \ No newline at end of file | ... | ... |
src/live/js/utils.js
0 → 100644
src/live/style/main.css
| ... | ... | @@ -148,14 +148,18 @@ body { |
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | .compile-btn { |
| 151 | - background: #FFF; | |
| 152 | - border: 1px solid #3ad5f5; | |
| 153 | - color: #1FB6FF; | |
| 154 | 151 | border-radius: 24px; |
| 152 | + color: #FFF; | |
| 153 | + background-image: -webkit-linear-gradient(left, #1FB6FF 0%, #62DCF5 100%); | |
| 154 | + background-image: linear-gradient(to right, #1FB6FF 0%, #62DCF5 100%); | |
| 155 | + -webkit-transition: 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important; | |
| 156 | + transition: 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important; | |
| 157 | + box-shadow: 0px 0px 2px 0px #B3E5FF; | |
| 158 | + border: none; | |
| 155 | 159 | } |
| 156 | 160 | |
| 157 | 161 | .btn { |
| 158 | - padding: 3px 18px; | |
| 162 | + padding: 5px 18px; | |
| 159 | 163 | } |
| 160 | 164 | |
| 161 | 165 | .fb { |
| ... | ... | @@ -171,6 +175,7 @@ body { |
| 171 | 175 | .live-ctrl { |
| 172 | 176 | width: 100%; |
| 173 | 177 | height: 60px; |
| 178 | + line-height: 60px; | |
| 174 | 179 | position: absolute; |
| 175 | 180 | bottom: 0; |
| 176 | 181 | z-index: 999; |
| ... | ... | @@ -178,3 +183,24 @@ body { |
| 178 | 183 | background-color: #23383f; |
| 179 | 184 | box-sizing: border-box; |
| 180 | 185 | } |
| 186 | + | |
| 187 | +#resultoutput{ | |
| 188 | + padding: 10px 16px; | |
| 189 | +} | |
| 190 | + | |
| 191 | +.ladda-button[data-style=expand-right] .ladda-spinner{ | |
| 192 | + right: 4px; | |
| 193 | +} | |
| 194 | +.ladda-button[data-style=expand-right][data-loading]{ | |
| 195 | + padding-right: 40px; | |
| 196 | +} | |
| 197 | +.ladda-button .ladda-spinner{ | |
| 198 | + top: 0; | |
| 199 | +} | |
| 200 | + | |
| 201 | +.start-end{ | |
| 202 | + float: left; | |
| 203 | +} | |
| 204 | +.save-cancel{ | |
| 205 | + float: right; | |
| 206 | +} | ... | ... |
src/live/teacher.html
| ... | ... | @@ -7,139 +7,12 @@ |
| 7 | 7 | <link href="../css/reset.css" rel="stylesheet"> |
| 8 | 8 | <link rel="stylesheet" href="../css/responsive/css/bootstrap.min.css"> |
| 9 | 9 | <link rel="stylesheet" href="../js/codemirror-5.25.0/lib/codemirror.css"> |
| 10 | + <link rel="stylesheet" href="../js/ladda/ladda-themeless.min.css"> | |
| 11 | + <link rel="stylesheet" href="style/main.css"> | |
| 10 | 12 | |
| 11 | - <style> | |
| 12 | - * { | |
| 13 | - margin: 0; | |
| 14 | - padding: 0; | |
| 15 | - box-sizing: border-box; | |
| 16 | - } | |
| 17 | - | |
| 18 | - body { | |
| 19 | - font: 13px Helvetica, Arial; | |
| 20 | - } | |
| 21 | - .live-wrap{ | |
| 22 | - position: absolute; | |
| 23 | - width: 100%; | |
| 24 | - height: 100%; | |
| 25 | - overflow: hidden; | |
| 26 | - } | |
| 27 | - .header{ | |
| 28 | - text-align: center; | |
| 29 | - border-bottom: 1px solid #c1c1c1; | |
| 30 | - padding: 8px 0; | |
| 31 | - } | |
| 32 | - .header h1{ | |
| 33 | - font-size: 18px; | |
| 34 | - margin: 0; | |
| 35 | - } | |
| 36 | - .live-code{ | |
| 37 | - position: relative; | |
| 38 | - width: 100%; | |
| 39 | - height: 100%; | |
| 40 | - padding-bottom: 296px; | |
| 41 | - } | |
| 42 | - .live-code .CodeMirror{ | |
| 43 | - height: 100%; | |
| 44 | - } | |
| 45 | - .live-console-wrap{ | |
| 46 | - width: 100%; | |
| 47 | - background-color: #FFF; | |
| 48 | - height: 200px; | |
| 49 | - position: absolute; | |
| 50 | - bottom: 60px; | |
| 51 | - z-index: 999; | |
| 52 | - overflow: hidden; | |
| 53 | - } | |
| 54 | - #toolbar{ | |
| 55 | - width: 100%; | |
| 56 | - height: 40px; | |
| 57 | - overflow: hidden; | |
| 58 | - background-color: #F4F6F9; | |
| 59 | - padding: 0 36px; | |
| 60 | - } | |
| 61 | - .result-tabs{ | |
| 62 | - overflow: hidden; | |
| 63 | - margin: 5px 10px; | |
| 64 | - color: #fff; | |
| 65 | - } | |
| 66 | - .text{ | |
| 67 | - color: #1FB6FF; | |
| 68 | - } | |
| 69 | - .result-tabs>li.active>a, .result-tabs>li.active>a:hover, .result-tabs>li>a:hover, .result-tabs>li.active>a:focus{ | |
| 70 | - color: #FFF; | |
| 71 | - background-image: -webkit-linear-gradient(left, #1FB6FF 0%, #62DCF5 100%); | |
| 72 | - background-image: linear-gradient(to right, #1FB6FF 0%, #62DCF5 100%); | |
| 73 | - -webkit-transition: 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important; | |
| 74 | - transition: 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) all !important; | |
| 75 | - box-shadow: 0px 0px 2px 0px #B3E5FF; | |
| 76 | - border: none; | |
| 77 | - } | |
| 78 | - .result-tabs>li>a, .result-tabs>li.active>a:hover{ | |
| 79 | - padding: 4px 21px; | |
| 80 | - border: none; | |
| 81 | - margin: 1px; | |
| 82 | - border-radius: 15px; | |
| 83 | - font-size: 14px; | |
| 84 | - transition: all 0.1s ease; | |
| 85 | - } | |
| 86 | - .func{ | |
| 87 | - height: 36px; | |
| 88 | - padding-top: 5px; | |
| 89 | - } | |
| 90 | - .stdin-wrap { | |
| 91 | - margin: 0 48px; | |
| 92 | - position: relative; | |
| 93 | - } | |
| 94 | - #stdin { | |
| 95 | - position: absolute; | |
| 96 | - width: 100%; | |
| 97 | - } | |
| 98 | - #stdin :focus{outline: none;} | |
| 99 | - | |
| 100 | - #stdin input[type="text"]{font: 15px/24px "Lato", Arial, sans-serif; color: #333; width: 100%; box-sizing: border-box; letter-spacing: 1px;padding-left: 12px;} | |
| 101 | - | |
| 102 | - #stdin .effect-2{border: 0; padding: 12px 0 1px; border-bottom: 1px solid #ccc;} | |
| 103 | - #stdin .effect-2 ~ .focus-border{position: absolute; bottom: 0; left: 50%; width: 0; height: 2px; background-color: #62DCF5; transition: 1s;} | |
| 104 | - #stdin .effect-2:focus ~ .focus-border{width: 100%; transition: 1s; left: 0;} | |
| 105 | - .nav-tabs { | |
| 106 | - border: none; | |
| 107 | - float: left; | |
| 108 | - border-bottom: 0; | |
| 109 | - } | |
| 110 | - .panel-body{ | |
| 111 | - padding: 0; | |
| 112 | - } | |
| 113 | - | |
| 114 | - .compile-btn { | |
| 115 | - background: #FFF; | |
| 116 | - border: 1px solid #3ad5f5; | |
| 117 | - color: #1FB6FF; | |
| 118 | - border-radius: 24px; | |
| 119 | - } | |
| 120 | - .btn { | |
| 121 | - padding: 3px 18px; | |
| 122 | - } | |
| 123 | - .fb { | |
| 124 | - float: right; | |
| 125 | - margin: 0 16px; | |
| 126 | - cursor: pointer; | |
| 127 | - } | |
| 128 | - .fb img { | |
| 129 | - width: 32px; | |
| 130 | - } | |
| 131 | - | |
| 132 | - .live-ctrl{ | |
| 133 | - width: 100%; | |
| 134 | - height: 60px; | |
| 135 | - position: absolute; | |
| 136 | - bottom: 0; | |
| 137 | - z-index: 999; | |
| 138 | - padding: 0 136px; | |
| 139 | - background-color: #23383f; | |
| 140 | - box-sizing: border-box; | |
| 141 | - } | |
| 142 | - </style> | |
| 13 | + <script> | |
| 14 | + var gxb_api = "https://restful.gaoxiaobang.com"; | |
| 15 | + </script> | |
| 143 | 16 | </head> |
| 144 | 17 | |
| 145 | 18 | <body> |
| ... | ... | @@ -191,14 +64,18 @@ |
| 191 | 64 | <div class="tab-pane padall15" id="stderr"></div> |
| 192 | 65 | <div class="tab-pane padall15" id="output"></div> |
| 193 | 66 | </div> |
| 194 | - <div class="panel-body no-compile" id="ifrcontainer"> | |
| 195 | - <iframe id="resultiframe" frameBorder="0" width="100%"></iframe> | |
| 196 | - </div> | |
| 197 | 67 | </div> |
| 198 | 68 | |
| 199 | 69 | <!-- 录制控制区 --> |
| 200 | 70 | <div class="live-ctrl"> |
| 201 | - | |
| 71 | + <div class="start-end"> | |
| 72 | + <button class="btn compile-btn" id="">开始</button> | |
| 73 | + <button class="btn compile-btn" id="">结束</button> | |
| 74 | + </div> | |
| 75 | + <div class="save-cancel"> | |
| 76 | + <button class="btn compile-btn" id="">保存</button> | |
| 77 | + <button class="btn compile-btn" id="">关闭</button> | |
| 78 | + </div> | |
| 202 | 79 | </div> |
| 203 | 80 | </div> |
| 204 | 81 | |
| ... | ... | @@ -207,39 +84,10 @@ |
| 207 | 84 | <script src="https://code.jquery.com/jquery-1.11.1.js"></script> |
| 208 | 85 | <script src="../js/codemirror-5.25.0/lib/codemirror.js"></script> |
| 209 | 86 | <script src="../js/bootstrap.js"></script> |
| 210 | -<script> | |
| 211 | - $(function() { | |
| 212 | - var teacherId = document.getElementById('teacher'); | |
| 213 | - var socket = io('http://localhost:3000'); | |
| 214 | - | |
| 215 | - // 初始化codemirror页面 | |
| 216 | - var teacher = CodeMirror.fromTextArea(teacherId, { | |
| 217 | - value: '输入HTML代码', | |
| 218 | - mode: 'text/javascript', | |
| 219 | - lineNumbers: true, | |
| 220 | - smartIndent: false | |
| 221 | - }); | |
| 222 | - | |
| 223 | - // 记录每次操作的变化 | |
| 224 | - CodeMirror.on(teacher,"change", function(instance, changeObj) { | |
| 225 | - console.log(instance); | |
| 226 | - console.log(changeObj); | |
| 227 | - var changeObjStr = JSON.stringify(changeObj); | |
| 228 | - | |
| 229 | - socket.emit('teacher.programming', changeObjStr); | |
| 230 | - | |
| 231 | - socket.emit('programming.content', teacher.getValue()); | |
| 232 | - | |
| 233 | - }); | |
| 234 | - | |
| 235 | - // 链接时执行初始化代码 | |
| 236 | - socket.on('programming.content', function(msg) { | |
| 237 | - console.log('programming.content ---- ' + msg); | |
| 238 | - teacher.setValue(msg); | |
| 239 | - }); | |
| 87 | +<script src="../js/ladda/spin.js"></script> | |
| 88 | +<script src="../js/ladda/ladda.js"></script> | |
| 89 | +<script src="./js/main.js"></script> | |
| 240 | 90 | |
| 241 | - }); | |
| 242 | -</script> | |
| 243 | 91 | </body> |
| 244 | 92 | |
| 245 | 93 | </html> | ... | ... |