// 实训游戏需要的js功能 var EXPAND = 0; // 放大 var SHRINK = 1; // 缩小 var repositoryTabHeight = 40 $(function(){ function update_rows_and_cols(rows) { var _iframe = document.getElementById("game_webssh"); if(_iframe == null || _iframe == undefined || _iframe == ""){ return; } _iframe.contentWindow.postMessage({tp: 'resize', rows: rows, cols: 0}, "https://webssh.educoder.net"); } window.top.__updateWebsshRows = update_rows_and_cols // TPI拖拽功能 begin var doc = $(document); var lab = $(".b-label"); var cen = $(".h-center"); var nextW2,nextW1; var dragging = false; var flag = false; var wrapWidth; var wrapHeight; var nRow = 0; //var nCol = 0; lab.live('mousedown touchstart',function(){ $('#game_webssh').css('pointer-events', 'none') dragging = true; leftOffset = $(".labelN").offset().left; wrapWidth = $(".labelN").width(); return false; } ); cen.live('mousedown',function(){ // 使得iframe不捕获事件 $('#game_webssh').css('pointer-events', 'none') flag = true; topOffset = $(".centerH").offset().top; wrapHeight = $(".centerH").height(); return false; } ); // react add TODO react加载完dom再执行 setTimeout(function(){ $('.CodeMirror.cm-s-railscasts').css("height", $("#games_repository_contents").height() - repositoryTabHeight); }, 800) // window resize $(window).on('resize', function() { $('.CodeMirror.cm-s-railscasts').css("height", $("#games_repository_contents").height() - repositoryTabHeight); }) var FF = !(window.mozInnerScreenX == null); var websshLineHeight = FF ? 19 : 18 doc.live('mousemove touchmove',function(e){ $(".-brother").show();// 代码行的遮罩显示 if(dragging) { clickX = e.pageX || e.originalEvent.touches[0].pageX;; if(clickX > leftOffset+0&&clickX topOffset +100) { cen.css('top', clickY - 7 - topOffset + 'px'); $("#games_repository_contents").height( clickY-topOffset + 'px'); // react add $('.CodeMirror.cm-s-railscasts') .css("height", clickY- topOffset - repositoryTabHeight - $('#games_repository_contents .codePath').height() - 12); nextW1 = clickY-topOffset; $("#games_valuation_contents").height( wrapHeight - nextW1 + 'px'); var h = $("#games_repository_contents").height() - $("#top_repository").height() - 50; var m = $("#games_repository_contents").height() - 50; var w = $("#games_repository_contents").width(); $(".game_webssh").css("min-height", m); $(".game_webssh").css("max-height", m); // 火狐下行高为19 var rows = Math.floor(m / websshLineHeight); //var cols = parseInt(w / 6.2); $("#file_entry_content").find(".CodeMirror-scroll").css("min-height", h); $("#file_entry_content").find(".CodeMirror-scroll").css("max-height", h); } else { cen.css('top', '0px'); } // 行高发生变化,则调整webssh的term的高度 if(nRow != rows){ //window.frames['game_webssh'].contentWindow.resizeTerminal({rows:rows}); update_rows_and_cols(rows); nRow = rows; }else{ nRow = rows; } } }); doc.live("mouseup touchend", function(e) { // 使得iframe可以继续捕获事件 $('#game_webssh').css('pointer-events', 'inherit') flag = false; dragging = false; e.cancelBubble = true; $(".-brother").hide(); // 代码行的遮罩隐藏 }); window.__tpiOnResize = function() { var m = $("#games_repository_contents").height() - 50; $(".game_webssh").css("min-height", m); $(".game_webssh").css("max-height", m); var _iframe = document.getElementById("game_webssh"); if(!_iframe){ return; } var FF = !(window.mozInnerScreenX == null); var websshLineHeight = FF ? 19 : 18 var m = $("#games_repository_contents").height() - 50; var rows = Math.floor(m / websshLineHeight); window.top.__updateWebsshRows && window.top.__updateWebsshRows(rows) } // end; //解決IE瀏覽器大小改變時webssh佈局變亂。 window.onresize = function(){ __tpiOnResize() } // 评论区域的回复按钮 function reply_to_dis(id, name){ $("#comment_news").attr("placeholder", "回复"+name+":"); $("#dis_reply_id").val(id); $("#comment_news").focus(); } // end // 点击全部任务向右侧展开 $("#all_task_show").on("click", function(e){ c = 0; $("#all_task_tab").removeClass('leftnav-active'); $("#all_task_show").css("background","rgba(0,0,0,0)"); $("#all_task_index").css("left", 0).stop().animate({ left: "-505px" }, 400, function(){ $("#all_task_show").hide(); fadein = 0; }); }); // end // 列表区域阻止事件冒泡 $("#all_task_index").on("click", function(e){ e.stopPropagation(); }); // end // 下一关增加loading效果 $("#next_step").live("click", function(){ nNext = $("#next_step_area"); html = "下一关"; nNext.html(html); }); // end // 上一关增加loading效果 $("#prev_step").live("click", function(){ nNext = $("#prev_step_area"); html = "上一关"; nNext.html(html); }); // end }); // 查看参考答案 function open_answer(game, myshixun, choose){ $.ajax({ url: "/myshixuns/" + myshixun + "/stages/" + game + "/answer", data:{choose: choose}, dataType: "script" }) } // 选择题选择答案 function choice_answer(st, nThis){ if(st == "2"){ //$(nThis).hasClass("card-check") ? $(nThis).removeClass("card-check") : $(nThis).addClass("card-check"); $(nThis).toggleClass("card-check"); $(nThis).toggleClass("color_white"); } else if (st == "1"){ var choice = $(".color_white"); choice.removeClass("card-check"); choice.removeClass("color_white"); $(nThis).addClass("card-check"); $(nThis).toggleClass("color_white"); } } // end // 评测区域点击TAB切换样式 function check_tab(allClassName,addClassName,item){ //点击tab添加样式 $("."+allClassName).removeClass(addClassName); $(item).addClass(addClassName); //获取当前点击的tab的索引位置 var index=$(item).index()+1; //显示或隐藏对应的内容块 $("#"+allClassName+"_"+index).siblings().addClass("undis"); $("#"+allClassName+"_"+index).removeClass("undis"); } // end // 选择题公开的测试集允许展开与隐藏 function toggle_test_case_choose(t_case, id){ if(true){ var nTest = $("#test_case_"+id).parent().prev(".-task-ces-top").children("i:first-child"); //图标节点 if (nTest.hasClass("fa-caret-down")){ nTest.addClass("fa-caret-right"); nTest.removeClass("fa-caret-down"); }else if( nTest.hasClass("fa-caret-right") ){ nTest.addClass("fa-caret-down"); nTest.removeClass("fa-caret-right"); } $("#test_case_"+id).toggle(); } } // 公开的测试集允许展开与隐藏 var dv; function toggle_test_case(open, output, actual_output, id, power){ var base64 = new Base64(); output = base64.decode(output); actual_output = base64.decode(actual_output); actual_output = actual_output.replace(/\\r\\n/g, "\r\n").replace(/\\r/g, "\r").replace(/\\n/g, "\n").replace(/\\t/g,"\t").replace(/<\/\/script>/g, ""); output = output.replace(/\\r\\n/g, "\r\n").replace(/\\r/g, "\r").replace(/\\n/g, "\n").replace(/\\t/g,"\t"); if(true){ var nTest = $("#test_case_"+id).parent().prev(".-task-ces-top").children("i:first-child"); //图标节点 if (nTest.hasClass("fa-caret-down")){ nTest.addClass("fa-caret-right"); nTest.removeClass("fa-caret-down"); $("#result_different_show_"+ id).siblings(".-task-ces-info").attr("style","display:none"); $("#result_different_show_"+ id).hide(); $("#test_case_"+id).hide(); }else if( nTest.hasClass("fa-caret-right") ){ nTest.addClass("fa-caret-down"); nTest.removeClass("fa-caret-right"); $("#result_different_show_"+ id).show(); $("#test_case_"+id).show(); $("#result_different_show_"+ id).siblings(".-task-ces-info").attr("style","display:block"); if(open == 1 || power){ var id = "result_different_show_" + id; //var oldData = "摄氏温度\t\t华氏温度\n********************\n\n-40 \t\t -40.0\n-35 \t\t -31.0\n-30 \t\t -22.0\n-25 \t\t -13.0\n-20 \t\t -4.0\n-15 \t\t 5.0\n-10 \t\t 14.0\n-5 \t\t 23.0\n0 \t\t 32.0\n5 \t\t 41.0\n10 \t\t 50.0\n15 \t\t 59.0\n20 \t\t 68.0\n25 \t\t 77.0\n30 \t\t 86.0\n35 \t\t 95.0\n40 \t\t 104.0\n45 \t\t 113.0\n50 \t\t 122.0\n\n***********************\n\n[0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300]\n\n***********************\n5050 \t\t 5050\n\n***********************\n\n265252859812191058636308480000000\n\n***********************\n\nFalse\nFalse\nFalse\nFalse\nTrue\nTrue\nFalse\nFalse\nFalse\nTrue\n\n***********************\n\n3339 \t\t 333.9\n"; var oldData = output; var orig1 = ''; var newData = actual_output == "null" ? "" : actual_output; //var newData = "摄氏温度\t\t华氏温度\n********************\n-40 \t\t -40.0\n-35 \t\t -31.0\n-30 \t\t -22.0\n-25 \t\t -13.0\n-20 \t\t -4.0\n-15 \t\t 5.0\n-10 \t\t 14.0\n-5 \t\t 23.0\n0 \t\t 32.0\n5 \t\t 41.0\n10 \t\t 50.0\n15 \t\t 59.0\n20 \t\t 68.0\n25 \t\t 77.0\n30 \t\t 86.0\n35 \t\t 95.0\n40 \t\t 104.0\n45 \t\t 113.0\n50 \t\t 122.0\n\n***********************\n\n[0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300]\n\n***********************\n\n5050 \t\t 5050\n\n***********************\n\n265252859812191058636308480000000\n\n***********************\n\nFalse\nFalse\nFalse\nFalse\nTrue\nTrue\nFalse\nFalse\nFalse\nTrue\n\n***********************\n\n3339333.9\n"; var mv = CodeMirror.k_init(id, newData, oldData); if (newData == ""){ $(".CodeMirror-merge-r-chunk").css("background", "none"); $(".CodeMirror-merge-r-inserted").css("background-image", "none"); //$(".CodeMirror-merge-copy").find('i').remove(); } var height=0; if($("#"+id).find(".CodeMirror-merge-pane").eq(0).height()>$("#"+id).find(".CodeMirror-merge-pane").eq(1).height()){ height = parseInt($("#"+id).find(".CodeMirror-merge-pane").eq(0).height()); }else{ height = parseInt($("#"+id).find(".CodeMirror-merge-pane").eq(1).height()); } $("#"+id).find(".CodeMirror").height(height); $(".CodeMirror-merge-gap").css("height", height); $(".CodeMirror-merge-gap").find("svg").css("height", height); } } } } // end // codemirror渲染textarea function CodeMirror_fromTextArea(id){ var Code = CodeMirror.fromTextArea(document.getElementById(id), { /* mode: {name: "text/x-c++src", // version: 2, singleLineStringErrors: false},*/ // 目前补全js是引入的javascript-hint,因此目前不能指定语言 lineNumbers: true, theme: "railscasts", // extraKeys: {"Ctrl-Q": "autocomplete"}, // 快捷键 indentUnit: 4, //代码缩进为一个tab的距离 matchBrackets: true, autoRefresh: true, smartIndent: true,//智能换行 extraKeys: {"Ctrl-Q": "autocomplete"}, autofocus: true, styleActiveLine: true, lint: true, gutters: ["CodeMirror-linenumbers", "breakpoints"] }); return Code; } // end var control = 0; // 版本库控制 0表示点击放大 1表示点击缩小 var control_1 = 0; // 测评控制 0表示点击放大 1表示点击缩小 // 版本库的放大与缩小 function repository_extend_and_zoom(){ var nGameRes = $("#games_repository_contents"); // 版本库区域 var nGameEva = $("#games_valuation_contents"); // 评测区域 var nRIcon = $("#extend_and_zoom").children("i"); // 版本库放大缩小按钮 var nCode = $("#file_entry_content").find(".CodeMirror-scroll"); // 版本库代码区域 var nMove = $(".h-center"); if(control == 0){ nGameRes.addClass("-flex-basic100"); nGameEva.addClass("-flex-basic0"); nRIcon.addClass("fa-compress"); nRIcon.removeClass("fa-expand"); $("#extend_and_zoom").attr("data-tip-left","收起"); nMove.hide(); control = 1; }else if(control == 1){ nGameRes.removeClass("-flex-basic100"); nGameEva.removeClass("-flex-basic0"); nRIcon.removeClass("fa-compress"); nRIcon.addClass("fa-expand"); $("#extend_and_zoom").attr("data-tip-left","展开"); nMove.show(); control = 0; } // react环境下没有window['editor_CodeMirror'] window['editor_CodeMirror'] && editor_CodeMirror.setSize("auto", "auto"); // react add $('.CodeMirror.cm-s-railscasts').css("height", $("#games_repository_contents").height() - repositoryTabHeight); var h = nGameRes.height() - $("#top_repository").height() - 50; nCode.css("min-height", h); } // end /*CodeMirror addon hint -----------------------------------------------Start*/ /* https://github.com/farzher/fuzzysort */ !function(e,r){"function"==typeof define&&define.amd?define([],r):"object"==typeof module&&module.exports?module.exports=r():e.fuzzysort=r()}(this,function(){var e="undefined"!=typeof require&&"undefined"==typeof window,r=new Map,n=new Map,o=[];o.total=0;var t=[],i=[];function a(){r.clear(),n.clear(),t=[],i=[]}function l(e){for(var r=-9007199254740991,n=e.length-1;n>=0;--n){var o=e[n];if(null!==o){var t=o.score;t>r&&(r=t)}}return-9007199254740991===r?null:r}function f(e,r){var n=e[r];if(void 0!==n)return n;var o=r;Array.isArray(r)||(o=r.split("."));for(var t=o.length,i=-1;e&&++i>1]=e[n],t=1+(n<<1)}for(var a=n-1>>1;n>0&&o.score>1)e[n]=e[a];e[n]=o}return n.add=function(n){var o=r;e[r++]=n;for(var t=o-1>>1;o>0&&n.score>1)e[o]=e[t];e[o]=n},n.poll=function(){if(0!==r){var n=e[0];return e[0]=e[--r],o(),n}},n.peek=function(n){if(0!==r)return e[0]},n.replaceTop=function(r){e[0]=r,o()},n},p=s();return function d(c){var g={single:function(e,r,n){return e?(u(e)||(e=g.getPreparedSearch(e)),r?(u(r)||(r=g.getPrepared(r)),((n&&void 0!==n.allowTypo?n.allowTypo:!c||void 0===c.allowTypo||c.allowTypo)?g.algorithm:g.algorithmNoTypo)(e,r,e[0])):null):null},go:function(e,r,n){if(!e)return o;var t=(e=g.prepareSearch(e))[0],i=n&&n.threshold||c&&c.threshold||-9007199254740991,a=n&&n.limit||c&&c.limit||9007199254740991,s=(n&&void 0!==n.allowTypo?n.allowTypo:!c||void 0===c.allowTypo||c.allowTypo)?g.algorithm:g.algorithmNoTypo,d=0,v=0,h=r.length;if(n&&n.keys)for(var w=n.scoreFn||l,x=n.keys,y=x.length,m=h-1;m>=0;--m){for(var T=r[m],k=new Array(y),b=y-1;b>=0;--b)(_=f(T,B=x[b]))?(u(_)||(_=g.getPrepared(_)),k[b]=s(e,_,t)):k[b]=null;k.obj=T;var I=w(k);null!==I&&(Ip.peek().score&&p.replaceTop(k))))}else if(n&&n.key){var B=n.key;for(m=h-1;m>=0;--m)(_=f(T=r[m],B))&&(u(_)||(_=g.getPrepared(_)),null!==(C=s(e,_,t))&&(C.scorep.peek().score&&p.replaceTop(C)))))}else for(m=h-1;m>=0;--m){var _,C;(_=r[m])&&(u(_)||(_=g.getPrepared(_)),null!==(C=s(e,_,t))&&(C.scorep.peek().score&&p.replaceTop(C)))))}if(0===d)return o;var A=new Array(d);for(m=d-1;m>=0;--m)A[m]=p.poll();return A.total=d+v,A},goAsync:function(r,n,t){var i=!1,a=new Promise(function(a,p){if(!r)return a(o);var d=(r=g.prepareSearch(r))[0],v=s(),h=n.length-1,w=t&&t.threshold||c&&c.threshold||-9007199254740991,x=t&&t.limit||c&&c.limit||9007199254740991,y=(t&&void 0!==t.allowTypo?t.allowTypo:!c||void 0===c.allowTypo||c.allowTypo)?g.algorithm:g.algorithmNoTypo,m=0,T=0;function k(){if(i)return p("canceled");var s=Date.now();if(t&&t.keys)for(var c=t.scoreFn||l,b=t.keys,I=b.length;h>=0;--h){for(var B=n[h],_=new Array(I),C=I-1;C>=0;--C)(P=f(B,L=b[C]))?(u(P)||(P=g.getPrepared(P)),_[C]=y(r,P,d)):_[C]=null;_.obj=B;var A=c(_);if(null!==A&&!(Av.peek().score&&v.replaceTop(_)),h%1e3==0&&Date.now()-s>=10))return void(e?setImmediate(k):setTimeout(k))}else if(t&&t.key){for(var L=t.key;h>=0;--h)if((P=f(B=n[h],L))&&(u(P)||(P=g.getPrepared(P)),null!==(j=y(r,P,d))&&!(j.scorev.peek().score&&v.replaceTop(j)),h%1e3==0&&Date.now()-s>=10)))return void(e?setImmediate(k):setTimeout(k))}else for(;h>=0;--h){var P,j;if((P=n[h])&&(u(P)||(P=g.getPrepared(P)),null!==(j=y(r,P,d))&&!(j.scorev.peek().score&&v.replaceTop(j)),h%1e3==0&&Date.now()-s>=10)))return void(e?setImmediate(k):setTimeout(k))}if(0===m)return a(o);for(var N=new Array(m),S=m-1;S>=0;--S)N[S]=v.poll();N.total=m+T,a(N)}e?setImmediate(k):k()});return a.cancel=function(){i=!0},a},highlight:function(e,r,n){if(null===e)return null;void 0===r&&(r=""),void 0===n&&(n="");for(var o="",t=0,i=!1,a=e.target,l=a.length,f=e.indexes,u=0;u999)return g.prepare(e);var n=r.get(e);return void 0!==n?n:(n=g.prepare(e),r.set(e,n),n)},getPreparedSearch:function(e){if(e.length>999)return g.prepareSearch(e);var r=n.get(e);return void 0!==r?r:(r=g.prepareSearch(e),n.set(e,r),r)},algorithm:function(e,r,n){for(var o=r._targetLowerCodes,a=e.length,l=o.length,f=0,u=0,s=0,p=0;;){if(n===o[u]){if(t[p++]=u,++f===a)break;n=e[0===s?f:s===f?f+1:s===f-1?f-1:f]}if(++u>=l)for(;;){if(f<=1)return null;if(0===s){if(n===e[--f])continue;s=f}else{if(1===s)return null;if((n=e[1+(f=--s)])===e[f])continue}u=t[(p=f)-1]+1;break}}f=0;var d=0,c=!1,v=0,h=r._nextBeginningIndexes;null===h&&(h=r._nextBeginningIndexes=g.prepareNextBeginningIndexes(r.target));var w=u=0===t[0]?0:h[t[0]-1];if(u!==l)for(;;)if(u>=l){if(f<=0){if(++d>a-2)break;if(e[d]===e[d+1])continue;u=w;continue}--f,u=h[i[--v]]}else if(e[0===d?f:d===f?f+1:d===f-1?f-1:f]===o[u]){if(i[v++]=u,++f===a){c=!0;break}++u}else u=h[u];if(c)var x=i,y=v;else x=t,y=p;for(var m=0,T=-1,k=0;k=0;--k)r.indexes[k]=x[k];return r},algorithmNoTypo:function(e,r,n){for(var o=r._targetLowerCodes,a=e.length,l=o.length,f=0,u=0,s=0;;){if(n===o[u]){if(t[s++]=u,++f===a)break;n=e[f]}if(++u>=l)return null}f=0;var p=!1,d=0,c=r._nextBeginningIndexes;if(null===c&&(c=r._nextBeginningIndexes=g.prepareNextBeginningIndexes(r.target)),(u=0===t[0]?0:c[t[0]-1])!==l)for(;;)if(u>=l){if(f<=0)break;--f,u=c[i[--d]]}else if(e[f]===o[u]){if(i[d++]=u,++f===a){p=!0;break}++u}else u=c[u];if(p)var v=i,h=d;else v=t,h=s;for(var w=0,x=-1,y=0;y=0;--y)r.indexes[y]=v[y];return r},prepareLowerCodes:function(e){for(var r=e.length,n=[],o=e.toLowerCase(),t=0;t=65&&l<=90,u=f||l>=97&&l<=122||l>=48&&l<=57,s=f&&!t||!i||!u;t=f,i=u,s&&(n[o++]=a)}return n},prepareNextBeginningIndexes:function(e){for(var r=e.length,n=g.prepareBeginningIndexes(e),o=[],t=n[0],i=0,a=0;aa?o[a]=t:(t=n[++i],o[a]=void 0===t?r:t);return o},cleanup:a,new:d};return g}()}); /* showHint */ !function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";var i="CodeMirror-hint",e="CodeMirror-hint-active";function n(t,i){this.cm=t,this.options=i,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length;var e=this;t.on("cursorActivity",this.activityFunc=function(){e.cursorActivity()})}t.showHint=function(t,i,e){if(!i)return t.showHint(e);e&&e.async&&(i.async=!0);var n={hint:i};if(e)for(var o in e)n[o]=e[o];return t.showHint(n)},t.defineExtension("showHint",function(i){i=function(t,i,e){var n=t.options.hintOptions,o={};for(var s in a)o[s]=a[s];if(n)for(var s in n)void 0!==n[s]&&(o[s]=n[s]);if(e)for(var s in e)void 0!==e[s]&&(o[s]=e[s]);o.hint.resolve&&(o.hint=o.hint.resolve(t,i));return o}(this,this.getCursor("start"),i);var e=this.listSelections();if(!(e.length>1)){if(this.somethingSelected()){if(!i.hint.supportsSelection)return;for(var o=0;ol.clientHeight+1,x=h.getScrollInfo();if(C>0){var A=k.bottom-k.top;if(m.top-(m.bottom-k.top)-A>0)l.style.top=(v=m.top-A)+"px",y=!1;else if(A>H){l.style.height=H-5+"px",l.style.top=(v=m.bottom-k.top)+"px";var S=h.getCursor();o.from.ch!=S.ch&&(m=h.cursorCoords(S),l.style.left=(g=m.left)+"px",k=l.getBoundingClientRect())}}var T,M=k.right-w;if(M>0&&(k.right-k.left>w&&(l.style.width=w-5+"px",M-=k.right-k.left-w),l.style.left=(g=m.left-M)+"px"),b)for(var F=l.firstChild;F;F=F.nextSibling)F.style.paddingRight=h.display.nativeBarWidth+"px";(h.addKeyMap(this.keyMap=function(t,i){var e={Up:function(){i.moveFocus(-1)},Down:function(){i.moveFocus(1)},PageUp:function(){i.moveFocus(1-i.menuSize(),!0)},PageDown:function(){i.moveFocus(i.menuSize()-1,!0)},Home:function(){i.setFocus(0)},End:function(){i.setFocus(i.length-1)},Enter:i.pick,Tab:i.pick,Esc:i.close},n=t.options.customKeys,o=n?{}:e;function s(t,n){var s;s="string"!=typeof n?function(t){return n(t,i)}:e.hasOwnProperty(n)?e[n]:n,o[t]=s}if(n)for(var c in n)n.hasOwnProperty(c)&&s(c,n[c]);var r=t.options.extraKeys;if(r)for(var c in r)r.hasOwnProperty(c)&&s(c,r[c]);return o}(n,{moveFocus:function(t,i){s.changeActive(s.selectedHint+t,i)},setFocus:function(t){s.changeActive(t)},menuSize:function(){return s.screenAmount()},length:a.length,close:function(){n.close()},pick:function(){s.pick()},data:o})),n.options.closeOnUnfocus)&&(h.on("blur",this.onBlur=function(){T=setTimeout(function(){n.close()},100)}),h.on("focus",this.onFocus=function(){clearTimeout(T)}));return h.on("scroll",this.onScroll=function(){var t=h.getScrollInfo(),i=h.getWrapperElement().getBoundingClientRect(),e=v+x.top-t.top,o=e-(window.pageYOffset||(document.documentElement||document.body).scrollTop);if(y||(o+=l.offsetHeight),o<=i.top||o>=i.bottom)return n.close();l.style.top=e+"px",l.style.left=g+x.left-t.left+"px"}),t.on(l,"dblclick",function(t){var i=r(l,t.target||t.srcElement);i&&null!=i.hintId&&(s.changeActive(i.hintId),s.pick())}),t.on(l,"click",function(t){var i=r(l,t.target||t.srcElement);i&&null!=i.hintId&&(s.changeActive(i.hintId),n.options.completeOnSingleClick&&s.pick())}),t.on(l,"mousedown",function(){setTimeout(function(){h.focus()},20)}),t.signal(o,"select",a[0],l.firstChild),!0}function l(t,i,e,n){if(t.async)t(i,n,e);else{var o=t(i,e);o&&o.then?o.then(n):n(o)}}n.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&t.signal(this.data,"close"),this.widget&&this.widget.close(),t.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(i,e){var n=i.list[e];n.hint?n.hint(this.cm,i,n):this.cm.replaceRange(c(n),n.from||i.from,n.to||i.to,"complete"),t.signal(i,"pick",n),this.close()},cursorActivity:function(){this.debounce&&(s(this.debounce),this.debounce=0);var t=this.cm.getCursor(),i=this.cm.getLine(t.line);if(t.line!=this.startPos.line||i.length-t.ch!=this.startLen-this.startPos.ch||t.ch0&&n.to.ch-n.from.ch!=o.to.ch-o.from.ch)))&&(this.data=i,i&&i.list.length))if(s&&1==i.list.length)this.pick(i,0);else{if(1==i.list.length&&i.to.ch-i.from.ch===i.list[0].length)return;this.widget=new h(this,i),t.signal(i,"shown")}}},h.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var t=this.completion.cm;this.completion.options.closeOnUnfocus&&(t.off("blur",this.onBlur),t.off("focus",this.onFocus)),t.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var t=this;this.keyMap={Enter:function(){t.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(i,n){if(i>=this.data.list.length?i=n?this.data.list.length-1:0:i<0&&(i=n?0:this.data.list.length-1),this.selectedHint!=i){var o=this.hints.childNodes[this.selectedHint];o.className=o.className.replace(" "+e,""),(o=this.hints.childNodes[this.selectedHint=i]).className+=" "+e,o.offsetTopthis.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=o.offsetTop+o.offsetHeight-this.hints.clientHeight+3),t.signal(this.data,"select",this.data.list[this.selectedHint],o)}},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1}},t.registerHelper("hint","auto",{resolve:function(i,e){var n,o=i.getHelpers(e,"hint");if(o.length){var s=function(t,i,e){var n=function(t,i){if(!t.somethingSelected())return i;for(var e=[],n=0;n0?i(t):o(s+1)})}(0)};return s.async=!0,s.supportsSelection=!0,s}return(n=i.getHelper(i.getCursor(),"hintWords"))?function(i){return t.hint.fromList(i,{words:n})}:t.hint.anyword?function(i,e){return t.hint.anyword(i,e)}:function(){}}}),t.registerHelper("hint","fromList",function(i,e){var n=i.getCursor(),o=i.getTokenAt(n),s=t.Pos(n.line,o.end);if(o.string&&/\w/.test(o.string[o.string.length-1]))var c=o.string,r=t.Pos(n.line,o.start);else c="",r=s;for(var h=[],l=0;l,]/,closeOnUnfocus:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null};t.defineOption("hintOptions",null)}); /* javascript-hint 注释掉,使得show-hint.js 的resolveAutoHints方法进入这个判断:} else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { */ // !function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],t):t(CodeMirror)}(function(t){var e=t.Pos;function r(t,e){for(var r=0,n=t.length;rf.ch&&(c.end=f.ch,c.string=c.string.slice(0,f.ch-c.start)):c={start:f.ch,end:f.ch,string:"",state:c.state,type:"."==c.string?"property":null};for(var p=c;"property"==p.type;){if("."!=(p=s(i,e(f.line,p.start))).string)return;if(p=s(i,e(f.line,p.start)),!l)var l=[];l.push(p)}t.signal(i,"hinting");var u=i.state.myhints;return i.state.needToClearJSHint&&(o=[],i.state.needToClearJSHint=!1),u&&u.forEach(function(t){n(o,t)||o.push(t)}),{list:function(t,e,i,o){var s=[],a=t.string,f=o&&o.globalScope||window;function c(t){if(fuzzysort&&fuzzysort.single){var e=fuzzysort.single(a,t);e&&e.score<=0&&!n(s,t)&&s.push(t)}else 0!=t.lastIndexOf(a,0)||n(s,t)||s.push(t)}if(e&&e.length){var p,l=e.pop();for(l.type&&0===l.type.indexOf("variable")?(o&&o.additionalContext&&(p=o.additionalContext[l.string]),o&&!1===o.useGlobalScope||(p=p||f[l.string])):"string"==l.type?p="":"atom"==l.type?p=1:"function"==l.type&&(null==f.jQuery||"$"!=l.string&&"jQuery"!=l.string||"function"!=typeof f.jQuery?null!=f._&&"_"==l.string&&"function"==typeof f._&&(p=f._()):p=f.jQuery());null!=p&&e.length;)p=p[e.pop().string];null!=p&&function(t){"string"==typeof t?r(stringProps,c):t instanceof Array?r(arrayProps,c):t instanceof Function&&r(funcProps,c);!function(t,e){if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(var r=t;r;r=Object.getPrototypeOf(r))Object.getOwnPropertyNames(r).forEach(e);else for(var n in t)e(n)}(t,c)}(p)}else{var u=fuzzysort.go(a,i);u&&u.forEach(function(t){s.push(t.target)})}return s}(c,l,o,a),from:e(f.line,c.start),to:e(f.line,c.end)}}}function o(t,e){var r=t.getTokenAt(e);return e.ch==r.start+1&&"."==r.string.charAt(0)?(r.end=r.start,r.string=".",r.type="property"):/^\.[\w$_]*$/.test(r.string)&&(r.type="property",r.start++,r.string=r.string.replace(/\./,"")),r}t.registerHelper("hint","javascript",function(t,e){return i(t,s,function(t,e){return t.getTokenAt(e)},e)}),t.registerHelper("hint","coffeescript",function(t,e){return i(t,coffeescriptKeywords,o,e)});var s="double float int long short null true false enum super this void auto for register static const friend mutable explicit virtual template typename printf break continue return do while if else for instanceof switch case default try catch finally throw throws assert import package boolean byte char delete private inline struct union signed unsigned export extern namespace using operator sizeof typedef typeid and del from not as elif or with pass except print exec raise is def lambda private protected public abstract class extends final implements interface native new static strictfp synchronized transient main String string System println vector bool boolean FALSE TRUE function".split(" ")}); /* anyword-hint */ !function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";var r=/[\w$]+/;e.registerHelper("hint","anyword",function(t,o){for(var i=o&&o.word||r,n=o&&o.range||500,f=t.getCursor(),s=t.getLine(f.line),a=f.ch,c=a;c&&i.test(s.charAt(c-1));)--c;for(var l=c!=a&&s.slice(c,a),d=o&&o.list||[],u={},p=new RegExp(i.source,"g"),g=-1;g<=1;g+=2)for(var h=f.line,m=Math.min(Math.max(h+g*n,t.firstLine()),t.lastLine())+g;h!=m;h+=g)for(var y,b=t.getLine(h);y=p.exec(b);)h==f.line&&y[0]===l||l&&0!=y[0].lastIndexOf(l,0)||Object.prototype.hasOwnProperty.call(u,y[0])||(u[y[0]]=!0,d.push(y[0]));return{list:d,from:e.Pos(f.line,c),to:e.Pos(f.line,a)}})}); /*CodeMirror addon hint -----------------------------------------------End*/ // 测评的扩大与缩小 function valuation_extend_and_zoom(){ var nGameRes = $("#games_repository_contents"); // 版本库区域 var nGameEva = $("#games_valuation_contents"); // 评测区域 var nVIcon = $("#valuation_extend_and_zoom").children("i"); // 评测放大缩小 var nMove = $(".h-center"); if(control_1 == 0){ nGameRes.addClass("-flex-basic0"); nGameEva.addClass("-flex-basic100"); nVIcon.removeClass("fa-expand"); nVIcon.addClass("fa-compress"); $("#valuation_extend_and_zoom").attr("data-tip-left","收起"); nMove.hide(); control_1 = 1; }else if(control_1 == 1){ nGameRes.removeClass("-flex-basic0"); nGameEva.removeClass("-flex-basic100"); nVIcon.addClass("fa-expand"); nVIcon.removeClass("fa-compress"); $("#valuation_extend_and_zoom").attr("data-tip-left","展开"); nMove.show(); control_1 = 0; } } // end // 点赞与取消点赞 var h = true; function game_praise(obj_id, obj_type){ if(treadStatus){ return; } $.ajax({ url: "/praise_tread/praise_plus?obj_id=" + obj_id + "&obj_type=" + obj_type, data: {horizontal: h, game_praise: true}, success:function(data){ h = !h; var praise_count = $("#game_praise_count"); if(data.praise){ praiseStatus = true; //已赞 praise_count.html(data.praise_tread_count); $("#game_praise_tread").children("i").addClass("color-orange03"); $("#game_praise_tread").attr("data-tip-top", "取消点赞") }else{ praiseStatus = false; //取消赞 praise_count.html(data.praise_tread_count); $("#game_praise_tread").children("i").removeClass("color-orange03"); $("#game_praise_tread").attr("data-tip-top", "点赞") } } }); } // 踩/取消踩功能 var d = true; function game_tread(obj_id){ if(praiseStatus){ return; } $.ajax({ url: "/praise_tread/praise_plus?obj_id=" + obj_id + "&obj_type=ChallengeTread", data: {horizontal: d, game_praise: true}, success:function(data){ d = !d; var tread_count = $("#game_tread_count"); if(data.praise){ treadStatus = true; // 取消踩 tread_count.html(data.praise_tread_count); $("#game_tread").children("i").addClass("color-orange"); $("#game_tread").attr("data-tip-top", "取消踩") }else{ treadStatus = false; // 已踩 tread_count.html(data.praise_tread_count); $("#game_tread").children("i").removeClass("color-orange"); $("#game_tread").attr("data-tip-top", "踩"); } } }); } // end function setupAjaxIndicatorBase() { $('#ajax-indicator-base').bind('ajaxSend', function(event, xhr, settings) { if(settings && settings.url && (settings.url.match(/account\/heartbeat$/) || settings.url.match(/file_update/) || settings.url.match(/game_build/) || settings.url.match(/game_status/) || settings.url.match(/refresh_game_list/) || settings.url.match(/next_step/) || settings.url.match(/prev_step/) || settings.url.match(/open_webssh/) || settings.url.match(/repository/) || settings.url.match(/get_waiting_time/) )){ return; } if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') { $('#ajax-indicator-base').css("display","flex").html("").show(); } }); $('#ajax-indicator-base').bind('ajaxStop', function() { $('#ajax-indicator-base').html("").hide(); if(MathJax && MathJax.Hub) MathJax.Hub.Queue(['Typeset', MathJax.Hub]); //如果是ajax刷新页面的话,手动执行MathJax的公式显示 try{ prettyPrint(); //如果刷新出来的页面如果存在代码行的话,也需要美化 }catch (e){ } }); } function match_specific_symbol(str){ str = str.replace(/ /g, "").replace(/\r\n$/, "").replace(/\n$/, "").replace(/\r$/, "").replace(/\r\n/g, "
").replace(/\n/g, "
").replace(/\r/g, "
").replace(/\t/g, "") return str }; /* var panes = 2, highlight = true, connect = null, collapse = false; function initUI(id, value, orig1, orig2, dv, panes, highlight, connect, collapse) { if (value == null) return; var target = document.getElementById(id); target.innerHTML = ""; dv = CodeMirror.MergeView(target, { value: value, origLeft: panes == 3 && !collapse && !connect ? orig1 : null, orig: orig2, lineNumbers: true, mode: "text/html", highlightDifferences: highlight, connect: connect, collapseIdentical: collapse }); } function toggleDifferences() { dv.setShowDifferences(highlight = !highlight); } function mergeViewHeight(mergeView) { function editorHeight(editor) { if (!editor) return 0; return editor.getScrollInfo().height; } return Math.max(editorHeight(mergeView.leftOriginal()), editorHeight(mergeView.editor()), editorHeight(mergeView.rightOriginal())); } function resize(mergeView) { var height = mergeViewHeight(mergeView); for(;;) { if (mergeView.leftOriginal()) mergeView.leftOriginal().setSize(null, height); mergeView.editor().setSize(null, height); if (mergeView.rightOriginal()) mergeView.rightOriginal().setSize(null, height); var newHeight = mergeViewHeight(mergeView); if (newHeight >= height) break; else height = newHeight; } mergeView.wrap.style.height = height + "px"; } */ $(document).ready(setupAjaxIndicatorBase); // test_sets:测试集;had_test_count:输出集的个数;test_sets_count:测试集的个数;had_passed_testsests_error_count:测试集报错数;test_sets_hidden_count:隐藏测试集的个数 // test_sets_public_count:公开测试集的个人;had_passed_testsests_hidden_count:通过的隐藏集个数;had_passed_testsests_public_count:通过的公开测试集个数 // final_score:最终得经验数;gold:最终得的金币数;latest_output:最新的输出;language:实训的语言, power:是否有权限看隐藏测试集, record:最新的一次的评测时间信息, mirror_name镜像名 function code_evaluation(test_sets, had_test_count, test_sets_count, had_passed_testsests_error_count, test_sets_hidden_count, test_sets_public_count, had_passed_testsests_hidden_count, had_passed_testsests_public_count, final_score, gold, latest_output, mirror_name, power, record ) { //动态加载评测区域 /** * Created by wang on 2017/8/9. */ //test_sets = [HtmlUtil.htmlDecode(test_sets)]; var $EffectDisplay , $b, $TestResult, $d, $e, $f, $g, $h, $EvaluationInformation , $n, $i; // 第一块 效果显示 $EffectDisplay = "
"; $b = "
" + "
" + "
" + "
" + "" + "
" + "" + "
" + "
"; if (mirror_name.indexOf("Html") != -1) { $EffectDisplay = "
"+$b+"
"; } //第二块 测试结果 if (had_test_count != "0") { var $t = ""; if(record != "" && record != null && record != undefined){ $t = " " + "本次评测耗时:" + record + "秒" + "" } if (had_passed_testsests_error_count == test_sets_count) { $d = $t + "

" + "" + "" + test_sets_count + "/" + test_sets_count + " 全部通过

"; } else { $d = $t + "

" + "" + " " + had_passed_testsests_error_count + '/' + test_sets_count + "" + latest_output + "

"; } } var $forHtml = ""; var $Bear = ""; for (var i = 0; i < test_sets.length; i++) { if (test_sets[i].result == 0) { $g = "" }else if(test_sets[i].result == 1) { $g = "" }else{ $g = "" } if (test_sets[i].is_public == 0) { if(power && power != 'false'){ $g = "" + $g }else if(test_sets[i].result == 0 || test_sets[i].result == 1){ $g = "" + $g }else{ $g = "" } }else{ if(test_sets[i].result != 0 && test_sets[i].result != 1){ $g = undefined; } } if(test_sets[i].input == null || test_sets[i].input == ""){ $i = ""; }else{ $i = "
" + "测试输入:" + "

" + ( (test_sets[i].input == null || test_sets[i].input == "") ? "空" : test_sets[i].input.replace(/\r\n/g, "
") ) + "

" + "
" } if ((test_sets[i].is_public == 1 || power == 'true') || (power && power != 'false')) { $h = "
" + $i + "

预期输出:

实际输出:

"+ "
" + "
"; }else if(test_sets[i].is_public == 0) { $h = "
" + "
    " + "
  • " + "
    " + "

    此为隐藏测试项,解锁

    " + "
    " + "
  • " + "
" + "
"; } $e = "
"+$h+"
"; // actual_output 正则匹配的目的: 因为字符串拼接\r\n时,会转义导致js截成2断报错.因此需要编码 var base64 = new Base64(); var actual_output = test_sets[i].actual_output == null ? "" : base64.encode(test_sets[i].actual_output); var output = test_sets[i].output == null ? "" : base64.encode(test_sets[i].output); $f = "
" + "" + "测试集 " + (i + 1) + "" + ($g == undefined ? "" : $g)+"
"; $forHtml = $f + $e; $Bear += $forHtml; } $TestResult = "
" + "
" + "
" + "
" + "
" + ($d == undefined ? "" : $d) + $Bear + "
" + "
" + "
" + "
"; //第三块 评测信息 if (had_test_count != "0") { if (had_passed_testsests_error_count == test_sets_count) { $n = "

" + "" + "" + test_sets_count + "/" + test_sets_count + " 全部通过

"; } else { $n = "

" + "" + "" + had_passed_testsests_error_count + "/" + test_sets_count + " " + latest_output + "

"; } // $("#evaluating_info").html($n); } $EvaluationInformation = "
" + "
" + "
" + "
" + "
" + ($n == undefined ? "" : $n)+"
" + "
" + "
    " + "
  • " + "公开测试:" + "" + had_passed_testsests_public_count + "/" + test_sets_public_count + "" + "
  • " + "
  • " + " 隐藏测试:" + "" + had_passed_testsests_hidden_count + "/" + test_sets_hidden_count + "" + "
  • " + "
  • " + " 经验值:" + "+ " + final_score + " " + "
  • " + "
  • " + "金币:" + "= 0 ? "color-light-green" : "-text-danger") + "\"" +"id=\"grade_value\">" + (gold >= 0 ? ("+ " + gold) : gold) + "" + "
  • " + "
" + "
" + "
" + "
" + "
" + "
" + "
"; var $html = $EffectDisplay + $TestResult + $EvaluationInformation; $("#game_test_set_results").html($html); } // end // $.ajax({ // url: "http://localhost:3000/api/v1/games/zl6kx8f7vfpo", // // The name of the callback parameter, as specified by the YQL service // jsonp: "callback", // // Tell jQuery we're expecting JSONP // // dataType: "jsonp", // // Tell YQL what we want and that we want JSON // data: { // // q: "select title,abstract,url from search.news where query=\"cat\"", // format: "json" // }, // // Work with the response // success: function( response ) { // console.log( response ); // server response // } // });