.clickAt() focuses the editable field
Also, still .preventDefault() even if .ignoreNextMousedown()-ing,
otherwise 300ms after a touch tap when the legacy mouse events fire on
the container span (because the container span has a 'mousedown' event
handler [1]), "clicking" on the container span, it would blur the
textarea (just like a real click would unless you .preventDefault()).
[1]:
> A clickable element is a link, form element, image map area, or any
> other element with mousemove, mousedown, mouseup, or onclick handlers.
https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
diff --git a/src/publicapi.js b/src/publicapi.js
index 162e438..f5df089 100644
--- a/src/publicapi.js
+++ b/src/publicapi.js
@@ -145,6 +145,7 @@
var ctrlr = this.__controller, root = ctrlr.root;
if (!jQuery.contains(root.jQ[0], target)) target = root.jQ[0];
ctrlr.seek($(target), clientX + pageXOffset, clientY + pageYOffset);
+ if (ctrlr.blurred) this.focus();
return this;
};
_.ignoreNextMousedown = function(fn) {
diff --git a/src/services/mouse.js b/src/services/mouse.js
index acdf7a7..b2b543a 100644
--- a/src/services/mouse.js
+++ b/src/services/mouse.js
@@ -13,6 +13,9 @@
var ctrlr = root.controller, cursor = ctrlr.cursor, blink = cursor.blink;
var textareaSpan = ctrlr.textareaSpan, textarea = ctrlr.textarea;
+ e.preventDefault(); // doesn't work in IE≤8, but it's a one-line fix:
+ e.target.unselectable = true; // http://jsbin.com/yagekiji/1
+
if (cursor.options.ignoreNextMousedown(e)) return;
else cursor.options.ignoreNextMousedown = noop;
@@ -46,8 +49,6 @@
if (!ctrlr.editable) rootjQ.prepend(textareaSpan);
textarea.focus();
}
- e.preventDefault(); // doesn't work in IE≤8, but it's a one-line fix:
- e.target.unselectable = true; // http://jsbin.com/yagekiji/1
cursor.blink = noop;
ctrlr.seek($(e.target), e.pageX, e.pageY).cursor.startSelection();
diff --git a/test/unit/publicapi.test.js b/test/unit/publicapi.test.js
index 4a81f74..9264c3e 100644
--- a/test/unit/publicapi.test.js
+++ b/test/unit/publicapi.test.js
@@ -779,7 +779,9 @@
var clientY = box.top + 40;
var target = document.elementFromPoint(clientX, clientY);
+ assert.equal(document.activeElement, document.body);
mq.clickAt(clientX, clientY, target).write('x');
+ assert.equal(document.activeElement, $(mq.el()).find('textarea')[0]);
assert.equal(mq.latex(), "\\frac{mmmm}{mmxmm}");
@@ -801,7 +803,9 @@
var clientX = box.left + 30;
var clientY = box.top + 40;
+ assert.equal(document.activeElement, document.body);
mq.clickAt(clientX, clientY).write('x');
+ assert.equal(document.activeElement, $(mq.el()).find('textarea')[0]);
assert.equal(mq.latex(), "\\frac{mmmm}{mmxmm}");