Files
edx-platform/common/static/js/vendor/CodeMirror/accessible.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) {