73 lines
3.1 KiB
Diff
73 lines
3.1 KiB
Diff
diff --git a/codemirror-accessible.js b/codemirror-accessible.js
|
|
index 1d0d996..bd37cfb 100644
|
|
--- a/codemirror-accessible.js
|
|
+++ b/codemirror-accessible.js
|
|
@@ -1443,7 +1443,7 @@ window.CodeMirror = (function() {
|
|
// supported or compatible enough yet to rely on.)
|
|
function readInput(cm) {
|
|
var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;
|
|
- if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.options.disableInput) return false;
|
|
+ if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.options.disableInput || cm.state.accessibleTextareaWaiting) return false;
|
|
var text = input.value;
|
|
if (text == prevInput && posEq(sel.from, sel.to)) return false;
|
|
if (ie && !ie_lt9 && cm.display.inputHasSelection === text) {
|
|
@@ -1480,13 +1480,13 @@ window.CodeMirror = (function() {
|
|
var minimal, selected, doc = cm.doc;
|
|
if (!posEq(doc.sel.from, doc.sel.to)) {
|
|
cm.display.prevInput = "";
|
|
- minimal = hasCopyEvent &&
|
|
+ minimal = false && hasCopyEvent &&
|
|
(doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000);
|
|
var content = minimal ? "-" : selected || cm.getSelection();
|
|
cm.display.input.value = content;
|
|
if (cm.state.focused) selectInput(cm.display.input);
|
|
if (ie && !ie_lt9) cm.display.inputHasSelection = content;
|
|
- } else if (user) {
|
|
+ } else if (user && !cm.state.accessibleTextareaWaiting) {
|
|
cm.display.prevInput = cm.display.input.value = "";
|
|
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
|
}
|
|
@@ -2069,6 +2069,12 @@ window.CodeMirror = (function() {
|
|
cm.doc.sel.shift = code == 16 || e.shiftKey;
|
|
// First give onKeyEvent option a chance to handle this.
|
|
var handled = handleKeyBinding(cm, e);
|
|
+
|
|
+ // On text input if value was temporaritly set for a screenreader, clear it out.
|
|
+ if (!handled && cm.state.accessibleTextareaWaiting) {
|
|
+ clearAccessibleTextarea(cm);
|
|
+ }
|
|
+
|
|
if (opera) {
|
|
lastStoppedKey = handled ? code : null;
|
|
// Opera has no cut event... we try to at least catch the key combo
|
|
@@ -2473,6 +2479,29 @@ window.CodeMirror = (function() {
|
|
setSelection(doc, pos, other || pos, bias);
|
|
}
|
|
if (doc.cm) doc.cm.curOp.userSelChange = true;
|
|
+
|
|
+ if (doc.cm) {
|
|
+ var from = doc.sel.from;
|
|
+ var to = doc.sel.to;
|
|
+
|
|
+ if (posEq(from, to) && doc.cm.display.input.setSelectionRange) {
|
|
+ clearTimeout(doc.cm.state.accessibleTextareaTimeout);
|
|
+ doc.cm.state.accessibleTextareaWaiting = true;
|
|
+
|
|
+ doc.cm.display.input.value = doc.getLine(from.line) + "\n";
|
|
+ doc.cm.display.input.setSelectionRange(from.ch, from.ch);
|
|
+
|
|
+ doc.cm.state.accessibleTextareaTimeout = setTimeout(function() {
|
|
+ clearAccessibleTextarea(doc.cm);
|
|
+ }, 80);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ function clearAccessibleTextarea(cm) {
|
|
+ clearTimeout(cm.state.accessibleTextareaTimeout);
|
|
+ cm.state.accessibleTextareaWaiting = false;
|
|
+ resetInput(cm, true);
|
|
}
|
|
|
|
function filterSelectionChange(doc, anchor, head) {
|