From 5963f23d336210fa45bc111dd560a3453dd1f16a Mon Sep 17 00:00:00 2001 From: Van Date: Sat, 27 Feb 2016 11:16:04 +0800 Subject: [PATCH] cc --- static/js/wide.min.js | 2 +- static/js/wide.min.js.map | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/static/js/wide.min.js b/static/js/wide.min.js index f2bfc19..a10eb8b 100644 --- a/static/js/wide.min.js +++ b/static/js/wide.min.js @@ -5,7 +5,7 @@ var notification={init:function(){$(".notification-count").click(function(){bott var tree={fileTree:void 0,getCurrentNodeLastNode:function(e){var t=e.children[e.children.length-1];return t.open?tree.getCurrentNodeLastNode(t):t},getNextShowNode:function(e){return 0!==e.level?e.getParentNode().getNextNode()?e.getParentNode().getNextNode():tree.getNextShowNode(e.getParentNode()):e.getNextNode()},isBottomNode:function(e){return e.open?!1:e.getParentNode()?e.getParentNode().isLastNode?tree.isBottomNode(e.getParentNode()):!1:e.isLastNode?!0:!1},getTIdByPath:function(e){for(var t=tree.fileTree.transformToArray(tree.fileTree.getNodes()),i=0,o=t.length;o>i;i++)if(t[i].path===e)return t[i].tId},getOpenPaths:function(){for(var e=tree.fileTree.transformToArray(tree.fileTree.getNodes()),t=[],i=0,o=e.length;o>i;i++)e[i].open&&t.push(e[i].path);return t},getAllParents:function(e,t){return t||(t=[]),e&&e.parentTId?(t.push(e.getParentNode()),tree.getAllParents(e.getParentNode(),t)):t},isParents:function(e,t){var i=tree.fileTree.getNodeByTId(e);if(i&&i.parentTId){var o=tree.fileTree.getNodeByTId(i.parentTId);return i.path===t?!0:tree.isParents(o.tId,t)}return!1},isDir:function(){return 0===wide.curNode.iconSkin.indexOf("ico-ztree-dir")?!0:!1},newFile:function(e){return $(e).hasClass("disabled")?!1:void $("#dialogNewFilePrompt").dialog("open")},newDir:function(e){return $(e).hasClass("disabled")?!1:void $("#dialogNewDirPrompt").dialog("open")},removeIt:function(e){if(e){if($(e).hasClass("disabled"))return!1}else if(!wide.curNode.removable)return!1;$("#dialogRemoveConfirm").dialog("open")},rename:function(e){return e&&$(e).hasClass("disabled")?!1:void $("#dialogRenamePrompt").dialog("open")},"export":function(){var e=newWideRequest(),t=!1;e.path=wide.curNode.path,$.ajax({async:!1,type:"POST",url:config.context+"/file/zip/new",data:JSON.stringify(e),dataType:"json",success:function(e){return e.succ?void(t=!0):($("#dialogAlert").dialog("open",e.msg),!1)}}),t&&window.open(config.context+"/file/zip?path="+wide.curNode.path+".zip")},crossCompile:function(e){var t=newWideRequest();t.path=wide.curNode.path,t.platform=e,$.ajax({async:!1,type:"POST",url:config.context+"/cross",data:JSON.stringify(t),dataType:"json",success:function(e){return e.succ?void 0:($("#dialogAlert").dialog("open",e.msg),!1)}})},decompress:function(){var e=newWideRequest();e.path=wide.curNode.path,$.ajax({async:!1,type:"POST",url:config.context+"/file/decompress",data:JSON.stringify(e),dataType:"json",success:function(e){if(!e.succ)return $("#dialogAlert").dialog("open",e.msg),!1;var t=wide.curNode.getParentNode();tree.fileTree.reAsyncChildNodes(t,"refresh")}})},refresh:function(e){return e&&$(e).hasClass("disabled")?!1:void tree.fileTree.reAsyncChildNodes(wide.curNode,"refresh",!0)},gitClone:function(e){return e&&$(e).hasClass("disabled")?!1:void $("#dialogGitClonePrompt").dialog("open")},"import":function(){var e=newWideRequest();e.path=wide.curNode.path,$("#importFileupload").fileupload({url:"/file/upload?path="+e.path,dataType:"json",formData:e,done:function(e,t){tree.fileTree.reAsyncChildNodes(wide.curNode,"refresh")},fail:function(){console.log(arguments)}})},init:function(){$("#file").click(function(){$(this).focus()});var e=newWideRequest();$.ajax({type:"POST",url:config.context+"/files",data:JSON.stringify(e),dataType:"json",success:function(e){if(e.succ){var t=$("#dirRMenu"),i=$("#fileRMenu"),o={data:{key:{title:"path"}},view:{showTitle:!0,selectedMulti:!1},async:{enable:!0,url:config.context+"/file/refresh",autoParam:["path"]},callback:{onDblClick:function(e,t,i){i&&tree.openFile(i)},onRightClick:function(e,o,r){if(r&&!r.isGOAPI){if(menu.undisabled(["import","export","git-clone"]),wide.curNode=r,tree.fileTree.selectNode(r),tree.isDir()){wide.curNode.removable?t.find(".remove").removeClass("disabled"):t.find(".remove").addClass("disabled"),wide.curNode.creatable?t.find(".create").removeClass("disabled"):t.find(".create").addClass("disabled");var n=e.clientY-10;t.height()+n>$(".content").height()&&(n=n-t.height()-25),t.css({top:n+"px",left:e.clientX+"px",display:"block"}).show(),i.hide()}else{wide.curNode.removable?i.find(".remove").removeClass("disabled"):i.find(".remove").addClass("disabled"),-1===wide.curNode.path.indexOf("zip",wide.curNode.path.length-"zip".length)?i.find(".decompress").hide():i.find(".decompress").show(),-1===wide.curNode.path.indexOf("go",wide.curNode.path.length-"go".length)?i.find(".linux64").hide():i.find(".linux64").show();var n=e.clientY-10;i.height()+n>$(".content").height()&&(n=n-i.height()-25),i.css({top:n+"px",left:e.clientX+"px",display:"block"}).show(),t.hide(),menu.disabled(["import","git-clone"])}$("#files").focus()}},onClick:function(e,t,i,o){i&&(wide.curNode=i,tree.fileTree.selectNode(i),menu.undisabled(["import","export","git-clone"]),tree.isDir()||menu.disabled(["import","git-clone"]),$("#files").focus())}}};tree.fileTree=$.fn.zTree.init($("#files"),o,e.data.children),session.restore()}}}),this._initSearch(),this._initRename()},openFile:function(e,t){wide.curNode=e;for(var i=t,o=0,r=editors.data.length;r>o;o++)if(editors.data[o].id===e.path){editors.tabs.setCurrent(e.path),wide.curEditor=editors.data[o].editor,i||(i=wide.curEditor.getCursor()),$(".footer .cursor").text("| "+(i.line+1)+":"+(i.ch+1)+" |"),wide.curEditor.setCursor(i);var n=Math.floor(wide.curEditor.getScrollInfo().clientHeight/wide.curEditor.defaultTextHeight()/2),a=wide.curEditor.cursorCoords({line:i.line-n,ch:0},"local");return wide.curEditor.scrollTo(0,a.top),wide.curEditor.focus(),wide.refreshOutline(),!1}if(!tree.isDir()){var d=newWideRequest();d.path=e.path,$.ajax({async:!1,type:"POST",url:config.context+"/file",data:JSON.stringify(d),dataType:"json",success:function(t){if(!t.succ)return $("#dialogAlert").dialog("open",t.msg),!1;var o=t.data;if(!o.mode){var r=CodeMirror.findModeByFileName(e.path);r?o.mode=r.mime:o.mode="text/plain"}if(o.mode||console.error("Can't find mode by file name ["+e.path+"]"),"img"===o.mode){window.open(config.context+o.path);return!1}i||(i=CodeMirror.Pos(0,0)),editors.newEditor(o,i),wide.refreshOutline()}})}},_initSearch:function(){$("#dialogSearchForm > input:eq(0)").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click(),""===$.trim($(this).val())?t.prop("disabled",!0):t.prop("disabled",!1)}),$("#dialogSearchForm > input:eq(1)").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click()}),$("#dialogSearchForm").dialog({modal:!0,height:80,width:260,title:config.label.search,okText:config.label.search,cancelText:config.label.cancel,afterOpen:function(){$("#dialogSearchForm > input:eq(0)").val("").focus(),$("#dialogSearchForm > input:eq(1)").val(""),$("#dialogSearchForm").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=newWideRequest();wide.curNode?e.dir=wide.curNode.path:e.dir="",e.text=$("#dialogSearchForm > input:eq(0)").val(),e.extension=$("#dialogSearchForm > input:eq(1)").val(),$.ajax({type:"POST",url:config.context+"/file/search/text",data:JSON.stringify(e),dataType:"json",success:function(t){t.succ&&($("#dialogSearchForm").dialog("close"),editors.appendSearch(t.data,"founds",e.text))}})}})},_initRename:function(){$("#dialogRenamePrompt").dialog({modal:!0,height:52,width:260,title:config.label.rename,okText:config.label.rename,cancelText:config.label.cancel,afterOpen:function(){$("#dialogRenamePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0),$("#dialogRenamePrompt > input").val(wide.curNode.name).select().focus()},ok:function(){var e=$("#dialogRenamePrompt > input").val(),t=newWideRequest();t.oldPath=wide.curNode.path,t.newPath=wide.curNode.path.substring(0,wide.curNode.path.lastIndexOf("/")+1)+e,$.ajax({type:"POST",url:config.context+"/file/rename",data:JSON.stringify(t),dataType:"json",success:function(e){return e.succ?void $("#dialogRenamePrompt").dialog("close"):($("#dialogRenamePrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1)}})}})}}; var wide={curNode:void 0,curEditor:void 0,curProcessId:void 0,refreshOutline:function(){if(!wide.curEditor||wide.curEditor&&"go"!==wide.curEditor.doc.getMode().name)return $("#outline").html(""),!1;var e=newWideRequest();e.code=wide.curEditor.getValue(),$.ajax({type:"POST",async:!1,url:config.context+"/outline",data:JSON.stringify(e),dataType:"json",success:function(e){if(e.succ){for(var t=e.data,o='"),$("#outline li").dblclick(function(){var e=$(this),t=CodeMirror.Pos(e.data("line"),e.data("ch")),o=wide.curEditor;o.setCursor(t);var i=Math.floor(o.getScrollInfo().clientHeight/o.defaultTextHeight()/2),a=o.cursorCoords({line:t.line-i,ch:0},"local");o.scrollTo(0,a.top),o.focus()})}}})},_initDialog:function(){$(".dialog-prompt > input").keyup(function(e){var t=$(this).closest(".dialog-main").find(".dialog-footer > button:eq(0)");13!==e.which||t.prop("disabled")||t.click(),""===$.trim($(this).val())?t.prop("disabled",!0):t.prop("disabled",!1)}),$("#dialogAlert").dialog({modal:!0,height:40,width:350,title:config.label.tip,hiddenOk:!0,cancelText:config.label.confirm,afterOpen:function(e){$("#dialogAlert").html(e)}}),$("#dialogRemoveConfirm").dialog({modal:!0,height:36,width:260,title:config.label["delete"],okText:config.label["delete"],cancelText:config.label.cancel,afterOpen:function(){$("#dialogRemoveConfirm > b").html('"'+wide.curNode.name+'"')},ok:function(){var e=newWideRequest();e.path=wide.curNode.path,$.ajax({type:"POST",url:config.context+"/file/remove",data:JSON.stringify(e),dataType:"json",success:function(e){return e.succ?void $("#dialogRemoveConfirm").dialog("close"):($("#dialogRemoveConfirm").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1)}})}}),$("#dialogNewFilePrompt").dialog({modal:!0,height:52,width:260,title:config.label.create_file,okText:config.label.create,cancelText:config.label.cancel,afterOpen:function(){$("#dialogNewFilePrompt > input").val("").focus(),$("#dialogNewFilePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=newWideRequest(),t=$("#dialogNewFilePrompt > input").val();e.path=wide.curNode.path+"/"+t,e.fileType="f",$.ajax({type:"POST",url:config.context+"/file/new",data:JSON.stringify(e),dataType:"json",success:function(t){return t.succ?($("#dialogNewFilePrompt").dialog("close"),void setTimeout(function(){var t=tree.getTIdByPath(e.path);tree.openFile(tree.fileTree.getNodeByTId(t)),tree.fileTree.selectNode(wide.curNode)},100)):($("#dialogNewFilePrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1)}})}}),$("#dialogNewDirPrompt").dialog({modal:!0,height:52,width:260,title:config.label.create_dir,okText:config.label.create,cancelText:config.label.cancel,afterOpen:function(){$("#dialogNewDirPrompt > input").val("").focus(),$("#dialogNewDirPrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=$("#dialogNewDirPrompt > input").val(),t=newWideRequest();t.path=wide.curNode.path+"/"+e,t.fileType="d",$.ajax({type:"POST",url:config.context+"/file/new",data:JSON.stringify(t),dataType:"json",success:function(e){return e.succ?void $("#dialogNewDirPrompt").dialog("close"):($("#dialogNewDirPrompt").dialog("close"),bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus(),!1)}})}}),$("#dialogGoFilePrompt").dialog({modal:!0,height:320,width:660,title:config.label.goto_file,okText:config.label.go,cancelText:config.label.cancel,afterInit:function(){$("#dialogGoFilePrompt").on("dblclick","li",function(){var e=tree.getTIdByPath($(this).find(".ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}),$("#dialogGoFilePrompt").on("click","li",function(){var e=$("#dialogGoFilePrompt > .list");e.find("li").removeClass("selected"),e.data("index",$(this).data("index")),$(this).addClass("selected")}),hotkeys.bindList($("#dialogGoFilePrompt > input"),$("#dialogGoFilePrompt > .list"),function(e){var t=tree.getTIdByPath(e.find(".ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(t)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}),$("#dialogGoFilePrompt > input").bind("input",function(){var e=$("#dialogGoFilePrompt > input").val(),t=newWideRequest();t.path="",t.name="*"+e+"*",wide.curNode&&(t.path=wide.curNode.path),$.ajax({type:"POST",url:config.context+"/file/find/name",data:JSON.stringify(t),dataType:"json",success:function(e){if(e.succ){for(var t=e.data,o="",i=0,a=t.length;a>i;i++){var n=t[i].path,l=n.substr(n.lastIndexOf("/")+1),r=wide.getClassBySuffix(l.split(".")[1]);o+=0===i?'
  • '+l+'    '+n+"
  • ":'
  • '+l+'    '+n+"
  • "}$("#dialogGoFilePrompt > ul").html(o)}}})})},afterOpen:function(){$("#dialogGoFilePrompt > input").val("").focus(),$("#dialogGoFilePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0),$("#dialogGoFilePrompt .list").html("").data("index",0)},ok:function(){var e=tree.getTIdByPath($("#dialogGoFilePrompt .selected .ft-small").text());tree.openFile(tree.fileTree.getNodeByTId(e)),tree.fileTree.selectNode(wide.curNode),$("#dialogGoFilePrompt").dialog("close"),wide.curEditor.focus()}}),$("#dialogGoLinePrompt").dialog({modal:!0,height:52,width:260,title:config.label.goto_line,okText:config.label.go,cancelText:config.label.cancel,afterOpen:function(){$("#dialogGoLinePrompt > input").val("").focus(),$("#dialogGoLinePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){var e=parseInt($("#dialogGoLinePrompt > input").val())-1;$("#dialogGoLinePrompt").dialog("close");var t=wide.curEditor,o=t.getCursor();t.setCursor(CodeMirror.Pos(e,o.ch));var i=Math.floor(t.getScrollInfo().clientHeight/t.defaultTextHeight()/2),a=t.cursorCoords({line:e-i,ch:o.ch},"local");t.scrollTo(0,a.top),t.focus()}}),$("#dialogGitClonePrompt").dialog({modal:!0,height:52,width:360,title:config.label.git_clone,okText:config.label.confirm,cancelText:config.label.cancel,afterOpen:function(){$("#dialogGitClonePrompt > input").val("").focus(),$("#dialogGitClonePrompt").closest(".dialog-main").find(".dialog-footer > button:eq(0)").prop("disabled",!0)},ok:function(){$("#dialogGitClonePrompt").dialog("close");var e=newWideRequest();e.path=wide.curNode.path,e.repository=$("#dialogGitClonePrompt > input").val(),$.ajax({type:"POST",url:config.context+"/git/clone",data:JSON.stringify(e),dataType:"json",success:function(e){}})}})},_initWS:function(){var e=new ReconnectingWebSocket(config.channel+"/output/ws?sid="+config.wideSessionId);e.onopen=function(){console.log("[output onopen] connected")},e.onmessage=function(e){console.log("[output onmessage]"+e.data);var t=JSON.parse(e.data);if(goLintFound&&(goLintFound=[]),"run"===t.nextCmd){var o=newWideRequest();o.executable=t.executable,$.ajax({type:"POST",url:config.context+"/run",data:JSON.stringify(o),dataType:"json"})}switch(t.cmd){case"run":var i=$(".bottom-window-group .output > div").html();wide.curProcessId&&""!==i?bottomGroup.fillOutput(i.replace(/<\/pre>$/g,t.output+"")):bottomGroup.fillOutput(i+"
    "+t.output+"
    "),wide.curProcessId=t.pid;break;case"run-done":bottomGroup.fillOutput($(".bottom-window-group .output > div").html().replace(/<\/pre>$/g,t.output+"")),wide.curProcessId=void 0,$("#buildRun").removeClass("ico-stop").addClass("ico-buildrun").attr("title",config.label.build_n_run);break;case"start-build":case"start-test":case"start-vet":case"start-install":case"start-get":case"start-git_clone":bottomGroup.fillOutput(t.output);break;case"go test":case"go vet":case"go install":case"go get":bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output);break;case"git clone":bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output),tree.fileTree.reAsyncChildNodes(wide.curNode,"refresh",!1);break;case"build":case"cross-build":if(bottomGroup.fillOutput($(".bottom-window-group .output > div").html()+t.output),t.lints){for(var a={},n=0;n ul > li").unbind().removeClass("selected"),menu.subMenu())))}),window.onbeforeunload=function(){return editors.data.length>0?config.label.confirm_save:void 0},document.oncontextmenu=function(){return!1},this._initDialog()},_save:function(e,t){if(!e)return!1;var o=newWideRequest();o.file=e,o.code=t.getValue(),$.ajax({type:"POST",url:config.context+"/file/save",data:JSON.stringify(o),dataType:"json",success:function(o){t.doc.markClean(),$(".edit-panel .tabs > div").each(function(){var t=$(this).find("span:eq(0)");t.attr("title")===e&&t.removeClass("changed")})}})},saveFile:function(){var e=editors.getCurrentPath();if(!e)return!1;var t=wide.curEditor;if(t.doc.isClean())return!1;if("text/x-go"===t.getOption("mode")){wide.gofmt(e,wide.curEditor);var o=newWideRequest();return o.file=e,o.code=t.getValue(),o.nextCmd="",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(o),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}}),void wide.refreshOutline()}wide._save(e,wide.curEditor)},stop:function(){if($("#buildRun").hasClass("ico-buildrun"))return menu.run(),!1;if(!wide.curProcessId)return!1;var e=newWideRequest();e.pid=wide.curProcessId,$.ajax({type:"POST",url:config.context+"/stop",data:JSON.stringify(e),dataType:"json",success:function(e){$("#buildRun").removeClass("ico-stop").addClass("ico-buildrun").attr("title",config.label.build_n_run)}})},gofmt:function(e,t){var o=t.getCursor(),i=t.getScrollInfo(),a=newWideRequest();a.file=e,a.code=t.getValue(),a.cursorLine=o.line,a.cursorCh=o.ch,$.ajax({async:!1,type:"POST",url:config.context+"/go/fmt",data:JSON.stringify(a),dataType:"json",success:function(a){a.succ&&(t.setValue(a.data.code),t.setCursor(o),t.scrollTo(null,i.top),wide._save(e,t))}})},fmt:function(e,t){var o=t.getOption("mode"),i=t.getCursor(),a=t.getScrollInfo(),n=newWideRequest();n.file=e,n.code=t.getValue(),n.cursorLine=i.line,n.cursorCh=i.ch;var l=null;switch(o){case"text/x-go":$.ajax({async:!1,type:"POST",url:config.context+"/go/fmt",data:JSON.stringify(n),dataType:"json",success:function(e){e.succ&&(l=e.data.code)}});break;case"text/html":l=html_beautify(t.getValue());break;case"text/javascript":case"application/json":l=js_beautify(t.getValue());break;case"text/css":l=css_beautify(t.getValue())}l&&(t.setValue(l),t.setCursor(i),t.scrollTo(null,a.top),wide._save(e,t))},getClassBySuffix:function(e){var t="ico-ztree-other ";switch(e){case"html":case"htm":t="ico-ztree-html ";break;case"go":t="ico-ztree-go ";break;case"css":t="ico-ztree-css ";break;case"txt":t="ico-ztree-text ";break;case"sql":t="ico-ztree-sql ";break;case"properties":t="ico-ztree-pro ";break;case"md":t="ico-ztree-md ";break;case"json":t="ico-ztree-js ";break;case"xml":t="ico-ztree-xml ";break;case"jpg":case"jpeg":case"bmp":case"gif":case"png":case"svg":case"ico":t="ico-ztree-img "}return t}};$(document).ready(function(){wide.init(),tree.init(),menu.init(),hotkeys.init(),session.init(),notification.init(),editors.init(),windows.init(),bottomGroup.init()}); var session={init:function(){this._initWS();var e=function(e){var t="normal";return e.isClosed?t="min":e.size>=$("body").width()&&(t="max"),t};setInterval(function(){var t=newWideRequest(),s=[],o=[],n=editors.getCurrentId(),r=n?editors.getCurrentPath():"";editors.tabs.obj._$tabs.find("div").each(function(){var e=$(this);e.find("span:eq(0)").attr("title")!==config.label.start_page&&s.push(e.find("span:eq(0)").attr("title"))}),o=tree.getOpenPaths(),t.currentFile=r,t.fileTree=o,t.files=s,t.layout={side:{size:windows.outerLayout.west.state.size,state:e(windows.outerLayout.west.state)},sideRight:{size:windows.innerLayout.east.state.size,state:e(windows.innerLayout.east.state)},bottom:{size:windows.innerLayout.south.state.size,state:e(windows.innerLayout.south.state)}},$.ajax({type:"POST",url:config.context+"/session/save",data:JSON.stringify(t),dataType:"json",success:function(e){}})},3e4)},restore:function(){if(config.latestSessionContent){for(var e=config.latestSessionContent.fileTree,t=config.latestSessionContent.files,s=config.latestSessionContent.currentFile,o="",n=[],r=tree.fileTree.transformToArray(tree.fileTree.getNodes()),i=0,a=r.length;a>i;i++){for(var d=0,l=e.length;l>d;d++)if(r[i].path===e[d]){for(var c=tree.getAllParents(tree.fileTree.getNodeByTId(r[i].tId)),f=!0,g=0,p=c.length;p>g;g++)c[g].open===!1&&(f=!1);f?tree.fileTree.expandNode(r[i],!0,!1,!0):r[i].open=!0;break}for(var h=0,u=t.length;u>h;h++)if(r[i].path===t[h]){n.push(r[i]);break}r[i].path===s&&(o=r[i].path,tree.fileTree.selectNode(r[i]),wide.curNode=r[i])}for(var y=0,v=t.length;v>y;y++)for(var w=0,m=n.length;m>w;w++)if(n[w].path===t[y]){tree.openFile(n[w]);break}editors.tabs.setCurrent(o);for(var b=0,p=editors.data.length;p>b;b++)if(o===editors.data[b].id){wide.curEditor=editors.data[b].editor;break}}},_initWS:function(){var e=new ReconnectingWebSocket(config.channel+"/session/ws?sid="+config.wideSessionId);e.onopen=function(){console.log("[session onopen] connected");var e=function(e,t){var s=new Date(e),o={"M+":s.getMonth()+1,"d+":s.getDate(),"h+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(var n in o)new RegExp("("+n+")").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?o[n]:("00"+o[n]).substr((""+o[n]).length)));return t},t={type:"Network",severity:"INFO",message:"Connected to server [sid="+config.wideSessionId+"], "+e((new Date).getTime(),"yyyy-MM-dd hh:mm:ss")},s=$(".bottom-window-group .notification > table"),o="";o+=''+t.severity+''+t.message+''+t.type+"",s.append(o)},e.onmessage=function(e){var t=JSON.parse(e.data);switch(t.cmd){case"create-file":var s=tree.fileTree.getNodeByTId(tree.getTIdByPath(t.dir)),o=t.path.replace(t.dir+"/",""),n=CodeMirror.findModeByFileName(o),r=wide.getClassBySuffix(o.split(".")[1]);t.type&&"f"===t.type?tree.fileTree.addNodes(s,[{id:t.path,name:o,iconSkin:r,path:t.path,mode:n,removable:!0,creatable:!0}]):tree.fileTree.addNodes(s,[{id:t.path,name:o,iconSkin:"ico-ztree-dir ",path:t.path,removable:!0,creatable:!0,isParent:!0}]);break;case"remove-file":case"rename-file":var s=tree.fileTree.getNodeByTId(tree.getTIdByPath(t.path));tree.fileTree.removeNode(s);for(var i=tree.fileTree.transformToArray(s),a=0,d=i.length;d>a;a++)editors.tabs.del(i[a].path)}},e.onclose=function(e){console.log("[session onclose] disconnected ("+e.code+")");var t={type:"Network",severity:"ERROR",message:"Disconnected from server, trying to reconnect it [sid="+config.wideSessionId+"]"},s=$(".bottom-window-group .notification > table"),o="";o+=''+t.severity+''+t.message+''+t.type+"",s.append(o),$(".notification-count").show()},e.onerror=function(e){console.log("[session onerror]")}}}; -var menu={init:function(){this.subMenu(),this._initPreference(),this._initAbout(),this._initShare(),$(".menu .frame li").click(function(){$(".menu > ul > li").unbind().removeClass("selected"),menu.subMenu()})},_initShare:function(){$(".menu .ico-share").hover(function(){$(".menu .share-panel").show()}),$(".share-panel .font-ico").click(function(){var e=$(this).attr("class").split("-")[2],t="https://wide.b3log.org",a="https://wide.b3log.org/static/images/wide-logo.png",n={};n.email="mailto:?subject="+$("title").text()+"&body="+$("meta[name=description]").attr("content")+" "+t;var i=encodeURIComponent($("meta[name=description]").attr("content")+" "+t+" #golang");n.twitter="https://twitter.com/intent/tweet?status="+i,n.facebook="https://www.facebook.com/sharer/sharer.php?u="+t,n.googleplus="https://plus.google.com/share?url="+t;var o=encodeURIComponent($("title").text()+". \n"+$("meta[name=description]").attr("content")+" #golang#");n.weibo="http://v.t.sina.com.cn/share/share.php?title="+o+"&url="+t+"&pic="+a,n.tencent="http://share.v.t.qq.com/index.php?c=share&a=index&title="+o+"&url="+t+"&pic="+a,window.open(n[e],"_blank","top=100,left=200,width=648,height=618")})},_initAbout:function(){$("#dialogAbout").load(config.context+"/about",function(){$("#dialogAbout").dialog({modal:!0,title:config.label.about,hideFooter:!0,afterOpen:function(){$.ajax({url:"https://rhythm.b3log.org/version/wide/latest",type:"GET",dataType:"jsonp",jsonp:"callback",success:function(e,t){$("#dialogAbout .version").text()===e.wideVersion?$(".upgrade").text(config.label.uptodate):$(".upgrade").html(config.label.new_version_available+config.label.colon+""+e.wideVersion+"")}})}})})},disabled:function(e){for(var t=0,a=e.length;a>t;t++)$(".menu li."+e[t]).addClass("disabled")},undisabled:function(e){for(var t=0,a=e.length;a>t;t++)$(".menu li."+e[t]).removeClass("disabled")},subMenu:function(){$(".menu > ul > li").click(function(e){if(1!==$(e.target).closest(".frame").length){var t=$(this);t.find(".frame").show(),$(".menu > ul > li").removeClass("selected"),$(this).addClass("selected"),$(".menu > ul > li").unbind(),$(".menu > ul > li").mouseover(function(){1!==$(e.target).closest(".frame").length&&($(".menu .frame").hide(),$(this).find(".frame").show(),$(".menu > ul > li").removeClass("selected"),$(this).addClass("selected"))})}})},openPreference:function(){$("#dialogPreference").dialog("open")},saveAllFiles:function(){if($(".menu li.save-all").hasClass("disabled"))return!1;for(var e=0,t=editors.data.length;t>e;e++){var a=editors.data[e].id,n=editors.data[e].editor;"text/x-go"===n.getOption("mode")?wide.fmt(a,n):wide._save(a,n)}},closeAllFiles:function(){if($(".menu li.close-all").hasClass("disabled"))return!1;var e=[];$(".edit-panel .tabs > div").each(function(t){0!==t&&e.push($(this).data("index"))}),$("#dialogCloseEditor").data("removeData",e),$(".edit-panel .tabs .ico-close:eq(0)").click()},exit:function(){var e=newWideRequest();$.ajax({type:"POST",url:config.context+"/logout",data:JSON.stringify(e),dataType:"json",success:function(e){e.succ&&(window.location.href="/login")}})},openAbout:function(){$("#dialogAbout").dialog("open")},goget:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-get").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/get",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},goinstall:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-install").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/install",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},test:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-test").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/test",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},govet:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-vet").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/vet",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},run:function(){if(menu.saveAllFiles(),$("#buildRun").hasClass("ico-stop"))return wide.stop(),!1;var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.run").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,t.code=wide.curEditor.getValue(),t.nextCmd="run",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){$("#buildRun").addClass("ico-stop").removeClass("ico-buildrun").attr("title",config.label.stop)}})},build:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.build").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,t.code=wide.curEditor.getValue(),t.nextCmd="",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},_initPreference:function(){$("#dialogPreference").load(config.context+"/preference",function(){$("#dialogPreference input").keyup(function(){var e=!1,t=[],a="";$("#dialogPreference input").each(function(){var a=$(this);a.val()!=a.data("value")&&(e=!0),""===$.trim(a.val())&&t.push(a)});var n=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");if(e?n.prop("disabled",!1):n.prop("disabled",!0),0===t.length)$("#dialogPreference").find(".tip").html(""),n.prop("disabled",!1);else{for(var i=0,o=t.length;o>i;i++){var l=t[i].closest("div").data("index"),r=$.trim(t[i].parent().text());a+="["+$('#dialogPreference .tabs > div[data-index="'+l+'"]').text()+"] -> ["+r.substr(0,r.length-1)+"]: "+config.label.no_empty+"
    "}$("#dialogPreference").find(".tip").html(a),n.prop("disabled",!0)}}),$("#dialogPreference select").on("change",function(){var e=!1;$("#dialogPreference select").each(function(){$(this).val()!==$(this).data("value")&&(e=!0)});var t=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");e?t.prop("disabled",!1):t.prop("disabled",!0)}),$("#dialogPreference").dialog({modal:!0,height:280,width:800,title:config.label.preference,okText:config.label.apply,cancelText:config.label.cancel,afterOpen:function(){var e=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");e.prop("disabled",!0)},ok:function(){var e=newWideRequest(),t=$("#dialogPreference"),a=t.find("input[name=fontFamily]"),n=t.find("input[name=fontSize]"),i=t.find("select[name=goFmt]"),o=t.find("input[name=workspace]"),l=t.find("input[name=password]"),r=t.find("input[name=email]"),s=t.find("select[name=locale]"),d=t.find("select[name=theme]"),u=t.find("input[name=editorFontFamily]"),c=t.find("input[name=editorFontSize]"),f=t.find("input[name=editorLineHeight]"),g=t.find("select[name=editorTheme]"),p=t.find("input[name=editorTabSize]"),v=t.find("select[name=keymap]");$.extend(e,{fontFamily:a.val(),fontSize:n.val(),goFmt:i.val(),workspace:o.val(),password:l.val(),email:r.val(),locale:s.val(),theme:d.val(),editorFontFamily:u.val(),editorFontSize:c.val(),editorLineHeight:f.val(),editorTheme:g.val(),editorTabSize:p.val(),keymap:v.val()}),config.keymap!==v.val()&&window.location.reload(),$.ajax({type:"POST",url:config.context+"/preference",data:JSON.stringify(e),success:function(e,t,m){if(!e.succ)return!1;a.data("value",a.val()),n.data("value",n.val()),i.data("value",i.val()),o.data("value",o.val()),l.data("value",l.val()),r.data("value",r.val()),s.data("value",s.val()),d.data("value",d.val()),u.data("value",u.val()),c.data("value",c.val()),f.data("value",f.val()),g.data("value",g.val()),p.data("value",p.val()),v.data("value",v.val()),config.keymap=v.val();var h=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");h.prop("disabled",!0),$("#themesLink").attr("href",config.staticServer+"/static/css/themes/"+d.val()+".css"),config.editorTheme=g.val();for(var b=0,w=editors.data.length;w>b;b++)editors.data[b].editor.setOption("theme",g.val())}})}}),new Tabs({id:".preference"})})}}; +var menu={init:function(){this.subMenu(),this._initPreference(),this._initAbout(),this._initShare(),$(".menu .frame li").click(function(){$(".menu > ul > li").unbind().removeClass("selected"),menu.subMenu()})},_initShare:function(){$(".menu .ico-share").hover(function(){$(".menu .share-panel").show()}),$(".share-panel .font-ico").click(function(){var e=$(this).attr("class").split("-")[2],t="https://wide.b3log.org",a="https://wide.b3log.org/static/images/wide-logo.png",n={};n.email="mailto:?subject="+$("title").text()+"&body="+$("meta[name=description]").attr("content")+" "+t;var i=encodeURIComponent($("meta[name=description]").attr("content")+" "+t+" #golang");n.twitter="https://twitter.com/intent/tweet?status="+i,n.facebook="https://www.facebook.com/sharer/sharer.php?u="+t,n.googleplus="https://plus.google.com/share?url="+t;var o=encodeURIComponent($("title").text()+". \n"+$("meta[name=description]").attr("content")+" #golang#");n.weibo="http://v.t.sina.com.cn/share/share.php?title="+o+"&url="+t+"&pic="+a,n.tencent="http://share.v.t.qq.com/index.php?c=share&a=index&title="+o+"&url="+t+"&pic="+a,window.open(n[e],"_blank","top=100,left=200,width=648,height=618")})},_initAbout:function(){$("#dialogAbout").load(config.context+"/about",function(){$("#dialogAbout").dialog({modal:!0,title:config.label.about,hideFooter:!0,afterOpen:function(){$.ajax({url:"https://rhythm.b3log.org/version/wide/latest",type:"GET",dataType:"jsonp",jsonp:"callback",success:function(e,t){$("#dialogAbout .version").text()===e.wideVersion?$(".upgrade").text(config.label.uptodate):$(".upgrade").html(config.label.new_version_available+config.label.colon+""+e.wideVersion+"")}})}})})},disabled:function(e){for(var t=0,a=e.length;a>t;t++)$(".menu li."+e[t]).addClass("disabled")},undisabled:function(e){for(var t=0,a=e.length;a>t;t++)$(".menu li."+e[t]).removeClass("disabled")},subMenu:function(){$(".menu > ul > li").click(function(e){if(1!==$(e.target).closest(".frame").length){var t=$(this);t.find(".frame").show(),$(".menu > ul > li").removeClass("selected"),$(this).addClass("selected"),$(".menu > ul > li").unbind(),$(".menu > ul > li").mouseover(function(){1!==$(e.target).closest(".frame").length&&($(".menu .frame").hide(),$(this).find(".frame").show(),$(".menu > ul > li").removeClass("selected"),$(this).addClass("selected"))})}})},openPreference:function(){$("#dialogPreference").dialog("open")},saveAllFiles:function(){if($(".menu li.save-all").hasClass("disabled"))return!1;for(var e=0,t=editors.data.length;t>e;e++){var a=editors.data[e].id,n=editors.data[e].editor;"text/x-go"===n.getOption("mode")?wide.fmt(a,n):wide._save(a,n)}},closeAllFiles:function(){if($(".menu li.close-all").hasClass("disabled"))return!1;var e=[];$(".edit-panel .tabs > div").each(function(t){0!==t&&e.push($(this).data("index"))}),$("#dialogCloseEditor").data("removeData",e),$(".edit-panel .tabs .ico-close:eq(0)").click()},exit:function(){var e=newWideRequest();$.ajax({type:"POST",url:config.context+"/logout",data:JSON.stringify(e),dataType:"json",success:function(e){e.succ&&(window.location.href=config.context+"/login")}})},openAbout:function(){$("#dialogAbout").dialog("open")},goget:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-get").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/get",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},goinstall:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-install").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/install",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},test:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-test").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/test",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},govet:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.go-vet").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,$.ajax({type:"POST",url:config.context+"/go/vet",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},run:function(){if(menu.saveAllFiles(),$("#buildRun").hasClass("ico-stop"))return wide.stop(),!1;var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.run").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,t.code=wide.curEditor.getValue(),t.nextCmd="run",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){$("#buildRun").addClass("ico-stop").removeClass("ico-buildrun").attr("title",config.label.stop)}})},build:function(){menu.saveAllFiles();var e=editors.getCurrentPath();if(!e)return!1;if($(".menu li.build").hasClass("disabled"))return!1;var t=newWideRequest();t.file=e,t.code=wide.curEditor.getValue(),t.nextCmd="",$.ajax({type:"POST",url:config.context+"/build",data:JSON.stringify(t),dataType:"json",beforeSend:function(){bottomGroup.resetOutput()},success:function(e){}})},_initPreference:function(){$("#dialogPreference").load(config.context+"/preference",function(){$("#dialogPreference input").keyup(function(){var e=!1,t=[],a="";$("#dialogPreference input").each(function(){var a=$(this);a.val()!=a.data("value")&&(e=!0),""===$.trim(a.val())&&t.push(a)});var n=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");if(e?n.prop("disabled",!1):n.prop("disabled",!0),0===t.length)$("#dialogPreference").find(".tip").html(""),n.prop("disabled",!1);else{for(var i=0,o=t.length;o>i;i++){var l=t[i].closest("div").data("index"),r=$.trim(t[i].parent().text());a+="["+$('#dialogPreference .tabs > div[data-index="'+l+'"]').text()+"] -> ["+r.substr(0,r.length-1)+"]: "+config.label.no_empty+"
    "}$("#dialogPreference").find(".tip").html(a),n.prop("disabled",!0)}}),$("#dialogPreference select").on("change",function(){var e=!1;$("#dialogPreference select").each(function(){$(this).val()!==$(this).data("value")&&(e=!0)});var t=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");e?t.prop("disabled",!1):t.prop("disabled",!0)}),$("#dialogPreference").dialog({modal:!0,height:280,width:800,title:config.label.preference,okText:config.label.apply,cancelText:config.label.cancel,afterOpen:function(){var e=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");e.prop("disabled",!0)},ok:function(){var e=newWideRequest(),t=$("#dialogPreference"),a=t.find("input[name=fontFamily]"),n=t.find("input[name=fontSize]"),i=t.find("select[name=goFmt]"),o=t.find("input[name=workspace]"),l=t.find("input[name=password]"),r=t.find("input[name=email]"),s=t.find("select[name=locale]"),d=t.find("select[name=theme]"),u=t.find("input[name=editorFontFamily]"),c=t.find("input[name=editorFontSize]"),f=t.find("input[name=editorLineHeight]"),g=t.find("select[name=editorTheme]"),p=t.find("input[name=editorTabSize]"),v=t.find("select[name=keymap]");$.extend(e,{fontFamily:a.val(),fontSize:n.val(),goFmt:i.val(),workspace:o.val(),password:l.val(),email:r.val(),locale:s.val(),theme:d.val(),editorFontFamily:u.val(),editorFontSize:c.val(),editorLineHeight:f.val(),editorTheme:g.val(),editorTabSize:p.val(),keymap:v.val()}),config.keymap!==v.val()&&window.location.reload(),$.ajax({type:"POST",url:config.context+"/preference",data:JSON.stringify(e),success:function(e,t,m){if(!e.succ)return!1;a.data("value",a.val()),n.data("value",n.val()),i.data("value",i.val()),o.data("value",o.val()),l.data("value",l.val()),r.data("value",r.val()),s.data("value",s.val()),d.data("value",d.val()),u.data("value",u.val()),c.data("value",c.val()),f.data("value",f.val()),g.data("value",g.val()),p.data("value",p.val()),v.data("value",v.val()),config.keymap=v.val();var h=$("#dialogPreference").closest(".dialog-main").find(".dialog-footer > button:eq(0)");h.prop("disabled",!0),$("#themesLink").attr("href",config.staticServer+"/static/css/themes/"+d.val()+".css"),config.editorTheme=g.val();for(var b=0,w=editors.data.length;w>b;b++)editors.data[b].editor.setOption("theme",g.val())}})}}),new Tabs({id:".preference"})})}}; var windows={isMaxEditor:!1,outerLayout:{},innerLayout:{},init:function(){config.latestSessionContent||(config.latestSessionContent={fileTree:[],files:[],currentFile:""}),config.latestSessionContent.layout||(config.latestSessionContent.layout={side:{size:200,state:"normal"},sideRight:{size:200,state:"normal"},bottom:{size:100,state:"normal"}});var o=config.latestSessionContent.layout;this.outerLayout=$("body").layout({north__paneSelector:".menu",center__paneSelector:".content",south__paneSelector:".footer",north__size:22,south__size:19,spacing_open:2,north__spacing_open:0,south__spacing_open:0,defaults:{fxSpeed_open:300,fxSpeed_close:100,fxSettings_close:{easing:"easeOutQuint"},fxSettings_open:{easing:"easeInQuint"}},west:{size:o.side.size,paneSelector:".side",togglerLength_open:0,togglerLength_closed:15,togglerAlign_closed:"top",slideTrigger_open:"mouseover",spacing_closed:15,minSize:100,togglerClass:"ico-restore",togglerTip_open:config.label.min,togglerTip_closed:config.label.restore_side,resizerTip:config.label.resize,initClosed:"min"===o.side.state}}),this.innerLayout=$("div.content").layout({spacing_open:2,defaults:{fxSpeed_open:300,fxSpeed_close:100,fxSettings_close:{easing:"easeOutQuint"},fxSettings_open:{easing:"easeInQuint"}},center:{paneSelector:".edit-panel"},east:{size:o.sideRight.size,paneSelector:".side-right",togglerLength_open:0,togglerLength_closed:15,togglerAlign_closed:"top",slideTrigger_open:"mouseover",spacing_closed:15,minSize:100,togglerClass:"ico-restore",togglerTip_open:config.label.min,togglerTip_closed:config.label.restore_outline,resizerTip:config.label.resize,initClosed:"min"===o.sideRight.state},south:{size:o.bottom.size,paneSelector:".bottom-window-group",togglerLength_open:0,togglerLength_closed:15,togglerAlign_closed:"top",slideTrigger_open:"mouseover",spacing_closed:16,minSize:100,togglerClass:"ico-restore",togglerTip_open:config.label.min,togglerTip_closed:config.label.restore_bottom,resizerTip:config.label.resize,initClosed:"min"===o.bottom.state,ondrag_end:function(o,e){windows.refreshEditor(e,"drag")},onresize_end:function(o,e){windows.refreshEditor(e,"resize")},onclose_end:function(o,e){windows.refreshEditor(e,"close")},onopen_end:function(o,e){windows.refreshEditor(e,"open")},onshow_end:function(o,e){windows.refreshEditor(e,"show")}}}),this.outerLayout.addCloseBtn(".side .ico-min","west"),this.innerLayout.addCloseBtn(".side-right .ico-min","east"),this.innerLayout.addCloseBtn(".bottom-window-group .ico-min","south"),"max"===o.side.state&&windows.maxSide(),"max"===o.sideRight.state&&windows.maxSideRight(),"max"===o.bottom.state&&windows.maxBottom(),$(".toolbars .ico-max").click(function(){windows.toggleEditor()}),$(".edit-panel .tabs").on("dblclick",function(){windows.toggleEditor()}),$(".bottom-window-group .tabs").dblclick(function(){var o=$(".bottom-window-group");o.hasClass("bottom-window-group-max")?windows.restoreBottom():windows.maxBottom(o)}),$(".side .tabs").dblclick(function(){var o=$(".side");o.hasClass("side-max")?windows.restoreSide():windows.restoreSide(o)}),$(".side-right .tabs").dblclick(function(){var o=$(".side-right");o.hasClass("side-right-max")?windows.restoreSideRight():windows.maxSideRight(o)}),$(".bottom-window-group .search").height($(".bottom-window-group .tabs-panel").height()),$(window).resize(function(){windows.refreshEditor($(".bottom-window-group"))})},maxEditor:function(){var o=$(".toolbars .font-ico");windows.outerLayout.close("west"),windows.innerLayout.close("south"),windows.innerLayout.close("east"),o.removeClass("ico-max").addClass("ico-restore").attr("title",config.label.min),windows.isMaxEditor=!0},maxBottom:function(o){o.data("height",o.height()).addClass("bottom-window-group-max").find(".ico-min").hide(),windows.outerLayout.hide("west"),windows.innerLayout.hide("east"),windows.innerLayout.sizePane("south",$(".content").height())},maxSide:function(o){o.data("width",o.width()).addClass("side-max").find(".ico-min").hide(),$(".content").hide(),windows.outerLayout.sizePane("west",$("body").width())},maxSideRight:function(o){o.addClass("side-right-max").data("width",o.width()).find(".ico-min").hide(),windows.outerLayout.hide("west"),windows.innerLayout.hide("south"),windows.innerLayout.sizePane("east",$("body").width())},toggleEditor:function(){var o=$(".toolbars .font-ico");o.hasClass("ico-restore")?windows.restoreEditor():windows.maxEditor()},restoreBottom:function(){var o=$(".bottom-window-group");o.removeClass("bottom-window-group-max").find(".ico-min").show(),windows.outerLayout.show("west"),windows.innerLayout.show("east"),windows.innerLayout.sizePane("south",o.data("height"))},restoreSide:function(){var o=$(".side");o.removeClass("side-max").find(".ico-min").show(),$(".content").show(),windows.outerLayout.sizePane("west",o.data("width"))},restoreSideRight:function(){var o=$(".side-right");o.removeClass("side-right-max").find(".ico-min").show(),windows.outerLayout.show("west"),windows.innerLayout.show("south"),windows.innerLayout.sizePane("east",o.data("width"))},restoreEditor:function(){windows.outerLayout.open("west"),windows.innerLayout.open("south"),windows.innerLayout.open("east"),windows.isMaxEditor=!1,$(".toolbars .font-ico").addClass("ico-max").removeClass("ico-restore").attr("title",config.label.max_editor)},refreshEditor:function(o,e){var t=editors.data,i=$(".content").height()-o.height()-24;switch(e){case"close":i=$(".content").height()-40}for(var n=0,s=t.length;s>n;n++)t[n].editor.setSize("100%",i);$(".bottom-window-group .search").height($(".bottom-window-group .tabs-panel").height())},flowBottom:function(){windows.innerLayout.south.state.isClosed&&windows.innerLayout.slideOpen("south")}}; var hotkeys={defaultKeyMap:{goEditor:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:48,fun:function(){wide.curEditor&&wide.curEditor.focus()}},goFileTree:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:49,fun:function(){windows.outerLayout.west.state.isClosed&&windows.outerLayout.slideOpen("west"),$("#files").focus()}},goOutline:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:50,fun:function(){windows.innerLayout.east.state.isClosed&&windows.innerLayout.slideOpen("east"),$("#outline").focus()}},goOutput:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:52,fun:function(){bottomGroup.tabs.setCurrent("output"),windows.flowBottom(),$(".bottom-window-group .output").focus()}},goSearch:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:53,fun:function(){bottomGroup.tabs.setCurrent("search"),windows.flowBottom(),$(".bottom-window-group .search").focus()}},goNotification:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:54,fun:function(){bottomGroup.tabs.setCurrent("notification"),windows.flowBottom(),$(".bottom-window-group .notification").focus()}},clearWindow:{ctrlKey:!1,altKey:!0,shiftKey:!1,which:67},changeEditor:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:68},search:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:70},closeCurEditor:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:81},rename:{ctrlKey:!0,altKey:!1,shiftKey:!1,which:82},goFile:{ctrlKey:!1,altKey:!0,shiftKey:!0,which:79},build:{ctrlKey:!1,altKey:!1,shiftKey:!1,which:116},buildRun:{ctrlKey:!1,altKey:!1,shiftKey:!1,which:117}},bindList:function(e,t,i){t.data("index",0),e.keydown(function(e){var r=t.data("index"),o=t.find("li").length;if(0===o)return!0;38===e.which&&(r--,0>r&&(r=o-1)),40===e.which&&(r++,r>o-1&&(r=0));var d=t.find("li:eq("+r+")");return 13===e.which&&i(d),t.find("li").removeClass("selected"),t.data("index",r),d.addClass("selected"),0===r?t.scrollTop(0):d[0].offsetTop+t.scrollTop()>t.height()?40===e.which?t.scrollTop(t.scrollTop()+d.height()):t.scrollTop(d[0].offsetTop):t.scrollTop(0),38===e.which||40===e.which||13===e.which?!1:void 0})},_bindOutput:function(){$(".bottom-window-group .output").keydown(function(e){var t=hotkeys.defaultKeyMap;return e.altKey===t.clearWindow.altKey&&e.which===t.clearWindow.which?(bottomGroup.clear("output"),void e.preventDefault()):void 0})},_bindFileTree:function(){$("#files").keydown(function(e){e.preventDefault();var t=hotkeys.defaultKeyMap;if(e.ctrlKey===t.search.ctrlKey&&e.which===t.search.which)return void $("#dialogSearchForm").dialog("open");if(e.ctrlKey===t.rename.ctrlKey&&e.which===t.rename.which)return void(wide.curNode.removable&&$("#dialogRenamePrompt").dialog("open"));switch(e.which){case 46:tree.removeIt();break;case 13:if(!wide.curNode)return!1;if(tree.isDir()){if(wide.curNode.open)return!1;tree.fileTree.expandNode(wide.curNode,!0,!1,!0),$("#files").focus();break}tree.openFile(wide.curNode);break;case 38:var i={};if(wide.curNode){if(wide.curNode&&wide.curNode.isFirstNode&&0===wide.curNode.level)return!1;i=wide.curNode.getPreNode(),wide.curNode.isFirstNode&&wide.curNode.getParentNode()&&(i=wide.curNode.getParentNode());var r=wide.curNode.getPreNode();r&&tree.isDir()&&r.open&&(i=tree.getCurrentNodeLastNode(r))}else i=tree.fileTree.getNodeByTId("files_1");wide.curNode=i,tree.fileTree.selectNode(i),$("#files").focus();break;case 40:var i={};if(wide.curNode){if(wide.curNode&&tree.isBottomNode(wide.curNode))return!1;i=wide.curNode.getNextNode(),tree.isDir()&&wide.curNode.open&&(i=wide.curNode.children[0]);var o=tree.getNextShowNode(wide.curNode);wide.curNode.isLastNode&&0!==wide.curNode.level&&!wide.curNode.open&&o&&(i=o)}else i=tree.fileTree.getNodeByTId("files_1");i&&(wide.curNode=i,tree.fileTree.selectNode(i)),$("#files").focus();break;case 37:if(!wide.curNode)return wide.curNode=tree.fileTree.getNodeByTId("files_1"),tree.fileTree.selectNode(wide.curNode),$("#files").focus(),!1;if(!tree.isDir()||!wide.curNode.open)return!1;tree.fileTree.expandNode(wide.curNode,!1,!1,!0),$("#files").focus();break;case 39:if(!wide.curNode)return wide.curNode=tree.fileTree.getNodeByTId("files_1"),tree.fileTree.selectNode(wide.curNode),$("#files").focus(),!1;if(!tree.isDir()||wide.curNode.open)return!1;tree.fileTree.expandNode(wide.curNode,!0,!1,!0),$("#files").focus();break;case 116:if(!wide.curNode||!tree.isDir())return!1;tree.refresh(wide.curNode)}})},_bindDocument:function(){var e=this.defaultKeyMap;$(document).keydown(function(t){if(t.ctrlKey===e.goEditor.ctrlKey&&t.which===e.goEditor.which)return e.goEditor.fun(),void t.preventDefault();if(t.ctrlKey===e.goFileTree.ctrlKey&&t.which===e.goFileTree.which)return e.goFileTree.fun(),void t.preventDefault();if(t.ctrlKey===e.goOutline.ctrlKey&&t.which===e.goOutline.which)return e.goOutline.fun(),void t.preventDefault();if(t.ctrlKey===e.goOutput.ctrlKey&&t.which===e.goOutput.which)return e.goOutput.fun(),void t.preventDefault();if(t.ctrlKey===e.goSearch.ctrlKey&&t.which===e.goSearch.which)return e.goSearch.fun(),void t.preventDefault();if(t.ctrlKey===e.goNotification.ctrlKey&&t.which===e.goNotification.which)return e.goNotification.fun(),void t.preventDefault();if(t.ctrlKey===e.closeCurEditor.ctrlKey&&t.which===e.closeCurEditor.which)return $(".edit-panel .tabs > div.current").find(".ico-close").click(),void t.preventDefault();if(t.ctrlKey===e.changeEditor.ctrlKey&&t.which===e.changeEditor.which){if("notification"===document.activeElement.className||"output"===document.activeElement.className||"search"===document.activeElement.className){for(var i=["output","search","notification"],r="",o=0,d=i.length;d>o;o++)if(bottomGroup.tabs.getCurrentId()===i[o]){r=d-1>o?i[o+1]:i[0];break}return bottomGroup.tabs.setCurrent(r),$(".bottom-window-group ."+r).focus(),t.preventDefault(),!1}if(editors.data.length>1){for(var r="",o=0,d=editors.data.length;d>o;o++){var c=editors.getCurrentId();if(c&&c===editors.data[o].id){d-1>o?(r=editors.data[o+1].id,wide.curEditor=editors.data[o+1].editor):(r=editors.data[0].id,wide.curEditor=editors.data[0].editor);break}}editors.tabs.setCurrent(r);var u=tree.getTIdByPath(r);wide.curNode=tree.fileTree.getNodeByTId(u),tree.fileTree.selectNode(wide.curNode),wide.refreshOutline();var n=wide.curEditor.getCursor();$(".footer .cursor").text("| "+(n.line+1)+":"+(n.ch+1)+" |"),wide.curEditor.focus()}return t.preventDefault(),!1}return t.which===e.build.which?(menu.build(),void t.preventDefault()):t.which===e.buildRun.which?(menu.run(),void t.preventDefault()):void(t.ctrlKey===e.goFile.ctrlKey&&t.altKey===e.goFile.altKey&&t.shiftKey===e.goFile.shiftKey&&t.which===e.goFile.which&&$("#dialogGoFilePrompt").dialog("open"))})},init:function(){this._bindFileTree(),this._bindOutput(),this._bindDocument()}}; var bottomGroup={tabs:void 0,searchTab:void 0,init:function(){this._initTabs(),this._initFrame(),$(".bottom-window-group .output").click(function(){$(this).focus()}),$(".bottom-window-group .output").on("click",".path",function(t){var o=$(this),i=tree.getTIdByPath(o.data("path"));return tree.openFile(tree.fileTree.getNodeByTId(i),CodeMirror.Pos(o.data("line")-1,o.data("column")-1)),t.preventDefault(),!1})},_initFrame:function(){$(".bottom-window-group .output").parent().mouseup(function(t){if(t.stopPropagation(),0===t.button)return void $(".bottom-window-group .frame").hide();var o=t.screenX,i=$(this);("auto"===$(".side").css("left")||"0px"===$(".side").css("left"))&&(o=t.screenX-$(".side").width()),$(".bottom-window-group .frame").show().css({left:o+"px",top:t.offsetY+t.target.offsetTop-i.scrollTop()-10+"px"})})},clear:function(t){$(".bottom-window-group ."+t+" > div").text("")},resetOutput:function(){this.clear("output"),bottomGroup.tabs.setCurrent("output"),windows.flowBottom()},_initTabs:function(){this.tabs=new Tabs({id:".bottom-window-group",clickAfter:function(t){this._$tabsPanel.find("."+t).focus()}})},fillOutput:function(t){var o=$(".bottom-window-group .output");t=t.replace(/\n/g,"
    "),-1!==t.indexOf("
    ")&&(t=Autolinker.link(t)),o.find("div").html(t),o.parent().scrollTop(o[0].scrollHeight)}}; diff --git a/static/js/wide.min.js.map b/static/js/wide.min.js.map index 6aed010..3a4d5af 100644 --- a/static/js/wide.min.js.map +++ b/static/js/wide.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["tabs.js","dialog.js","editors.js","notification.js","tree.js","wide.js","session.js","menu.js","windows.js","hotkeys.js","bottomGroup.js"],"names":["Tabs","obj","_$tabsPanel","$","id","_$tabs","_stack","this","STACKSIZE","_init","_it","each","data","length","splice","push","extend","prototype","_that","on","event","hasClass","setCurrent","clickAfter","parent","isRemove","removeBefore","del","stopPropagation","_hasId","$tabs","find","add","getCurrentId","$tabsPanel","append","title","content","after","stack","prevId","children","remove","i","removeAfter","path","$currentTab","removeClass","hide","addClass","show","setAfter","tId","tree","getTIdByPath","node","fileTree","getNodeByTId","selectNode","wide","curNode","ii","editors","curEditor","editor","cursor","getCursor","setCursor","focus","refreshOutline","text","line","ch","fn","dialog","version","author","dpuuid","Date","getTime","PROP_NAME","Dialog","_defaults","styleClass","background","panel","main","footer","headerMiddle","headerBg","closeIcon","closeIconHover","_attach","target","settings","uuid","inst","_newInst","replace","_getInst","err","_destroyDialog","removeData","prependTo","unwrap","removeAttr","_getDefaults","windowH","window","height","windowW","width","dialogH","parseInt","dialogW","okText","cancelText","footerHTML","headerHTML","hideFooter","hiddenOk","dialogHTML","bgHTML","modal","bgHeight","document","documentElement","scrollHeight","wrap","cloneObj","clone","get","bind","_close","$buttons","undefined","ok","_bindMove","keyup","keyCode","resize","afterInit","className","mousedown","_document","getElementById","x","clientX","style","left","y","clientY","top","ondragstart","onselectstart","onselect","setCapture","captureEvents","Event","MOUSEMOVE","MOUSEUP","onmousemove","positionX","positionY","onmouseup","releaseCapture","css","close","_closeDialog","_openDialog","msg","$dialog","position","afterOpen","_updateDialog","html","defaults","key","theme","styleName","options","otherArgs","Array","slice","call","arguments","shift","apply","concat","jQuery","autocompleteMutex","tabs","getEditorByPath","click","closeOther","currentIndex","firstIndex","_removeAllMarker","removeIndex","_initClose","ZeroClipboard","button","screenX","attr","init","config","label","tip","fileName","file","confirm_save","fmt","doc","isClean","nextId","menu","disabled","cancelSelectedNode","_initCodeMirrorHotKeys","openStartPage","dateFormat","time","date","dateObj","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","Math","floor","S","getMilliseconds","test","RegExp","$1","getFullYear","substr","k","start_page","load","context","wideSessionId","ajax","url","type","dataType","jsonp","success","textStatus","articles","listHTML","community","article","articlePermalink","articleTitle","articleCreateTime","ret","getCurrentPath","currentPath","CodeMirror","registerHelper","word","cur","curLine","getLine","start","end","charAt","request","newWideRequest","code","getValue","cursorLine","cursorCh","autocompleteHints","state","completionActive","async","JSON","stringify","autocompleteArray","displayText","name","substring","console","warn","markClean","setTimeout","list","from","Pos","to","commands","autocompleteAfterDot","cm","mode","getMode","Pass","token","getTokenAt","showHint","hint","go","completeSingle","autocompleteAnyWord","auto","gotoLine","doNothing","exprInfo","result","succ","cursorCoords","copyLinesDown","selectoion","listSelections","anchor","head","max","replaceToLine","replaceRange","offset","setSelection","copyLinesUp","moveLinesUp","moveLinesDown","lastLine","jumpToDecl","openFile","findUsages","appendSearch","selectIdentifier","findWordAt","extendSelection","searcHTML","toLowerCase","contents","lowerCaseContents","matches","split","startIndex","endIndex","j","keyWord","search_no_match","$search","find_usages","search_text","bottomGroup","searchTab","$it","half","getScrollInfo","clientHeight","defaultTextHeight","scrollTo","windows","flowBottom","newEditor","iconSkin","undisabled","textArea","value","fromTextArea","lineNumbers","autofocus","autoCloseBrackets","matchBrackets","highlightSelectionMatches","showToken","rulers","color","column","lineStyle","styleActiveLine","editorTheme","tabSize","editorTabSize","indentUnit","indentWithTabs","foldGutter","cursorHeight","readOnly","isGOAPI","profile","extraKeys","Ctrl-\\",".","Ctrl-/","Ctrl-I","Ctrl-L","Ctrl-E","Ctrl-D","Ctrl-B","Ctrl-S","saveFile","Shift-Ctrl-S","saveAllFiles","Shift-Alt-F","Alt-F7","Shift-Alt-Enter","isMaxEditor","restoreEditor","maxEditor","Shift-Ctrl-Up","Shift-Ctrl-Down","Shift-Alt-Up","Shift-Alt-Down","Shift-Alt-J","emmetCodeMirror","$span","evt","altKey","ctrlKey","shiftKey","which","autocomplete","random","setSize","setOption","keymap","notification","_initWS","notificationWS","ReconnectingWebSocket","channel","onopen","log","onmessage","e","parse","$notification","notificationHTML","cmd","severity","message","onclose","onerror","getCurrentNodeLastNode","returnNode","open","getNextShowNode","level","getParentNode","getNextNode","isBottomNode","isLastNode","nodes","transformToArray","getNodes","getOpenPaths","paths","getAllParents","parents","parentTId","isParents","parentPath","parentNode","isDir","indexOf","newFile","it","newDir","removeIt","removable","rename","export","isSucc","crossCompile","platform","decompress","dir","reAsyncChildNodes","refresh","gitClone","import","fileupload","formData","done","fail","$dirRMenu","$fileRMenu","setting","view","showTitle","selectedMulti","enable","autoParam","callback","onDblClick","treeId","treeNode","onRightClick","creatable","display","onClick","clickFlag","zTree","session","restore","_initSearch","_initRename","tempCursor","findModeByFileName","mime","error","$okBtn","closest","prop","trim","val","search","cancel","extension","select","oldPath","newPath","lastIndexOf","curProcessId","outlineHTML","decls","maxj","Ch","Line","Name","dblclick","_initDialog","confirm","create_file","create","fileType","create_dir","goto_file","$list","hotkeys","bindList","$selected","goFileHTML","icoSkin","getClassBySuffix","goto_line","git_clone","repository","outputWS","goLintFound","nextCmd","executable","fillOutput","output","pid","build_n_run","lints","files","lint","lineNo","signal","_initFooter","unbind","subMenu","onbeforeunload","oncontextmenu","_save","getOption","gofmt","beforeSend","resetOutput","stop","run","scrollInfo","setValue","formatted","html_beautify","js_beautify","css_beautify","suffix","ready","getLayoutState","paneState","isClosed","size","setInterval","filse","currentId","currentFile","layout","side","outerLayout","west","sideRight","innerLayout","east","bottom","south","latestSessionContent","nodesToOpen","jj","isOpen","l","expandNode","kk","m","mm","n","nn","c","sessionWS","addNodes","isParent","removeNode","_initPreference","_initAbout","_initShare","hover","pic","urls","email","twitterShare","encodeURIComponent","twitter","facebook","googleplus","weibo","tencent","about","wideVersion","uptodate","new_version_available","colon","wideDownload","mouseover","openPreference","closeAllFiles","exit","location","href","openAbout","goget","goinstall","govet","build","isChange","emptys","emptysTip","tabIndex","no_empty","preference","$dialogPreference","$fontFamily","$fontSize","$goFmt","$workspace","$password","$email","$locale","$theme","$editorFontFamily","$editorFontSize","$editorLineHeight","$editorTheme","$editorTabSize","$keymap","fontFamily","fontSize","goFmt","workspace","password","locale","editorFontFamily","editorFontSize","editorLineHeight","reload","jqXHR","staticServer","north__paneSelector","center__paneSelector","south__paneSelector","north__size","south__size","spacing_open","north__spacing_open","south__spacing_open","fxSpeed_open","fxSpeed_close","fxSettings_close","easing","fxSettings_open","paneSelector","togglerLength_open","togglerLength_closed","togglerAlign_closed","slideTrigger_open","spacing_closed","minSize","togglerClass","togglerTip_open","min","togglerTip_closed","restore_side","resizerTip","initClosed","center","restore_outline","restore_bottom","ondrag_end","pane","refreshEditor","onresize_end","onclose_end","onopen_end","onshow_end","addCloseBtn","maxSide","maxSideRight","maxBottom","toggleEditor","restoreBottom","restoreSide","restoreSideRight","sizePane","max_editor","editorDatas","slideOpen","defaultKeyMap","goEditor","fun","goFileTree","goOutline","goOutput","goSearch","goNotification","clearWindow","changeEditor","closeCurEditor","goFile","buildRun","$source","enterFun","keydown","index","count","scrollTop","offsetTop","_bindOutput","hotKeys","clear","preventDefault","_bindFileTree","isFirstNode","getPreNode","preNode","nextShowNode","_bindDocument","activeElement","nextPath","nextTId","_initTabs","_initFrame","$path","mouseup","offsetY","$output","Autolinker","link"],"mappings":"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","file":"wide.min.js","sourcesContent":["/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file tabs.js\n *\n * @author Liyuan Li\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar Tabs = function (obj) {\n obj._$tabsPanel = $(obj.id + \" > .tabs-panel\");\n obj._$tabs = $(obj.id + \" > .tabs\");\n obj._stack = [];\n\n this.obj = obj;\n this.obj.STACKSIZE = 64;\n\n this._init(obj);\n\n // DOM 元素存在时,应顺序入栈\n var _it = this;\n $(obj.id + \" > .tabs > div\").each(function () {\n var id = $(this).data(\"index\");\n if (obj._stack.length === _it.obj.STACKSIZE) {\n obj._stack.splice(0, 1);\n }\n if (obj._stack[obj._stack.length - 1] !== id) {\n _it.obj._stack.push(id);\n }\n });\n\n};\n\n$.extend(Tabs.prototype, {\n _init: function (obj) {\n var _that = this;\n\n obj._$tabs.on(\"click\", \"div\", function (event) {\n if ($(this).hasClass('current')) {\n return false;\n }\n\n var id = $(this).data(\"index\");\n _that.setCurrent(id);\n if (typeof (obj.clickAfter) === \"function\") {\n obj.clickAfter(id);\n }\n });\n\n obj._$tabs.on(\"click\", \".ico-close\", function (event) {\n var id = $(this).parent().data(\"index\"),\n isRemove = true;\n\n if (typeof obj.removeBefore === 'function') {\n isRemove = obj.removeBefore(id);\n }\n\n if (isRemove) {\n _that.del(id);\n }\n event.stopPropagation();\n });\n },\n _hasId: function (id) {\n var $tabs = this.obj._$tabs;\n if ($tabs.find('div[data-index=\"' + id + '\"]').length === 0) {\n return false;\n }\n return true;\n },\n add: function (data) {\n // 添加当前 tab\n if (this.getCurrentId() === data.id) {\n return false;\n }\n\n // 当前 tab 已经存在\n if (this._hasId(data.id)) {\n this.setCurrent(data.id);\n return false;\n }\n\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs;\n\n $tabs.append('
    '\n + data.title + '
    ');\n $tabsPanel.append('
    ' + data.content\n + '
    ');\n\n this.setCurrent(data.id);\n\n if (typeof data.after === 'function') {\n data.after();\n }\n },\n del: function (id) {\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs,\n stack = this.obj._stack,\n prevId = null;\n\n $tabs.children(\"div[data-index='\" + id + \"']\").remove();\n $tabsPanel.children(\"div[data-index='\" + id + \"']\").remove();\n\n // 移除堆栈中该 id\n for (var i = 0; i < stack.length; i++) {\n if (id === stack[i]) {\n stack.splice(i, 1);\n i--;\n }\n }\n\n prevId = stack[stack.length - 1];\n\n if (typeof this.obj.removeAfter === 'function') {\n this.obj.removeAfter(id, prevId);\n }\n\n this.setCurrent(prevId);\n },\n getCurrentId: function () {\n var $tabs = this.obj._$tabs;\n return $tabs.children(\".current\").data(\"index\");\n },\n setCurrent: function (path) {\n if (!path) {\n return false;\n }\n\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs;\n\n var $currentTab = $tabs.children(\".current\");\n if ($currentTab.data(\"index\") === path) {\n return false;\n }\n\n // tab 顺序入栈,如栈满则清除\n var stack = this.obj._stack;\n if (stack.length === this.obj.STACKSIZE) {\n stack.splice(0, 1);\n }\n if (stack[stack.length - 1] !== path) {\n this.obj._stack.push(path);\n }\n\n $tabs.children(\"div\").removeClass(\"current\");\n $tabsPanel.children(\"div\").hide();\n\n $tabs.children('div[data-index=\"' + path + '\"]').addClass(\"current\");\n $tabsPanel.children('div[data-index=\"' + path + '\"]').show();\n\n if (typeof this.obj.setAfter === 'function') {\n this.obj.setAfter();\n }\n\n var id = this.getCurrentId();\n if (\"startPage\" === id) {\n return;\n }\n\n // set tree node selected\n var tId = tree.getTIdByPath(id);\n var node = tree.fileTree.getNodeByTId(tId);\n tree.fileTree.selectNode(node);\n wide.curNode = node;\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n wide.curEditor = editors.data[i].editor;\n break;\n }\n }\n\n if (wide.curEditor) {\n var cursor = wide.curEditor.getCursor();\n wide.curEditor.setCursor(cursor);\n wide.curEditor.focus();\n wide.refreshOutline();\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n }\n }\n});","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file dialog.js\n *\n * @author Liyuan Li\n * @version 1.0.0.1, Dec 8, 2015\n */\n(function ($) {\n $.fn.extend({\n dialog: {\n version: \"0.0.1.7\",\n author: \"lly219@gmail.com\"\n }\n });\n\n var dpuuid = new Date().getTime();\n var PROP_NAME = 'dialog';\n\n var Dialog = function () {\n this._defaults = {\n \"styleClass\": {\n \"background\": \"dialog-background\",\n \"panel\": \"dialog-panel\",\n \"main\": \"dialog-main\",\n \"footer\": \"dialog-footer\",\n \"headerMiddle\": \"dialog-header-middle\",\n \"headerBg\": \"dialog-header-bg\",\n \"closeIcon\": \"dialog-close-icon\",\n \"closeIconHover\": \"dialog-close-icon-hover\",\n \"title\": \"dialog-title\"\n }\n };\n };\n\n $.extend(Dialog.prototype, {\n _attach: function (target, settings) {\n if (!target.id) {\n this.uuid++;\n target.id = 'dp' + this.uuid;\n }\n var inst = this._newInst($(target));\n\n inst.settings = $.extend({}, settings || {});\n $.data(target, PROP_NAME, inst);\n this._init(target);\n },\n /* Create a new instance object. */\n _newInst: function (target) {\n // escape jQuery meta chars\n var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\\\\\$1');\n return {\n id: id\n };\n },\n _getInst: function (target) {\n try {\n return $.data(target, PROP_NAME);\n } catch (err) {\n throw 'Missing instance data for this dialog';\n }\n },\n _destroyDialog: function (target) {\n var inst = $.dialog._getInst(target);\n var id = inst.id;\n $.removeData(target, PROP_NAME);\n\n $(target).prependTo(\"#\" + id + \"Wrap\").unwrap();\n $(target).removeAttr(\"style\");\n\n var styleClass = this._getDefaults($.dialog._defaults, inst.settings, \"styleClass\");\n $(\".\" + styleClass.background).remove();\n $(\"#\" + id + \"Dialog\").remove();\n },\n _init: function (target) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n var windowH = $(window).height(),\n windowW = $(window).width();\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\"),\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\n\n // get settings or default value.\n settings.title = settings.title ? settings.title : \"\";\n settings.okText = settings.okText ? settings.okText : \"Ok\";\n settings.cancelText = settings.cancelText ? settings.cancelText : \"Cancel\";\n\n // build HTML.\n var footerHTML = \"\",\n headerHTML = \"
    \"\n + settings.title + \"
    \";\n\n // Sets footerHTML.\n if (!settings.hideFooter) {\n if (!settings.hiddenOk) {\n footerHTML = \"\";\n }\n footerHTML += \"\";\n }\n\n var dialogHTML = \"
    \" + headerHTML\n + \"
    \"\n + footerHTML + \"
    \";\n\n var bgHTML = \"\";\n if (settings.modal && $(\".\" + styleClass.background).length === 0) {\n var bgHeight = windowH < document.documentElement.scrollHeight\n ? document.documentElement.scrollHeight : windowH;\n bgHTML = \"
    \";\n }\n\n // Package dialog.\n $(\"#\" + id).wrap(\"
    \");\n var cloneObj = $(target).clone(true);\n $(target).remove();\n $('body').append(bgHTML + dialogHTML);\n $($(\"#\" + id + \"Dialog .\" + styleClass.main + \" div\").get(0)).append(cloneObj);\n $(cloneObj).show();\n\n // Bind event.\n $(\"#\" + id + \"Dialog .\" + styleClass.closeIcon).bind(\"click\", function () {\n $.dialog._close(id, settings);\n });\n\n var $buttons = $(\"#\" + id + \"Dialog .\" + styleClass.footer + \" button\");\n $($buttons.get(1)).bind(\"click\", function () {\n $.dialog._close(id, settings);\n });\n\n $($buttons.get(0)).bind(\"click\", function () {\n if (settings.ok === undefined || settings.ok()) {\n $.dialog._close(id, settings);\n }\n });\n\n this._bindMove(id, styleClass.headerBg, dialogH, dialogW);\n\n // esc exit\n $(window).keyup(function (event) {\n if (event.keyCode === 27) {\n $.dialog._close(id, settings);\n }\n });\n\n $(window).resize(function () {\n var height = $(\"body\").height() > $(window).height() ? $(\"body\").height() : $(window).height();\n $(\".dialog-background\").height(height);\n });\n\n if (typeof settings.afterInit === \"function\") {\n settings.afterInit();\n }\n },\n _bindMove: function (id, className) {\n $(\"#\" + id + \"Dialog .\" + className).mousedown(function (event) {\n var _document = document;\n if (!event) {\n event = window.event;\n }\n var dialog = document.getElementById(id + \"Dialog\");\n var x = event.clientX - parseInt(dialog.style.left),\n y = event.clientY - parseInt(dialog.style.top);\n _document.ondragstart = \"return false;\";\n _document.onselectstart = \"return false;\";\n _document.onselect = \"document.selection.empty();\";\n\n if (this.setCapture) {\n this.setCapture();\n } else if (window.captureEvents) {\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\n }\n\n _document.onmousemove = function (event) {\n if (!event) {\n event = window.event;\n }\n var positionX = event.clientX - x,\n positionY = event.clientY - y;\n if (positionX < 0) {\n positionX = 0;\n }\n if (positionX > $(window).width() - $(dialog).width()) {\n positionX = $(window).width() - $(dialog).width();\n }\n if (positionY > $(window).height() - $(dialog).height()) {\n positionY = $(window).height() - $(dialog).height();\n }\n if (positionY < 0) {\n positionY = 0;\n }\n dialog.style.left = positionX + \"px\";\n dialog.style.top = positionY + \"px\";\n };\n\n _document.onmouseup = function () {\n if (this.releaseCapture) {\n this.releaseCapture();\n } else if (window.captureEvents) {\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\n }\n _document.onmousemove = null;\n _document.onmouseup = null;\n _document.ondragstart = null;\n _document.onselectstart = null;\n _document.onselect = null;\n };\n });\n },\n _close: function (id, settings) {\n if ($(\"#\" + id + \"Dialog\").css(\"display\") === \"none\") {\n return;\n }\n if (settings.close === undefined || settings.close()) {\n $(\"#\" + id + \"Dialog\").hide();\n if (settings.modal) {\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $(\".\" + styleClass.background).hide();\n }\n }\n },\n _closeDialog: function (target) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n $.dialog._close(id, settings);\n },\n _openDialog: function (target, msg) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings,\n top = \"\", left = \"\",\n $dialog = $(\"#\" + id + \"Dialog\"),\n windowH = $(window).height(),\n windowW = $(window).width(),\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\n\n // Sets position.\n if (settings.position) {\n top = settings.position.top;\n left = settings.position.left;\n } else {\n // 20(footer) + 23(header)\n top = parseInt((windowH - dialogH - 43) / 2);\n if (top < 0) {\n top = 0;\n }\n left = parseInt((windowW - dialogW) / 2);\n }\n $dialog.css({\n \"top\": top + \"px\",\n \"left\": left + \"px\"\n }).show();\n\n if (settings.modal) {\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $(\".\" + styleClass.background).show();\n }\n\n if (typeof settings.afterOpen === \"function\") {\n settings.afterOpen(msg);\n }\n\n $(\"#\" + id + \"Dialog .dialog-footer button:eq(0)\").focus();\n },\n _updateDialog: function (target, data) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $.extend(settings, data);\n var $dialog = $(\"#\" + id + \"Dialog\");\n if (data.position) {\n $dialog.css({\n \"top\": data.position.top,\n \"left\": data.position.left\n });\n }\n\n if (data.width) {\n $dialog.width(data.width + 26);\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.width = data.width + \"px\";\n $dialog.find(\".\" + styleClass.headerBg).width(data.width + 18);\n }\n\n if (data.height) {\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.height = data.height + \"px\";\n }\n\n if (data.title) {\n $dialog.find(\".\" + styleClass.title).html(data.title);\n }\n\n if (data.modal !== undefined) {\n if (data.modal) {\n $(\".\" + styleClass.background).show();\n } else {\n $(\".\" + styleClass.background).hide();\n }\n }\n\n if (data.hideFooter !== undefined) {\n if (data.hideFooter) {\n $dialog.find(\".\" + styleClass.footer).hide();\n } else {\n $dialog.find(\".\" + styleClass.footer).show();\n }\n }\n\n },\n _getDefaults: function (defaults, settings, key) {\n if (key === \"styleClass\") {\n if (settings.theme === \"default\" || settings.theme === undefined) {\n return defaults.styleClass;\n }\n settings.styleClass = {};\n for (var styleName in defaults[key]) {\n settings.styleClass[styleName] = settings.theme + \"-\" + defaults.styleClass[styleName];\n }\n } else if (key === \"height\" || key === \"width\") {\n if (settings[key] === null || settings[key] === undefined) {\n return \"auto\";\n } else {\n return settings[key] + \"px\";\n }\n } else {\n if (settings[key] === null || settings[key] === undefined) {\n return defaults[key];\n }\n }\n return settings[key];\n }\n });\n\n $.fn.dialog = function (options) {\n var otherArgs = Array.prototype.slice.call(arguments);\n\n if (typeof options === 'string') {\n otherArgs.shift();\n return $.dialog['_' + options + 'Dialog'].apply($.dialog, [this[0]].concat(otherArgs));\n }\n return this.each(function () {\n $.dialog._attach(this, options);\n });\n };\n\n $.dialog = new Dialog();\n\n // Add another global to avoid noConflict issues with inline event handlers\n window['DP_jQuery_' + dpuuid] = $;\n})(jQuery);","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file editor.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.1.0, Jan 12, 2016\n */\nvar editors = {\n autocompleteMutex: false,\n data: [],\n tabs: {},\n getEditorByPath: function (path) {\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].editor.options.path === path) {\n return editors.data[i].editor;\n }\n }\n },\n close: function () {\n $('.edit-panel .tabs > div[data-index=\"' + $('.edit-panel .frame').data('index') + ']').find('.ico-close').click();\n },\n closeOther: function () {\n var currentIndex = $(\".edit-panel .frame\").data(\"index\");\n\n // 设置全部关闭标识\n var removeData = [];\n $(\".edit-panel .tabs > div\").each(function (i) {\n if (currentIndex !== $(this).data(\"index\")) {\n removeData.push($(this).data(\"index\"));\n }\n });\n if (removeData.length === 0) {\n return false;\n }\n var firstIndex = removeData.splice(0, 1);\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n // 开始关闭\n $('.edit-panel .tabs > div[data-index=\"' + firstIndex + '\"]').find(\".ico-close\").click();\n },\n _removeAllMarker: function () {\n var removeData = $(\"#dialogCloseEditor\").data(\"removeData\");\n if (removeData && removeData.length > 0) {\n var removeIndex = removeData.splice(0, 1);\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n $('.edit-panel .tabs > div[data-index=\"' + removeIndex + '\"] .ico-close').click();\n }\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n },\n _initClose: function () {\n new ZeroClipboard($(\"#copyFilePath\"));\n\n // 关闭、关闭其他、关闭所有\n $(\".edit-panel\").on(\"mouseup\", '.tabs > div', function (event) {\n event.stopPropagation();\n\n if (event.button === 0) { // 左键\n $(\".edit-panel .frame\").hide();\n return false;\n }\n\n // event.button === 2 右键\n var left = event.screenX;\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\n left = event.screenX - $(\".side\").width();\n }\n $(\".edit-panel .frame\").show().css({\n \"left\": left + \"px\",\n \"top\": \"21px\"\n }).data('index', $(this).data(\"index\"));\n\n $(\"#copyFilePath\").attr('data-clipboard-text', $(this).find(\"span:eq(0)\").attr(\"title\"));\n return false;\n });\n },\n init: function () {\n $(\"#dialogCloseEditor\").dialog({\n \"modal\": true,\n \"height\": 90,\n \"width\": 260,\n \"title\": config.label.tip,\n \"hideFooter\": true,\n \"afterOpen\": function (fileName) {\n $(\"#dialogCloseEditor > div:eq(0)\").html(config.label.file\n + ' ' + fileName + '. ' + config.label.confirm_save + '?');\n $(\"#dialogCloseEditor button:eq(0)\").focus();\n },\n \"afterInit\": function () {\n $(\"#dialogCloseEditor button.save\").click(function () {\n var i = $(\"#dialogCloseEditor\").data(\"index\");\n wide.fmt(editors.data[i].id, editors.data[i].editor);\n editors.tabs.del(editors.data[i].id);\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n\n $(\"#dialogCloseEditor button.discard\").click(function () {\n var i = $(\"#dialogCloseEditor\").data(\"index\");\n editors.tabs.del(editors.data[i].id);\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n\n $(\"#dialogCloseEditor button.cancel\").click(function (event) {\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n }\n });\n\n editors.tabs = new Tabs({\n id: \".edit-panel\",\n setAfter: function () {\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n },\n clickAfter: function (id) {\n if (id === 'startPage') {\n wide.curEditor = undefined;\n $(\".footer .cursor\").text('');\n wide.refreshOutline();\n \n return false;\n }\n },\n removeBefore: function (id) {\n if (id === 'startPage') { // 当前关闭的 tab 是起始页\n editors._removeAllMarker();\n return true;\n }\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n if (editors.data[i].editor.doc.isClean()) {\n editors._removeAllMarker();\n return true;\n } else {\n $(\"#dialogCloseEditor\").dialog(\"open\", $('.edit-panel .tabs > div[data-index=\"'\n + editors.data[i].id + '\"] > span:eq(0)').text());\n $(\"#dialogCloseEditor\").data(\"index\", i);\n return false;\n }\n\n break;\n }\n }\n },\n removeAfter: function (id, nextId) {\n if ($(\".edit-panel .tabs > div\").length === 0) {\n // 全部 tab 都关闭时才 disables 菜单中“全部关闭”的按钮\n menu.disabled(['close-all']);\n }\n\n // 移除编辑器\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n editors.data.splice(i, 1);\n break;\n }\n }\n\n if (editors.data.length === 0) { // 起始页可能存在,所以用编辑器数据判断\n menu.disabled(['save-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\n 'edit']);\n\n // remove selected tree node\n tree.fileTree.cancelSelectedNode();\n wide.curNode = undefined;\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n return false;\n }\n\n if (!nextId) {\n // 编辑器区域不存在打开的 Tab\n // remove selected tree node\n tree.fileTree.cancelSelectedNode();\n wide.curNode = undefined;\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n return false;\n }\n\n if (nextId === editors.tabs.getCurrentId()) {\n // 关闭的不是当前编辑器\n return false;\n }\n }\n });\n\n this._initCodeMirrorHotKeys();\n this.openStartPage();\n this._initClose();\n },\n openStartPage: function () {\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n\n var dateFormat = function (time, fmt) {\n var date = new Date(time);\n var dateObj = {\n \"M+\": date.getMonth() + 1, //月份 \n \"d+\": date.getDate(), //日 \n \"h+\": date.getHours(), //小时 \n \"m+\": date.getMinutes(), //分 \n \"s+\": date.getSeconds(), //秒 \n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度 \n \"S\": date.getMilliseconds() //毫秒 \n };\n if (/(y+)/.test(fmt))\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n for (var k in dateObj)\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\n }\n return fmt;\n };\n\n editors.tabs.add({\n id: \"startPage\",\n title: ' ' + config.label.start_page + '',\n content: '
    ',\n after: function () {\n $(\"#startPage\").load(config.context + '/start?sid=' + config.wideSessionId);\n $.ajax({\n url: \"https://hacpai.com/apis/articles?tags=wide,golang&p=1&size=20\",\n type: \"GET\",\n dataType: \"jsonp\",\n jsonp: \"callback\",\n success: function (data, textStatus) {\n var articles = data.articles;\n if (0 === articles.length) {\n return;\n }\n\n // 按 size = 20 取,但只保留最多 9 篇\n var length = articles.length;\n if (length > 9) {\n length = 9;\n }\n\n var listHTML = \"
    • \" + config.label.community + \"
    • \";\n for (var i = 0; i < length; i++) {\n var article = articles[i];\n listHTML += \"
    • \"\n + \"\"\n + article.articleTitle + \"  \"\n + dateFormat(article.articleCreateTime, 'yyyy-MM-dd');\n +\"
    • \";\n }\n\n $(\"#startPage .news\").html(listHTML + \"
    \");\n }\n });\n }\n });\n },\n getCurrentId: function () {\n var ret = editors.tabs.getCurrentId();\n if (ret === 'startPage') {\n ret = null;\n }\n \n return ret;\n },\n getCurrentPath: function () {\n var currentPath = $(\".edit-panel .tabs .current span:eq(0)\").attr(\"title\");\n if (currentPath === config.label.start_page) {\n currentPath = null;\n }\n return currentPath;\n },\n _initCodeMirrorHotKeys: function () {\n CodeMirror.registerHelper(\"hint\", \"go\", function (editor) {\n editor = wide.curEditor; // 使用当前编辑器覆盖实参,因为异步调用的原因,实参不一定正确\n var word = /[\\w$]+/;\n\n var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n\n var start = cur.ch, end = start;\n while (end < curLine.length && word.test(curLine.charAt(end))) {\n ++end;\n }\n while (start && word.test(curLine.charAt(start - 1))) {\n --start;\n }\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = editor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n var autocompleteHints = [];\n\n if (editors.autocompleteMutex && editor.state.completionActive) {\n return;\n }\n\n editors.autocompleteMutex = true;\n\n $.ajax({\n async: false, // 同步执行\n type: 'POST',\n url: config.context + '/autocomplete',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (data) {\n var autocompleteArray = data[1];\n\n if (autocompleteArray) {\n for (var i = 0; i < autocompleteArray.length; i++) {\n var displayText = '',\n text = autocompleteArray[i].name;\n\n switch (autocompleteArray[i].class) {\n case \"type\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"const\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"var\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"package\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"func\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ''\n + autocompleteArray[i].type.substring(4) + '';\n text += '()';\n break;\n default:\n console.warn(\"Can't handle autocomplete [\" + autocompleteArray[i].class + \"]\");\n break;\n }\n\n autocompleteHints[i] = {\n displayText: displayText,\n text: text\n };\n }\n }\n\n editor.doc.markClean();\n $(\".edit-panel .tabs .current > span:eq(0)\").removeClass(\"changed\");\n }\n });\n\n setTimeout(function () {\n editors.autocompleteMutex = false;\n }, 20);\n\n return {list: autocompleteHints, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n });\n\n CodeMirror.commands.autocompleteAfterDot = function (cm) {\n var mode = cm.getMode();\n if (mode && \"go\" !== mode.name) {\n return CodeMirror.Pass;\n }\n\n var token = cm.getTokenAt(cm.getCursor());\n\n if (\"comment\" === token.type || \"string\" === token.type) {\n return CodeMirror.Pass;\n }\n\n setTimeout(function () {\n if (!cm.state.completionActive) {\n cm.showHint({hint: CodeMirror.hint.go, completeSingle: false});\n }\n }, 50);\n\n return CodeMirror.Pass;\n };\n\n CodeMirror.commands.autocompleteAnyWord = function (cm) {\n cm.showHint({hint: CodeMirror.hint.auto});\n };\n\n CodeMirror.commands.gotoLine = function (cm) {\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\n };\n\n // 用于覆盖 cm 默认绑定的某些快捷键功能.\n CodeMirror.commands.doNothing = function (cm) {\n };\n\n CodeMirror.commands.exprInfo = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/exprinfo',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n \n var position = wide.curEditor.cursorCoords();\n $(\"body\").append('
    ' + result.data + '
    ');\n }\n });\n };\n\n CodeMirror.commands.copyLinesDown = function (cm) {\n var content = '',\n selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n for (var i = from.line, max = to.line; i <= max; i++) {\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\n content += '\\n' + cm.getLine(i);\n }\n }\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\n\n var offset = replaceToLine - from.line + 1;\n cm.setSelection(CodeMirror.Pos(from.line + offset, from.ch),\n CodeMirror.Pos(to.line + offset, to.ch));\n };\n\n CodeMirror.commands.copyLinesUp = function (cm) {\n var content = '',\n selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n for (var i = from.line, max = to.line; i <= max; i++) {\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\n content += '\\n' + cm.getLine(i);\n }\n }\n\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\n\n cm.setSelection(CodeMirror.Pos(from.line, from.ch),\n CodeMirror.Pos(to.line, to.ch));\n };\n\n CodeMirror.commands.moveLinesUp = function (cm) {\n var selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n if (from.line === 0) {\n return false;\n }\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange('\\n' + cm.getLine(from.line - 1), CodeMirror.Pos(replaceToLine));\n if (from.line === 1) {\n // 移除第一行的换行\n cm.replaceRange('', CodeMirror.Pos(0, 0),\n CodeMirror.Pos(1, 0));\n } else {\n cm.replaceRange('', CodeMirror.Pos(from.line - 2, cm.getLine(from.line - 2).length),\n CodeMirror.Pos(from.line - 1, cm.getLine(from.line - 1).length));\n }\n\n cm.setSelection(CodeMirror.Pos(from.line - 1, from.ch),\n CodeMirror.Pos(to.line - 1, to.ch));\n };\n\n CodeMirror.commands.moveLinesDown = function (cm) {\n var selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n if (to.line === cm.lastLine()) {\n return false;\n }\n\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n // 把选中的下一行添加到选中区域的上一行\n if (from.line === 0) {\n cm.replaceRange(cm.getLine(replaceToLine + 1) + '\\n', CodeMirror.Pos(0, 0));\n } else {\n cm.replaceRange('\\n' + cm.getLine(replaceToLine + 1), CodeMirror.Pos(from.line - 1));\n }\n // 删除选中的下一行\n cm.replaceRange('', CodeMirror.Pos(replaceToLine + 1, cm.getLine(replaceToLine + 1).length),\n CodeMirror.Pos(replaceToLine + 2, cm.getLine(replaceToLine + 2).length));\n\n cm.setSelection(CodeMirror.Pos(from.line + 1, from.ch),\n CodeMirror.Pos(to.line + 1, to.ch));\n };\n\n CodeMirror.commands.jumpToDecl = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/find/decl',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n \n var data = result.data;\n\n var tId = tree.getTIdByPath(data.path);\n wide.curNode = tree.fileTree.getNodeByTId(tId);\n tree.fileTree.selectNode(wide.curNode);\n\n tree.openFile(wide.curNode, CodeMirror.Pos(data.cursorLine - 1, data.cursorCh - 1));\n }\n });\n };\n\n CodeMirror.commands.findUsages = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/find/usages',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n editors.appendSearch(result.data, 'usages', '');\n }\n });\n };\n\n CodeMirror.commands.selectIdentifier = function (cm) {\n var cur = cm.getCursor();\n var word = cm.findWordAt(cur);\n cm.extendSelection(word.anchor, word.head);\n };\n },\n appendSearch: function (data, type, key) {\n var searcHTML = '
      ',\n key = key.toLowerCase();\n\n for (var i = 0, ii = data.length; i < ii; i++) {\n var contents = '',\n lowerCaseContents = data[i].contents[0].toLowerCase(),\n matches = lowerCaseContents.split(key),\n startIndex = 0,\n endIndex = 0;\n for (var j = 0, max = matches.length; j < max; j++) {\n startIndex = endIndex + matches[j].length;\n endIndex = startIndex + key.length;\n var keyWord = data[i].contents[0].substring(startIndex, endIndex);\n if (keyWord !== '') {\n keyWord = '' + keyWord + '';\n }\n contents += data[i].contents[0].substring(startIndex - matches[j].length, startIndex) + keyWord;\n }\n\n searcHTML += '
    • '\n + contents + \"    \" + data[i].path\n + ' (' + data[i].line + ':'\n + data[i].ch + ')
    • ';\n }\n\n if (data.length === 0) {\n searcHTML += '
    • ' + config.label.search_no_match + '
    • ';\n }\n searcHTML += '
    ';\n\n var $search = $('.bottom-window-group .search'),\n title = config.label.find_usages;\n if (type === \"founds\") {\n title = config.label.search_text;\n }\n if ($search.find(\"ul\").length === 0) {\n bottomGroup.searchTab = new Tabs({\n id: \".bottom-window-group .search\",\n removeAfter: function (id, prevId) {\n if ($search.find(\"ul\").length === 1) {\n $search.find(\".tabs\").hide();\n }\n }\n });\n\n $search.on(\"click\", \"li\", function () {\n $search.find(\"li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n });\n\n $search.on(\"dblclick\", \"li\", function () {\n var $it = $(this),\n tId = tree.getTIdByPath($it.attr(\"title\"));\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n\n var line = $it.find(\".position\").data(\"line\") - 1;\n var cursor = CodeMirror.Pos(line, $it.find(\".position\").data(\"ch\") - 1);\n\n\n var editor = wide.curEditor;\n editor.setCursor(cursor);\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n wide.curEditor.focus();\n });\n\n $search.find(\".tabs-panel > div\").append(searcHTML);\n\n $search.find(\".tabs .first\").text(title);\n } else {\n $search.find(\".tabs\").show();\n bottomGroup.searchTab.add({\n \"id\": \"search\" + (new Date()).getTime(),\n \"title\": title,\n \"content\": searcHTML\n });\n }\n\n // focus\n bottomGroup.tabs.setCurrent(\"search\");\n windows.flowBottom();\n $(\".bottom-window-group .search\").focus();\n },\n // 新建一个编辑器 Tab,如果已经存在 Tab 则切换到该 Tab.\n newEditor: function (data, cursor) {\n var id = wide.curNode.id;\n\n editors.tabs.add({\n id: id,\n title: '' + wide.curNode.name + '',\n content: ''\n });\n\n menu.undisabled(['save-all', 'close-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\n 'edit']);\n\n var textArea = document.getElementById(\"editor\" + id);\n textArea.value = data.content;\n\n var editor = CodeMirror.fromTextArea(textArea, {\n lineNumbers: true,\n autofocus: true,\n autoCloseBrackets: true,\n matchBrackets: true,\n highlightSelectionMatches: {showToken: /\\w/},\n rulers: [{color: \"#ccc\", column: 120, lineStyle: \"dashed\"}],\n styleActiveLine: true,\n theme: config.editorTheme,\n tabSize: config.editorTabSize,\n indentUnit: 4,\n indentWithTabs: true,\n foldGutter: true,\n cursorHeight: 1,\n path: data.path,\n readOnly: wide.curNode.isGOAPI,\n profile: 'xhtml', // define Emmet output profile\n extraKeys: {\n \"Ctrl-\\\\\": \"autocompleteAnyWord\",\n \".\": \"autocompleteAfterDot\",\n \"Ctrl-/\": 'toggleComment',\n \"Ctrl-I\": \"exprInfo\",\n \"Ctrl-L\": \"gotoLine\",\n \"Ctrl-E\": \"deleteLine\",\n \"Ctrl-D\": \"doNothing\", // 取消默认的 deleteLine\n \"Ctrl-B\": \"jumpToDecl\",\n \"Ctrl-S\": function () {\n wide.saveFile();\n },\n \"Shift-Ctrl-S\": function () {\n menu.saveAllFiles();\n },\n \"Shift-Alt-F\": function () {\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n wide.fmt(currentPath, wide.curEditor);\n },\n \"Alt-F7\": \"findUsages\",\n \"Shift-Alt-Enter\": function () {\n if (windows.isMaxEditor) {\n windows.restoreEditor();\n } else {\n windows.maxEditor();\n }\n },\n \"Shift-Ctrl-Up\": \"copyLinesUp\",\n \"Shift-Ctrl-Down\": \"copyLinesDown\",\n \"Shift-Alt-Up\": \"moveLinesUp\",\n \"Shift-Alt-Down\": \"moveLinesDown\",\n \"Shift-Alt-J\": \"selectIdentifier\"\n }\n });\n\n if (\"text/html\" === data.mode) {\n emmetCodeMirror(editor);\n }\n\n editor.on('cursorActivity', function (cm) {\n $(\".edit-exprinfo\").remove();\n var cursor = cm.getCursor();\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n });\n\n editor.on('blur', function (cm) {\n $(\".edit-exprinfo\").remove();\n });\n\n editor.on('changes', function (cm) {\n if (cm.doc.isClean()) { // no modification\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === cm.options.path) {\n $span.removeClass(\"changed\");\n }\n });\n\n return;\n }\n\n // changed\n\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === cm.options.path) {\n $span.addClass(\"changed\");\n }\n });\n });\n\n editor.on('keydown', function (cm, evt) {\n if (evt.altKey || evt.ctrlKey || evt.shiftKey) {\n return;\n }\n\n var k = evt.which;\n\n if (k < 48) {\n return;\n }\n\n // hit [0-9]\n\n if (k > 57 && k < 65) {\n return;\n }\n\n // hit [a-z]\n\n if (k > 90) {\n return;\n }\n\n if (config.autocomplete) {\n if (0.5 <= Math.random()) {\n CodeMirror.commands.autocompleteAfterDot(cm);\n }\n }\n });\n\n editor.setSize('100%', $(\".edit-panel\").height() - $(\".edit-panel .tabs\").height());\n editor.setOption(\"mode\", data.mode);\n editor.setOption(\"gutters\", [\"CodeMirror-lint-markers\", \"CodeMirror-foldgutter\"]);\n\n if (\"wide\" !== config.keymap) {\n editor.setOption(\"keyMap\", config.keymap);\n }\n\n if (\"text/x-go\" === data.mode || \"application/json\" === data.mode) {\n editor.setOption(\"lint\", true);\n }\n\n if (\"application/xml\" === data.mode || \"text/html\" === data.mode) {\n editor.setOption(\"autoCloseTags\", true);\n }\n\n wide.curEditor = editor;\n editors.data.push({\n \"editor\": editor,\n \"id\": id\n });\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\n var cursorCoords = wide.curEditor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n wide.curEditor.scrollTo(0, cursorCoords.top);\n\n editor.setCursor(cursor);\n editor.focus();\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file notification.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar notification = {\n init: function () {\n $(\".notification-count\").click(function () {\n bottomGroup.tabs.setCurrent(\"notification\");\n $(\".bottom-window-group .notification\").focus();\n $(this).hide();\n });\n\n this._initWS();\n },\n _initWS: function () {\n var notificationWS = new ReconnectingWebSocket(config.channel + '/notification/ws?sid=' + config.wideSessionId);\n\n notificationWS.onopen = function () {\n console.log('[notification onopen] connected');\n };\n\n notificationWS.onmessage = function (e) {\n var data = JSON.parse(e.data),\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n \n if (data.cmd && \"init-notification\" === data.cmd) {\n console.log('[notification onmessage]' + e.data);\n \n return;\n }\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n\n $(\".notification-count\").show();\n };\n\n notificationWS.onclose = function (e) {\n console.log('[notification onclose] disconnected (' + e.code + ')');\n };\n\n notificationWS.onerror = function (e) {\n console.log('[notification onerror]');\n };\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file tree.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.1.1, Dec 15, 2015\n */\nvar tree = {\n fileTree: undefined,\n // 递归获取当前节点展开中的最后一个节点\n getCurrentNodeLastNode: function (node) {\n var returnNode = node.children[node.children.length - 1];\n if (returnNode.open) {\n return tree.getCurrentNodeLastNode(returnNode);\n } else {\n return returnNode;\n }\n },\n // 按照树展现获取下一个节点\n getNextShowNode: function (node) {\n if (node.level !== 0) {\n if (node.getParentNode().getNextNode()) {\n return node.getParentNode().getNextNode();\n } else {\n return tree.getNextShowNode(node.getParentNode());\n }\n } else {\n return node.getNextNode();\n }\n },\n isBottomNode: function (node) {\n if (node.open) {\n return false;\n }\n\n if (node.getParentNode()) {\n if (node.getParentNode().isLastNode) {\n return tree.isBottomNode(node.getParentNode());\n } else {\n return false;\n }\n } else {\n if (node.isLastNode) {\n return true;\n } else {\n return false;\n }\n }\n },\n getTIdByPath: function (path) {\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n if (nodes[i].path === path) {\n return nodes[i].tId;\n }\n }\n\n return undefined;\n },\n getOpenPaths: function () {\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes()),\n paths = [];\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n if (nodes[i].open) {\n paths.push(nodes[i].path);\n }\n }\n\n return paths;\n },\n getAllParents: function (node, parents) {\n if (!parents) {\n parents = [];\n }\n\n if (!node || !node.parentTId) {\n return parents;\n } else {\n parents.push(node.getParentNode());\n return tree.getAllParents(node.getParentNode(), parents);\n }\n },\n isParents: function (tId, parentPath) {\n var node = tree.fileTree.getNodeByTId(tId);\n if (!node || !node.parentTId) {\n return false;\n } else {\n var parentNode = tree.fileTree.getNodeByTId(node.parentTId);\n if (node.path === parentPath) {\n return true;\n } else {\n return tree.isParents(parentNode.tId, parentPath);\n }\n }\n },\n isDir: function () {\n if (wide.curNode.iconSkin.indexOf(\"ico-ztree-dir\") === 0) {\n return true;\n }\n\n return false;\n },\n newFile: function (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n\n $(\"#dialogNewFilePrompt\").dialog(\"open\");\n },\n newDir: function (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n\n $(\"#dialogNewDirPrompt\").dialog(\"open\");\n },\n removeIt: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n } else {\n if (!wide.curNode.removable) {\n return false;\n }\n }\n\n $(\"#dialogRemoveConfirm\").dialog(\"open\");\n },\n rename: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n $(\"#dialogRenamePrompt\").dialog(\"open\");\n },\n export: function () {\n var request = newWideRequest(),\n isSucc = false;\n request.path = wide.curNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/zip/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n isSucc = true;\n }\n });\n\n if (isSucc) {\n window.open(config.context + '/file/zip?path=' + wide.curNode.path + \".zip\");\n }\n },\n crossCompile: function (platform) {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n request.platform = platform;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/cross',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n }\n });\n },\n decompress: function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/decompress',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n var dir = wide.curNode.getParentNode();\n tree.fileTree.reAsyncChildNodes(dir, \"refresh\");\n }\n });\n },\n refresh: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", true);\n },\n gitClone: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n $(\"#dialogGitClonePrompt\").dialog('open');\n },\n import: function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $('#importFileupload').fileupload({\n url: \"/file/upload?path=\" + request.path,\n dataType: 'json',\n formData: request,\n done: function (e, result) {\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\");\n },\n fail: function () {\n console.log(arguments);\n }\n });\n },\n init: function () {\n $(\"#file\").click(function () {\n $(this).focus();\n });\n\n var request = newWideRequest();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/files',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n var $dirRMenu = $(\"#dirRMenu\");\n var $fileRMenu = $(\"#fileRMenu\");\n var setting = {\n data: {\n key: {\n title: \"path\"\n }\n },\n view: {\n showTitle: true,\n selectedMulti: false\n },\n async: {\n enable: true,\n url: config.context + \"/file/refresh\",\n autoParam: [\"path\"]\n },\n callback: {\n onDblClick: function (event, treeId, treeNode) {\n if (treeNode) {\n tree.openFile(treeNode);\n }\n },\n onRightClick: function (event, treeId, treeNode) {\n if (treeNode && !treeNode.isGOAPI) {\n menu.undisabled(['import', 'export', 'git-clone']);\n\n wide.curNode = treeNode;\n tree.fileTree.selectNode(treeNode);\n\n if (!tree.isDir()) { // if right click on a file\n if (wide.curNode.removable) {\n $fileRMenu.find(\".remove\").removeClass(\"disabled\");\n } else {\n $fileRMenu.find(\".remove\").addClass(\"disabled\");\n }\n\n if (-1 === wide.curNode.path.indexOf(\"zip\", wide.curNode.path.length - \"zip\".length)) { // !path.endsWith(\"zip\")\n $fileRMenu.find(\".decompress\").hide();\n } else {\n $fileRMenu.find(\".decompress\").show();\n }\n\n if (-1 === wide.curNode.path.indexOf(\"go\", wide.curNode.path.length - \"go\".length)) { // !path.endsWith(\"go\")\n $fileRMenu.find(\".linux64\").hide();\n } else {\n $fileRMenu.find(\".linux64\").show();\n }\n\n var top = event.clientY - 10;\n if ($fileRMenu.height() + top > $('.content').height()) {\n top = top - $fileRMenu.height() - 25;\n }\n $fileRMenu.css({\n \"top\": top + \"px\",\n \"left\": event.clientX + \"px\",\n \"display\": \"block\"\n }).show();\n\n $dirRMenu.hide();\n\n menu.disabled(['import', 'git-clone']);\n } else { // 右击了目录\n if (wide.curNode.removable) {\n $dirRMenu.find(\".remove\").removeClass(\"disabled\");\n } else {\n $dirRMenu.find(\".remove\").addClass(\"disabled\");\n }\n\n if (wide.curNode.creatable) {\n $dirRMenu.find(\".create\").removeClass(\"disabled\");\n } else {\n $dirRMenu.find(\".create\").addClass(\"disabled\");\n }\n\n var top = event.clientY - 10;\n if ($dirRMenu.height() + top > $('.content').height()) {\n top = top - $dirRMenu.height() - 25;\n }\n\n $dirRMenu.css({\n \"top\": top + \"px\",\n \"left\": event.clientX + \"px\",\n \"display\": \"block\"\n }).show();\n\n $fileRMenu.hide();\n }\n $(\"#files\").focus();\n }\n },\n onClick: function (event, treeId, treeNode, clickFlag) {\n if (treeNode) {\n wide.curNode = treeNode;\n tree.fileTree.selectNode(treeNode);\n\n menu.undisabled(['import', 'export', 'git-clone']);\n if (!tree.isDir()) {\n menu.disabled(['import', 'git-clone']);\n }\n\n $(\"#files\").focus();\n }\n }\n }\n };\n tree.fileTree = $.fn.zTree.init($(\"#files\"), setting, result.data.children);\n\n session.restore();\n }\n }\n });\n\n this._initSearch();\n this._initRename();\n },\n openFile: function (treeNode, cursor) {\n wide.curNode = treeNode;\n var tempCursor = cursor;\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n // 该节点文件已经打开\n if (editors.data[i].id === treeNode.path) {\n editors.tabs.setCurrent(treeNode.path);\n wide.curEditor = editors.data[i].editor;\n\n if (!tempCursor) {\n tempCursor = wide.curEditor.getCursor();\n }\n $(\".footer .cursor\").text('| ' + (tempCursor.line + 1) + ':' + (tempCursor.ch + 1) + ' |');\n\n wide.curEditor.setCursor(tempCursor);\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\n var cursorCoords = wide.curEditor.cursorCoords({line: tempCursor.line - half, ch: 0}, \"local\");\n wide.curEditor.scrollTo(0, cursorCoords.top);\n wide.curEditor.focus();\n\n wide.refreshOutline();\n return false;\n }\n }\n\n if (!tree.isDir()) {\n var request = newWideRequest();\n request.path = treeNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n var data = result.data;\n\n if (!data.mode) {\n var mode = CodeMirror.findModeByFileName(treeNode.path);\n if (mode) {\n data.mode = mode.mime;\n } else {\n data.mode = 'text/plain';\n }\n }\n\n if (!data.mode) {\n console.error(\"Can't find mode by file name [\" + treeNode.path + \"]\");\n }\n\n if (\"img\" === data.mode) { // 是图片文件的话新建 tab 打开\n // 最好是开 tab,但这个最终取决于浏览器设置\n var w = window.open(config.context + data.path);\n return false;\n }\n\n if (!tempCursor) {\n tempCursor = CodeMirror.Pos(0, 0);\n }\n\n editors.newEditor(data, tempCursor);\n\n wide.refreshOutline();\n }\n });\n }\n },\n _initSearch: function () {\n $(\"#dialogSearchForm > input:eq(0)\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n\n if ($.trim($(this).val()) === \"\") {\n $okBtn.prop(\"disabled\", true);\n } else {\n $okBtn.prop(\"disabled\", false);\n }\n });\n\n $(\"#dialogSearchForm > input:eq(1)\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n });\n\n $(\"#dialogSearchForm\").dialog({\n \"modal\": true,\n \"height\": 80,\n \"width\": 260,\n \"title\": config.label.search,\n \"okText\": config.label.search,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogSearchForm > input:eq(0)\").val('').focus();\n $(\"#dialogSearchForm > input:eq(1)\").val('');\n $(\"#dialogSearchForm\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest();\n\n if (!wide.curNode) {\n request.dir = \"\";\n } else {\n request.dir = wide.curNode.path;\n }\n\n request.text = $(\"#dialogSearchForm > input:eq(0)\").val();\n request.extension = $(\"#dialogSearchForm > input:eq(1)\").val();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/search/text',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n $(\"#dialogSearchForm\").dialog(\"close\");\n editors.appendSearch(result.data, 'founds', request.text);\n }\n });\n }\n });\n },\n _initRename: function () {\n $(\"#dialogRenamePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.rename,\n \"okText\": config.label.rename,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogRenamePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n $(\"#dialogRenamePrompt > input\").val(wide.curNode.name).select().focus();\n },\n \"ok\": function () {\n var name = $(\"#dialogRenamePrompt > input\").val(),\n request = newWideRequest();\n\n request.oldPath = wide.curNode.path;\n request.newPath = wide.curNode.path.substring(0, wide.curNode.path.lastIndexOf(\"/\") + 1) + name;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/rename',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogRenamePrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogRenamePrompt\").dialog(\"close\");\n }\n });\n }\n });\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file wide.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar wide = {\n curNode: undefined,\n curEditor: undefined,\n curProcessId: undefined, // curent running process id (pid)\n refreshOutline: function () {\n if (!wide.curEditor ||\n (wide.curEditor && wide.curEditor.doc.getMode().name !== \"go\")) {\n $(\"#outline\").html('');\n return false;\n }\n\n var request = newWideRequest();\n request.code = wide.curEditor.getValue();\n\n $.ajax({\n type: 'POST',\n async: false,\n url: config.context + '/outline',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n var data = result.data;\n\n var outlineHTML = '
      ',\n decls = ['constDecls', 'varDecls', 'funcDecls',\n 'structDecls', 'interfaceDecls', 'typeDecls'];\n\n for (var i = 0, max = decls.length; i < max; i++) {\n var key = decls[i];\n for (var j = 0, maxj = data[key].length; j < maxj; j++) {\n var obj = data[key][j];\n outlineHTML += '
    • ' + obj.Name + '
    • ';\n }\n }\n $(\"#outline\").html(outlineHTML + '
    ');\n\n $(\"#outline li\").dblclick(function () {\n var $it = $(this),\n cursor = CodeMirror.Pos($it.data('line'), $it.data(\"ch\"));\n\n var editor = wide.curEditor;\n editor.setCursor(cursor);\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n editor.focus();\n });\n }\n });\n },\n _initDialog: function () {\n $(\".dialog-prompt > input\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n\n if ($.trim($(this).val()) === \"\") {\n $okBtn.prop(\"disabled\", true);\n } else {\n $okBtn.prop(\"disabled\", false);\n }\n });\n\n $(\"#dialogAlert\").dialog({\n \"modal\": true,\n \"height\": 40,\n \"width\": 350,\n \"title\": config.label.tip,\n \"hiddenOk\": true,\n \"cancelText\": config.label.confirm,\n \"afterOpen\": function (msg) {\n $(\"#dialogAlert\").html(msg);\n }\n });\n\n $(\"#dialogRemoveConfirm\").dialog({\n \"modal\": true,\n \"height\": 36,\n \"width\": 260,\n \"title\": config.label.delete,\n \"okText\": config.label.delete,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogRemoveConfirm > b\").html('\"' + wide.curNode.name + '\"');\n },\n \"ok\": function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/remove',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\n }\n });\n }\n });\n\n $(\"#dialogNewFilePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.create_file,\n \"okText\": config.label.create,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogNewFilePrompt > input\").val('').focus();\n $(\"#dialogNewFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest(),\n name = $(\"#dialogNewFilePrompt > input\").val();\n\n request.path = wide.curNode.path + \"/\" + name;\n request.fileType = \"f\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\n\n setTimeout(function () { // Delay, waiting the file change notified and then open it\n var tId = tree.getTIdByPath(request.path);\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n }, 100);\n }\n });\n }\n });\n\n $(\"#dialogNewDirPrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.create_dir,\n \"okText\": config.label.create,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogNewDirPrompt > input\").val('').focus();\n $(\"#dialogNewDirPrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var name = $(\"#dialogNewDirPrompt > input\").val(),\n request = newWideRequest();\n\n request.path = wide.curNode.path + \"/\" + name;\n request.fileType = \"d\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\n }\n });\n }\n });\n\n $(\"#dialogGoFilePrompt\").dialog({\n \"modal\": true,\n \"height\": 320,\n \"width\": 660,\n \"title\": config.label.goto_file,\n \"okText\": config.label.go,\n \"cancelText\": config.label.cancel,\n \"afterInit\": function () {\n $(\"#dialogGoFilePrompt\").on(\"dblclick\", \"li\", function () {\n var tId = tree.getTIdByPath($(this).find(\".ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n });\n\n $(\"#dialogGoFilePrompt\").on(\"click\", \"li\", function () {\n var $list = $(\"#dialogGoFilePrompt > .list\");\n $list.find(\"li\").removeClass(\"selected\");\n $list.data(\"index\", $(this).data(\"index\"));\n $(this).addClass(\"selected\");\n });\n\n hotkeys.bindList($(\"#dialogGoFilePrompt > input\"), $(\"#dialogGoFilePrompt > .list\"), function ($selected) {\n var tId = tree.getTIdByPath($selected.find(\".ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n });\n\n $(\"#dialogGoFilePrompt > input\").bind(\"input\", function () {\n var name = $(\"#dialogGoFilePrompt > input\").val();\n\n var request = newWideRequest();\n request.path = '';\n request.name = '*' + name + '*';\n if (wide.curNode) {\n request.path = wide.curNode.path;\n }\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/find/name',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n var data = result.data;\n\n var goFileHTML = '';\n for (var i = 0, max = data.length; i < max; i++) {\n var path = data[i].path,\n name = path.substr(path.lastIndexOf(\"/\") + 1),\n icoSkin = wide.getClassBySuffix(name.split(\".\")[1]);\n if (i === 0) {\n goFileHTML += '
  • '\n + name + '    '\n + path + '
  • ';\n } else {\n goFileHTML += '
  • '\n + name + '    '\n + path + '
  • ';\n }\n }\n\n $(\"#dialogGoFilePrompt > ul\").html(goFileHTML);\n }\n });\n });\n },\n \"afterOpen\": function () {\n $(\"#dialogGoFilePrompt > input\").val('').focus();\n $(\"#dialogGoFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n $(\"#dialogGoFilePrompt .list\").html('').data(\"index\", 0);\n },\n \"ok\": function () {\n var tId = tree.getTIdByPath($(\"#dialogGoFilePrompt .selected .ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n }\n });\n\n $(\"#dialogGoLinePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.goto_line,\n \"okText\": config.label.go,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogGoLinePrompt > input\").val('').focus();\n $(\"#dialogGoLinePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var line = parseInt($(\"#dialogGoLinePrompt > input\").val()) - 1;\n $(\"#dialogGoLinePrompt\").dialog(\"close\");\n\n var editor = wide.curEditor;\n var cursor = editor.getCursor();\n\n editor.setCursor(CodeMirror.Pos(line, cursor.ch));\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: line - half, ch: cursor.ch}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n editor.focus();\n }\n });\n\n $(\"#dialogGitClonePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 360,\n \"title\": config.label.git_clone,\n \"okText\": config.label.confirm,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogGitClonePrompt > input\").val('').focus();\n $(\"#dialogGitClonePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n $(\"#dialogGitClonePrompt\").dialog(\"close\");\n\n var request = newWideRequest();\n request.path = wide.curNode.path;\n request.repository = $(\"#dialogGitClonePrompt > input\").val();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/git/clone',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n }\n });\n }\n });\n },\n _initWS: function () {\n var outputWS = new ReconnectingWebSocket(config.channel + '/output/ws?sid=' + config.wideSessionId);\n outputWS.onopen = function () {\n console.log('[output onopen] connected');\n };\n\n outputWS.onmessage = function (e) {\n console.log('[output onmessage]' + e.data);\n var data = JSON.parse(e.data);\n\n if (goLintFound) {\n goLintFound = [];\n }\n\n if ('run' === data.nextCmd) {\n var request = newWideRequest();\n request.executable = data.executable;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/run',\n data: JSON.stringify(request),\n dataType: \"json\"\n });\n }\n\n switch (data.cmd) {\n case 'run':\n var content = $('.bottom-window-group .output > div').html();\n if (!wide.curProcessId || '' === content) {\n bottomGroup.fillOutput(content + '
    ' + data.output + '
    ');\n } else {\n bottomGroup.fillOutput(content.replace(/<\\/pre>$/g, data.output + ''));\n }\n\n wide.curProcessId = data.pid;\n\n break;\n case 'run-done':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html().replace(/<\\/pre>$/g, data.output + ''));\n\n wide.curProcessId = undefined;\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n\n break;\n case 'start-build':\n case 'start-test':\n case 'start-vet':\n case 'start-install':\n case 'start-get':\n case 'start-git_clone':\n bottomGroup.fillOutput(data.output);\n\n break;\n case 'go test':\n case 'go vet':\n case 'go install':\n case 'go get':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n\n break;\n case 'git clone':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", false);\n\n break;\n case 'build':\n case 'cross-build':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n\n if (data.lints) { // has build error\n var files = {};\n\n for (var i = 0; i < data.lints.length; i++) {\n var lint = data.lints[i];\n\n goLintFound.push({from: CodeMirror.Pos(lint.lineNo, 0),\n to: CodeMirror.Pos(lint.lineNo, 0),\n message: lint.msg, severity: lint.severity});\n\n files[lint.file] = lint.file;\n }\n\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n\n // trigger gutter lint\n for (var path in files) {\n var editor = editors.getEditorByPath(path);\n CodeMirror.signal(editor, \"change\", editor);\n }\n } else {\n if ('cross-build' === data.cmd) {\n var request = newWideRequest(),\n path = null;\n request.path = data.executable;\n request.name = data.name;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/zip/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n path = result.data;\n }\n });\n\n if (path) {\n window.open(config.context + '/file/zip?path=' + path + \".zip\");\n }\n }\n }\n\n break;\n }\n };\n outputWS.onclose = function (e) {\n console.log('[output onclose] disconnected (' + e.code + ')');\n };\n outputWS.onerror = function (e) {\n console.log('[output onerror]');\n };\n },\n _initFooter: function () {\n $(\".footer .cursor\").dblclick(function () {\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\n });\n },\n init: function () {\n this._initFooter();\n\n this._initWS();\n\n // 点击隐藏弹出层\n $(\"body\").bind(\"mouseup\", function (event) {\n // MAC 右键文件树失效\n if (event.which === 3) {\n return false;\n }\n\n $(\".frame\").hide();\n\n if (!($(event.target).closest(\".frame\").length === 1 || event.target.className === \"frame\")) {\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\n menu.subMenu();\n }\n });\n\n // 刷新提示\n window.onbeforeunload = function () {\n if (editors.data.length > 0) {\n return config.label.confirm_save;\n }\n };\n\n // 禁止鼠标右键菜单\n document.oncontextmenu = function () {\n return false;\n };\n\n this._initDialog();\n },\n _save: function (path, editor) {\n if (!path) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/save',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n // reset the save state\n editor.doc.markClean();\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === path) {\n $span.removeClass(\"changed\");\n }\n });\n }\n });\n },\n saveFile: function () {\n var path = editors.getCurrentPath();\n if (!path) {\n return false;\n }\n\n var editor = wide.curEditor;\n if (editor.doc.isClean()) { // no modification\n return false;\n }\n\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\n wide.gofmt(path, wide.curEditor); // go fmt will save\n\n // build the file at once\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.nextCmd = \"\"; // build only, no following operation\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n\n // refresh outline\n wide.refreshOutline();\n\n return;\n }\n\n wide._save(path, wide.curEditor);\n },\n stop: function () {\n if ($(\"#buildRun\").hasClass(\"ico-buildrun\")) {\n menu.run();\n return false;\n }\n\n if (!wide.curProcessId) {\n return false;\n }\n\n var request = newWideRequest();\n request.pid = wide.curProcessId;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/stop',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n }\n });\n },\n gofmt: function (path, editor) {\n var cursor = editor.getCursor();\n var scrollInfo = editor.getScrollInfo();\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.cursorLine = cursor.line;\n request.cursorCh = cursor.ch;\n\n $.ajax({\n async: false, // sync\n type: 'POST',\n url: config.context + '/go/fmt',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n editor.setValue(result.data.code);\n editor.setCursor(cursor);\n editor.scrollTo(null, scrollInfo.top);\n\n wide._save(path, editor);\n }\n }\n });\n },\n fmt: function (path, editor) {\n var mode = editor.getOption(\"mode\");\n\n var cursor = editor.getCursor();\n var scrollInfo = editor.getScrollInfo();\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.cursorLine = cursor.line;\n request.cursorCh = cursor.ch;\n\n var formatted = null;\n\n switch (mode) {\n case \"text/x-go\":\n $.ajax({\n async: false, // sync\n type: 'POST',\n url: config.context + '/go/fmt',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n formatted = result.data.code;\n }\n }\n });\n\n break;\n case \"text/html\":\n formatted = html_beautify(editor.getValue());\n break;\n case \"text/javascript\":\n case \"application/json\":\n formatted = js_beautify(editor.getValue());\n break;\n case \"text/css\":\n formatted = css_beautify(editor.getValue());\n break;\n default :\n break;\n }\n\n if (formatted) {\n editor.setValue(formatted);\n editor.setCursor(cursor);\n editor.scrollTo(null, scrollInfo.top);\n\n wide._save(path, editor);\n }\n },\n getClassBySuffix: function (suffix) {\n var iconSkin = \"ico-ztree-other \";\n switch (suffix) {\n case \"html\":\n case \"htm\":\n iconSkin = \"ico-ztree-html \";\n break;\n case \"go\":\n iconSkin = \"ico-ztree-go \";\n break;\n case \"css\":\n iconSkin = \"ico-ztree-css \";\n break;\n case \"txt\":\n iconSkin = \"ico-ztree-text \";\n break;\n case \"sql\":\n iconSkin = \"ico-ztree-sql \";\n break;\n case \"properties\":\n iconSkin = \"ico-ztree-pro \";\n break;\n case \"md\":\n iconSkin = \"ico-ztree-md \";\n break;\n case \"js\", \"json\":\n iconSkin = \"ico-ztree-js \";\n break;\n case \"xml\":\n iconSkin = \"ico-ztree-xml \";\n break;\n case \"jpg\":\n case \"jpeg\":\n case \"bmp\":\n case \"gif\":\n case \"png\":\n case \"svg\":\n case \"ico\":\n iconSkin = \"ico-ztree-img \";\n break;\n }\n\n return iconSkin;\n }\n};\n\n$(document).ready(function () {\n wide.init();\n tree.init();\n menu.init();\n hotkeys.init();\n session.init();\n notification.init();\n editors.init();\n windows.init();\n bottomGroup.init();\n});\n","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file session.js\n *\n * @author Liyuan Li\n * @version 1.1.0.1, Dec 8, 2015\n */\nvar session = {\n init: function () {\n this._initWS();\n\n var getLayoutState = function (paneState) {\n var state = 'normal';\n if (paneState.isClosed) {\n state = 'min';\n } else if (paneState.size >= $('body').width()) {\n state = 'max';\n }\n\n return state;\n };\n\n // save session content every 30 seconds\n setInterval(function () {\n var request = newWideRequest(),\n filse = [],\n fileTree = [],\n currentId = editors.getCurrentId(),\n currentFile = currentId ? editors.getCurrentPath() : \"\";\n\n editors.tabs.obj._$tabs.find(\"div\").each(function () {\n var $it = $(this);\n if ($it.find(\"span:eq(0)\").attr(\"title\") !== config.label.start_page) {\n filse.push($it.find(\"span:eq(0)\").attr(\"title\"));\n }\n });\n\n fileTree = tree.getOpenPaths();\n\n request.currentFile = currentFile; // current editor file\n request.fileTree = fileTree; // file tree expansion state\n request.files = filse; // editor tabs\n\n\n request.layout = {\n \"side\": {\n \"size\": windows.outerLayout.west.state.size,\n \"state\": getLayoutState(windows.outerLayout.west.state)\n },\n \"sideRight\": {\n \"size\": windows.innerLayout.east.state.size,\n \"state\": getLayoutState(windows.innerLayout.east.state)\n },\n \"bottom\": {\n \"size\": windows.innerLayout.south.state.size,\n \"state\": getLayoutState(windows.innerLayout.south.state)\n }\n };\n\n $.ajax({\n type: 'POST',\n url: config.context + '/session/save',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n }\n });\n }, 30000);\n },\n restore: function () {\n if (!config.latestSessionContent) {\n return;\n }\n\n var fileTree = config.latestSessionContent.fileTree,\n files = config.latestSessionContent.files,\n currentFile = config.latestSessionContent.currentFile,\n id = \"\",\n nodesToOpen = [];\n\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\n\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n // expand tree\n for (var j = 0, jj = fileTree.length; j < jj; j++) {\n if (nodes[i].path === fileTree[j]) {\n // expand this node only if its parents are open\n var parents = tree.getAllParents(tree.fileTree.getNodeByTId(nodes[i].tId)),\n isOpen = true;\n for (var l = 0, max = parents.length; l < max; l++) {\n if (parents[l].open === false) {\n isOpen = false;\n }\n }\n if (isOpen) {\n tree.fileTree.expandNode(nodes[i], true, false, true);\n } else {\n // flag it is open\n nodes[i].open = true;\n }\n break;\n }\n }\n\n // open editors\n for (var k = 0, kk = files.length; k < kk; k++) {\n if (nodes[i].path === files[k]) {\n nodesToOpen.push(nodes[i]);\n break;\n }\n }\n\n if (nodes[i].path === currentFile) {\n id = nodes[i].path;\n\n // FIXME: 上面的展开是异步进行的,所以执行到这里的时候可能还没有展开完,导致定位不了可视区域\n tree.fileTree.selectNode(nodes[i]);\n wide.curNode = nodes[i];\n }\n }\n\n // handle the open sequence of editors\n for (var m = 0, mm = files.length; m < mm; m++) {\n for (var n = 0, nn = nodesToOpen.length; n < nn; n++) {\n if (nodesToOpen[n].path === files[m]) {\n tree.openFile(nodesToOpen[n]);\n break;\n }\n }\n }\n\n // set the current editor\n editors.tabs.setCurrent(id);\n for (var c = 0, max = editors.data.length; c < max; c++) {\n if (id === editors.data[c].id) {\n wide.curEditor = editors.data[c].editor;\n break;\n }\n } \n },\n _initWS: function () {\n // Used for session retention, server will release all resources of the session if this channel closed\n var sessionWS = new ReconnectingWebSocket(config.channel + '/session/ws?sid=' + config.wideSessionId);\n\n sessionWS.onopen = function () {\n console.log('[session onopen] connected');\n\n var dateFormat = function (time, fmt) {\n var date = new Date(time);\n var dateObj = {\n \"M+\": date.getMonth() + 1,\n \"d+\": date.getDate(),\n \"h+\": date.getHours(),\n \"m+\": date.getMinutes(),\n \"s+\": date.getSeconds(),\n \"q+\": Math.floor((date.getMonth() + 3) / 3),\n \"S\": date.getMilliseconds()\n };\n if (/(y+)/.test(fmt))\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n for (var k in dateObj)\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\n }\n return fmt;\n };\n\n var data = {type: \"Network\", severity: \"INFO\",\n message: \"Connected to server [sid=\" + config.wideSessionId + \"], \" + dateFormat(new Date().getTime(), 'yyyy-MM-dd hh:mm:ss')},\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n };\n\n sessionWS.onmessage = function (e) {\n var data = JSON.parse(e.data);\n switch (data.cmd) {\n case 'create-file':\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.dir)),\n name = data.path.replace(data.dir + '/', ''),\n mode = CodeMirror.findModeByFileName(name),\n iconSkin = wide.getClassBySuffix(name.split(\".\")[1]);\n\n if (data.type && data.type === 'f') {\n tree.fileTree.addNodes(node, [{\n \"id\": data.path,\n \"name\": name,\n \"iconSkin\": iconSkin,\n \"path\": data.path,\n \"mode\": mode,\n \"removable\": true,\n \"creatable\": true\n }]);\n\n } else {\n tree.fileTree.addNodes(node, [{\n \"id\": data.path,\n \"name\": name,\n \"iconSkin\": \"ico-ztree-dir \",\n \"path\": data.path,\n \"removable\": true,\n \"creatable\": true,\n \"isParent\": true\n }]);\n }\n break;\n case 'remove-file':\n case 'rename-file':\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.path));\n tree.fileTree.removeNode(node);\n\n var nodes = tree.fileTree.transformToArray(node);\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n editors.tabs.del(nodes[i].path);\n }\n\n break;\n }\n };\n sessionWS.onclose = function (e) {\n console.log('[session onclose] disconnected (' + e.code + ')');\n\n var data = {type: \"Network\", severity: \"ERROR\",\n message: \"Disconnected from server, trying to reconnect it [sid=\" + config.wideSessionId + \"]\"},\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n\n $(\".notification-count\").show();\n };\n sessionWS.onerror = function (e) {\n console.log('[session onerror]');\n };\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file menu.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar menu = {\n init: function () {\n this.subMenu();\n this._initPreference();\n this._initAbout();\n this._initShare();\n\n // 点击子菜单后消失\n $(\".menu .frame li\").click(function () {\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\n menu.subMenu();\n });\n },\n _initShare: function () {\n $(\".menu .ico-share\").hover(function () {\n $(\".menu .share-panel\").show();\n });\n\n $(\".share-panel .font-ico\").click(function () {\n var key = $(this).attr('class').split('-')[2];\n var url = \"https://wide.b3log.org\", pic = 'https://wide.b3log.org/static/images/wide-logo.png';\n var urls = {};\n urls.email = \"mailto:?subject=\" + $('title').text()\n + \"&body=\" + $('meta[name=description]').attr('content') + ' ' + url;\n\n var twitterShare = encodeURIComponent($('meta[name=description]').attr('content') + \" \" + url + \" #golang\");\n urls.twitter = \"https://twitter.com/intent/tweet?status=\" + twitterShare;\n\n urls.facebook = \"https://www.facebook.com/sharer/sharer.php?u=\" + url;\n urls.googleplus = \"https://plus.google.com/share?url=\" + url;\n\n var title = encodeURIComponent($('title').text() + '. \\n' + $('meta[name=description]').attr('content')\n + \" #golang#\");\n urls.weibo = \"http://v.t.sina.com.cn/share/share.php?title=\" + title + \"&url=\" + url + \"&pic=\" + pic;\n urls.tencent = \"http://share.v.t.qq.com/index.php?c=share&a=index&title=\" + title +\n \"&url=\" + url + \"&pic=\" + pic;\n\n window.open(urls[key], \"_blank\", \"top=100,left=200,width=648,height=618\");\n });\n },\n _initAbout: function () {\n $(\"#dialogAbout\").load(config.context + '/about', function () {\n $(\"#dialogAbout\").dialog({\n \"modal\": true,\n \"title\": config.label.about,\n \"hideFooter\": true,\n \"afterOpen\": function () {\n $.ajax({\n url: \"https://rhythm.b3log.org/version/wide/latest\",\n type: \"GET\",\n dataType: \"jsonp\",\n jsonp: \"callback\",\n success: function (data, textStatus) {\n if ($(\"#dialogAbout .version\").text() === data.wideVersion) {\n $(\".upgrade\").text(config.label.uptodate);\n } else {\n $(\".upgrade\").html(config.label.new_version_available + config.label.colon\n + \"\" + data.wideVersion + \"\");\n }\n }\n });\n }\n });\n });\n },\n disabled: function (list) {\n for (var i = 0, max = list.length; i < max; i++) {\n $(\".menu li.\" + list[i]).addClass(\"disabled\");\n }\n },\n undisabled: function (list) {\n for (var i = 0, max = list.length; i < max; i++) {\n $(\".menu li.\" + list[i]).removeClass(\"disabled\");\n }\n },\n // 焦点不在菜单上时需点击展开子菜单,否则为鼠标移动展开\n subMenu: function () {\n $(\".menu > ul > li\").click(function (event) {\n if ($(event.target).closest(\".frame\").length === 1) {\n return;\n }\n var $it = $(this);\n $it.find('.frame').show();\n $(\".menu > ul > li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n\n $(\".menu > ul > li\").unbind();\n\n $(\".menu > ul > li\").mouseover(function () {\n if ($(event.target).closest(\".frame\").length === 1) {\n return;\n }\n $(\".menu .frame\").hide();\n $(this).find('.frame').show();\n $(\".menu > ul > li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n });\n });\n },\n openPreference: function () {\n $(\"#dialogPreference\").dialog(\"open\");\n },\n saveAllFiles: function () {\n if ($(\".menu li.save-all\").hasClass(\"disabled\")) {\n return false;\n }\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n var path = editors.data[i].id;\n var editor = editors.data[i].editor;\n\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\n wide.fmt(path, editor);\n } else {\n wide._save(path, editor);\n }\n }\n },\n closeAllFiles: function () {\n if ($(\".menu li.close-all\").hasClass(\"disabled\")) {\n return false;\n }\n\n // 设置全部关闭标识\n var removeData = [];\n $(\".edit-panel .tabs > div\").each(function (i) {\n if (i !== 0) {\n removeData.push($(this).data(\"index\"));\n }\n });\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n // 开始关闭\n $(\".edit-panel .tabs .ico-close:eq(0)\").click();\n },\n exit: function () {\n var request = newWideRequest();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/logout',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n window.location.href = \"/login\";\n }\n }\n });\n },\n openAbout: function () {\n $(\"#dialogAbout\").dialog(\"open\");\n },\n goget: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-get\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/get',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n goinstall: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-install\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/install',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // go test.\n test: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-test\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/test',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // go vet.\n govet: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-vet\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/vet',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // Build & Run.\n run: function () {\n menu.saveAllFiles();\n\n if ($(\"#buildRun\").hasClass(\"ico-stop\")) {\n wide.stop();\n return false;\n }\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.run\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n request.code = wide.curEditor.getValue();\n request.nextCmd = \"run\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n $(\"#buildRun\").addClass(\"ico-stop\")\n .removeClass(\"ico-buildrun\").attr(\"title\", config.label.stop);\n }\n });\n },\n // Build.\n build: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.build\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n request.code = wide.curEditor.getValue();\n request.nextCmd = \"\"; // build only, no following operation\n\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n _initPreference: function () {\n $(\"#dialogPreference\").load(config.context + '/preference', function () {\n $(\"#dialogPreference input\").keyup(function () {\n var isChange = false,\n emptys = [],\n emptysTip = '';\n $(\"#dialogPreference input\").each(function () {\n var $it = $(this);\n // data-value 如为数字,则不会和 value 一样转换为 String,再次不使用全等\n if ($it.val() != $it.data(\"value\")) {\n isChange = true;\n }\n\n if ($.trim($it.val()) === '') {\n emptys.push($it);\n }\n });\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (isChange) {\n $okBtn.prop(\"disabled\", false);\n } else {\n $okBtn.prop(\"disabled\", true);\n }\n\n if (emptys.length === 0) {\n $(\"#dialogPreference\").find(\".tip\").html(\"\");\n $okBtn.prop(\"disabled\", false);\n } else {\n for (var i = 0, max = emptys.length; i < max; i++) {\n var tabIndex = emptys[i].closest('div').data(\"index\"),\n text = $.trim(emptys[i].parent().text());\n emptysTip += '[' + $('#dialogPreference .tabs > div[data-index=\"' + tabIndex + '\"]').text()\n + '] -> [' + text.substr(0, text.length - 1)\n + ']: ' + config.label.no_empty + \"
    \";\n }\n $(\"#dialogPreference\").find(\".tip\").html(emptysTip);\n $okBtn.prop(\"disabled\", true);\n }\n });\n\n $(\"#dialogPreference select\").on(\"change\", function () {\n var isChange = false;\n $(\"#dialogPreference select\").each(function () {\n if ($(this).val() !== $(this).data(\"value\")) {\n isChange = true;\n }\n });\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (isChange) {\n $okBtn.prop(\"disabled\", false);\n } else {\n $okBtn.prop(\"disabled\", true);\n }\n });\n\n $(\"#dialogPreference\").dialog({\n \"modal\": true,\n \"height\": 280,\n \"width\": 800,\n \"title\": config.label.preference,\n \"okText\": config.label.apply,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n $okBtn.prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest(),\n $dialogPreference = $(\"#dialogPreference\"),\n $fontFamily = $dialogPreference.find(\"input[name=fontFamily]\"),\n $fontSize = $dialogPreference.find(\"input[name=fontSize]\"),\n $goFmt = $dialogPreference.find(\"select[name=goFmt]\"),\n $workspace = $dialogPreference.find(\"input[name=workspace]\"),\n $password = $dialogPreference.find(\"input[name=password]\"),\n $email = $dialogPreference.find(\"input[name=email]\"),\n $locale = $dialogPreference.find(\"select[name=locale]\"),\n $theme = $dialogPreference.find(\"select[name=theme]\"),\n $editorFontFamily = $dialogPreference.find(\"input[name=editorFontFamily]\"),\n $editorFontSize = $dialogPreference.find(\"input[name=editorFontSize]\"),\n $editorLineHeight = $dialogPreference.find(\"input[name=editorLineHeight]\"),\n $editorTheme = $dialogPreference.find(\"select[name=editorTheme]\"),\n $editorTabSize = $dialogPreference.find(\"input[name=editorTabSize]\"),\n $keymap = $dialogPreference.find(\"select[name=keymap]\");\n\n $.extend(request, {\n \"fontFamily\": $fontFamily.val(),\n \"fontSize\": $fontSize.val(),\n \"goFmt\": $goFmt.val(),\n \"workspace\": $workspace.val(),\n \"password\": $password.val(),\n \"email\": $email.val(),\n \"locale\": $locale.val(),\n \"theme\": $theme.val(),\n \"editorFontFamily\": $editorFontFamily.val(),\n \"editorFontSize\": $editorFontSize.val(),\n \"editorLineHeight\": $editorLineHeight.val(),\n \"editorTheme\": $editorTheme.val(),\n \"editorTabSize\": $editorTabSize.val(),\n \"keymap\": $keymap.val()\n });\n\n if (config.keymap !== $keymap.val()) {\n window.location.reload();\n }\n\n $.ajax({\n type: 'POST',\n url: config.context + '/preference',\n data: JSON.stringify(request),\n success: function (result, textStatus, jqXHR) {\n if (!result.succ) {\n return false;\n }\n\n $fontFamily.data(\"value\", $fontFamily.val());\n $fontSize.data(\"value\", $fontSize.val());\n $goFmt.data(\"value\", $goFmt.val());\n $workspace.data(\"value\", $workspace.val());\n $password.data(\"value\", $password.val());\n $email.data(\"value\", $email.val());\n $locale.data(\"value\", $locale.val());\n $theme.data(\"value\", $theme.val());\n $editorFontFamily.data(\"value\", $editorFontFamily.val());\n $editorFontSize.data(\"value\", $editorFontSize.val());\n $editorLineHeight.data(\"value\", $editorLineHeight.val());\n $editorTheme.data(\"value\", $editorTheme.val());\n $editorTabSize.data(\"value\", $editorTabSize.val());\n $keymap.data(\"value\", $keymap.val());\n\n // update the config\n config.keymap = $keymap.val();\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n $okBtn.prop(\"disabled\", true);\n\n $(\"#themesLink\").attr(\"href\", config.staticServer + '/static/css/themes/' + $theme.val() + '.css');\n\n config.editorTheme = $editorTheme.val();\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n editors.data[i].editor.setOption(\"theme\", $editorTheme.val());\n }\n }\n });\n }\n });\n\n new Tabs({\n id: \".preference\"\n });\n });\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file windows.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.2.2, Feb 16, 2016\n */\nvar windows = {\n isMaxEditor: false,\n outerLayout: {},\n innerLayout: {},\n init: function () {\n if (!config.latestSessionContent) {\n config.latestSessionContent = {\n \"fileTree\": [],\n \"files\": [],\n \"currentFile\": \"\",\n };\n }\n \n if (!config.latestSessionContent.layout) {\n config.latestSessionContent.layout = {\n \"side\": {\n \"size\": 200,\n \"state\": 'normal'\n },\n \"sideRight\": {\n \"size\": 200,\n \"state\": 'normal'\n },\n \"bottom\": {\n \"size\": 100,\n \"state\": 'normal'\n }\n };\n }\n\n var layout = config.latestSessionContent.layout;\n\n this.outerLayout = $('body').layout({\n north__paneSelector: \".menu\",\n center__paneSelector: \".content\",\n south__paneSelector: \".footer\",\n north__size: 22,\n south__size: 19,\n spacing_open: 2,\n north__spacing_open: 0,\n south__spacing_open: 0,\n defaults: {\n fxSpeed_open: 300,\n fxSpeed_close: 100,\n fxSettings_close: {\n easing: \"easeOutQuint\"\n },\n fxSettings_open: {\n easing: \"easeInQuint\"\n }\n },\n west: {\n size: layout.side.size,\n paneSelector: \".side\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 15,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_side,\n resizerTip: config.label.resize,\n initClosed: (layout.side.state === 'min')\n }\n });\n\n this.innerLayout = $('div.content').layout({\n spacing_open: 2,\n defaults: {\n fxSpeed_open: 300,\n fxSpeed_close: 100,\n fxSettings_close: {\n easing: \"easeOutQuint\"\n },\n fxSettings_open: {\n easing: \"easeInQuint\"\n }\n },\n center: {\n paneSelector: \".edit-panel\"\n },\n east: {\n size: layout.sideRight.size,\n paneSelector: \".side-right\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 15,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_outline,\n resizerTip: config.label.resize,\n initClosed: (layout.sideRight.state === 'min')\n },\n south: {\n size: layout.bottom.size,\n paneSelector: \".bottom-window-group\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 16,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_bottom,\n resizerTip: config.label.resize,\n initClosed: (layout.bottom.state === 'min'),\n ondrag_end: function (type, pane) {\n windows.refreshEditor(pane, 'drag');\n },\n onresize_end: function (type, pane) {\n windows.refreshEditor(pane, 'resize');\n },\n onclose_end: function (type, pane) {\n windows.refreshEditor(pane, 'close');\n },\n onopen_end: function (type, pane) {\n windows.refreshEditor(pane, 'open');\n },\n onshow_end: function (type, pane) {\n windows.refreshEditor(pane, 'show');\n }\n }\n });\n\n this.outerLayout.addCloseBtn(\".side .ico-min\", \"west\");\n this.innerLayout.addCloseBtn(\".side-right .ico-min\", \"east\");\n this.innerLayout.addCloseBtn(\".bottom-window-group .ico-min\", \"south\");\n\n if (layout.side.state === 'max') {\n windows.maxSide();\n }\n if (layout.sideRight.state === 'max') {\n windows.maxSideRight();\n }\n if (layout.bottom.state === 'max') {\n windows.maxBottom();\n }\n\n $(\".toolbars .ico-max\").click(function () {\n windows.toggleEditor();\n });\n\n $(\".edit-panel .tabs\").on(\"dblclick\", function () {\n windows.toggleEditor();\n });\n\n $(\".bottom-window-group .tabs\").dblclick(function () {\n var $it = $(\".bottom-window-group\");\n if ($it.hasClass(\"bottom-window-group-max\")) {\n windows.restoreBottom();\n } else {\n windows.maxBottom($it);\n }\n });\n\n $(\".side .tabs\").dblclick(function () {\n var $it = $(\".side\");\n if ($it.hasClass(\"side-max\")) {\n windows.restoreSide();\n } else {\n windows.restoreSide($it);\n }\n });\n\n $(\".side-right .tabs\").dblclick(function () {\n var $it = $(\".side-right\");\n if ($it.hasClass(\"side-right-max\")) {\n windows.restoreSideRight();\n } else {\n windows.maxSideRight($it);\n }\n });\n\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\n $(window).resize(function () {\n windows.refreshEditor($('.bottom-window-group'));\n });\n\n },\n maxEditor: function () {\n var $it = $(\".toolbars .font-ico\");\n windows.outerLayout.close('west');\n windows.innerLayout.close('south');\n windows.innerLayout.close('east');\n $it.removeClass('ico-max').addClass('ico-restore').attr('title', config.label.min);\n windows.isMaxEditor = true;\n },\n maxBottom: function ($it) {\n $it.data('height', $it.height()).addClass(\"bottom-window-group-max\").find('.ico-min').hide();\n windows.outerLayout.hide('west');\n windows.innerLayout.hide('east');\n windows.innerLayout.sizePane('south', $('.content').height());\n },\n maxSide: function ($it) {\n $it.data('width', $it.width()).addClass(\"side-max\").find('.ico-min').hide();\n $('.content').hide();\n windows.outerLayout.sizePane('west', $('body').width());\n },\n maxSideRight: function ($it) {\n $it.addClass(\"side-right-max\").data('width', $it.width()).find('.ico-min').hide();\n windows.outerLayout.hide('west');\n windows.innerLayout.hide('south');\n windows.innerLayout.sizePane('east', $('body').width());\n },\n toggleEditor: function () {\n var $it = $(\".toolbars .font-ico\");\n if ($it.hasClass('ico-restore')) {\n windows.restoreEditor();\n } else {\n windows.maxEditor();\n }\n },\n restoreBottom: function () {\n var $it = $(\".bottom-window-group\");\n $it.removeClass(\"bottom-window-group-max\").find('.ico-min').show();\n windows.outerLayout.show('west');\n windows.innerLayout.show('east');\n windows.innerLayout.sizePane('south', $it.data('height'));\n },\n restoreSide: function () {\n var $it = $(\".side\");\n $it.removeClass(\"side-max\").find('.ico-min').show();\n $('.content').show();\n windows.outerLayout.sizePane('west', $it.data('width'));\n },\n restoreSideRight: function () {\n var $it = $(\".side-right\");\n $it.removeClass(\"side-right-max\").find('.ico-min').show();\n windows.outerLayout.show('west');\n windows.innerLayout.show('south');\n windows.innerLayout.sizePane('east', $it.data('width'));\n },\n restoreEditor: function () {\n windows.outerLayout.open('west');\n windows.innerLayout.open('south');\n windows.innerLayout.open('east');\n windows.isMaxEditor = false;\n $(\".toolbars .font-ico\").addClass('ico-max').removeClass('ico-restore').attr('title', config.label.max_editor);\n },\n refreshEditor: function (pane, type) {\n var editorDatas = editors.data,\n height = $('.content').height() - pane.height() - 24;\n switch (type) {\n case 'close':\n height = $('.content').height() - 40;\n break;\n default:\n break;\n }\n for (var i = 0, ii = editorDatas.length; i < ii; i++) {\n editorDatas[i].editor.setSize(\"100%\", height);\n }\n\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\n },\n flowBottom: function () {\n if (windows.innerLayout.south.state.isClosed) {\n windows.innerLayout.slideOpen('south');\n }\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file hotkeys.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.2, Dec 15, 2015\n */\nvar hotkeys = {\n defaultKeyMap: {\n // Ctrl-0\n goEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 48,\n fun: function () {\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n }\n },\n // Ctrl-1\n goFileTree: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 49,\n fun: function () {\n // 有些元素需设置 tabindex 为 -1 时才可以 focus\n if (windows.outerLayout.west.state.isClosed) {\n windows.outerLayout.slideOpen('west');\n }\n $(\"#files\").focus();\n }\n },\n // Ctrl-2\n goOutline: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 50,\n fun: function () {\n if (windows.innerLayout.east.state.isClosed) {\n windows.innerLayout.slideOpen('east');\n }\n\n $(\"#outline\").focus();\n }\n },\n // Ctrl-4\n goOutput: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 52,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"output\");\n windows.flowBottom();\n $(\".bottom-window-group .output\").focus();\n }\n },\n // Ctrl-5\n goSearch: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 53,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"search\");\n windows.flowBottom();\n $(\".bottom-window-group .search\").focus();\n }\n },\n // Ctrl-6\n goNotification: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 54,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n }\n },\n // Alt-C\n clearWindow: {\n ctrlKey: false,\n altKey: true,\n shiftKey: false,\n which: 67\n },\n // Ctrl-D 窗口组切换 \n changeEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 68\n },\n // Ctrl-F search \n search: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 70\n },\n // Ctrl-Q close current editor \n closeCurEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 81\n },\n // Ctrl-R\n rename: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 82\n },\n // Shift-Alt-O 跳转到文件\n goFile: {\n ctrlKey: false,\n altKey: true,\n shiftKey: true,\n which: 79\n },\n // F5 Build\n build: {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n which: 116\n },\n // F6 Build & Run\n buildRun: {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n which: 117\n }\n },\n bindList: function ($source, $list, enterFun) {\n $list.data(\"index\", 0);\n $source.keydown(function (event) {\n var index = $list.data(\"index\"),\n count = $list.find(\"li\").length;\n\n if (count === 0) {\n return true;\n }\n\n if (event.which === 38) { // up\n index--;\n if (index < 0) {\n index = count - 1;\n }\n }\n\n if (event.which === 40) { // down\n index++;\n if (index > count - 1) {\n index = 0;\n }\n }\n\n var $selected = $list.find(\"li:eq(\" + index + \")\");\n\n if (event.which === 13) { // enter\n enterFun($selected);\n }\n\n $list.find(\"li\").removeClass(\"selected\");\n $list.data(\"index\", index);\n $selected.addClass(\"selected\");\n\n if (index === 0) {\n $list.scrollTop(0);\n } else {\n if ($selected[0].offsetTop + $list.scrollTop() > $list.height()) {\n if (event.which === 40) {\n $list.scrollTop($list.scrollTop() + $selected.height());\n } else {\n $list.scrollTop($selected[0].offsetTop);\n }\n } else {\n $list.scrollTop(0);\n }\n }\n\n // 阻止上下键改变光标位置\n if (event.which === 38 || event.which === 40 || event.which === 13) {\n return false;\n }\n });\n },\n _bindOutput: function () {\n $(\".bottom-window-group .output\").keydown(function (event) {\n var hotKeys = hotkeys.defaultKeyMap;\n if (event.altKey === hotKeys.clearWindow.altKey\n && event.which === hotKeys.clearWindow.which) { // Alt-C clear output\n bottomGroup.clear('output');\n\n event.preventDefault();\n\n return;\n }\n });\n },\n _bindFileTree: function () {\n $(\"#files\").keydown(function (event) {\n event.preventDefault();\n\n var hotKeys = hotkeys.defaultKeyMap;\n if (event.ctrlKey === hotKeys.search.ctrlKey\n && event.which === hotKeys.search.which) { // Ctrl-F 搜索\n $(\"#dialogSearchForm\").dialog(\"open\");\n return;\n }\n\n if (event.ctrlKey === hotKeys.rename.ctrlKey\n && event.which === hotKeys.rename.which) { // Ctrl-R 重命名\n if (wide.curNode.removable) {\n $(\"#dialogRenamePrompt\").dialog(\"open\");\n }\n return;\n }\n\n switch (event.which) {\n case 46: // delete\n tree.removeIt();\n break;\n case 13: // enter\n if (!wide.curNode) {\n return false;\n }\n\n if (tree.isDir()) {\n if (wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, true, false, true);\n $(\"#files\").focus();\n\n break;\n }\n\n tree.openFile(wide.curNode);\n\n break;\n case 38: // up\n var node = {};\n\n if (!wide.curNode) { // select the first one if no node been selected\n node = tree.fileTree.getNodeByTId(\"files_1\");\n } else {\n if (wide.curNode && wide.curNode.isFirstNode && wide.curNode.level === 0) {\n return false;\n }\n\n node = wide.curNode.getPreNode();\n if (wide.curNode.isFirstNode && wide.curNode.getParentNode()) {\n node = wide.curNode.getParentNode();\n }\n\n var preNode = wide.curNode.getPreNode();\n if (preNode && tree.isDir() && preNode.open) {\n node = tree.getCurrentNodeLastNode(preNode);\n }\n }\n\n wide.curNode = node;\n tree.fileTree.selectNode(node);\n $(\"#files\").focus();\n break;\n case 40: // down\n var node = {};\n\n if (!wide.curNode) { // select the first one if no node been selected \n node = tree.fileTree.getNodeByTId(\"files_1\");\n } else {\n if (wide.curNode && tree.isBottomNode(wide.curNode)) {\n return false;\n }\n\n node = wide.curNode.getNextNode();\n if (tree.isDir() && wide.curNode.open) {\n node = wide.curNode.children[0];\n }\n\n var nextShowNode = tree.getNextShowNode(wide.curNode);\n if (wide.curNode.isLastNode && wide.curNode.level !== 0 && !wide.curNode.open && nextShowNode) {\n node = nextShowNode;\n }\n }\n\n if (node) {\n wide.curNode = node;\n tree.fileTree.selectNode(node);\n }\n\n $(\"#files\").focus();\n break;\n case 37: // left\n if (!wide.curNode) {\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\n tree.fileTree.selectNode(wide.curNode);\n $(\"#files\").focus();\n return false;\n }\n\n if (!tree.isDir() || !wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, false, false, true);\n $(\"#files\").focus();\n break;\n case 39: // right\n if (!wide.curNode) {\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\n tree.fileTree.selectNode(wide.curNode);\n $(\"#files\").focus();\n return false;\n }\n\n if (!tree.isDir() || wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, true, false, true);\n $(\"#files\").focus();\n\n break;\n case 116: // F5\n if (!wide.curNode || !tree.isDir()) {\n return false;\n }\n\n tree.refresh(wide.curNode);\n\n break;\n }\n });\n },\n _bindDocument: function () {\n var hotKeys = this.defaultKeyMap;\n $(document).keydown(function (event) {\n if (event.ctrlKey === hotKeys.goEditor.ctrlKey\n && event.which === hotKeys.goEditor.which) { // Ctrl-0 焦点切换到当前编辑器\n hotKeys.goEditor.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goFileTree.ctrlKey\n && event.which === hotKeys.goFileTree.which) { // Ctrl-1 焦点切换到文件树\n hotKeys.goFileTree.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goOutline.ctrlKey\n && event.which === hotKeys.goOutline.which) { // Ctrl-2 焦点切换到大纲\n hotKeys.goOutline.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goOutput.ctrlKey\n && event.which === hotKeys.goOutput.which) { // Ctrl-4 焦点切换到输出窗口 \n hotKeys.goOutput.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goSearch.ctrlKey\n && event.which === hotKeys.goSearch.which) { // Ctrl-5 焦点切换到搜索窗口 \n hotKeys.goSearch.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goNotification.ctrlKey\n && event.which === hotKeys.goNotification.which) { // Ctrl-6 焦点切换到通知窗口 \n hotKeys.goNotification.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.closeCurEditor.ctrlKey\n && event.which === hotKeys.closeCurEditor.which) { // Ctrl-Q 关闭当前编辑器 \n $(\".edit-panel .tabs > div.current\").find(\".ico-close\").click();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.changeEditor.ctrlKey\n && event.which === hotKeys.changeEditor.which) { // Ctrl-D 窗口组切换\n if (document.activeElement.className === \"notification\"\n || document.activeElement.className === \"output\"\n || document.activeElement.className === \"search\") {\n // 焦点在底部窗口组时,对底部进行切换\n var tabs = [\"output\", \"search\", \"notification\"],\n nextPath = \"\";\n for (var i = 0, ii = tabs.length; i < ii; i++) {\n if (bottomGroup.tabs.getCurrentId() === tabs[i]) {\n if (i < ii - 1) {\n nextPath = tabs[i + 1];\n } else {\n nextPath = tabs[0];\n }\n break;\n }\n }\n bottomGroup.tabs.setCurrent(nextPath);\n $(\".bottom-window-group .\" + nextPath).focus();\n\n event.preventDefault();\n\n return false;\n }\n\n if (editors.data.length > 1) {\n var nextPath = \"\";\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n var currentId = editors.getCurrentId();\n if (currentId) {\n if (currentId === editors.data[i].id) {\n if (i < ii - 1) {\n nextPath = editors.data[i + 1].id;\n wide.curEditor = editors.data[i + 1].editor;\n } else {\n nextPath = editors.data[0].id;\n wide.curEditor = editors.data[0].editor;\n }\n break;\n }\n }\n }\n\n editors.tabs.setCurrent(nextPath);\n var nextTId = tree.getTIdByPath(nextPath);\n wide.curNode = tree.fileTree.getNodeByTId(nextTId);\n\n tree.fileTree.selectNode(wide.curNode);\n wide.refreshOutline();\n var cursor = wide.curEditor.getCursor();\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n wide.curEditor.focus();\n }\n\n event.preventDefault();\n\n return false;\n }\n\n if (event.which === hotKeys.build.which) { // F5 Build\n menu.build();\n event.preventDefault();\n\n return;\n }\n\n if (event.which === hotKeys.buildRun.which) { // F6 Build & Run\n menu.run();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goFile.ctrlKey\n && event.altKey === hotKeys.goFile.altKey\n && event.shiftKey === hotKeys.goFile.shiftKey\n && event.which === hotKeys.goFile.which) { // Shift-Alt-O 跳转到文件\n $(\"#dialogGoFilePrompt\").dialog(\"open\");\n }\n });\n },\n init: function () {\n this._bindFileTree();\n this._bindOutput();\n this._bindDocument();\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file bottomGroup.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.0.1, Dec 8, 2015\n */\nvar bottomGroup = {\n tabs: undefined,\n searchTab: undefined,\n init: function () {\n this._initTabs();\n this._initFrame();\n\n $('.bottom-window-group .output').click(function () {\n $(this).focus();\n });\n\n $('.bottom-window-group .output').on('click', '.path', function (event) {\n var $path = $(this),\n tId = tree.getTIdByPath($path.data(\"path\"));\n tree.openFile(tree.fileTree.getNodeByTId(tId),\n CodeMirror.Pos($path.data(\"line\") - 1, $path.data(\"column\") - 1));\n event.preventDefault();\n return false;\n });\n },\n _initFrame: function () {\n $(\".bottom-window-group .output\").parent().mouseup(function (event) {\n event.stopPropagation();\n\n if (event.button === 0) { // 左键\n $(\".bottom-window-group .frame\").hide();\n return;\n }\n\n // event.button === 2 右键\n var left = event.screenX,\n $it = $(this);\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\n left = event.screenX - $(\".side\").width();\n }\n $(\".bottom-window-group .frame\").show().css({\n \"left\": left + \"px\",\n \"top\": (event.offsetY + event.target.offsetTop - $it.scrollTop() - 10) + \"px\"\n });\n return;\n });\n },\n clear: function (id) {\n $('.bottom-window-group .' + id + ' > div').text('');\n },\n resetOutput: function () {\n this.clear('output');\n bottomGroup.tabs.setCurrent(\"output\");\n windows.flowBottom();\n },\n _initTabs: function () {\n this.tabs = new Tabs({\n id: \".bottom-window-group\",\n clickAfter: function (id) {\n this._$tabsPanel.find(\".\" + id).focus();\n }\n });\n },\n fillOutput: function (data) {\n var $output = $('.bottom-window-group .output');\n\n data = data.replace(/\\n/g, '
    ');\n\n if (-1 !== data.indexOf(\"
    \")) {\n data = Autolinker.link(data);\n }\n\n $output.find(\"div\").html(data);\n $output.parent().scrollTop($output[0].scrollHeight);\n }\n};\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["tabs.js","dialog.js","editors.js","notification.js","tree.js","wide.js","session.js","menu.js","windows.js","hotkeys.js","bottomGroup.js"],"names":["Tabs","obj","_$tabsPanel","$","id","_$tabs","_stack","this","STACKSIZE","_init","_it","each","data","length","splice","push","extend","prototype","_that","on","event","hasClass","setCurrent","clickAfter","parent","isRemove","removeBefore","del","stopPropagation","_hasId","$tabs","find","add","getCurrentId","$tabsPanel","append","title","content","after","stack","prevId","children","remove","i","removeAfter","path","$currentTab","removeClass","hide","addClass","show","setAfter","tId","tree","getTIdByPath","node","fileTree","getNodeByTId","selectNode","wide","curNode","ii","editors","curEditor","editor","cursor","getCursor","setCursor","focus","refreshOutline","text","line","ch","fn","dialog","version","author","dpuuid","Date","getTime","PROP_NAME","Dialog","_defaults","styleClass","background","panel","main","footer","headerMiddle","headerBg","closeIcon","closeIconHover","_attach","target","settings","uuid","inst","_newInst","replace","_getInst","err","_destroyDialog","removeData","prependTo","unwrap","removeAttr","_getDefaults","windowH","window","height","windowW","width","dialogH","parseInt","dialogW","okText","cancelText","footerHTML","headerHTML","hideFooter","hiddenOk","dialogHTML","bgHTML","modal","bgHeight","document","documentElement","scrollHeight","wrap","cloneObj","clone","get","bind","_close","$buttons","undefined","ok","_bindMove","keyup","keyCode","resize","afterInit","className","mousedown","_document","getElementById","x","clientX","style","left","y","clientY","top","ondragstart","onselectstart","onselect","setCapture","captureEvents","Event","MOUSEMOVE","MOUSEUP","onmousemove","positionX","positionY","onmouseup","releaseCapture","css","close","_closeDialog","_openDialog","msg","$dialog","position","afterOpen","_updateDialog","html","defaults","key","theme","styleName","options","otherArgs","Array","slice","call","arguments","shift","apply","concat","jQuery","autocompleteMutex","tabs","getEditorByPath","click","closeOther","currentIndex","firstIndex","_removeAllMarker","removeIndex","_initClose","ZeroClipboard","button","screenX","attr","init","config","label","tip","fileName","file","confirm_save","fmt","doc","isClean","nextId","menu","disabled","cancelSelectedNode","_initCodeMirrorHotKeys","openStartPage","dateFormat","time","date","dateObj","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","Math","floor","S","getMilliseconds","test","RegExp","$1","getFullYear","substr","k","start_page","load","context","wideSessionId","ajax","url","type","dataType","jsonp","success","textStatus","articles","listHTML","community","article","articlePermalink","articleTitle","articleCreateTime","ret","getCurrentPath","currentPath","CodeMirror","registerHelper","word","cur","curLine","getLine","start","end","charAt","request","newWideRequest","code","getValue","cursorLine","cursorCh","autocompleteHints","state","completionActive","async","JSON","stringify","autocompleteArray","displayText","name","substring","console","warn","markClean","setTimeout","list","from","Pos","to","commands","autocompleteAfterDot","cm","mode","getMode","Pass","token","getTokenAt","showHint","hint","go","completeSingle","autocompleteAnyWord","auto","gotoLine","doNothing","exprInfo","result","succ","cursorCoords","copyLinesDown","selectoion","listSelections","anchor","head","max","replaceToLine","replaceRange","offset","setSelection","copyLinesUp","moveLinesUp","moveLinesDown","lastLine","jumpToDecl","openFile","findUsages","appendSearch","selectIdentifier","findWordAt","extendSelection","searcHTML","toLowerCase","contents","lowerCaseContents","matches","split","startIndex","endIndex","j","keyWord","search_no_match","$search","find_usages","search_text","bottomGroup","searchTab","$it","half","getScrollInfo","clientHeight","defaultTextHeight","scrollTo","windows","flowBottom","newEditor","iconSkin","undisabled","textArea","value","fromTextArea","lineNumbers","autofocus","autoCloseBrackets","matchBrackets","highlightSelectionMatches","showToken","rulers","color","column","lineStyle","styleActiveLine","editorTheme","tabSize","editorTabSize","indentUnit","indentWithTabs","foldGutter","cursorHeight","readOnly","isGOAPI","profile","extraKeys","Ctrl-\\",".","Ctrl-/","Ctrl-I","Ctrl-L","Ctrl-E","Ctrl-D","Ctrl-B","Ctrl-S","saveFile","Shift-Ctrl-S","saveAllFiles","Shift-Alt-F","Alt-F7","Shift-Alt-Enter","isMaxEditor","restoreEditor","maxEditor","Shift-Ctrl-Up","Shift-Ctrl-Down","Shift-Alt-Up","Shift-Alt-Down","Shift-Alt-J","emmetCodeMirror","$span","evt","altKey","ctrlKey","shiftKey","which","autocomplete","random","setSize","setOption","keymap","notification","_initWS","notificationWS","ReconnectingWebSocket","channel","onopen","log","onmessage","e","parse","$notification","notificationHTML","cmd","severity","message","onclose","onerror","getCurrentNodeLastNode","returnNode","open","getNextShowNode","level","getParentNode","getNextNode","isBottomNode","isLastNode","nodes","transformToArray","getNodes","getOpenPaths","paths","getAllParents","parents","parentTId","isParents","parentPath","parentNode","isDir","indexOf","newFile","it","newDir","removeIt","removable","rename","export","isSucc","crossCompile","platform","decompress","dir","reAsyncChildNodes","refresh","gitClone","import","fileupload","formData","done","fail","$dirRMenu","$fileRMenu","setting","view","showTitle","selectedMulti","enable","autoParam","callback","onDblClick","treeId","treeNode","onRightClick","creatable","display","onClick","clickFlag","zTree","session","restore","_initSearch","_initRename","tempCursor","findModeByFileName","mime","error","$okBtn","closest","prop","trim","val","search","cancel","extension","select","oldPath","newPath","lastIndexOf","curProcessId","outlineHTML","decls","maxj","Ch","Line","Name","dblclick","_initDialog","confirm","create_file","create","fileType","create_dir","goto_file","$list","hotkeys","bindList","$selected","goFileHTML","icoSkin","getClassBySuffix","goto_line","git_clone","repository","outputWS","goLintFound","nextCmd","executable","fillOutput","output","pid","build_n_run","lints","files","lint","lineNo","signal","_initFooter","unbind","subMenu","onbeforeunload","oncontextmenu","_save","getOption","gofmt","beforeSend","resetOutput","stop","run","scrollInfo","setValue","formatted","html_beautify","js_beautify","css_beautify","suffix","ready","getLayoutState","paneState","isClosed","size","setInterval","filse","currentId","currentFile","layout","side","outerLayout","west","sideRight","innerLayout","east","bottom","south","latestSessionContent","nodesToOpen","jj","isOpen","l","expandNode","kk","m","mm","n","nn","c","sessionWS","addNodes","isParent","removeNode","_initPreference","_initAbout","_initShare","hover","pic","urls","email","twitterShare","encodeURIComponent","twitter","facebook","googleplus","weibo","tencent","about","wideVersion","uptodate","new_version_available","colon","wideDownload","mouseover","openPreference","closeAllFiles","exit","location","href","openAbout","goget","goinstall","govet","build","isChange","emptys","emptysTip","tabIndex","no_empty","preference","$dialogPreference","$fontFamily","$fontSize","$goFmt","$workspace","$password","$email","$locale","$theme","$editorFontFamily","$editorFontSize","$editorLineHeight","$editorTheme","$editorTabSize","$keymap","fontFamily","fontSize","goFmt","workspace","password","locale","editorFontFamily","editorFontSize","editorLineHeight","reload","jqXHR","staticServer","north__paneSelector","center__paneSelector","south__paneSelector","north__size","south__size","spacing_open","north__spacing_open","south__spacing_open","fxSpeed_open","fxSpeed_close","fxSettings_close","easing","fxSettings_open","paneSelector","togglerLength_open","togglerLength_closed","togglerAlign_closed","slideTrigger_open","spacing_closed","minSize","togglerClass","togglerTip_open","min","togglerTip_closed","restore_side","resizerTip","initClosed","center","restore_outline","restore_bottom","ondrag_end","pane","refreshEditor","onresize_end","onclose_end","onopen_end","onshow_end","addCloseBtn","maxSide","maxSideRight","maxBottom","toggleEditor","restoreBottom","restoreSide","restoreSideRight","sizePane","max_editor","editorDatas","slideOpen","defaultKeyMap","goEditor","fun","goFileTree","goOutline","goOutput","goSearch","goNotification","clearWindow","changeEditor","closeCurEditor","goFile","buildRun","$source","enterFun","keydown","index","count","scrollTop","offsetTop","_bindOutput","hotKeys","clear","preventDefault","_bindFileTree","isFirstNode","getPreNode","preNode","nextShowNode","_bindDocument","activeElement","nextPath","nextTId","_initTabs","_initFrame","$path","mouseup","offsetY","$output","Autolinker","link"],"mappings":"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","file":"wide.min.js","sourcesContent":["/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file tabs.js\n *\n * @author Liyuan Li\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar Tabs = function (obj) {\n obj._$tabsPanel = $(obj.id + \" > .tabs-panel\");\n obj._$tabs = $(obj.id + \" > .tabs\");\n obj._stack = [];\n\n this.obj = obj;\n this.obj.STACKSIZE = 64;\n\n this._init(obj);\n\n // DOM 元素存在时,应顺序入栈\n var _it = this;\n $(obj.id + \" > .tabs > div\").each(function () {\n var id = $(this).data(\"index\");\n if (obj._stack.length === _it.obj.STACKSIZE) {\n obj._stack.splice(0, 1);\n }\n if (obj._stack[obj._stack.length - 1] !== id) {\n _it.obj._stack.push(id);\n }\n });\n\n};\n\n$.extend(Tabs.prototype, {\n _init: function (obj) {\n var _that = this;\n\n obj._$tabs.on(\"click\", \"div\", function (event) {\n if ($(this).hasClass('current')) {\n return false;\n }\n\n var id = $(this).data(\"index\");\n _that.setCurrent(id);\n if (typeof (obj.clickAfter) === \"function\") {\n obj.clickAfter(id);\n }\n });\n\n obj._$tabs.on(\"click\", \".ico-close\", function (event) {\n var id = $(this).parent().data(\"index\"),\n isRemove = true;\n\n if (typeof obj.removeBefore === 'function') {\n isRemove = obj.removeBefore(id);\n }\n\n if (isRemove) {\n _that.del(id);\n }\n event.stopPropagation();\n });\n },\n _hasId: function (id) {\n var $tabs = this.obj._$tabs;\n if ($tabs.find('div[data-index=\"' + id + '\"]').length === 0) {\n return false;\n }\n return true;\n },\n add: function (data) {\n // 添加当前 tab\n if (this.getCurrentId() === data.id) {\n return false;\n }\n\n // 当前 tab 已经存在\n if (this._hasId(data.id)) {\n this.setCurrent(data.id);\n return false;\n }\n\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs;\n\n $tabs.append('
    '\n + data.title + '
    ');\n $tabsPanel.append('
    ' + data.content\n + '
    ');\n\n this.setCurrent(data.id);\n\n if (typeof data.after === 'function') {\n data.after();\n }\n },\n del: function (id) {\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs,\n stack = this.obj._stack,\n prevId = null;\n\n $tabs.children(\"div[data-index='\" + id + \"']\").remove();\n $tabsPanel.children(\"div[data-index='\" + id + \"']\").remove();\n\n // 移除堆栈中该 id\n for (var i = 0; i < stack.length; i++) {\n if (id === stack[i]) {\n stack.splice(i, 1);\n i--;\n }\n }\n\n prevId = stack[stack.length - 1];\n\n if (typeof this.obj.removeAfter === 'function') {\n this.obj.removeAfter(id, prevId);\n }\n\n this.setCurrent(prevId);\n },\n getCurrentId: function () {\n var $tabs = this.obj._$tabs;\n return $tabs.children(\".current\").data(\"index\");\n },\n setCurrent: function (path) {\n if (!path) {\n return false;\n }\n\n var $tabsPanel = this.obj._$tabsPanel,\n $tabs = this.obj._$tabs;\n\n var $currentTab = $tabs.children(\".current\");\n if ($currentTab.data(\"index\") === path) {\n return false;\n }\n\n // tab 顺序入栈,如栈满则清除\n var stack = this.obj._stack;\n if (stack.length === this.obj.STACKSIZE) {\n stack.splice(0, 1);\n }\n if (stack[stack.length - 1] !== path) {\n this.obj._stack.push(path);\n }\n\n $tabs.children(\"div\").removeClass(\"current\");\n $tabsPanel.children(\"div\").hide();\n\n $tabs.children('div[data-index=\"' + path + '\"]').addClass(\"current\");\n $tabsPanel.children('div[data-index=\"' + path + '\"]').show();\n\n if (typeof this.obj.setAfter === 'function') {\n this.obj.setAfter();\n }\n\n var id = this.getCurrentId();\n if (\"startPage\" === id) {\n return;\n }\n\n // set tree node selected\n var tId = tree.getTIdByPath(id);\n var node = tree.fileTree.getNodeByTId(tId);\n tree.fileTree.selectNode(node);\n wide.curNode = node;\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n wide.curEditor = editors.data[i].editor;\n break;\n }\n }\n\n if (wide.curEditor) {\n var cursor = wide.curEditor.getCursor();\n wide.curEditor.setCursor(cursor);\n wide.curEditor.focus();\n wide.refreshOutline();\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n }\n }\n});","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file dialog.js\n *\n * @author Liyuan Li\n * @version 1.0.0.1, Dec 8, 2015\n */\n(function ($) {\n $.fn.extend({\n dialog: {\n version: \"0.0.1.7\",\n author: \"lly219@gmail.com\"\n }\n });\n\n var dpuuid = new Date().getTime();\n var PROP_NAME = 'dialog';\n\n var Dialog = function () {\n this._defaults = {\n \"styleClass\": {\n \"background\": \"dialog-background\",\n \"panel\": \"dialog-panel\",\n \"main\": \"dialog-main\",\n \"footer\": \"dialog-footer\",\n \"headerMiddle\": \"dialog-header-middle\",\n \"headerBg\": \"dialog-header-bg\",\n \"closeIcon\": \"dialog-close-icon\",\n \"closeIconHover\": \"dialog-close-icon-hover\",\n \"title\": \"dialog-title\"\n }\n };\n };\n\n $.extend(Dialog.prototype, {\n _attach: function (target, settings) {\n if (!target.id) {\n this.uuid++;\n target.id = 'dp' + this.uuid;\n }\n var inst = this._newInst($(target));\n\n inst.settings = $.extend({}, settings || {});\n $.data(target, PROP_NAME, inst);\n this._init(target);\n },\n /* Create a new instance object. */\n _newInst: function (target) {\n // escape jQuery meta chars\n var id = target[0].id.replace(/([^A-Za-z0-9_])/g, '\\\\\\\\$1');\n return {\n id: id\n };\n },\n _getInst: function (target) {\n try {\n return $.data(target, PROP_NAME);\n } catch (err) {\n throw 'Missing instance data for this dialog';\n }\n },\n _destroyDialog: function (target) {\n var inst = $.dialog._getInst(target);\n var id = inst.id;\n $.removeData(target, PROP_NAME);\n\n $(target).prependTo(\"#\" + id + \"Wrap\").unwrap();\n $(target).removeAttr(\"style\");\n\n var styleClass = this._getDefaults($.dialog._defaults, inst.settings, \"styleClass\");\n $(\".\" + styleClass.background).remove();\n $(\"#\" + id + \"Dialog\").remove();\n },\n _init: function (target) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n var windowH = $(window).height(),\n windowW = $(window).width();\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\"),\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\n\n // get settings or default value.\n settings.title = settings.title ? settings.title : \"\";\n settings.okText = settings.okText ? settings.okText : \"Ok\";\n settings.cancelText = settings.cancelText ? settings.cancelText : \"Cancel\";\n\n // build HTML.\n var footerHTML = \"\",\n headerHTML = \"
    \"\n + settings.title + \"
    \";\n\n // Sets footerHTML.\n if (!settings.hideFooter) {\n if (!settings.hiddenOk) {\n footerHTML = \"\";\n }\n footerHTML += \"\";\n }\n\n var dialogHTML = \"
    \" + headerHTML\n + \"
    \"\n + footerHTML + \"
    \";\n\n var bgHTML = \"\";\n if (settings.modal && $(\".\" + styleClass.background).length === 0) {\n var bgHeight = windowH < document.documentElement.scrollHeight\n ? document.documentElement.scrollHeight : windowH;\n bgHTML = \"
    \";\n }\n\n // Package dialog.\n $(\"#\" + id).wrap(\"
    \");\n var cloneObj = $(target).clone(true);\n $(target).remove();\n $('body').append(bgHTML + dialogHTML);\n $($(\"#\" + id + \"Dialog .\" + styleClass.main + \" div\").get(0)).append(cloneObj);\n $(cloneObj).show();\n\n // Bind event.\n $(\"#\" + id + \"Dialog .\" + styleClass.closeIcon).bind(\"click\", function () {\n $.dialog._close(id, settings);\n });\n\n var $buttons = $(\"#\" + id + \"Dialog .\" + styleClass.footer + \" button\");\n $($buttons.get(1)).bind(\"click\", function () {\n $.dialog._close(id, settings);\n });\n\n $($buttons.get(0)).bind(\"click\", function () {\n if (settings.ok === undefined || settings.ok()) {\n $.dialog._close(id, settings);\n }\n });\n\n this._bindMove(id, styleClass.headerBg, dialogH, dialogW);\n\n // esc exit\n $(window).keyup(function (event) {\n if (event.keyCode === 27) {\n $.dialog._close(id, settings);\n }\n });\n\n $(window).resize(function () {\n var height = $(\"body\").height() > $(window).height() ? $(\"body\").height() : $(window).height();\n $(\".dialog-background\").height(height);\n });\n\n if (typeof settings.afterInit === \"function\") {\n settings.afterInit();\n }\n },\n _bindMove: function (id, className) {\n $(\"#\" + id + \"Dialog .\" + className).mousedown(function (event) {\n var _document = document;\n if (!event) {\n event = window.event;\n }\n var dialog = document.getElementById(id + \"Dialog\");\n var x = event.clientX - parseInt(dialog.style.left),\n y = event.clientY - parseInt(dialog.style.top);\n _document.ondragstart = \"return false;\";\n _document.onselectstart = \"return false;\";\n _document.onselect = \"document.selection.empty();\";\n\n if (this.setCapture) {\n this.setCapture();\n } else if (window.captureEvents) {\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\n }\n\n _document.onmousemove = function (event) {\n if (!event) {\n event = window.event;\n }\n var positionX = event.clientX - x,\n positionY = event.clientY - y;\n if (positionX < 0) {\n positionX = 0;\n }\n if (positionX > $(window).width() - $(dialog).width()) {\n positionX = $(window).width() - $(dialog).width();\n }\n if (positionY > $(window).height() - $(dialog).height()) {\n positionY = $(window).height() - $(dialog).height();\n }\n if (positionY < 0) {\n positionY = 0;\n }\n dialog.style.left = positionX + \"px\";\n dialog.style.top = positionY + \"px\";\n };\n\n _document.onmouseup = function () {\n if (this.releaseCapture) {\n this.releaseCapture();\n } else if (window.captureEvents) {\n window.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);\n }\n _document.onmousemove = null;\n _document.onmouseup = null;\n _document.ondragstart = null;\n _document.onselectstart = null;\n _document.onselect = null;\n };\n });\n },\n _close: function (id, settings) {\n if ($(\"#\" + id + \"Dialog\").css(\"display\") === \"none\") {\n return;\n }\n if (settings.close === undefined || settings.close()) {\n $(\"#\" + id + \"Dialog\").hide();\n if (settings.modal) {\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $(\".\" + styleClass.background).hide();\n }\n }\n },\n _closeDialog: function (target) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n $.dialog._close(id, settings);\n },\n _openDialog: function (target, msg) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings,\n top = \"\", left = \"\",\n $dialog = $(\"#\" + id + \"Dialog\"),\n windowH = $(window).height(),\n windowW = $(window).width(),\n dialogH = settings.height ? settings.height : parseInt(windowH * 0.6),\n dialogW = settings.width ? settings.width : parseInt(windowW * 0.6);\n\n // Sets position.\n if (settings.position) {\n top = settings.position.top;\n left = settings.position.left;\n } else {\n // 20(footer) + 23(header)\n top = parseInt((windowH - dialogH - 43) / 2);\n if (top < 0) {\n top = 0;\n }\n left = parseInt((windowW - dialogW) / 2);\n }\n $dialog.css({\n \"top\": top + \"px\",\n \"left\": left + \"px\"\n }).show();\n\n if (settings.modal) {\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $(\".\" + styleClass.background).show();\n }\n\n if (typeof settings.afterOpen === \"function\") {\n settings.afterOpen(msg);\n }\n\n $(\"#\" + id + \"Dialog .dialog-footer button:eq(0)\").focus();\n },\n _updateDialog: function (target, data) {\n var inst = this._getInst(target);\n var id = inst.id,\n settings = inst.settings;\n var styleClass = this._getDefaults($.dialog._defaults, settings, \"styleClass\");\n $.extend(settings, data);\n var $dialog = $(\"#\" + id + \"Dialog\");\n if (data.position) {\n $dialog.css({\n \"top\": data.position.top,\n \"left\": data.position.left\n });\n }\n\n if (data.width) {\n $dialog.width(data.width + 26);\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.width = data.width + \"px\";\n $dialog.find(\".\" + styleClass.headerBg).width(data.width + 18);\n }\n\n if (data.height) {\n $dialog.find(\".\" + styleClass.main + \" div\")[0].style.height = data.height + \"px\";\n }\n\n if (data.title) {\n $dialog.find(\".\" + styleClass.title).html(data.title);\n }\n\n if (data.modal !== undefined) {\n if (data.modal) {\n $(\".\" + styleClass.background).show();\n } else {\n $(\".\" + styleClass.background).hide();\n }\n }\n\n if (data.hideFooter !== undefined) {\n if (data.hideFooter) {\n $dialog.find(\".\" + styleClass.footer).hide();\n } else {\n $dialog.find(\".\" + styleClass.footer).show();\n }\n }\n\n },\n _getDefaults: function (defaults, settings, key) {\n if (key === \"styleClass\") {\n if (settings.theme === \"default\" || settings.theme === undefined) {\n return defaults.styleClass;\n }\n settings.styleClass = {};\n for (var styleName in defaults[key]) {\n settings.styleClass[styleName] = settings.theme + \"-\" + defaults.styleClass[styleName];\n }\n } else if (key === \"height\" || key === \"width\") {\n if (settings[key] === null || settings[key] === undefined) {\n return \"auto\";\n } else {\n return settings[key] + \"px\";\n }\n } else {\n if (settings[key] === null || settings[key] === undefined) {\n return defaults[key];\n }\n }\n return settings[key];\n }\n });\n\n $.fn.dialog = function (options) {\n var otherArgs = Array.prototype.slice.call(arguments);\n\n if (typeof options === 'string') {\n otherArgs.shift();\n return $.dialog['_' + options + 'Dialog'].apply($.dialog, [this[0]].concat(otherArgs));\n }\n return this.each(function () {\n $.dialog._attach(this, options);\n });\n };\n\n $.dialog = new Dialog();\n\n // Add another global to avoid noConflict issues with inline event handlers\n window['DP_jQuery_' + dpuuid] = $;\n})(jQuery);","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file editor.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.1.0, Jan 12, 2016\n */\nvar editors = {\n autocompleteMutex: false,\n data: [],\n tabs: {},\n getEditorByPath: function (path) {\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].editor.options.path === path) {\n return editors.data[i].editor;\n }\n }\n },\n close: function () {\n $('.edit-panel .tabs > div[data-index=\"' + $('.edit-panel .frame').data('index') + ']').find('.ico-close').click();\n },\n closeOther: function () {\n var currentIndex = $(\".edit-panel .frame\").data(\"index\");\n\n // 设置全部关闭标识\n var removeData = [];\n $(\".edit-panel .tabs > div\").each(function (i) {\n if (currentIndex !== $(this).data(\"index\")) {\n removeData.push($(this).data(\"index\"));\n }\n });\n if (removeData.length === 0) {\n return false;\n }\n var firstIndex = removeData.splice(0, 1);\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n // 开始关闭\n $('.edit-panel .tabs > div[data-index=\"' + firstIndex + '\"]').find(\".ico-close\").click();\n },\n _removeAllMarker: function () {\n var removeData = $(\"#dialogCloseEditor\").data(\"removeData\");\n if (removeData && removeData.length > 0) {\n var removeIndex = removeData.splice(0, 1);\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n $('.edit-panel .tabs > div[data-index=\"' + removeIndex + '\"] .ico-close').click();\n }\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n },\n _initClose: function () {\n new ZeroClipboard($(\"#copyFilePath\"));\n\n // 关闭、关闭其他、关闭所有\n $(\".edit-panel\").on(\"mouseup\", '.tabs > div', function (event) {\n event.stopPropagation();\n\n if (event.button === 0) { // 左键\n $(\".edit-panel .frame\").hide();\n return false;\n }\n\n // event.button === 2 右键\n var left = event.screenX;\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\n left = event.screenX - $(\".side\").width();\n }\n $(\".edit-panel .frame\").show().css({\n \"left\": left + \"px\",\n \"top\": \"21px\"\n }).data('index', $(this).data(\"index\"));\n\n $(\"#copyFilePath\").attr('data-clipboard-text', $(this).find(\"span:eq(0)\").attr(\"title\"));\n return false;\n });\n },\n init: function () {\n $(\"#dialogCloseEditor\").dialog({\n \"modal\": true,\n \"height\": 90,\n \"width\": 260,\n \"title\": config.label.tip,\n \"hideFooter\": true,\n \"afterOpen\": function (fileName) {\n $(\"#dialogCloseEditor > div:eq(0)\").html(config.label.file\n + ' ' + fileName + '. ' + config.label.confirm_save + '?');\n $(\"#dialogCloseEditor button:eq(0)\").focus();\n },\n \"afterInit\": function () {\n $(\"#dialogCloseEditor button.save\").click(function () {\n var i = $(\"#dialogCloseEditor\").data(\"index\");\n wide.fmt(editors.data[i].id, editors.data[i].editor);\n editors.tabs.del(editors.data[i].id);\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n\n $(\"#dialogCloseEditor button.discard\").click(function () {\n var i = $(\"#dialogCloseEditor\").data(\"index\");\n editors.tabs.del(editors.data[i].id);\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n\n $(\"#dialogCloseEditor button.cancel\").click(function (event) {\n $(\"#dialogCloseEditor\").dialog(\"close\");\n editors._removeAllMarker();\n });\n }\n });\n\n editors.tabs = new Tabs({\n id: \".edit-panel\",\n setAfter: function () {\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n },\n clickAfter: function (id) {\n if (id === 'startPage') {\n wide.curEditor = undefined;\n $(\".footer .cursor\").text('');\n wide.refreshOutline();\n \n return false;\n }\n },\n removeBefore: function (id) {\n if (id === 'startPage') { // 当前关闭的 tab 是起始页\n editors._removeAllMarker();\n return true;\n }\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n if (editors.data[i].editor.doc.isClean()) {\n editors._removeAllMarker();\n return true;\n } else {\n $(\"#dialogCloseEditor\").dialog(\"open\", $('.edit-panel .tabs > div[data-index=\"'\n + editors.data[i].id + '\"] > span:eq(0)').text());\n $(\"#dialogCloseEditor\").data(\"index\", i);\n return false;\n }\n\n break;\n }\n }\n },\n removeAfter: function (id, nextId) {\n if ($(\".edit-panel .tabs > div\").length === 0) {\n // 全部 tab 都关闭时才 disables 菜单中“全部关闭”的按钮\n menu.disabled(['close-all']);\n }\n\n // 移除编辑器\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n if (editors.data[i].id === id) {\n editors.data.splice(i, 1);\n break;\n }\n }\n\n if (editors.data.length === 0) { // 起始页可能存在,所以用编辑器数据判断\n menu.disabled(['save-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\n 'edit']);\n\n // remove selected tree node\n tree.fileTree.cancelSelectedNode();\n wide.curNode = undefined;\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n return false;\n }\n\n if (!nextId) {\n // 编辑器区域不存在打开的 Tab\n // remove selected tree node\n tree.fileTree.cancelSelectedNode();\n wide.curNode = undefined;\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n return false;\n }\n\n if (nextId === editors.tabs.getCurrentId()) {\n // 关闭的不是当前编辑器\n return false;\n }\n }\n });\n\n this._initCodeMirrorHotKeys();\n this.openStartPage();\n this._initClose();\n },\n openStartPage: function () {\n wide.curEditor = undefined;\n wide.refreshOutline();\n $(\".footer .cursor\").text('');\n\n var dateFormat = function (time, fmt) {\n var date = new Date(time);\n var dateObj = {\n \"M+\": date.getMonth() + 1, //月份 \n \"d+\": date.getDate(), //日 \n \"h+\": date.getHours(), //小时 \n \"m+\": date.getMinutes(), //分 \n \"s+\": date.getSeconds(), //秒 \n \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度 \n \"S\": date.getMilliseconds() //毫秒 \n };\n if (/(y+)/.test(fmt))\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n for (var k in dateObj)\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\n }\n return fmt;\n };\n\n editors.tabs.add({\n id: \"startPage\",\n title: ' ' + config.label.start_page + '',\n content: '
    ',\n after: function () {\n $(\"#startPage\").load(config.context + '/start?sid=' + config.wideSessionId);\n $.ajax({\n url: \"https://hacpai.com/apis/articles?tags=wide,golang&p=1&size=20\",\n type: \"GET\",\n dataType: \"jsonp\",\n jsonp: \"callback\",\n success: function (data, textStatus) {\n var articles = data.articles;\n if (0 === articles.length) {\n return;\n }\n\n // 按 size = 20 取,但只保留最多 9 篇\n var length = articles.length;\n if (length > 9) {\n length = 9;\n }\n\n var listHTML = \"
    • \" + config.label.community + \"
    • \";\n for (var i = 0; i < length; i++) {\n var article = articles[i];\n listHTML += \"
    • \"\n + \"\"\n + article.articleTitle + \"  \"\n + dateFormat(article.articleCreateTime, 'yyyy-MM-dd');\n +\"
    • \";\n }\n\n $(\"#startPage .news\").html(listHTML + \"
    \");\n }\n });\n }\n });\n },\n getCurrentId: function () {\n var ret = editors.tabs.getCurrentId();\n if (ret === 'startPage') {\n ret = null;\n }\n \n return ret;\n },\n getCurrentPath: function () {\n var currentPath = $(\".edit-panel .tabs .current span:eq(0)\").attr(\"title\");\n if (currentPath === config.label.start_page) {\n currentPath = null;\n }\n return currentPath;\n },\n _initCodeMirrorHotKeys: function () {\n CodeMirror.registerHelper(\"hint\", \"go\", function (editor) {\n editor = wide.curEditor; // 使用当前编辑器覆盖实参,因为异步调用的原因,实参不一定正确\n var word = /[\\w$]+/;\n\n var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n\n var start = cur.ch, end = start;\n while (end < curLine.length && word.test(curLine.charAt(end))) {\n ++end;\n }\n while (start && word.test(curLine.charAt(start - 1))) {\n --start;\n }\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = editor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n var autocompleteHints = [];\n\n if (editors.autocompleteMutex && editor.state.completionActive) {\n return;\n }\n\n editors.autocompleteMutex = true;\n\n $.ajax({\n async: false, // 同步执行\n type: 'POST',\n url: config.context + '/autocomplete',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (data) {\n var autocompleteArray = data[1];\n\n if (autocompleteArray) {\n for (var i = 0; i < autocompleteArray.length; i++) {\n var displayText = '',\n text = autocompleteArray[i].name;\n\n switch (autocompleteArray[i].class) {\n case \"type\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"const\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"var\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"package\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ' '\n + autocompleteArray[i].type + '';\n break;\n case \"func\":\n displayText = ''// + autocompleteArray[i].class \n + '' + autocompleteArray[i].name + ''\n + autocompleteArray[i].type.substring(4) + '';\n text += '()';\n break;\n default:\n console.warn(\"Can't handle autocomplete [\" + autocompleteArray[i].class + \"]\");\n break;\n }\n\n autocompleteHints[i] = {\n displayText: displayText,\n text: text\n };\n }\n }\n\n editor.doc.markClean();\n $(\".edit-panel .tabs .current > span:eq(0)\").removeClass(\"changed\");\n }\n });\n\n setTimeout(function () {\n editors.autocompleteMutex = false;\n }, 20);\n\n return {list: autocompleteHints, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n });\n\n CodeMirror.commands.autocompleteAfterDot = function (cm) {\n var mode = cm.getMode();\n if (mode && \"go\" !== mode.name) {\n return CodeMirror.Pass;\n }\n\n var token = cm.getTokenAt(cm.getCursor());\n\n if (\"comment\" === token.type || \"string\" === token.type) {\n return CodeMirror.Pass;\n }\n\n setTimeout(function () {\n if (!cm.state.completionActive) {\n cm.showHint({hint: CodeMirror.hint.go, completeSingle: false});\n }\n }, 50);\n\n return CodeMirror.Pass;\n };\n\n CodeMirror.commands.autocompleteAnyWord = function (cm) {\n cm.showHint({hint: CodeMirror.hint.auto});\n };\n\n CodeMirror.commands.gotoLine = function (cm) {\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\n };\n\n // 用于覆盖 cm 默认绑定的某些快捷键功能.\n CodeMirror.commands.doNothing = function (cm) {\n };\n\n CodeMirror.commands.exprInfo = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/exprinfo',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n \n var position = wide.curEditor.cursorCoords();\n $(\"body\").append('
    ' + result.data + '
    ');\n }\n });\n };\n\n CodeMirror.commands.copyLinesDown = function (cm) {\n var content = '',\n selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n for (var i = from.line, max = to.line; i <= max; i++) {\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\n content += '\\n' + cm.getLine(i);\n }\n }\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\n\n var offset = replaceToLine - from.line + 1;\n cm.setSelection(CodeMirror.Pos(from.line + offset, from.ch),\n CodeMirror.Pos(to.line + offset, to.ch));\n };\n\n CodeMirror.commands.copyLinesUp = function (cm) {\n var content = '',\n selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n for (var i = from.line, max = to.line; i <= max; i++) {\n if (to.ch !== 0 || i !== max) { // 下一行选中为0时,不应添加内容\n content += '\\n' + cm.getLine(i);\n }\n }\n\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange(content, CodeMirror.Pos(replaceToLine));\n\n cm.setSelection(CodeMirror.Pos(from.line, from.ch),\n CodeMirror.Pos(to.line, to.ch));\n };\n\n CodeMirror.commands.moveLinesUp = function (cm) {\n var selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n if (from.line === 0) {\n return false;\n }\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n cm.replaceRange('\\n' + cm.getLine(from.line - 1), CodeMirror.Pos(replaceToLine));\n if (from.line === 1) {\n // 移除第一行的换行\n cm.replaceRange('', CodeMirror.Pos(0, 0),\n CodeMirror.Pos(1, 0));\n } else {\n cm.replaceRange('', CodeMirror.Pos(from.line - 2, cm.getLine(from.line - 2).length),\n CodeMirror.Pos(from.line - 1, cm.getLine(from.line - 1).length));\n }\n\n cm.setSelection(CodeMirror.Pos(from.line - 1, from.ch),\n CodeMirror.Pos(to.line - 1, to.ch));\n };\n\n CodeMirror.commands.moveLinesDown = function (cm) {\n var selectoion = cm.listSelections()[0];\n\n var from = selectoion.anchor,\n to = selectoion.head;\n if (from.line > to.line) {\n from = selectoion.head;\n to = selectoion.anchor;\n }\n\n if (to.line === cm.lastLine()) {\n return false;\n }\n\n // 下一行选中为0时,应添加到上一行末\n var replaceToLine = to.line;\n if (to.ch === 0) {\n replaceToLine = to.line - 1;\n }\n // 把选中的下一行添加到选中区域的上一行\n if (from.line === 0) {\n cm.replaceRange(cm.getLine(replaceToLine + 1) + '\\n', CodeMirror.Pos(0, 0));\n } else {\n cm.replaceRange('\\n' + cm.getLine(replaceToLine + 1), CodeMirror.Pos(from.line - 1));\n }\n // 删除选中的下一行\n cm.replaceRange('', CodeMirror.Pos(replaceToLine + 1, cm.getLine(replaceToLine + 1).length),\n CodeMirror.Pos(replaceToLine + 2, cm.getLine(replaceToLine + 2).length));\n\n cm.setSelection(CodeMirror.Pos(from.line + 1, from.ch),\n CodeMirror.Pos(to.line + 1, to.ch));\n };\n\n CodeMirror.commands.jumpToDecl = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/find/decl',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n \n var data = result.data;\n\n var tId = tree.getTIdByPath(data.path);\n wide.curNode = tree.fileTree.getNodeByTId(tId);\n tree.fileTree.selectNode(wide.curNode);\n\n tree.openFile(wide.curNode, CodeMirror.Pos(data.cursorLine - 1, data.cursorCh - 1));\n }\n });\n };\n\n CodeMirror.commands.findUsages = function (cm) {\n var cur = wide.curEditor.getCursor();\n\n var request = newWideRequest();\n request.path = $(\".edit-panel .tabs .current > span:eq(0)\").attr(\"title\");\n request.code = wide.curEditor.getValue();\n request.cursorLine = cur.line;\n request.cursorCh = cur.ch;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/find/usages',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n editors.appendSearch(result.data, 'usages', '');\n }\n });\n };\n\n CodeMirror.commands.selectIdentifier = function (cm) {\n var cur = cm.getCursor();\n var word = cm.findWordAt(cur);\n cm.extendSelection(word.anchor, word.head);\n };\n },\n appendSearch: function (data, type, key) {\n var searcHTML = '
      ',\n key = key.toLowerCase();\n\n for (var i = 0, ii = data.length; i < ii; i++) {\n var contents = '',\n lowerCaseContents = data[i].contents[0].toLowerCase(),\n matches = lowerCaseContents.split(key),\n startIndex = 0,\n endIndex = 0;\n for (var j = 0, max = matches.length; j < max; j++) {\n startIndex = endIndex + matches[j].length;\n endIndex = startIndex + key.length;\n var keyWord = data[i].contents[0].substring(startIndex, endIndex);\n if (keyWord !== '') {\n keyWord = '' + keyWord + '';\n }\n contents += data[i].contents[0].substring(startIndex - matches[j].length, startIndex) + keyWord;\n }\n\n searcHTML += '
    • '\n + contents + \"    \" + data[i].path\n + ' (' + data[i].line + ':'\n + data[i].ch + ')
    • ';\n }\n\n if (data.length === 0) {\n searcHTML += '
    • ' + config.label.search_no_match + '
    • ';\n }\n searcHTML += '
    ';\n\n var $search = $('.bottom-window-group .search'),\n title = config.label.find_usages;\n if (type === \"founds\") {\n title = config.label.search_text;\n }\n if ($search.find(\"ul\").length === 0) {\n bottomGroup.searchTab = new Tabs({\n id: \".bottom-window-group .search\",\n removeAfter: function (id, prevId) {\n if ($search.find(\"ul\").length === 1) {\n $search.find(\".tabs\").hide();\n }\n }\n });\n\n $search.on(\"click\", \"li\", function () {\n $search.find(\"li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n });\n\n $search.on(\"dblclick\", \"li\", function () {\n var $it = $(this),\n tId = tree.getTIdByPath($it.attr(\"title\"));\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n\n var line = $it.find(\".position\").data(\"line\") - 1;\n var cursor = CodeMirror.Pos(line, $it.find(\".position\").data(\"ch\") - 1);\n\n\n var editor = wide.curEditor;\n editor.setCursor(cursor);\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n wide.curEditor.focus();\n });\n\n $search.find(\".tabs-panel > div\").append(searcHTML);\n\n $search.find(\".tabs .first\").text(title);\n } else {\n $search.find(\".tabs\").show();\n bottomGroup.searchTab.add({\n \"id\": \"search\" + (new Date()).getTime(),\n \"title\": title,\n \"content\": searcHTML\n });\n }\n\n // focus\n bottomGroup.tabs.setCurrent(\"search\");\n windows.flowBottom();\n $(\".bottom-window-group .search\").focus();\n },\n // 新建一个编辑器 Tab,如果已经存在 Tab 则切换到该 Tab.\n newEditor: function (data, cursor) {\n var id = wide.curNode.id;\n\n editors.tabs.add({\n id: id,\n title: '' + wide.curNode.name + '',\n content: ''\n });\n\n menu.undisabled(['save-all', 'close-all', 'build', 'run', 'go-test', 'go-vet', 'go-get', 'go-install',\n 'find', 'find-next', 'find-previous', 'replace', 'replace-all',\n 'format', 'autocomplete', 'jump-to-decl', 'expr-info', 'find-usages', 'toggle-comment',\n 'edit']);\n\n var textArea = document.getElementById(\"editor\" + id);\n textArea.value = data.content;\n\n var editor = CodeMirror.fromTextArea(textArea, {\n lineNumbers: true,\n autofocus: true,\n autoCloseBrackets: true,\n matchBrackets: true,\n highlightSelectionMatches: {showToken: /\\w/},\n rulers: [{color: \"#ccc\", column: 120, lineStyle: \"dashed\"}],\n styleActiveLine: true,\n theme: config.editorTheme,\n tabSize: config.editorTabSize,\n indentUnit: 4,\n indentWithTabs: true,\n foldGutter: true,\n cursorHeight: 1,\n path: data.path,\n readOnly: wide.curNode.isGOAPI,\n profile: 'xhtml', // define Emmet output profile\n extraKeys: {\n \"Ctrl-\\\\\": \"autocompleteAnyWord\",\n \".\": \"autocompleteAfterDot\",\n \"Ctrl-/\": 'toggleComment',\n \"Ctrl-I\": \"exprInfo\",\n \"Ctrl-L\": \"gotoLine\",\n \"Ctrl-E\": \"deleteLine\",\n \"Ctrl-D\": \"doNothing\", // 取消默认的 deleteLine\n \"Ctrl-B\": \"jumpToDecl\",\n \"Ctrl-S\": function () {\n wide.saveFile();\n },\n \"Shift-Ctrl-S\": function () {\n menu.saveAllFiles();\n },\n \"Shift-Alt-F\": function () {\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n wide.fmt(currentPath, wide.curEditor);\n },\n \"Alt-F7\": \"findUsages\",\n \"Shift-Alt-Enter\": function () {\n if (windows.isMaxEditor) {\n windows.restoreEditor();\n } else {\n windows.maxEditor();\n }\n },\n \"Shift-Ctrl-Up\": \"copyLinesUp\",\n \"Shift-Ctrl-Down\": \"copyLinesDown\",\n \"Shift-Alt-Up\": \"moveLinesUp\",\n \"Shift-Alt-Down\": \"moveLinesDown\",\n \"Shift-Alt-J\": \"selectIdentifier\"\n }\n });\n\n if (\"text/html\" === data.mode) {\n emmetCodeMirror(editor);\n }\n\n editor.on('cursorActivity', function (cm) {\n $(\".edit-exprinfo\").remove();\n var cursor = cm.getCursor();\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n });\n\n editor.on('blur', function (cm) {\n $(\".edit-exprinfo\").remove();\n });\n\n editor.on('changes', function (cm) {\n if (cm.doc.isClean()) { // no modification\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === cm.options.path) {\n $span.removeClass(\"changed\");\n }\n });\n\n return;\n }\n\n // changed\n\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === cm.options.path) {\n $span.addClass(\"changed\");\n }\n });\n });\n\n editor.on('keydown', function (cm, evt) {\n if (evt.altKey || evt.ctrlKey || evt.shiftKey) {\n return;\n }\n\n var k = evt.which;\n\n if (k < 48) {\n return;\n }\n\n // hit [0-9]\n\n if (k > 57 && k < 65) {\n return;\n }\n\n // hit [a-z]\n\n if (k > 90) {\n return;\n }\n\n if (config.autocomplete) {\n if (0.5 <= Math.random()) {\n CodeMirror.commands.autocompleteAfterDot(cm);\n }\n }\n });\n\n editor.setSize('100%', $(\".edit-panel\").height() - $(\".edit-panel .tabs\").height());\n editor.setOption(\"mode\", data.mode);\n editor.setOption(\"gutters\", [\"CodeMirror-lint-markers\", \"CodeMirror-foldgutter\"]);\n\n if (\"wide\" !== config.keymap) {\n editor.setOption(\"keyMap\", config.keymap);\n }\n\n if (\"text/x-go\" === data.mode || \"application/json\" === data.mode) {\n editor.setOption(\"lint\", true);\n }\n\n if (\"application/xml\" === data.mode || \"text/html\" === data.mode) {\n editor.setOption(\"autoCloseTags\", true);\n }\n\n wide.curEditor = editor;\n editors.data.push({\n \"editor\": editor,\n \"id\": id\n });\n\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\n var cursorCoords = wide.curEditor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n wide.curEditor.scrollTo(0, cursorCoords.top);\n\n editor.setCursor(cursor);\n editor.focus();\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file notification.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar notification = {\n init: function () {\n $(\".notification-count\").click(function () {\n bottomGroup.tabs.setCurrent(\"notification\");\n $(\".bottom-window-group .notification\").focus();\n $(this).hide();\n });\n\n this._initWS();\n },\n _initWS: function () {\n var notificationWS = new ReconnectingWebSocket(config.channel + '/notification/ws?sid=' + config.wideSessionId);\n\n notificationWS.onopen = function () {\n console.log('[notification onopen] connected');\n };\n\n notificationWS.onmessage = function (e) {\n var data = JSON.parse(e.data),\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n \n if (data.cmd && \"init-notification\" === data.cmd) {\n console.log('[notification onmessage]' + e.data);\n \n return;\n }\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n\n $(\".notification-count\").show();\n };\n\n notificationWS.onclose = function (e) {\n console.log('[notification onclose] disconnected (' + e.code + ')');\n };\n\n notificationWS.onerror = function (e) {\n console.log('[notification onerror]');\n };\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file tree.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.1.1, Dec 15, 2015\n */\nvar tree = {\n fileTree: undefined,\n // 递归获取当前节点展开中的最后一个节点\n getCurrentNodeLastNode: function (node) {\n var returnNode = node.children[node.children.length - 1];\n if (returnNode.open) {\n return tree.getCurrentNodeLastNode(returnNode);\n } else {\n return returnNode;\n }\n },\n // 按照树展现获取下一个节点\n getNextShowNode: function (node) {\n if (node.level !== 0) {\n if (node.getParentNode().getNextNode()) {\n return node.getParentNode().getNextNode();\n } else {\n return tree.getNextShowNode(node.getParentNode());\n }\n } else {\n return node.getNextNode();\n }\n },\n isBottomNode: function (node) {\n if (node.open) {\n return false;\n }\n\n if (node.getParentNode()) {\n if (node.getParentNode().isLastNode) {\n return tree.isBottomNode(node.getParentNode());\n } else {\n return false;\n }\n } else {\n if (node.isLastNode) {\n return true;\n } else {\n return false;\n }\n }\n },\n getTIdByPath: function (path) {\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n if (nodes[i].path === path) {\n return nodes[i].tId;\n }\n }\n\n return undefined;\n },\n getOpenPaths: function () {\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes()),\n paths = [];\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n if (nodes[i].open) {\n paths.push(nodes[i].path);\n }\n }\n\n return paths;\n },\n getAllParents: function (node, parents) {\n if (!parents) {\n parents = [];\n }\n\n if (!node || !node.parentTId) {\n return parents;\n } else {\n parents.push(node.getParentNode());\n return tree.getAllParents(node.getParentNode(), parents);\n }\n },\n isParents: function (tId, parentPath) {\n var node = tree.fileTree.getNodeByTId(tId);\n if (!node || !node.parentTId) {\n return false;\n } else {\n var parentNode = tree.fileTree.getNodeByTId(node.parentTId);\n if (node.path === parentPath) {\n return true;\n } else {\n return tree.isParents(parentNode.tId, parentPath);\n }\n }\n },\n isDir: function () {\n if (wide.curNode.iconSkin.indexOf(\"ico-ztree-dir\") === 0) {\n return true;\n }\n\n return false;\n },\n newFile: function (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n\n $(\"#dialogNewFilePrompt\").dialog(\"open\");\n },\n newDir: function (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n\n $(\"#dialogNewDirPrompt\").dialog(\"open\");\n },\n removeIt: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n } else {\n if (!wide.curNode.removable) {\n return false;\n }\n }\n\n $(\"#dialogRemoveConfirm\").dialog(\"open\");\n },\n rename: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n $(\"#dialogRenamePrompt\").dialog(\"open\");\n },\n export: function () {\n var request = newWideRequest(),\n isSucc = false;\n request.path = wide.curNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/zip/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n isSucc = true;\n }\n });\n\n if (isSucc) {\n window.open(config.context + '/file/zip?path=' + wide.curNode.path + \".zip\");\n }\n },\n crossCompile: function (platform) {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n request.platform = platform;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/cross',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n }\n });\n },\n decompress: function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/decompress',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n var dir = wide.curNode.getParentNode();\n tree.fileTree.reAsyncChildNodes(dir, \"refresh\");\n }\n });\n },\n refresh: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", true);\n },\n gitClone: function (it) {\n if (it) {\n if ($(it).hasClass(\"disabled\")) {\n return false;\n }\n }\n\n $(\"#dialogGitClonePrompt\").dialog('open');\n },\n import: function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $('#importFileupload').fileupload({\n url: \"/file/upload?path=\" + request.path,\n dataType: 'json',\n formData: request,\n done: function (e, result) {\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\");\n },\n fail: function () {\n console.log(arguments);\n }\n });\n },\n init: function () {\n $(\"#file\").click(function () {\n $(this).focus();\n });\n\n var request = newWideRequest();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/files',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n var $dirRMenu = $(\"#dirRMenu\");\n var $fileRMenu = $(\"#fileRMenu\");\n var setting = {\n data: {\n key: {\n title: \"path\"\n }\n },\n view: {\n showTitle: true,\n selectedMulti: false\n },\n async: {\n enable: true,\n url: config.context + \"/file/refresh\",\n autoParam: [\"path\"]\n },\n callback: {\n onDblClick: function (event, treeId, treeNode) {\n if (treeNode) {\n tree.openFile(treeNode);\n }\n },\n onRightClick: function (event, treeId, treeNode) {\n if (treeNode && !treeNode.isGOAPI) {\n menu.undisabled(['import', 'export', 'git-clone']);\n\n wide.curNode = treeNode;\n tree.fileTree.selectNode(treeNode);\n\n if (!tree.isDir()) { // if right click on a file\n if (wide.curNode.removable) {\n $fileRMenu.find(\".remove\").removeClass(\"disabled\");\n } else {\n $fileRMenu.find(\".remove\").addClass(\"disabled\");\n }\n\n if (-1 === wide.curNode.path.indexOf(\"zip\", wide.curNode.path.length - \"zip\".length)) { // !path.endsWith(\"zip\")\n $fileRMenu.find(\".decompress\").hide();\n } else {\n $fileRMenu.find(\".decompress\").show();\n }\n\n if (-1 === wide.curNode.path.indexOf(\"go\", wide.curNode.path.length - \"go\".length)) { // !path.endsWith(\"go\")\n $fileRMenu.find(\".linux64\").hide();\n } else {\n $fileRMenu.find(\".linux64\").show();\n }\n\n var top = event.clientY - 10;\n if ($fileRMenu.height() + top > $('.content').height()) {\n top = top - $fileRMenu.height() - 25;\n }\n $fileRMenu.css({\n \"top\": top + \"px\",\n \"left\": event.clientX + \"px\",\n \"display\": \"block\"\n }).show();\n\n $dirRMenu.hide();\n\n menu.disabled(['import', 'git-clone']);\n } else { // 右击了目录\n if (wide.curNode.removable) {\n $dirRMenu.find(\".remove\").removeClass(\"disabled\");\n } else {\n $dirRMenu.find(\".remove\").addClass(\"disabled\");\n }\n\n if (wide.curNode.creatable) {\n $dirRMenu.find(\".create\").removeClass(\"disabled\");\n } else {\n $dirRMenu.find(\".create\").addClass(\"disabled\");\n }\n\n var top = event.clientY - 10;\n if ($dirRMenu.height() + top > $('.content').height()) {\n top = top - $dirRMenu.height() - 25;\n }\n\n $dirRMenu.css({\n \"top\": top + \"px\",\n \"left\": event.clientX + \"px\",\n \"display\": \"block\"\n }).show();\n\n $fileRMenu.hide();\n }\n $(\"#files\").focus();\n }\n },\n onClick: function (event, treeId, treeNode, clickFlag) {\n if (treeNode) {\n wide.curNode = treeNode;\n tree.fileTree.selectNode(treeNode);\n\n menu.undisabled(['import', 'export', 'git-clone']);\n if (!tree.isDir()) {\n menu.disabled(['import', 'git-clone']);\n }\n\n $(\"#files\").focus();\n }\n }\n }\n };\n tree.fileTree = $.fn.zTree.init($(\"#files\"), setting, result.data.children);\n\n session.restore();\n }\n }\n });\n\n this._initSearch();\n this._initRename();\n },\n openFile: function (treeNode, cursor) {\n wide.curNode = treeNode;\n var tempCursor = cursor;\n\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n // 该节点文件已经打开\n if (editors.data[i].id === treeNode.path) {\n editors.tabs.setCurrent(treeNode.path);\n wide.curEditor = editors.data[i].editor;\n\n if (!tempCursor) {\n tempCursor = wide.curEditor.getCursor();\n }\n $(\".footer .cursor\").text('| ' + (tempCursor.line + 1) + ':' + (tempCursor.ch + 1) + ' |');\n\n wide.curEditor.setCursor(tempCursor);\n var half = Math.floor(wide.curEditor.getScrollInfo().clientHeight / wide.curEditor.defaultTextHeight() / 2);\n var cursorCoords = wide.curEditor.cursorCoords({line: tempCursor.line - half, ch: 0}, \"local\");\n wide.curEditor.scrollTo(0, cursorCoords.top);\n wide.curEditor.focus();\n\n wide.refreshOutline();\n return false;\n }\n }\n\n if (!tree.isDir()) {\n var request = newWideRequest();\n request.path = treeNode.path;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n var data = result.data;\n\n if (!data.mode) {\n var mode = CodeMirror.findModeByFileName(treeNode.path);\n if (mode) {\n data.mode = mode.mime;\n } else {\n data.mode = 'text/plain';\n }\n }\n\n if (!data.mode) {\n console.error(\"Can't find mode by file name [\" + treeNode.path + \"]\");\n }\n\n if (\"img\" === data.mode) { // 是图片文件的话新建 tab 打开\n // 最好是开 tab,但这个最终取决于浏览器设置\n var w = window.open(config.context + data.path);\n return false;\n }\n\n if (!tempCursor) {\n tempCursor = CodeMirror.Pos(0, 0);\n }\n\n editors.newEditor(data, tempCursor);\n\n wide.refreshOutline();\n }\n });\n }\n },\n _initSearch: function () {\n $(\"#dialogSearchForm > input:eq(0)\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n\n if ($.trim($(this).val()) === \"\") {\n $okBtn.prop(\"disabled\", true);\n } else {\n $okBtn.prop(\"disabled\", false);\n }\n });\n\n $(\"#dialogSearchForm > input:eq(1)\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n });\n\n $(\"#dialogSearchForm\").dialog({\n \"modal\": true,\n \"height\": 80,\n \"width\": 260,\n \"title\": config.label.search,\n \"okText\": config.label.search,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogSearchForm > input:eq(0)\").val('').focus();\n $(\"#dialogSearchForm > input:eq(1)\").val('');\n $(\"#dialogSearchForm\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest();\n\n if (!wide.curNode) {\n request.dir = \"\";\n } else {\n request.dir = wide.curNode.path;\n }\n\n request.text = $(\"#dialogSearchForm > input:eq(0)\").val();\n request.extension = $(\"#dialogSearchForm > input:eq(1)\").val();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/search/text',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n $(\"#dialogSearchForm\").dialog(\"close\");\n editors.appendSearch(result.data, 'founds', request.text);\n }\n });\n }\n });\n },\n _initRename: function () {\n $(\"#dialogRenamePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.rename,\n \"okText\": config.label.rename,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogRenamePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n $(\"#dialogRenamePrompt > input\").val(wide.curNode.name).select().focus();\n },\n \"ok\": function () {\n var name = $(\"#dialogRenamePrompt > input\").val(),\n request = newWideRequest();\n\n request.oldPath = wide.curNode.path;\n request.newPath = wide.curNode.path.substring(0, wide.curNode.path.lastIndexOf(\"/\") + 1) + name;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/rename',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogRenamePrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogRenamePrompt\").dialog(\"close\");\n }\n });\n }\n });\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file wide.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar wide = {\n curNode: undefined,\n curEditor: undefined,\n curProcessId: undefined, // curent running process id (pid)\n refreshOutline: function () {\n if (!wide.curEditor ||\n (wide.curEditor && wide.curEditor.doc.getMode().name !== \"go\")) {\n $(\"#outline\").html('');\n return false;\n }\n\n var request = newWideRequest();\n request.code = wide.curEditor.getValue();\n\n $.ajax({\n type: 'POST',\n async: false,\n url: config.context + '/outline',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n var data = result.data;\n\n var outlineHTML = '
      ',\n decls = ['constDecls', 'varDecls', 'funcDecls',\n 'structDecls', 'interfaceDecls', 'typeDecls'];\n\n for (var i = 0, max = decls.length; i < max; i++) {\n var key = decls[i];\n for (var j = 0, maxj = data[key].length; j < maxj; j++) {\n var obj = data[key][j];\n outlineHTML += '
    • ' + obj.Name + '
    • ';\n }\n }\n $(\"#outline\").html(outlineHTML + '
    ');\n\n $(\"#outline li\").dblclick(function () {\n var $it = $(this),\n cursor = CodeMirror.Pos($it.data('line'), $it.data(\"ch\"));\n\n var editor = wide.curEditor;\n editor.setCursor(cursor);\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: cursor.line - half, ch: 0}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n editor.focus();\n });\n }\n });\n },\n _initDialog: function () {\n $(\".dialog-prompt > input\").keyup(function (event) {\n var $okBtn = $(this).closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (event.which === 13 && !$okBtn.prop(\"disabled\")) {\n $okBtn.click();\n }\n\n if ($.trim($(this).val()) === \"\") {\n $okBtn.prop(\"disabled\", true);\n } else {\n $okBtn.prop(\"disabled\", false);\n }\n });\n\n $(\"#dialogAlert\").dialog({\n \"modal\": true,\n \"height\": 40,\n \"width\": 350,\n \"title\": config.label.tip,\n \"hiddenOk\": true,\n \"cancelText\": config.label.confirm,\n \"afterOpen\": function (msg) {\n $(\"#dialogAlert\").html(msg);\n }\n });\n\n $(\"#dialogRemoveConfirm\").dialog({\n \"modal\": true,\n \"height\": 36,\n \"width\": 260,\n \"title\": config.label.delete,\n \"okText\": config.label.delete,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogRemoveConfirm > b\").html('\"' + wide.curNode.name + '\"');\n },\n \"ok\": function () {\n var request = newWideRequest();\n request.path = wide.curNode.path;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/remove',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogRemoveConfirm\").dialog(\"close\");\n }\n });\n }\n });\n\n $(\"#dialogNewFilePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.create_file,\n \"okText\": config.label.create,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogNewFilePrompt > input\").val('').focus();\n $(\"#dialogNewFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest(),\n name = $(\"#dialogNewFilePrompt > input\").val();\n\n request.path = wide.curNode.path + \"/\" + name;\n request.fileType = \"f\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogNewFilePrompt\").dialog(\"close\");\n\n setTimeout(function () { // Delay, waiting the file change notified and then open it\n var tId = tree.getTIdByPath(request.path);\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n }, 100);\n }\n });\n }\n });\n\n $(\"#dialogNewDirPrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.create_dir,\n \"okText\": config.label.create,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogNewDirPrompt > input\").val('').focus();\n $(\"#dialogNewDirPrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var name = $(\"#dialogNewDirPrompt > input\").val(),\n request = newWideRequest();\n\n request.path = wide.curNode.path + \"/\" + name;\n request.fileType = \"d\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n return false;\n }\n\n $(\"#dialogNewDirPrompt\").dialog(\"close\");\n }\n });\n }\n });\n\n $(\"#dialogGoFilePrompt\").dialog({\n \"modal\": true,\n \"height\": 320,\n \"width\": 660,\n \"title\": config.label.goto_file,\n \"okText\": config.label.go,\n \"cancelText\": config.label.cancel,\n \"afterInit\": function () {\n $(\"#dialogGoFilePrompt\").on(\"dblclick\", \"li\", function () {\n var tId = tree.getTIdByPath($(this).find(\".ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n });\n\n $(\"#dialogGoFilePrompt\").on(\"click\", \"li\", function () {\n var $list = $(\"#dialogGoFilePrompt > .list\");\n $list.find(\"li\").removeClass(\"selected\");\n $list.data(\"index\", $(this).data(\"index\"));\n $(this).addClass(\"selected\");\n });\n\n hotkeys.bindList($(\"#dialogGoFilePrompt > input\"), $(\"#dialogGoFilePrompt > .list\"), function ($selected) {\n var tId = tree.getTIdByPath($selected.find(\".ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n });\n\n $(\"#dialogGoFilePrompt > input\").bind(\"input\", function () {\n var name = $(\"#dialogGoFilePrompt > input\").val();\n\n var request = newWideRequest();\n request.path = '';\n request.name = '*' + name + '*';\n if (wide.curNode) {\n request.path = wide.curNode.path;\n }\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/find/name',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n return;\n }\n\n var data = result.data;\n\n var goFileHTML = '';\n for (var i = 0, max = data.length; i < max; i++) {\n var path = data[i].path,\n name = path.substr(path.lastIndexOf(\"/\") + 1),\n icoSkin = wide.getClassBySuffix(name.split(\".\")[1]);\n if (i === 0) {\n goFileHTML += '
  • '\n + name + '    '\n + path + '
  • ';\n } else {\n goFileHTML += '
  • '\n + name + '    '\n + path + '
  • ';\n }\n }\n\n $(\"#dialogGoFilePrompt > ul\").html(goFileHTML);\n }\n });\n });\n },\n \"afterOpen\": function () {\n $(\"#dialogGoFilePrompt > input\").val('').focus();\n $(\"#dialogGoFilePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n $(\"#dialogGoFilePrompt .list\").html('').data(\"index\", 0);\n },\n \"ok\": function () {\n var tId = tree.getTIdByPath($(\"#dialogGoFilePrompt .selected .ft-small\").text());\n tree.openFile(tree.fileTree.getNodeByTId(tId));\n tree.fileTree.selectNode(wide.curNode);\n $(\"#dialogGoFilePrompt\").dialog(\"close\");\n wide.curEditor.focus();\n }\n });\n\n $(\"#dialogGoLinePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 260,\n \"title\": config.label.goto_line,\n \"okText\": config.label.go,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogGoLinePrompt > input\").val('').focus();\n $(\"#dialogGoLinePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n var line = parseInt($(\"#dialogGoLinePrompt > input\").val()) - 1;\n $(\"#dialogGoLinePrompt\").dialog(\"close\");\n\n var editor = wide.curEditor;\n var cursor = editor.getCursor();\n\n editor.setCursor(CodeMirror.Pos(line, cursor.ch));\n\n var half = Math.floor(editor.getScrollInfo().clientHeight / editor.defaultTextHeight() / 2);\n var cursorCoords = editor.cursorCoords({line: line - half, ch: cursor.ch}, \"local\");\n editor.scrollTo(0, cursorCoords.top);\n\n editor.focus();\n }\n });\n\n $(\"#dialogGitClonePrompt\").dialog({\n \"modal\": true,\n \"height\": 52,\n \"width\": 360,\n \"title\": config.label.git_clone,\n \"okText\": config.label.confirm,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n $(\"#dialogGitClonePrompt > input\").val('').focus();\n $(\"#dialogGitClonePrompt\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\").prop(\"disabled\", true);\n },\n \"ok\": function () {\n $(\"#dialogGitClonePrompt\").dialog(\"close\");\n\n var request = newWideRequest();\n request.path = wide.curNode.path;\n request.repository = $(\"#dialogGitClonePrompt > input\").val();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/git/clone',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n }\n });\n }\n });\n },\n _initWS: function () {\n var outputWS = new ReconnectingWebSocket(config.channel + '/output/ws?sid=' + config.wideSessionId);\n outputWS.onopen = function () {\n console.log('[output onopen] connected');\n };\n\n outputWS.onmessage = function (e) {\n console.log('[output onmessage]' + e.data);\n var data = JSON.parse(e.data);\n\n if (goLintFound) {\n goLintFound = [];\n }\n\n if ('run' === data.nextCmd) {\n var request = newWideRequest();\n request.executable = data.executable;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/run',\n data: JSON.stringify(request),\n dataType: \"json\"\n });\n }\n\n switch (data.cmd) {\n case 'run':\n var content = $('.bottom-window-group .output > div').html();\n if (!wide.curProcessId || '' === content) {\n bottomGroup.fillOutput(content + '
    ' + data.output + '
    ');\n } else {\n bottomGroup.fillOutput(content.replace(/<\\/pre>$/g, data.output + ''));\n }\n\n wide.curProcessId = data.pid;\n\n break;\n case 'run-done':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html().replace(/<\\/pre>$/g, data.output + ''));\n\n wide.curProcessId = undefined;\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n\n break;\n case 'start-build':\n case 'start-test':\n case 'start-vet':\n case 'start-install':\n case 'start-get':\n case 'start-git_clone':\n bottomGroup.fillOutput(data.output);\n\n break;\n case 'go test':\n case 'go vet':\n case 'go install':\n case 'go get':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n\n break;\n case 'git clone':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n tree.fileTree.reAsyncChildNodes(wide.curNode, \"refresh\", false);\n\n break;\n case 'build':\n case 'cross-build':\n bottomGroup.fillOutput($('.bottom-window-group .output > div').html() + data.output);\n\n if (data.lints) { // has build error\n var files = {};\n\n for (var i = 0; i < data.lints.length; i++) {\n var lint = data.lints[i];\n\n goLintFound.push({from: CodeMirror.Pos(lint.lineNo, 0),\n to: CodeMirror.Pos(lint.lineNo, 0),\n message: lint.msg, severity: lint.severity});\n\n files[lint.file] = lint.file;\n }\n\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n\n // trigger gutter lint\n for (var path in files) {\n var editor = editors.getEditorByPath(path);\n CodeMirror.signal(editor, \"change\", editor);\n }\n } else {\n if ('cross-build' === data.cmd) {\n var request = newWideRequest(),\n path = null;\n request.path = data.executable;\n request.name = data.name;\n\n $.ajax({\n async: false,\n type: 'POST',\n url: config.context + '/file/zip/new',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (!result.succ) {\n $(\"#dialogAlert\").dialog(\"open\", result.msg);\n\n return false;\n }\n\n path = result.data;\n }\n });\n\n if (path) {\n window.open(config.context + '/file/zip?path=' + path + \".zip\");\n }\n }\n }\n\n break;\n }\n };\n outputWS.onclose = function (e) {\n console.log('[output onclose] disconnected (' + e.code + ')');\n };\n outputWS.onerror = function (e) {\n console.log('[output onerror]');\n };\n },\n _initFooter: function () {\n $(\".footer .cursor\").dblclick(function () {\n $(\"#dialogGoLinePrompt\").dialog(\"open\");\n });\n },\n init: function () {\n this._initFooter();\n\n this._initWS();\n\n // 点击隐藏弹出层\n $(\"body\").bind(\"mouseup\", function (event) {\n // MAC 右键文件树失效\n if (event.which === 3) {\n return false;\n }\n\n $(\".frame\").hide();\n\n if (!($(event.target).closest(\".frame\").length === 1 || event.target.className === \"frame\")) {\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\n menu.subMenu();\n }\n });\n\n // 刷新提示\n window.onbeforeunload = function () {\n if (editors.data.length > 0) {\n return config.label.confirm_save;\n }\n };\n\n // 禁止鼠标右键菜单\n document.oncontextmenu = function () {\n return false;\n };\n\n this._initDialog();\n },\n _save: function (path, editor) {\n if (!path) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/file/save',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n // reset the save state\n editor.doc.markClean();\n $(\".edit-panel .tabs > div\").each(function () {\n var $span = $(this).find(\"span:eq(0)\");\n if ($span.attr(\"title\") === path) {\n $span.removeClass(\"changed\");\n }\n });\n }\n });\n },\n saveFile: function () {\n var path = editors.getCurrentPath();\n if (!path) {\n return false;\n }\n\n var editor = wide.curEditor;\n if (editor.doc.isClean()) { // no modification\n return false;\n }\n\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\n wide.gofmt(path, wide.curEditor); // go fmt will save\n\n // build the file at once\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.nextCmd = \"\"; // build only, no following operation\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n\n // refresh outline\n wide.refreshOutline();\n\n return;\n }\n\n wide._save(path, wide.curEditor);\n },\n stop: function () {\n if ($(\"#buildRun\").hasClass(\"ico-buildrun\")) {\n menu.run();\n return false;\n }\n\n if (!wide.curProcessId) {\n return false;\n }\n\n var request = newWideRequest();\n request.pid = wide.curProcessId;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/stop',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n $(\"#buildRun\").removeClass(\"ico-stop\")\n .addClass(\"ico-buildrun\").attr(\"title\", config.label.build_n_run);\n }\n });\n },\n gofmt: function (path, editor) {\n var cursor = editor.getCursor();\n var scrollInfo = editor.getScrollInfo();\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.cursorLine = cursor.line;\n request.cursorCh = cursor.ch;\n\n $.ajax({\n async: false, // sync\n type: 'POST',\n url: config.context + '/go/fmt',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n editor.setValue(result.data.code);\n editor.setCursor(cursor);\n editor.scrollTo(null, scrollInfo.top);\n\n wide._save(path, editor);\n }\n }\n });\n },\n fmt: function (path, editor) {\n var mode = editor.getOption(\"mode\");\n\n var cursor = editor.getCursor();\n var scrollInfo = editor.getScrollInfo();\n\n var request = newWideRequest();\n request.file = path;\n request.code = editor.getValue();\n request.cursorLine = cursor.line;\n request.cursorCh = cursor.ch;\n\n var formatted = null;\n\n switch (mode) {\n case \"text/x-go\":\n $.ajax({\n async: false, // sync\n type: 'POST',\n url: config.context + '/go/fmt',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n formatted = result.data.code;\n }\n }\n });\n\n break;\n case \"text/html\":\n formatted = html_beautify(editor.getValue());\n break;\n case \"text/javascript\":\n case \"application/json\":\n formatted = js_beautify(editor.getValue());\n break;\n case \"text/css\":\n formatted = css_beautify(editor.getValue());\n break;\n default :\n break;\n }\n\n if (formatted) {\n editor.setValue(formatted);\n editor.setCursor(cursor);\n editor.scrollTo(null, scrollInfo.top);\n\n wide._save(path, editor);\n }\n },\n getClassBySuffix: function (suffix) {\n var iconSkin = \"ico-ztree-other \";\n switch (suffix) {\n case \"html\":\n case \"htm\":\n iconSkin = \"ico-ztree-html \";\n break;\n case \"go\":\n iconSkin = \"ico-ztree-go \";\n break;\n case \"css\":\n iconSkin = \"ico-ztree-css \";\n break;\n case \"txt\":\n iconSkin = \"ico-ztree-text \";\n break;\n case \"sql\":\n iconSkin = \"ico-ztree-sql \";\n break;\n case \"properties\":\n iconSkin = \"ico-ztree-pro \";\n break;\n case \"md\":\n iconSkin = \"ico-ztree-md \";\n break;\n case \"js\", \"json\":\n iconSkin = \"ico-ztree-js \";\n break;\n case \"xml\":\n iconSkin = \"ico-ztree-xml \";\n break;\n case \"jpg\":\n case \"jpeg\":\n case \"bmp\":\n case \"gif\":\n case \"png\":\n case \"svg\":\n case \"ico\":\n iconSkin = \"ico-ztree-img \";\n break;\n }\n\n return iconSkin;\n }\n};\n\n$(document).ready(function () {\n wide.init();\n tree.init();\n menu.init();\n hotkeys.init();\n session.init();\n notification.init();\n editors.init();\n windows.init();\n bottomGroup.init();\n});\n","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file session.js\n *\n * @author Liyuan Li\n * @version 1.1.0.1, Dec 8, 2015\n */\nvar session = {\n init: function () {\n this._initWS();\n\n var getLayoutState = function (paneState) {\n var state = 'normal';\n if (paneState.isClosed) {\n state = 'min';\n } else if (paneState.size >= $('body').width()) {\n state = 'max';\n }\n\n return state;\n };\n\n // save session content every 30 seconds\n setInterval(function () {\n var request = newWideRequest(),\n filse = [],\n fileTree = [],\n currentId = editors.getCurrentId(),\n currentFile = currentId ? editors.getCurrentPath() : \"\";\n\n editors.tabs.obj._$tabs.find(\"div\").each(function () {\n var $it = $(this);\n if ($it.find(\"span:eq(0)\").attr(\"title\") !== config.label.start_page) {\n filse.push($it.find(\"span:eq(0)\").attr(\"title\"));\n }\n });\n\n fileTree = tree.getOpenPaths();\n\n request.currentFile = currentFile; // current editor file\n request.fileTree = fileTree; // file tree expansion state\n request.files = filse; // editor tabs\n\n\n request.layout = {\n \"side\": {\n \"size\": windows.outerLayout.west.state.size,\n \"state\": getLayoutState(windows.outerLayout.west.state)\n },\n \"sideRight\": {\n \"size\": windows.innerLayout.east.state.size,\n \"state\": getLayoutState(windows.innerLayout.east.state)\n },\n \"bottom\": {\n \"size\": windows.innerLayout.south.state.size,\n \"state\": getLayoutState(windows.innerLayout.south.state)\n }\n };\n\n $.ajax({\n type: 'POST',\n url: config.context + '/session/save',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n }\n });\n }, 30000);\n },\n restore: function () {\n if (!config.latestSessionContent) {\n return;\n }\n\n var fileTree = config.latestSessionContent.fileTree,\n files = config.latestSessionContent.files,\n currentFile = config.latestSessionContent.currentFile,\n id = \"\",\n nodesToOpen = [];\n\n var nodes = tree.fileTree.transformToArray(tree.fileTree.getNodes());\n\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n // expand tree\n for (var j = 0, jj = fileTree.length; j < jj; j++) {\n if (nodes[i].path === fileTree[j]) {\n // expand this node only if its parents are open\n var parents = tree.getAllParents(tree.fileTree.getNodeByTId(nodes[i].tId)),\n isOpen = true;\n for (var l = 0, max = parents.length; l < max; l++) {\n if (parents[l].open === false) {\n isOpen = false;\n }\n }\n if (isOpen) {\n tree.fileTree.expandNode(nodes[i], true, false, true);\n } else {\n // flag it is open\n nodes[i].open = true;\n }\n break;\n }\n }\n\n // open editors\n for (var k = 0, kk = files.length; k < kk; k++) {\n if (nodes[i].path === files[k]) {\n nodesToOpen.push(nodes[i]);\n break;\n }\n }\n\n if (nodes[i].path === currentFile) {\n id = nodes[i].path;\n\n // FIXME: 上面的展开是异步进行的,所以执行到这里的时候可能还没有展开完,导致定位不了可视区域\n tree.fileTree.selectNode(nodes[i]);\n wide.curNode = nodes[i];\n }\n }\n\n // handle the open sequence of editors\n for (var m = 0, mm = files.length; m < mm; m++) {\n for (var n = 0, nn = nodesToOpen.length; n < nn; n++) {\n if (nodesToOpen[n].path === files[m]) {\n tree.openFile(nodesToOpen[n]);\n break;\n }\n }\n }\n\n // set the current editor\n editors.tabs.setCurrent(id);\n for (var c = 0, max = editors.data.length; c < max; c++) {\n if (id === editors.data[c].id) {\n wide.curEditor = editors.data[c].editor;\n break;\n }\n } \n },\n _initWS: function () {\n // Used for session retention, server will release all resources of the session if this channel closed\n var sessionWS = new ReconnectingWebSocket(config.channel + '/session/ws?sid=' + config.wideSessionId);\n\n sessionWS.onopen = function () {\n console.log('[session onopen] connected');\n\n var dateFormat = function (time, fmt) {\n var date = new Date(time);\n var dateObj = {\n \"M+\": date.getMonth() + 1,\n \"d+\": date.getDate(),\n \"h+\": date.getHours(),\n \"m+\": date.getMinutes(),\n \"s+\": date.getSeconds(),\n \"q+\": Math.floor((date.getMonth() + 3) / 3),\n \"S\": date.getMilliseconds()\n };\n if (/(y+)/.test(fmt))\n fmt = fmt.replace(RegExp.$1, (date.getFullYear() + \"\").substr(4 - RegExp.$1.length));\n for (var k in dateObj)\n if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1)\n ? (dateObj[k]) : ((\"00\" + dateObj[k]).substr((\"\" + dateObj[k]).length)));\n }\n return fmt;\n };\n\n var data = {type: \"Network\", severity: \"INFO\",\n message: \"Connected to server [sid=\" + config.wideSessionId + \"], \" + dateFormat(new Date().getTime(), 'yyyy-MM-dd hh:mm:ss')},\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n };\n\n sessionWS.onmessage = function (e) {\n var data = JSON.parse(e.data);\n switch (data.cmd) {\n case 'create-file':\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.dir)),\n name = data.path.replace(data.dir + '/', ''),\n mode = CodeMirror.findModeByFileName(name),\n iconSkin = wide.getClassBySuffix(name.split(\".\")[1]);\n\n if (data.type && data.type === 'f') {\n tree.fileTree.addNodes(node, [{\n \"id\": data.path,\n \"name\": name,\n \"iconSkin\": iconSkin,\n \"path\": data.path,\n \"mode\": mode,\n \"removable\": true,\n \"creatable\": true\n }]);\n\n } else {\n tree.fileTree.addNodes(node, [{\n \"id\": data.path,\n \"name\": name,\n \"iconSkin\": \"ico-ztree-dir \",\n \"path\": data.path,\n \"removable\": true,\n \"creatable\": true,\n \"isParent\": true\n }]);\n }\n break;\n case 'remove-file':\n case 'rename-file':\n var node = tree.fileTree.getNodeByTId(tree.getTIdByPath(data.path));\n tree.fileTree.removeNode(node);\n\n var nodes = tree.fileTree.transformToArray(node);\n for (var i = 0, ii = nodes.length; i < ii; i++) {\n editors.tabs.del(nodes[i].path);\n }\n\n break;\n }\n };\n sessionWS.onclose = function (e) {\n console.log('[session onclose] disconnected (' + e.code + ')');\n\n var data = {type: \"Network\", severity: \"ERROR\",\n message: \"Disconnected from server, trying to reconnect it [sid=\" + config.wideSessionId + \"]\"},\n $notification = $('.bottom-window-group .notification > table'),\n notificationHTML = '';\n\n notificationHTML += '' + data.severity\n + '' + data.message\n + '' + data.type + '';\n $notification.append(notificationHTML);\n\n $(\".notification-count\").show();\n };\n sessionWS.onerror = function (e) {\n console.log('[session onerror]');\n };\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file menu.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.1, Dec 8, 2015\n */\nvar menu = {\n init: function () {\n this.subMenu();\n this._initPreference();\n this._initAbout();\n this._initShare();\n\n // 点击子菜单后消失\n $(\".menu .frame li\").click(function () {\n $(\".menu > ul > li\").unbind().removeClass(\"selected\");\n menu.subMenu();\n });\n },\n _initShare: function () {\n $(\".menu .ico-share\").hover(function () {\n $(\".menu .share-panel\").show();\n });\n\n $(\".share-panel .font-ico\").click(function () {\n var key = $(this).attr('class').split('-')[2];\n var url = \"https://wide.b3log.org\", pic = 'https://wide.b3log.org/static/images/wide-logo.png';\n var urls = {};\n urls.email = \"mailto:?subject=\" + $('title').text()\n + \"&body=\" + $('meta[name=description]').attr('content') + ' ' + url;\n\n var twitterShare = encodeURIComponent($('meta[name=description]').attr('content') + \" \" + url + \" #golang\");\n urls.twitter = \"https://twitter.com/intent/tweet?status=\" + twitterShare;\n\n urls.facebook = \"https://www.facebook.com/sharer/sharer.php?u=\" + url;\n urls.googleplus = \"https://plus.google.com/share?url=\" + url;\n\n var title = encodeURIComponent($('title').text() + '. \\n' + $('meta[name=description]').attr('content')\n + \" #golang#\");\n urls.weibo = \"http://v.t.sina.com.cn/share/share.php?title=\" + title + \"&url=\" + url + \"&pic=\" + pic;\n urls.tencent = \"http://share.v.t.qq.com/index.php?c=share&a=index&title=\" + title +\n \"&url=\" + url + \"&pic=\" + pic;\n\n window.open(urls[key], \"_blank\", \"top=100,left=200,width=648,height=618\");\n });\n },\n _initAbout: function () {\n $(\"#dialogAbout\").load(config.context + '/about', function () {\n $(\"#dialogAbout\").dialog({\n \"modal\": true,\n \"title\": config.label.about,\n \"hideFooter\": true,\n \"afterOpen\": function () {\n $.ajax({\n url: \"https://rhythm.b3log.org/version/wide/latest\",\n type: \"GET\",\n dataType: \"jsonp\",\n jsonp: \"callback\",\n success: function (data, textStatus) {\n if ($(\"#dialogAbout .version\").text() === data.wideVersion) {\n $(\".upgrade\").text(config.label.uptodate);\n } else {\n $(\".upgrade\").html(config.label.new_version_available + config.label.colon\n + \"\" + data.wideVersion + \"\");\n }\n }\n });\n }\n });\n });\n },\n disabled: function (list) {\n for (var i = 0, max = list.length; i < max; i++) {\n $(\".menu li.\" + list[i]).addClass(\"disabled\");\n }\n },\n undisabled: function (list) {\n for (var i = 0, max = list.length; i < max; i++) {\n $(\".menu li.\" + list[i]).removeClass(\"disabled\");\n }\n },\n // 焦点不在菜单上时需点击展开子菜单,否则为鼠标移动展开\n subMenu: function () {\n $(\".menu > ul > li\").click(function (event) {\n if ($(event.target).closest(\".frame\").length === 1) {\n return;\n }\n var $it = $(this);\n $it.find('.frame').show();\n $(\".menu > ul > li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n\n $(\".menu > ul > li\").unbind();\n\n $(\".menu > ul > li\").mouseover(function () {\n if ($(event.target).closest(\".frame\").length === 1) {\n return;\n }\n $(\".menu .frame\").hide();\n $(this).find('.frame').show();\n $(\".menu > ul > li\").removeClass(\"selected\");\n $(this).addClass(\"selected\");\n });\n });\n },\n openPreference: function () {\n $(\"#dialogPreference\").dialog(\"open\");\n },\n saveAllFiles: function () {\n if ($(\".menu li.save-all\").hasClass(\"disabled\")) {\n return false;\n }\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n var path = editors.data[i].id;\n var editor = editors.data[i].editor;\n\n if (\"text/x-go\" === editor.getOption(\"mode\")) {\n wide.fmt(path, editor);\n } else {\n wide._save(path, editor);\n }\n }\n },\n closeAllFiles: function () {\n if ($(\".menu li.close-all\").hasClass(\"disabled\")) {\n return false;\n }\n\n // 设置全部关闭标识\n var removeData = [];\n $(\".edit-panel .tabs > div\").each(function (i) {\n if (i !== 0) {\n removeData.push($(this).data(\"index\"));\n }\n });\n $(\"#dialogCloseEditor\").data(\"removeData\", removeData);\n // 开始关闭\n $(\".edit-panel .tabs .ico-close:eq(0)\").click();\n },\n exit: function () {\n var request = newWideRequest();\n\n $.ajax({\n type: 'POST',\n url: config.context + '/logout',\n data: JSON.stringify(request),\n dataType: \"json\",\n success: function (result) {\n if (result.succ) {\n window.location.href = config.context + \"/login\";\n }\n }\n });\n },\n openAbout: function () {\n $(\"#dialogAbout\").dialog(\"open\");\n },\n goget: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-get\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/get',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n goinstall: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-install\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/install',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // go test.\n test: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-test\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/test',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // go vet.\n govet: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.go-vet\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n\n $.ajax({\n type: 'POST',\n url: config.context + '/go/vet',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n // Build & Run.\n run: function () {\n menu.saveAllFiles();\n\n if ($(\"#buildRun\").hasClass(\"ico-stop\")) {\n wide.stop();\n return false;\n }\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.run\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n request.code = wide.curEditor.getValue();\n request.nextCmd = \"run\";\n\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n $(\"#buildRun\").addClass(\"ico-stop\")\n .removeClass(\"ico-buildrun\").attr(\"title\", config.label.stop);\n }\n });\n },\n // Build.\n build: function () {\n menu.saveAllFiles();\n\n var currentPath = editors.getCurrentPath();\n if (!currentPath) {\n return false;\n }\n\n if ($(\".menu li.build\").hasClass(\"disabled\")) {\n return false;\n }\n\n var request = newWideRequest();\n request.file = currentPath;\n request.code = wide.curEditor.getValue();\n request.nextCmd = \"\"; // build only, no following operation\n\n $.ajax({\n type: 'POST',\n url: config.context + '/build',\n data: JSON.stringify(request),\n dataType: \"json\",\n beforeSend: function () {\n bottomGroup.resetOutput();\n },\n success: function (result) {\n }\n });\n },\n _initPreference: function () {\n $(\"#dialogPreference\").load(config.context + '/preference', function () {\n $(\"#dialogPreference input\").keyup(function () {\n var isChange = false,\n emptys = [],\n emptysTip = '';\n $(\"#dialogPreference input\").each(function () {\n var $it = $(this);\n // data-value 如为数字,则不会和 value 一样转换为 String,再次不使用全等\n if ($it.val() != $it.data(\"value\")) {\n isChange = true;\n }\n\n if ($.trim($it.val()) === '') {\n emptys.push($it);\n }\n });\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (isChange) {\n $okBtn.prop(\"disabled\", false);\n } else {\n $okBtn.prop(\"disabled\", true);\n }\n\n if (emptys.length === 0) {\n $(\"#dialogPreference\").find(\".tip\").html(\"\");\n $okBtn.prop(\"disabled\", false);\n } else {\n for (var i = 0, max = emptys.length; i < max; i++) {\n var tabIndex = emptys[i].closest('div').data(\"index\"),\n text = $.trim(emptys[i].parent().text());\n emptysTip += '[' + $('#dialogPreference .tabs > div[data-index=\"' + tabIndex + '\"]').text()\n + '] -> [' + text.substr(0, text.length - 1)\n + ']: ' + config.label.no_empty + \"
    \";\n }\n $(\"#dialogPreference\").find(\".tip\").html(emptysTip);\n $okBtn.prop(\"disabled\", true);\n }\n });\n\n $(\"#dialogPreference select\").on(\"change\", function () {\n var isChange = false;\n $(\"#dialogPreference select\").each(function () {\n if ($(this).val() !== $(this).data(\"value\")) {\n isChange = true;\n }\n });\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n if (isChange) {\n $okBtn.prop(\"disabled\", false);\n } else {\n $okBtn.prop(\"disabled\", true);\n }\n });\n\n $(\"#dialogPreference\").dialog({\n \"modal\": true,\n \"height\": 280,\n \"width\": 800,\n \"title\": config.label.preference,\n \"okText\": config.label.apply,\n \"cancelText\": config.label.cancel,\n \"afterOpen\": function () {\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n $okBtn.prop(\"disabled\", true);\n },\n \"ok\": function () {\n var request = newWideRequest(),\n $dialogPreference = $(\"#dialogPreference\"),\n $fontFamily = $dialogPreference.find(\"input[name=fontFamily]\"),\n $fontSize = $dialogPreference.find(\"input[name=fontSize]\"),\n $goFmt = $dialogPreference.find(\"select[name=goFmt]\"),\n $workspace = $dialogPreference.find(\"input[name=workspace]\"),\n $password = $dialogPreference.find(\"input[name=password]\"),\n $email = $dialogPreference.find(\"input[name=email]\"),\n $locale = $dialogPreference.find(\"select[name=locale]\"),\n $theme = $dialogPreference.find(\"select[name=theme]\"),\n $editorFontFamily = $dialogPreference.find(\"input[name=editorFontFamily]\"),\n $editorFontSize = $dialogPreference.find(\"input[name=editorFontSize]\"),\n $editorLineHeight = $dialogPreference.find(\"input[name=editorLineHeight]\"),\n $editorTheme = $dialogPreference.find(\"select[name=editorTheme]\"),\n $editorTabSize = $dialogPreference.find(\"input[name=editorTabSize]\"),\n $keymap = $dialogPreference.find(\"select[name=keymap]\");\n\n $.extend(request, {\n \"fontFamily\": $fontFamily.val(),\n \"fontSize\": $fontSize.val(),\n \"goFmt\": $goFmt.val(),\n \"workspace\": $workspace.val(),\n \"password\": $password.val(),\n \"email\": $email.val(),\n \"locale\": $locale.val(),\n \"theme\": $theme.val(),\n \"editorFontFamily\": $editorFontFamily.val(),\n \"editorFontSize\": $editorFontSize.val(),\n \"editorLineHeight\": $editorLineHeight.val(),\n \"editorTheme\": $editorTheme.val(),\n \"editorTabSize\": $editorTabSize.val(),\n \"keymap\": $keymap.val()\n });\n\n if (config.keymap !== $keymap.val()) {\n window.location.reload();\n }\n\n $.ajax({\n type: 'POST',\n url: config.context + '/preference',\n data: JSON.stringify(request),\n success: function (result, textStatus, jqXHR) {\n if (!result.succ) {\n return false;\n }\n\n $fontFamily.data(\"value\", $fontFamily.val());\n $fontSize.data(\"value\", $fontSize.val());\n $goFmt.data(\"value\", $goFmt.val());\n $workspace.data(\"value\", $workspace.val());\n $password.data(\"value\", $password.val());\n $email.data(\"value\", $email.val());\n $locale.data(\"value\", $locale.val());\n $theme.data(\"value\", $theme.val());\n $editorFontFamily.data(\"value\", $editorFontFamily.val());\n $editorFontSize.data(\"value\", $editorFontSize.val());\n $editorLineHeight.data(\"value\", $editorLineHeight.val());\n $editorTheme.data(\"value\", $editorTheme.val());\n $editorTabSize.data(\"value\", $editorTabSize.val());\n $keymap.data(\"value\", $keymap.val());\n\n // update the config\n config.keymap = $keymap.val();\n\n var $okBtn = $(\"#dialogPreference\").closest(\".dialog-main\").find(\".dialog-footer > button:eq(0)\");\n $okBtn.prop(\"disabled\", true);\n\n $(\"#themesLink\").attr(\"href\", config.staticServer + '/static/css/themes/' + $theme.val() + '.css');\n\n config.editorTheme = $editorTheme.val();\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n editors.data[i].editor.setOption(\"theme\", $editorTheme.val());\n }\n }\n });\n }\n });\n\n new Tabs({\n id: \".preference\"\n });\n });\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file windows.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.2.2, Feb 16, 2016\n */\nvar windows = {\n isMaxEditor: false,\n outerLayout: {},\n innerLayout: {},\n init: function () {\n if (!config.latestSessionContent) {\n config.latestSessionContent = {\n \"fileTree\": [],\n \"files\": [],\n \"currentFile\": \"\",\n };\n }\n \n if (!config.latestSessionContent.layout) {\n config.latestSessionContent.layout = {\n \"side\": {\n \"size\": 200,\n \"state\": 'normal'\n },\n \"sideRight\": {\n \"size\": 200,\n \"state\": 'normal'\n },\n \"bottom\": {\n \"size\": 100,\n \"state\": 'normal'\n }\n };\n }\n\n var layout = config.latestSessionContent.layout;\n\n this.outerLayout = $('body').layout({\n north__paneSelector: \".menu\",\n center__paneSelector: \".content\",\n south__paneSelector: \".footer\",\n north__size: 22,\n south__size: 19,\n spacing_open: 2,\n north__spacing_open: 0,\n south__spacing_open: 0,\n defaults: {\n fxSpeed_open: 300,\n fxSpeed_close: 100,\n fxSettings_close: {\n easing: \"easeOutQuint\"\n },\n fxSettings_open: {\n easing: \"easeInQuint\"\n }\n },\n west: {\n size: layout.side.size,\n paneSelector: \".side\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 15,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_side,\n resizerTip: config.label.resize,\n initClosed: (layout.side.state === 'min')\n }\n });\n\n this.innerLayout = $('div.content').layout({\n spacing_open: 2,\n defaults: {\n fxSpeed_open: 300,\n fxSpeed_close: 100,\n fxSettings_close: {\n easing: \"easeOutQuint\"\n },\n fxSettings_open: {\n easing: \"easeInQuint\"\n }\n },\n center: {\n paneSelector: \".edit-panel\"\n },\n east: {\n size: layout.sideRight.size,\n paneSelector: \".side-right\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 15,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_outline,\n resizerTip: config.label.resize,\n initClosed: (layout.sideRight.state === 'min')\n },\n south: {\n size: layout.bottom.size,\n paneSelector: \".bottom-window-group\",\n togglerLength_open: 0,\n togglerLength_closed: 15,\n togglerAlign_closed: \"top\",\n slideTrigger_open: \"mouseover\",\n spacing_closed: 16,\n minSize: 100,\n togglerClass: \"ico-restore\",\n togglerTip_open: config.label.min,\n togglerTip_closed: config.label.restore_bottom,\n resizerTip: config.label.resize,\n initClosed: (layout.bottom.state === 'min'),\n ondrag_end: function (type, pane) {\n windows.refreshEditor(pane, 'drag');\n },\n onresize_end: function (type, pane) {\n windows.refreshEditor(pane, 'resize');\n },\n onclose_end: function (type, pane) {\n windows.refreshEditor(pane, 'close');\n },\n onopen_end: function (type, pane) {\n windows.refreshEditor(pane, 'open');\n },\n onshow_end: function (type, pane) {\n windows.refreshEditor(pane, 'show');\n }\n }\n });\n\n this.outerLayout.addCloseBtn(\".side .ico-min\", \"west\");\n this.innerLayout.addCloseBtn(\".side-right .ico-min\", \"east\");\n this.innerLayout.addCloseBtn(\".bottom-window-group .ico-min\", \"south\");\n\n if (layout.side.state === 'max') {\n windows.maxSide();\n }\n if (layout.sideRight.state === 'max') {\n windows.maxSideRight();\n }\n if (layout.bottom.state === 'max') {\n windows.maxBottom();\n }\n\n $(\".toolbars .ico-max\").click(function () {\n windows.toggleEditor();\n });\n\n $(\".edit-panel .tabs\").on(\"dblclick\", function () {\n windows.toggleEditor();\n });\n\n $(\".bottom-window-group .tabs\").dblclick(function () {\n var $it = $(\".bottom-window-group\");\n if ($it.hasClass(\"bottom-window-group-max\")) {\n windows.restoreBottom();\n } else {\n windows.maxBottom($it);\n }\n });\n\n $(\".side .tabs\").dblclick(function () {\n var $it = $(\".side\");\n if ($it.hasClass(\"side-max\")) {\n windows.restoreSide();\n } else {\n windows.restoreSide($it);\n }\n });\n\n $(\".side-right .tabs\").dblclick(function () {\n var $it = $(\".side-right\");\n if ($it.hasClass(\"side-right-max\")) {\n windows.restoreSideRight();\n } else {\n windows.maxSideRight($it);\n }\n });\n\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\n $(window).resize(function () {\n windows.refreshEditor($('.bottom-window-group'));\n });\n\n },\n maxEditor: function () {\n var $it = $(\".toolbars .font-ico\");\n windows.outerLayout.close('west');\n windows.innerLayout.close('south');\n windows.innerLayout.close('east');\n $it.removeClass('ico-max').addClass('ico-restore').attr('title', config.label.min);\n windows.isMaxEditor = true;\n },\n maxBottom: function ($it) {\n $it.data('height', $it.height()).addClass(\"bottom-window-group-max\").find('.ico-min').hide();\n windows.outerLayout.hide('west');\n windows.innerLayout.hide('east');\n windows.innerLayout.sizePane('south', $('.content').height());\n },\n maxSide: function ($it) {\n $it.data('width', $it.width()).addClass(\"side-max\").find('.ico-min').hide();\n $('.content').hide();\n windows.outerLayout.sizePane('west', $('body').width());\n },\n maxSideRight: function ($it) {\n $it.addClass(\"side-right-max\").data('width', $it.width()).find('.ico-min').hide();\n windows.outerLayout.hide('west');\n windows.innerLayout.hide('south');\n windows.innerLayout.sizePane('east', $('body').width());\n },\n toggleEditor: function () {\n var $it = $(\".toolbars .font-ico\");\n if ($it.hasClass('ico-restore')) {\n windows.restoreEditor();\n } else {\n windows.maxEditor();\n }\n },\n restoreBottom: function () {\n var $it = $(\".bottom-window-group\");\n $it.removeClass(\"bottom-window-group-max\").find('.ico-min').show();\n windows.outerLayout.show('west');\n windows.innerLayout.show('east');\n windows.innerLayout.sizePane('south', $it.data('height'));\n },\n restoreSide: function () {\n var $it = $(\".side\");\n $it.removeClass(\"side-max\").find('.ico-min').show();\n $('.content').show();\n windows.outerLayout.sizePane('west', $it.data('width'));\n },\n restoreSideRight: function () {\n var $it = $(\".side-right\");\n $it.removeClass(\"side-right-max\").find('.ico-min').show();\n windows.outerLayout.show('west');\n windows.innerLayout.show('south');\n windows.innerLayout.sizePane('east', $it.data('width'));\n },\n restoreEditor: function () {\n windows.outerLayout.open('west');\n windows.innerLayout.open('south');\n windows.innerLayout.open('east');\n windows.isMaxEditor = false;\n $(\".toolbars .font-ico\").addClass('ico-max').removeClass('ico-restore').attr('title', config.label.max_editor);\n },\n refreshEditor: function (pane, type) {\n var editorDatas = editors.data,\n height = $('.content').height() - pane.height() - 24;\n switch (type) {\n case 'close':\n height = $('.content').height() - 40;\n break;\n default:\n break;\n }\n for (var i = 0, ii = editorDatas.length; i < ii; i++) {\n editorDatas[i].editor.setSize(\"100%\", height);\n }\n\n $('.bottom-window-group .search').height($('.bottom-window-group .tabs-panel').height());\n },\n flowBottom: function () {\n if (windows.innerLayout.south.state.isClosed) {\n windows.innerLayout.slideOpen('south');\n }\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file hotkeys.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.0.0.2, Dec 15, 2015\n */\nvar hotkeys = {\n defaultKeyMap: {\n // Ctrl-0\n goEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 48,\n fun: function () {\n if (wide.curEditor) {\n wide.curEditor.focus();\n }\n }\n },\n // Ctrl-1\n goFileTree: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 49,\n fun: function () {\n // 有些元素需设置 tabindex 为 -1 时才可以 focus\n if (windows.outerLayout.west.state.isClosed) {\n windows.outerLayout.slideOpen('west');\n }\n $(\"#files\").focus();\n }\n },\n // Ctrl-2\n goOutline: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 50,\n fun: function () {\n if (windows.innerLayout.east.state.isClosed) {\n windows.innerLayout.slideOpen('east');\n }\n\n $(\"#outline\").focus();\n }\n },\n // Ctrl-4\n goOutput: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 52,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"output\");\n windows.flowBottom();\n $(\".bottom-window-group .output\").focus();\n }\n },\n // Ctrl-5\n goSearch: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 53,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"search\");\n windows.flowBottom();\n $(\".bottom-window-group .search\").focus();\n }\n },\n // Ctrl-6\n goNotification: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 54,\n fun: function () {\n bottomGroup.tabs.setCurrent(\"notification\");\n windows.flowBottom();\n $(\".bottom-window-group .notification\").focus();\n }\n },\n // Alt-C\n clearWindow: {\n ctrlKey: false,\n altKey: true,\n shiftKey: false,\n which: 67\n },\n // Ctrl-D 窗口组切换 \n changeEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 68\n },\n // Ctrl-F search \n search: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 70\n },\n // Ctrl-Q close current editor \n closeCurEditor: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 81\n },\n // Ctrl-R\n rename: {\n ctrlKey: true,\n altKey: false,\n shiftKey: false,\n which: 82\n },\n // Shift-Alt-O 跳转到文件\n goFile: {\n ctrlKey: false,\n altKey: true,\n shiftKey: true,\n which: 79\n },\n // F5 Build\n build: {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n which: 116\n },\n // F6 Build & Run\n buildRun: {\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n which: 117\n }\n },\n bindList: function ($source, $list, enterFun) {\n $list.data(\"index\", 0);\n $source.keydown(function (event) {\n var index = $list.data(\"index\"),\n count = $list.find(\"li\").length;\n\n if (count === 0) {\n return true;\n }\n\n if (event.which === 38) { // up\n index--;\n if (index < 0) {\n index = count - 1;\n }\n }\n\n if (event.which === 40) { // down\n index++;\n if (index > count - 1) {\n index = 0;\n }\n }\n\n var $selected = $list.find(\"li:eq(\" + index + \")\");\n\n if (event.which === 13) { // enter\n enterFun($selected);\n }\n\n $list.find(\"li\").removeClass(\"selected\");\n $list.data(\"index\", index);\n $selected.addClass(\"selected\");\n\n if (index === 0) {\n $list.scrollTop(0);\n } else {\n if ($selected[0].offsetTop + $list.scrollTop() > $list.height()) {\n if (event.which === 40) {\n $list.scrollTop($list.scrollTop() + $selected.height());\n } else {\n $list.scrollTop($selected[0].offsetTop);\n }\n } else {\n $list.scrollTop(0);\n }\n }\n\n // 阻止上下键改变光标位置\n if (event.which === 38 || event.which === 40 || event.which === 13) {\n return false;\n }\n });\n },\n _bindOutput: function () {\n $(\".bottom-window-group .output\").keydown(function (event) {\n var hotKeys = hotkeys.defaultKeyMap;\n if (event.altKey === hotKeys.clearWindow.altKey\n && event.which === hotKeys.clearWindow.which) { // Alt-C clear output\n bottomGroup.clear('output');\n\n event.preventDefault();\n\n return;\n }\n });\n },\n _bindFileTree: function () {\n $(\"#files\").keydown(function (event) {\n event.preventDefault();\n\n var hotKeys = hotkeys.defaultKeyMap;\n if (event.ctrlKey === hotKeys.search.ctrlKey\n && event.which === hotKeys.search.which) { // Ctrl-F 搜索\n $(\"#dialogSearchForm\").dialog(\"open\");\n return;\n }\n\n if (event.ctrlKey === hotKeys.rename.ctrlKey\n && event.which === hotKeys.rename.which) { // Ctrl-R 重命名\n if (wide.curNode.removable) {\n $(\"#dialogRenamePrompt\").dialog(\"open\");\n }\n return;\n }\n\n switch (event.which) {\n case 46: // delete\n tree.removeIt();\n break;\n case 13: // enter\n if (!wide.curNode) {\n return false;\n }\n\n if (tree.isDir()) {\n if (wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, true, false, true);\n $(\"#files\").focus();\n\n break;\n }\n\n tree.openFile(wide.curNode);\n\n break;\n case 38: // up\n var node = {};\n\n if (!wide.curNode) { // select the first one if no node been selected\n node = tree.fileTree.getNodeByTId(\"files_1\");\n } else {\n if (wide.curNode && wide.curNode.isFirstNode && wide.curNode.level === 0) {\n return false;\n }\n\n node = wide.curNode.getPreNode();\n if (wide.curNode.isFirstNode && wide.curNode.getParentNode()) {\n node = wide.curNode.getParentNode();\n }\n\n var preNode = wide.curNode.getPreNode();\n if (preNode && tree.isDir() && preNode.open) {\n node = tree.getCurrentNodeLastNode(preNode);\n }\n }\n\n wide.curNode = node;\n tree.fileTree.selectNode(node);\n $(\"#files\").focus();\n break;\n case 40: // down\n var node = {};\n\n if (!wide.curNode) { // select the first one if no node been selected \n node = tree.fileTree.getNodeByTId(\"files_1\");\n } else {\n if (wide.curNode && tree.isBottomNode(wide.curNode)) {\n return false;\n }\n\n node = wide.curNode.getNextNode();\n if (tree.isDir() && wide.curNode.open) {\n node = wide.curNode.children[0];\n }\n\n var nextShowNode = tree.getNextShowNode(wide.curNode);\n if (wide.curNode.isLastNode && wide.curNode.level !== 0 && !wide.curNode.open && nextShowNode) {\n node = nextShowNode;\n }\n }\n\n if (node) {\n wide.curNode = node;\n tree.fileTree.selectNode(node);\n }\n\n $(\"#files\").focus();\n break;\n case 37: // left\n if (!wide.curNode) {\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\n tree.fileTree.selectNode(wide.curNode);\n $(\"#files\").focus();\n return false;\n }\n\n if (!tree.isDir() || !wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, false, false, true);\n $(\"#files\").focus();\n break;\n case 39: // right\n if (!wide.curNode) {\n wide.curNode = tree.fileTree.getNodeByTId(\"files_1\");\n tree.fileTree.selectNode(wide.curNode);\n $(\"#files\").focus();\n return false;\n }\n\n if (!tree.isDir() || wide.curNode.open) {\n return false;\n }\n\n tree.fileTree.expandNode(wide.curNode, true, false, true);\n $(\"#files\").focus();\n\n break;\n case 116: // F5\n if (!wide.curNode || !tree.isDir()) {\n return false;\n }\n\n tree.refresh(wide.curNode);\n\n break;\n }\n });\n },\n _bindDocument: function () {\n var hotKeys = this.defaultKeyMap;\n $(document).keydown(function (event) {\n if (event.ctrlKey === hotKeys.goEditor.ctrlKey\n && event.which === hotKeys.goEditor.which) { // Ctrl-0 焦点切换到当前编辑器\n hotKeys.goEditor.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goFileTree.ctrlKey\n && event.which === hotKeys.goFileTree.which) { // Ctrl-1 焦点切换到文件树\n hotKeys.goFileTree.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goOutline.ctrlKey\n && event.which === hotKeys.goOutline.which) { // Ctrl-2 焦点切换到大纲\n hotKeys.goOutline.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goOutput.ctrlKey\n && event.which === hotKeys.goOutput.which) { // Ctrl-4 焦点切换到输出窗口 \n hotKeys.goOutput.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goSearch.ctrlKey\n && event.which === hotKeys.goSearch.which) { // Ctrl-5 焦点切换到搜索窗口 \n hotKeys.goSearch.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goNotification.ctrlKey\n && event.which === hotKeys.goNotification.which) { // Ctrl-6 焦点切换到通知窗口 \n hotKeys.goNotification.fun();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.closeCurEditor.ctrlKey\n && event.which === hotKeys.closeCurEditor.which) { // Ctrl-Q 关闭当前编辑器 \n $(\".edit-panel .tabs > div.current\").find(\".ico-close\").click();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.changeEditor.ctrlKey\n && event.which === hotKeys.changeEditor.which) { // Ctrl-D 窗口组切换\n if (document.activeElement.className === \"notification\"\n || document.activeElement.className === \"output\"\n || document.activeElement.className === \"search\") {\n // 焦点在底部窗口组时,对底部进行切换\n var tabs = [\"output\", \"search\", \"notification\"],\n nextPath = \"\";\n for (var i = 0, ii = tabs.length; i < ii; i++) {\n if (bottomGroup.tabs.getCurrentId() === tabs[i]) {\n if (i < ii - 1) {\n nextPath = tabs[i + 1];\n } else {\n nextPath = tabs[0];\n }\n break;\n }\n }\n bottomGroup.tabs.setCurrent(nextPath);\n $(\".bottom-window-group .\" + nextPath).focus();\n\n event.preventDefault();\n\n return false;\n }\n\n if (editors.data.length > 1) {\n var nextPath = \"\";\n for (var i = 0, ii = editors.data.length; i < ii; i++) {\n var currentId = editors.getCurrentId();\n if (currentId) {\n if (currentId === editors.data[i].id) {\n if (i < ii - 1) {\n nextPath = editors.data[i + 1].id;\n wide.curEditor = editors.data[i + 1].editor;\n } else {\n nextPath = editors.data[0].id;\n wide.curEditor = editors.data[0].editor;\n }\n break;\n }\n }\n }\n\n editors.tabs.setCurrent(nextPath);\n var nextTId = tree.getTIdByPath(nextPath);\n wide.curNode = tree.fileTree.getNodeByTId(nextTId);\n\n tree.fileTree.selectNode(wide.curNode);\n wide.refreshOutline();\n var cursor = wide.curEditor.getCursor();\n $(\".footer .cursor\").text('| ' + (cursor.line + 1) + ':' + (cursor.ch + 1) + ' |');\n wide.curEditor.focus();\n }\n\n event.preventDefault();\n\n return false;\n }\n\n if (event.which === hotKeys.build.which) { // F5 Build\n menu.build();\n event.preventDefault();\n\n return;\n }\n\n if (event.which === hotKeys.buildRun.which) { // F6 Build & Run\n menu.run();\n event.preventDefault();\n\n return;\n }\n\n if (event.ctrlKey === hotKeys.goFile.ctrlKey\n && event.altKey === hotKeys.goFile.altKey\n && event.shiftKey === hotKeys.goFile.shiftKey\n && event.which === hotKeys.goFile.which) { // Shift-Alt-O 跳转到文件\n $(\"#dialogGoFilePrompt\").dialog(\"open\");\n }\n });\n },\n init: function () {\n this._bindFileTree();\n this._bindOutput();\n this._bindDocument();\n }\n};","/*\n * Copyright (c) 2014-2016, b3log.org & hacpai.com\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * @file bottomGroup.js\n *\n * @author Liyuan Li\n * @author Liang Ding\n * @version 1.1.0.1, Dec 8, 2015\n */\nvar bottomGroup = {\n tabs: undefined,\n searchTab: undefined,\n init: function () {\n this._initTabs();\n this._initFrame();\n\n $('.bottom-window-group .output').click(function () {\n $(this).focus();\n });\n\n $('.bottom-window-group .output').on('click', '.path', function (event) {\n var $path = $(this),\n tId = tree.getTIdByPath($path.data(\"path\"));\n tree.openFile(tree.fileTree.getNodeByTId(tId),\n CodeMirror.Pos($path.data(\"line\") - 1, $path.data(\"column\") - 1));\n event.preventDefault();\n return false;\n });\n },\n _initFrame: function () {\n $(\".bottom-window-group .output\").parent().mouseup(function (event) {\n event.stopPropagation();\n\n if (event.button === 0) { // 左键\n $(\".bottom-window-group .frame\").hide();\n return;\n }\n\n // event.button === 2 右键\n var left = event.screenX,\n $it = $(this);\n if ($(\".side\").css(\"left\") === \"auto\" || $(\".side\").css(\"left\") === \"0px\") {\n left = event.screenX - $(\".side\").width();\n }\n $(\".bottom-window-group .frame\").show().css({\n \"left\": left + \"px\",\n \"top\": (event.offsetY + event.target.offsetTop - $it.scrollTop() - 10) + \"px\"\n });\n return;\n });\n },\n clear: function (id) {\n $('.bottom-window-group .' + id + ' > div').text('');\n },\n resetOutput: function () {\n this.clear('output');\n bottomGroup.tabs.setCurrent(\"output\");\n windows.flowBottom();\n },\n _initTabs: function () {\n this.tabs = new Tabs({\n id: \".bottom-window-group\",\n clickAfter: function (id) {\n this._$tabsPanel.find(\".\" + id).focus();\n }\n });\n },\n fillOutput: function (data) {\n var $output = $('.bottom-window-group .output');\n\n data = data.replace(/\\n/g, '
    ');\n\n if (-1 !== data.indexOf(\"
    \")) {\n data = Autolinker.link(data);\n }\n\n $output.find(\"div\").html(data);\n $output.parent().scrollTop($output[0].scrollHeight);\n }\n};\n"],"sourceRoot":"/source/"} \ No newline at end of file