You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.4 KiB
71 lines
2.4 KiB
ace.define("ace/ext/spellcheck",["require","exports","module","ace/lib/event","ace/editor","ace/config"], function(require, exports, module) { |
|
"use strict"; |
|
var event = require("../lib/event"); |
|
|
|
exports.contextMenuHandler = function(e){ |
|
var host = e.target; |
|
var text = host.textInput.getElement(); |
|
if (!host.selection.isEmpty()) |
|
return; |
|
var c = host.getCursorPosition(); |
|
var r = host.session.getWordRange(c.row, c.column); |
|
var w = host.session.getTextRange(r); |
|
|
|
host.session.tokenRe.lastIndex = 0; |
|
if (!host.session.tokenRe.test(w)) |
|
return; |
|
var PLACEHOLDER = "\x01\x01"; |
|
var value = w + " " + PLACEHOLDER; |
|
text.value = value; |
|
text.setSelectionRange(w.length, w.length + 1); |
|
text.setSelectionRange(0, 0); |
|
text.setSelectionRange(0, w.length); |
|
|
|
var afterKeydown = false; |
|
event.addListener(text, "keydown", function onKeydown() { |
|
event.removeListener(text, "keydown", onKeydown); |
|
afterKeydown = true; |
|
}); |
|
|
|
host.textInput.setInputHandler(function(newVal) { |
|
console.log(newVal , value, text.selectionStart, text.selectionEnd) |
|
if (newVal == value) |
|
return ''; |
|
if (newVal.lastIndexOf(value, 0) === 0) |
|
return newVal.slice(value.length); |
|
if (newVal.substr(text.selectionEnd) == value) |
|
return newVal.slice(0, -value.length); |
|
if (newVal.slice(-2) == PLACEHOLDER) { |
|
var val = newVal.slice(0, -2); |
|
if (val.slice(-1) == " ") { |
|
if (afterKeydown) |
|
return val.substring(0, text.selectionEnd); |
|
val = val.slice(0, -1); |
|
host.session.replace(r, val); |
|
return ""; |
|
} |
|
} |
|
|
|
return newVal; |
|
}); |
|
}; |
|
var Editor = require("../editor").Editor; |
|
require("../config").defineOptions(Editor.prototype, "editor", { |
|
spellcheck: { |
|
set: function(val) { |
|
var text = this.textInput.getElement(); |
|
text.spellcheck = !!val; |
|
if (!val) |
|
this.removeListener("nativecontextmenu", exports.contextMenuHandler); |
|
else |
|
this.on("nativecontextmenu", exports.contextMenuHandler); |
|
}, |
|
value: true |
|
} |
|
}); |
|
|
|
}); |
|
(function() { |
|
ace.require(["ace/ext/spellcheck"], function() {}); |
|
})(); |
|
|