forked from expo/troggle
82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
/* Demonstration of embedding CodeMirror in a bigger application. The
|
|
* interface defined here is a mess of prompts and confirms, and
|
|
* should probably not be used in a real project.
|
|
*/
|
|
|
|
function MirrorFrame(place, options) {
|
|
this.home = document.createElement("DIV");
|
|
if (place.appendChild)
|
|
place.appendChild(this.home);
|
|
else
|
|
place(this.home);
|
|
|
|
var self = this;
|
|
function makeButton(name, action) {
|
|
var button = document.createElement("INPUT");
|
|
button.type = "button";
|
|
button.value = name;
|
|
self.home.appendChild(button);
|
|
button.onclick = function(){self[action].call(self);};
|
|
}
|
|
|
|
makeButton("Search", "search");
|
|
makeButton("Replace", "replace");
|
|
makeButton("Current line", "line");
|
|
makeButton("Jump to line", "jump");
|
|
makeButton("Insert constructor", "macro");
|
|
makeButton("Indent all", "reindent");
|
|
|
|
this.mirror = new CodeMirror(this.home, options);
|
|
}
|
|
|
|
MirrorFrame.prototype = {
|
|
search: function() {
|
|
var text = prompt("Enter search term:", "");
|
|
if (!text) return;
|
|
|
|
var first = true;
|
|
do {
|
|
var cursor = this.mirror.getSearchCursor(text, first);
|
|
first = false;
|
|
while (cursor.findNext()) {
|
|
cursor.select();
|
|
if (!confirm("Search again?"))
|
|
return;
|
|
}
|
|
} while (confirm("End of document reached. Start over?"));
|
|
},
|
|
|
|
replace: function() {
|
|
// This is a replace-all, but it is possible to implement a
|
|
// prompting replace.
|
|
var from = prompt("Enter search string:", ""), to;
|
|
if (from) to = prompt("What should it be replaced with?", "");
|
|
if (to == null) return;
|
|
|
|
var cursor = this.mirror.getSearchCursor(from, false);
|
|
while (cursor.findNext())
|
|
cursor.replace(to);
|
|
},
|
|
|
|
jump: function() {
|
|
var line = prompt("Jump to line:", "");
|
|
if (line && !isNaN(Number(line)))
|
|
this.mirror.jumpToLine(Number(line));
|
|
},
|
|
|
|
line: function() {
|
|
alert("The cursor is currently at line " + this.mirror.currentLine());
|
|
this.mirror.focus();
|
|
},
|
|
|
|
macro: function() {
|
|
var name = prompt("Name your constructor:", "");
|
|
if (name)
|
|
this.mirror.replaceSelection("function " + name + "() {\n \n}\n\n" + name + ".prototype = {\n \n};\n");
|
|
},
|
|
|
|
reindent: function() {
|
|
this.mirror.reindent();
|
|
}
|
|
};
|