Christian has uploaded a new change for review.
https://gerrit.wikimedia.org/r/56514
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(+), 5 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/14/56514/1
diff --git a/modules/ve/ce/nodes/ve.ce.AlienNode.js
b/modules/ve/ce/nodes/ve.ce.AlienNode.js
index 4111a65..08240e6 100644
--- a/modules/ve/ce/nodes/ve.ce.AlienNode.js
+++ b/modules/ve/ce/nodes/ve.ce.AlienNode.js
@@ -22,7 +22,7 @@
// 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..87cefae 100644
--- a/modules/ve/ce/ve.ce.Surface.js
+++ b/modules/ve/ce/ve.ce.Surface.js
@@ -263,10 +263,24 @@
if ( this.inIme === true ) {
return;
}
- if ( $.browser.msie === true && e.which === 229 ) {
- this.inIme = true;
- this.handleInsertion();
- return;
+ if ( $.browser.msie === true ) {
+ // Aliens/Entities
+ var selection = this.model.getSelection(),
+ prevNode =
this.model.getDocument().getDocumentNode().getNodeFromOffset( selection.start -
1 );
+
+ if (prevNode.type == 'text' ) {
+ prevNode = prevNode.getParent();
+ }
+ if ( !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: newchange
Gerrit-Change-Id: I952488510f32b096b27e8e55d4afc7df930e0072
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Christian <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits