mirror of
https://github.com/icecoder/ICEcoder.git
synced 2026-03-02 23:03:59 +01:00
Code assist now won't add an end tag if yours starts with a / (ie, it's already an end tag) Also won't add an end tag if yours starts with ? (ie, it's ending a PHP block: ?>) Switched from using the htmlTagArray to determin an end tag, to the tagString var CodeMirror 2.23 handles tabs in a different way, so extraKeys has been set up to handle differently to new default Old code removed related to showing results on clicking (now handled onChange as that's more efficient)
120 lines
5.9 KiB
PHP
120 lines
5.9 KiB
PHP
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<title>CodeMirror 2: ICE Coders Editor of Choice</title>
|
|
<?php include("lib/settings.php");?>
|
|
<link rel="stylesheet" href="<?php echo $codeMirrorDir; ?>/lib/codemirror.css">
|
|
<script src="<?php echo $codeMirrorDir; ?>/lib/codemirror.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/mode/xml/xml.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/mode/javascript/javascript.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/mode/css/css.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/mode/clike/clike.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/mode/php/php.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/lib/util/searchcursor.js"></script>
|
|
<script src="<?php echo $codeMirrorDir; ?>/lib/util/match-highlighter.js"></script>
|
|
<link rel="stylesheet" href="lib/editor.css">
|
|
<style type="text/css">
|
|
.CodeMirror {position: absolute; width: 0px; background-color: #ffffff}
|
|
.CodeMirror-scroll {width: 100px; height: 100px;}
|
|
.cm-s-visible {display: block; top: 0px}
|
|
.cm-s-hidden {display: none; top: 4000px}
|
|
.cm-s-activeLine {background: #002 !important;}
|
|
</style>
|
|
</head>
|
|
|
|
<body onKeyDown="return top.ICEcoder.interceptKeys('content', event);" onKeyUp="top.ICEcoder.resetKeys(event);">
|
|
|
|
<script>
|
|
function createNewCMInstance(num) {window['cM'+num] = CodeMirror(document.body, {
|
|
mode: "application/x-httpd-php",
|
|
theme: "icecoder",
|
|
lineNumbers: true,
|
|
lineWrapping: true,
|
|
indentUnit: 4,
|
|
tabSize: 4,
|
|
indentWithTabs: true,
|
|
electricChars: false,
|
|
onCursorActivity: function() {
|
|
top.ICEcoder.getCaretPosition();
|
|
top.ICEcoder.updateCharDisplay();
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab], null);
|
|
if(!window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].somethingSelected()) {
|
|
top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab] = window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line, "cm-s-activeLine");
|
|
}
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].matchHighlight("CodeMirror-matchhighlight");
|
|
top.ICEcoder.cssColorPreview();
|
|
},
|
|
onChange: function() {
|
|
// If we're not loading the file, it's a change, so update tab
|
|
if (!top.ICEcoder.loadingFile) {
|
|
top.ICEcoder.changedContent[top.ICEcoder.selectedTab-1] = 1;
|
|
top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);
|
|
}
|
|
top.ICEcoder.getCaretPosition();
|
|
top.ICEcoder.updateCharDisplay();
|
|
top.ICEcoder.updateNestingIndicator();
|
|
if (top.ICEcoder.findMode) {
|
|
top.ICEcoder.results.splice(top.ICEcoder.findResult,1);
|
|
top.document.getElementById('results').innerHTML = top.ICEcoder.results.length + " results";
|
|
top.ICEcoder.findMode = false;
|
|
}
|
|
},
|
|
onKeyEvent: function(instance, e) {
|
|
top.ICEcoder.redoChangedContent(event);
|
|
top.ICEcoder.findReplace('find',true);
|
|
top.ICEcoder.getCaretPosition();
|
|
top.ICEcoder.updateCharDisplay();
|
|
tok = window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getTokenAt(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor());
|
|
if (tok.string!=">") {lastString=tok.string};
|
|
if (e.type=="keyup"&&e.keyCode=="16"&&lastKeyCode=="190") {
|
|
canDoEndTag=true;
|
|
for (i=0;i<top.ICEcoder.tagNestExceptions.length;i++) {
|
|
if(top.ICEcoder.tagString!="script" && top.ICEcoder.tagString==top.ICEcoder.tagNestExceptions[i]) {
|
|
canDoEndTag=false;
|
|
}
|
|
}
|
|
if(top.ICEcoder.tagString.slice(0,1)=="/"||top.ICEcoder.tagString.slice(0,1)=="?") {
|
|
canDoEndTag=false;
|
|
}
|
|
fileName = top.ICEcoder.openFiles[top.ICEcoder.selectedTab-1];
|
|
if (!top.ICEcoder.codeAssist||fileName.indexOf(".js")>0||fileName.indexOf(".css")>0) {
|
|
canDoEndTag=false;
|
|
}
|
|
contentType = top.ICEcoder.caretLocType;
|
|
if (canDoEndTag && (contentType!="JavaScript"||(contentType=="JavaScript"&&top.ICEcoder.tagString=="script"))) {
|
|
numTabs = top.ICEcoder.htmlTagArray.length;
|
|
if (top.ICEcoder.htmlTagArray[0]=="html") {numTabs--};
|
|
tabs = "";
|
|
for (i=0;i<numTabs-1;i++) {
|
|
tabs += "\t";
|
|
}
|
|
//endTag = "</" + top.ICEcoder.htmlTagArray[top.ICEcoder.htmlTagArray.length-1] + ">";
|
|
endTag = "</" + top.ICEcoder.tagString + ">";
|
|
if (top.ICEcoder.tagString=="script") {endTag="</"+"script>"};
|
|
if(top.ICEcoder.tagString=="title"||top.ICEcoder.tagString=="a"||top.ICEcoder.tagString=="li"||top.ICEcoder.tagString=="span"||(top.ICEcoder.tagString.slice(0,1)=="h"&&parseInt(top.ICEcoder.tagString.slice(1,2),10)>=1&&parseInt(top.ICEcoder.tagString.slice(1,2),10)<=7)) {
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].replaceSelection(endTag);
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setCursor(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line,window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().ch-top.ICEcoder.tagString.length-3);
|
|
} else if(top.ICEcoder.tagString=="html"||top.ICEcoder.tagString=="head") {
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].replaceSelection("\n\n"+endTag);
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setCursor(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line-1,numTabs);
|
|
} else {
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].replaceSelection("\n"+tabs+"\t\n"+tabs+endTag);
|
|
window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setCursor(window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].getCursor().line-1,numTabs);
|
|
}
|
|
}
|
|
};
|
|
lastKeyCode = e.keyCode;
|
|
},
|
|
extraKeys: {"Tab": "indentMore", "Shift-Tab": "indentLess"}
|
|
});
|
|
|
|
// Now create the active line for this CodeMirror object
|
|
top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab] = window['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(0, "cm-s-activeLine");
|
|
};
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|