From 2a93778df7d2244723a401382c0ccf6803c77a87 Mon Sep 17 00:00:00 2001 From: Matt Pass Date: Tue, 9 Oct 2012 07:49:03 +0100 Subject: [PATCH] First sort of file into logical sections --- lib/coder.js | 1622 ++++++++++++++++++++++++++------------------------ 1 file changed, 830 insertions(+), 792 deletions(-) diff --git a/lib/coder.js b/lib/coder.js index 72a6b0d..b846c47 100644 --- a/lib/coder.js +++ b/lib/coder.js @@ -1,4 +1,9 @@ var ICEcoder = { + +// ============== +// INIT +// ============== + // Define settings filesW: 250, // Initial width of the files pane minFilesW: 14, // Min width of the files pane @@ -62,6 +67,10 @@ var ICEcoder = { top.ICEcoder.ready = true; }, +// ============== +// LAYOUT +// ============== + // Set our layout according to the browser size setLayout: function(dontSetEditor) { var winW, winH, headerH, footerH, accountH, tabsBarH, findBarH; @@ -91,186 +100,6 @@ var ICEcoder = { } }, - // Clean up our loaded code - contentCleanUp: function() { - var fileName, cM, content; - - // If it's not a JS, CoffeeScript Ruby, CSS or LESS file, replace our temp value - fileName = ICEcoder.openFiles[ICEcoder.selectedTab-1]; - if (["js","coffee","rb","css","less"].indexOf(fileName.split(".")[1])<0) { - cM = ICEcoder.getcMInstance(); - content = cM.getValue(); - content = content.replace(//g,''); - - // Then set the content in the editor & clear the history - cM.setValue(content); - cM.clearHistory(); - } - }, - - // Work out the nesting depth location on demand and update our display if required - getNestLocation: function(updateNestDisplay) { - var cM, nestCheck, state, cx, startPos, fileName; - - cM = ICEcoder.getcMInstance(); - nestCheck = cM.getValue(); - - // Set up array to store nest data - state = cM.getTokenAt(cM.getCursor()).state; - if ("undefined" != typeof state.curState) { - ICEcoder.htmlTagArray = []; - for (cx = state.curState.context; cx; cx = cx.prev) { - ICEcoder.htmlTagArray.unshift(cx.tagName); - } - } - ICEcoder.tagString = ICEcoder.htmlTagArray[ICEcoder.htmlTagArray.length-1]; - if (ICEcoder.caretLocType=="JavaScript") { - ICEcoder.tagString = "script"; - } - - // Now we've built up our nest depth array, if we're due to show it in the display - if (updateNestDisplay && !top.ICEcoder.dontUpdateNest) { - // Clear the display - ICEcoder.nestDisplay.innerHTML = ""; - if ("undefined" != typeof ICEcoder.openFiles[ICEcoder.selectedTab-1]) { - fileName = ICEcoder.openFiles[ICEcoder.selectedTab-1]; - if (["js","coffee","rb","css","less"].indexOf(fileName.split(".")[1])<0 && - (nestCheck.indexOf("include(")==-1)&&(nestCheck.indexOf("include_once(")==-1)&& - (nestCheck.indexOf("-1||nestCheck.indexOf("-1)) { - - // Then for all the array items, output as the nest display - for (var i=0;i'+ICEcoder.htmlTagArray[i]+''; - if(i0 - ? "#b00" : "rgba(255,255,255,0.3)"; - } - tColor = i==selectedTab ? "#000" : "#fff"; - if ("undefined" != typeof top.ICEcoder.openFiles[i-1] && top.ICEcoder.openFiles[i-1] != "/[NEW]") { - fileLink = top.ICEcoder.filesFrame.contentWindow.document.getElementById(top.ICEcoder.openFiles[i-1].replace(/\//g,"|")); - if (fileLink) {fileLink.style.backgroundColor = i==selectedTab ? "#49d" : "rgba(255,255,255,0.15)";}; - } - document.getElementById('tab'+i).style.color = tColor; - bgVPos = i==selectedTab ? -22 : 0; - document.getElementById('tab'+i).style.backgroundPosition = "0 "+bgVPos+"px"; - } - top.ICEcoder.fMIconVis('fMSave',ICEcoder.changedContent[selectedTab-1]==1 ? 1 : 0.3); - }, + // Clean up our loaded code + contentCleanUp: function() { + var fileName, cM, content; - // Starts a new file by setting a few vars & creating a new cM instance - newTab: function() { - var cM; - - ICEcoder.cMInstances.push(ICEcoder.nextcMInstance); - ICEcoder.selectedTab = ICEcoder.cMInstances.length; - ICEcoder.showHide('show',ICEcoder.content); - ICEcoder.content.contentWindow.createNewCMInstance(ICEcoder.nextcMInstance); - ICEcoder.setLayout(); - - ICEcoder.thisFileFolderType='file'; - ICEcoder.thisFileFolderLink='/[NEW]'; - ICEcoder.openFile(); - - cM = ICEcoder.getcMInstance('new'); - ICEcoder.switchTab(ICEcoder.openFiles.length); - - cM.setLineClass(ICEcoder['cMActiveLine'+ICEcoder.selectedTab], null); - ICEcoder['cMActiveLine'+ICEcoder.selectedTab] = cM.setLineClass(0, "cm-s-activeLine"); - ICEcoder.nextcMInstance++; - }, - - // Create a new tab for a file - createNewTab: function() { - var closeTabLink; - - // Push new file into array - top.ICEcoder.openFiles.push(top.ICEcoder.shortURL); - - // Setup a new tab - closeTabLink = ''; - top.document.getElementById('tab'+(top.ICEcoder.openFiles.length)).style.display = "inline-block"; - top.document.getElementById('tab'+(top.ICEcoder.openFiles.length)).innerHTML = top.ICEcoder.openFiles[top.ICEcoder.openFiles.length-1] + " " + closeTabLink; - - // Highlight it and state it's selected - top.ICEcoder.redoTabHighlight(top.ICEcoder.openFiles.length); - top.ICEcoder.selectedTab=top.ICEcoder.openFiles.length; - - // Add a new value ready to indicate if this content has been changed - top.ICEcoder.changedContent.push(0); - - top.ICEcoder.setPreviousFiles(); - }, - - // Cycle to next tab - nextTab: function() { - var goToTab; - - goToTab = top.ICEcoder.selectedTab+1 <= top.ICEcoder.openFiles.length ? top.ICEcoder.selectedTab+1 : 1; - top.ICEcoder.switchTab(goToTab,'noFocus'); - }, - - // Cycle to next tab - previousTab: function() { - var goToTab; - - goToTab = top.ICEcoder.selectedTab-1 >= 1 ? top.ICEcoder.selectedTab-1 : top.ICEcoder.openFiles.length; - top.ICEcoder.switchTab(goToTab,'noFocus'); - }, - - // Create a new tab for a file - renameTab: function(tabNum,newName) { - var closeTabLink; - - // Push new file into array - top.ICEcoder.openFiles[tabNum-1] = newName; - - // Setup a new tab - closeTabLink = ''; - top.document.getElementById('tab'+tabNum).innerHTML = top.ICEcoder.openFiles[tabNum-1] + " " + closeTabLink; - }, - - // Indicate if the nesting structure of the code is OK - updateNestingIndicator: function () { - var cM, nestOK, fileName; - - cM = ICEcoder.getcMInstance(); - nestOK = true; + // If it's not a JS, CoffeeScript Ruby, CSS or LESS file, replace our temp value fileName = ICEcoder.openFiles[ICEcoder.selectedTab-1]; - if (cM && fileName && ["js","coffee","rb","css","less"].indexOf(fileName.split(".")[1])==-1) { - nestOK = cM.getTokenAt({line:cM.lineCount(),ch:cM.lineInfo(cM.lineCount()-1).text.length}).className != "error" ? true : false; + if (["js","coffee","rb","css","less"].indexOf(fileName.split(".")[1])<0) { + cM = ICEcoder.getcMInstance(); + content = cM.getValue(); + content = content.replace(//g,''); + + // Then set the content in the editor & clear the history + cM.setValue(content); + cM.clearHistory(); } - ICEcoder.nestValid.style.backgroundColor = nestOK ? "#0b0" : "#f00"; - ICEcoder.nestValid.innerHTML = nestOK ? "Nesting OK" : "Nesting Broken"; }, - // Get the caret position on demand - getCaretPosition: function() { - var cM, content, line, char, charPos, charCount; + // Move current line up/down + moveLine: function(dir) { + var cM, line, swapLineNo, swapLine; - cM = ICEcoder.getcMInstance(); - content = cM.getValue(); + cM = top.ICEcoder.getcMInstance(); line = cM.getCursor().line; - char = cM.getCursor().ch; - charPos = 0; - for (var i=0;i0) {swapLineNo = line-1} + if (dir=="down" && linecaretChunk.lastIndexOf("")&&caretLocType=="Unknown") {caretLocType = "JavaScript"}; - if (caretChunk.lastIndexOf("caretChunk.lastIndexOf("?>")&&caretLocType=="Unknown") {caretLocType = "PHP"}; - if (caretChunk.lastIndexOf("<%")>caretChunk.lastIndexOf("%>")&&caretLocType=="Unknown") {caretLocType = "Ruby"}; - if (caretChunk.lastIndexOf("<")>caretChunk.lastIndexOf(">")&&caretLocType=="Unknown") {caretLocType = "HTML"}; - if (caretLocType=="Unknown") {caretLocType = "Content"}; - fileName = ICEcoder.openFiles[ICEcoder.selectedTab-1]; - if (fileName.indexOf(".js")>0) {caretLocType="JavaScript"}; - if (fileName.indexOf(".coffee")>0) {caretLocType="CoffeeScript"}; - if (fileName.indexOf(".rb")>0) {caretLocType="Ruby"}; - if (fileName.indexOf(".css")>0) {caretLocType="CSS"}; - if (fileName.indexOf(".less")>0) {caretLocType="LESS"}; - - ICEcoder.caretLocType = caretLocType; - - // If we're in a JS, CoffeeScript PHP or Ruby code block, add that to the nest display - if (["JavaScript","CoffeeScript","PHP","Ruby"].indexOf(caretLocType)>-1) { - ICEcoder.nestDisplay.innerHTML += " > " + caretLocType; + if (fileName) { + fileName.indexOf('.js')>0 ? cM.setOption("mode","javascript") + : fileName.indexOf('.coffee')>0 ? cM.setOption("mode","coffeescript") + : fileName.indexOf('.rb')>0 ? cM.setOption("mode","ruby") + : fileName.indexOf('.css')>0 ? cM.setOption("mode","css") + : fileName.indexOf('.less')>0 ? cM.setOption("mode","less") + : cM.setOption("mode","application/x-httpd-php"); } }, - // Alter array indicating which files have changed - redoChangedContent: function(evt) { - var key; - - key = evt.keyCode ? evt.keyCode : evt.which ? evt.which : evt.charCode; - // Exclude a few keys such as Escape... - if (top.ICEcoder.ctrlKeyDown==false && key!=27 && key!=20 && (key<16||key>19) && (key<37||key>40) && (key!=144||key!=145) && (key!=44||key!=45) && (key<33||key>36) && (key!=91||key!=92) && (key<112||key>123)) { - ICEcoder.changedContent[ICEcoder.selectedTab-1] = 1; - ICEcoder.redoTabHighlight(ICEcoder.selectedTab); - } - }, - - // Close the tab upon request - closeTab: function(closeTabNum) { - var cM, okToRemove, closeFileName; + // Comment or uncomment line on keypress + lineCommentToggle: function() { + var cM, cursorPos, linePos, lineContent, lCLen, adjustCursor, startLine, endLine; cM = ICEcoder.getcMInstance(); - okToRemove = true; - if (ICEcoder.changedContent[closeTabNum-1]==1) { - okToRemove = top.ICEcoder.ask('You have made changes.\n\nAre you sure you want to close without saving?'); - } + cursorPos = cM.getCursor().ch; + linePos = cM.getCursor().line; + lineContent = cM.getLine(linePos); + lCLen = lineContent.length; + adjustCursor = 3; - if (okToRemove) { - // Get the filename of tab we're closing - closeFileName = top.ICEcoder.openFiles[closeTabNum-1]; - - // recursively copy over all tabs & data from the tab to the right, if there is one - for (var i=closeTabNum;i0 ? ICEcoder.selectedTab-=1 : ICEcoder.selectedTab = 0; - } - if (ICEcoder.openFiles.length>0 && ICEcoder.selectedTab==0) {ICEcoder.selectedTab=1}; - - // grey out the view icon - if (ICEcoder.openFiles.length==0) { - top.ICEcoder.fMIconVis('fMView',0.3); + if (["JavaScript","CoffeeScript","PHP","Ruby","CSS"].indexOf(ICEcoder.caretLocType)>-1) { + if (cM.somethingSelected()) { + if (ICEcoder.caretLocType=="Ruby") { + startLine = cM.getCursor(true).line; + endLine = cM.getCursor().line; + for (var i=startLine; i<=endLine; i++) { + cM.setLine(i, cM.getLine(i).slice(0,2)!="# " + ? "# " + cM.getLine(i) + : cM.getLine(i).slice(2,cM.getLine(i).length)); + } + } else { + cM.replaceSelection(cM.getSelection().slice(0,2)!="/*" + ? "/*" + cM.getSelection() + "*/" + : cM.getSelection().slice(2,cM.getSelection().length-2)); + } } else { - // Switch the mode & the tab - ICEcoder.switchMode(); - ICEcoder.switchTab(ICEcoder.selectedTab); + if (["CoffeeScript","CSS"].indexOf(ICEcoder.caretLocType)>-1) { + cM.setLine(linePos, lineContent.slice(0,3)!="/* " + ? "/* " + lineContent + " */" + : lineContent.slice(3,lCLen).slice(0,lCLen-5)); + if (lineContent.slice(0,3)=="/* ") {adjustCursor = -adjustCursor}; + } else if (ICEcoder.caretLocType=="Ruby") { + cM.setLine(linePos, lineContent.slice(0,2)!="# " + ? "# " + lineContent + : lineContent.slice(2,lCLen)); + if (lineContent.slice(0,2)=="# ") {adjustCursor = -adjustCursor}; + } else { + cM.setLine(linePos, lineContent.slice(0,3)!="// " + ? "// " + lineContent + : lineContent.slice(3,lCLen)); + if (lineContent.slice(0,3)=="// ") {adjustCursor = -adjustCursor}; + } + } + } else { + if (cM.somethingSelected()) { + cM.replaceSelection(cM.getSelection().slice(0,4)!="" + : cM.getSelection().slice(4,cM.getSelection().length-5)); + } else { + cM.setLine(linePos, lineContent.slice(0,4)!="" + : lineContent.slice(4,lCLen).slice(0,lCLen-9)); + adjustCursor = lineContent.slice(0,4)=="" - : cM.getSelection().slice(4,cM.getSelection().length-5)); - } else { - cM.setLine(linePos, lineContent.slice(0,4)!="" - : lineContent.slice(4,lCLen).slice(0,lCLen-9)); - adjustCursor = lineContent.slice(0,4)=="