jenkins-bot has submitted this change and it was merged.
Change subject: Typing support after Aliens and Entities for IE
......................................................................
Typing support after Aliens and Entities for IE
When the cursor is between ce="false" elements and an editable next
sibling, IE often sets the anchorNode to be the ce="false" element
(or text node within). This change returns aliens to ce="false"
(abandoning the former true within true IE trick), and ensures that
the cursor is in the right place on keydown by programmatically
setting the selection.
Change-Id: I952488510f32b096b27e8e55d4afc7df930e0072
---
M modules/ve/ce/nodes/ve.ce.AlienNode.js
M modules/ve/ce/ve.ce.Surface.js
M modules/ve/ce/ve.ce.js
3 files changed, 30 insertions(+), 8 deletions(-)
Approvals:
Inez: Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/ve/ce/nodes/ve.ce.AlienNode.js
b/modules/ve/ce/nodes/ve.ce.AlienNode.js
index 4111a65..47d0c0e 100644
--- a/modules/ve/ce/nodes/ve.ce.AlienNode.js
+++ b/modules/ve/ce/nodes/ve.ce.AlienNode.js
@@ -19,10 +19,7 @@
// DOM Changes
this.$.addClass( 've-ce-alienNode' );
-
- // ce="false" inside of ce="true" does not prevent editing in IE
- // Strangely enough, ce="true" inside of ce="true" does.
- this.$.attr( 'contenteditable', !!$.browser.msie );
+ this.$.attr( 'contenteditable', false );
// Events
this.model.addListenerMethod( this, 'update', 'onUpdate' );
diff --git a/modules/ve/ce/ve.ce.Surface.js b/modules/ve/ce/ve.ce.Surface.js
index 4471b36..9dd8bd2 100644
--- a/modules/ve/ce/ve.ce.Surface.js
+++ b/modules/ve/ce/ve.ce.Surface.js
@@ -259,14 +259,28 @@
* @emits selectionStart
*/
ve.ce.Surface.prototype.onDocumentKeyDown = function ( e ) {
+ var selection, prevNode;
+
// Ignore keydowns while in IME mode but do not preventDefault them.
if ( this.inIme === true ) {
return;
}
- if ( $.browser.msie === true && e.which === 229 ) {
- this.inIme = true;
- this.handleInsertion();
- return;
+ if ( $.browser.msie === true ) {
+ // Aliens/Entities
+ selection = this.model.getSelection();
+ if ( selection.start !== 0 && selection.isCollapsed() ) {
+ prevNode =
this.model.getDocument().getDocumentNode().getNodeFromOffset( selection.start -
1 );
+ if ( !prevNode.canHaveChildren() &&
!prevNode.canContainContent() ) {
+ this.model.change( null, new ve.Range(
selection.start ) );
+ }
+ }
+
+ // IME
+ if ( e.which === 229 ) {
+ this.inIme = true;
+ this.handleInsertion();
+ return;
+ }
}
if ( ve.ce.isArrowKey( e.keyCode ) ) {
// Detect start of selecting using shift+arrow keys.
diff --git a/modules/ve/ce/ve.ce.js b/modules/ve/ce/ve.ce.js
index ab6644c..e551bf4 100644
--- a/modules/ve/ce/ve.ce.js
+++ b/modules/ve/ce/ve.ce.js
@@ -135,6 +135,11 @@
);
nodeModel = $node.data( 'node' ).getModel();
+ // IE sometimes puts the cursor in a text node inside ce="false". BAD!
+ if ( $node[0].contentEditable === 'false' ) {
+ return nodeModel.getOffset() + nodeModel.getOuterLength();
+ }
+
if ( ! $node.hasClass( 've-ce-branchNode' ) ) {
return nodeModel.getOffset();
}
@@ -204,6 +209,12 @@
}
}
+ // IE sometimes puts the cursor in a text node inside ce="false". BAD!
+ if ( domNode.contentEditable === 'false' ) {
+ nodeModel = $domNode.data( 'node' ).getModel();
+ return nodeModel.getOffset() + nodeModel.getOuterLength();
+ }
+
if ( domOffset === 0 ) {
node = $domNode.data( 'node' );
if ( node ) {
--
To view, visit https://gerrit.wikimedia.org/r/56514
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I952488510f32b096b27e8e55d4afc7df930e0072
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Christian <[email protected]>
Gerrit-Reviewer: Inez <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits