diff --git a/editor.php b/editor.php
index b89e96b..5a22aef 100644
--- a/editor.php
+++ b/editor.php
@@ -1,220 +1,223 @@
-
-
-
-
-
-ICEcoder v editor
-
-
-/lib/codemirror.css">
-
-
-">
-
-
-
-
-
-
-
-
server
- Server name, OS & IP:
-
- Root:
-
- ICEcoder root:
-
- PHP version:
-
- Date & time:
-
-
-
-
-
-
-
your device
- Browser:
-
- Your IP:
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+ICEcoder v editor
+
+
+/lib/codemirror.css">
+
+
+">
+
+
+
+
+
+
+
+
server
+ Server name, OS & IP:
+
+ Root:
+
+ ICEcoder root:
+
+ PHP version:
+
+ Date & time:
+
+
+
+
+
+
+
your device
+ Browser:
+
+ Your IP:
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/ice-coder.js b/lib/ice-coder.js
index c9e7daf..09a20c8 100644
--- a/lib/ice-coder.js
+++ b/lib/ice-coder.js
@@ -1,1835 +1,1905 @@
-var ICEcoder = {
-
-// ==============
-// INIT
-// ==============
-
- // Define settings
- filesW: 250, // Initial width of the files pane
- minFilesW: 14, // Min width of the files pane
- maxFilesW: 250, // Max width of the files pane
- selectedTab: 0, // The tab that's currently selected
- changedContent: [], // Binary array to indicate which tabs have changed
- ctrlKeyDown: false, // Indicates if CTRL keydown
- shiftKeyDown: false, // Indicates if Shift keydown
- delKeyDown: false, // Indicates if DEL keydown
- canSwitchTabs: true, // Stops switching of tabs when trying to close
- openFiles: [], // Array of open file URLs
- openFileMDTs: [], // Array of open file modification datetimes
- cMInstances: [], // List of CodeMirror instance no's
- nextcMInstance: 1, // Next available CodeMirror instance no
- selectedFiles: [], // Array of selected files
- findMode: false, // States if we're in find/replace mode
- lockedNav: true, // Nav is locked or not
- htmlTagArray: [], // Array storing the nest of tags
- codeAssist: true, // Assist user with their coding
- mouseDown: false, // If the mouse is down or not
- draggingFilesW: false, // If we're dragging the file manager width or not
- serverQueueItems: [], // Array of URLs to call in order
- stickyTab: false, // Target variable for the sticky tab window
- pluginIntervalRefs: [], // Array of plugin interval refs
- dragSrcEl: null, // Tab element being dragged
- ready: false, // Indicates if ICEcoder is ready for action
-
- // Don't consider these tags as part of nesting as they're singles, JS, PHP or Ruby code blocks
- tagNestExceptions: ["!DOCTYPE","meta","link","img","br","hr","input","script","?php","?","%"],
-
- // Set our aliases
- initAliases: function() {
- var aliasArray = ["header","files","account","fmLock","filesFrame","editor","tabsBar","findBar","content","footer","nestValid","nestDisplay","charDisplay"];
-
- // Create our ID aliases
- for (var i=0;i ICEcoder.minFilesW+1 ? ICEcoder.filesW -= Math.ceil((ICEcoder.filesW-ICEcoder.minFilesW)/2) : ICEcoder.filesW = ICEcoder.minFilesW;
- }
- if ((expandContract=="expand" && ICEcoder.filesW == ICEcoder.maxFilesW)||(expandContract=="contract" && ICEcoder.filesW == ICEcoder.minFilesW)) {
- clearInterval(ICEcoder.changeFilesInt);
- }
- // Redo the layout to match
- ICEcoder.setLayout();
- },
-
- // Can click-drag file manager width?
- canResizeFilesW: function() {
- // If we have the cursor set we must be able!
- if (top.document.body.style.cursor == "w-resize") {
- // If our mouse is down and we're within a 250-400px range
- if (top.ICEcoder.mouseDown) {
- top.ICEcoder.filesW = top.ICEcoder.maxFilesW = top.ICEcoder.mouseX >=250 && top.ICEcoder.mouseX <= 400
- ? top.ICEcoder.mouseX : top.ICEcoder.mouseX <250 ? 250 : 400;
- // Set various widths based on the new width
- top.ICEcoder.files.style.width = top.ICEcoder.account.style.width = top.ICEcoder.filesFrame.style.width = top.ICEcoder.filesW + "px";
- top.ICEcoder.setLayout();
- top.ICEcoder.draggingFilesW = true;
- }
- } else {
- top.ICEcoder.draggingFilesW = false;
- }
- },
-
- // Lock & unlock the file manager navigation on demand
- lockUnlockNav: function() {
- var lockIcon;
-
- lockIcon = top.document.getElementById('fmLock');
- ICEcoder.lockedNav = ICEcoder.lockedNav ? false : true;
- lockIcon.style.backgroundPosition = ICEcoder.lockedNav ? "-64px -16px" : "-80px -16px";
- },
-
-// ==============
-// EDITOR
-// ==============
-
- // 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();
- }
- },
-
- // Move current line up/down
- moveLine: function(dir) {
- var cM, line, swapLineNo, swapLine;
-
- cM = top.ICEcoder.getcMInstance();
- line = cM.getCursor().line;
- if (dir=="up" && line>0) {swapLineNo = line-1}
- if (dir=="down" && line0 ? 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");
- }
- },
-
- // Comment or uncomment line on keypress
- lineCommentToggle: function() {
- var cM, cursorPos, linePos, lineContent, lCLen, adjustCursor, startLine, endLine;
-
- cM = ICEcoder.getcMInstance();
- cursorPos = cM.getCursor().ch;
- linePos = cM.getCursor().line;
- lineContent = cM.getLine(linePos);
- lCLen = lineContent.length;
- adjustCursor = 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 {
- 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)=="