jenkins-bot has submitted this change and it was merged.
Change subject: Stop using ve.isMixedIn() to check if a node is focusable
......................................................................
Stop using ve.isMixedIn() to check if a node is focusable
* Moved isNodeFocusable to ve.ce.NodeFactory
* Added isFocusable static property to ve.ce.Node
* Set isFocusable to true on ve.ce.FocusableNode
Change-Id: I3cf666280abdfce55bf9b0710827bb25c40bfd51
---
M modules/ve/ce/ve.ce.Document.js
M modules/ve/ce/ve.ce.FocusableNode.js
M modules/ve/ce/ve.ce.Node.js
M modules/ve/ce/ve.ce.NodeFactory.js
M modules/ve/ce/ve.ce.Surface.js
M modules/ve/dm/ve.dm.NodeFactory.js
6 files changed, 40 insertions(+), 21 deletions(-)
Approvals:
Esanders: Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/ve/ce/ve.ce.Document.js b/modules/ve/ce/ve.ce.Document.js
index 4dc671f..e4da9e6 100644
--- a/modules/ve/ce/ve.ce.Document.js
+++ b/modules/ve/ce/ve.ce.Document.js
@@ -208,14 +208,14 @@
}
if (
this.isOpenElementData( index ) &&
- ve.dm.nodeFactory.isNodeFocusable(
this.getType( index ) )
+ ve.ce.nodeFactory.isNodeFocusable(
this.getType( index ) )
) {
coveredOffset = index + 1;
return true;
}
if (
this.isCloseElementData( index ) &&
- ve.dm.nodeFactory.isNodeFocusable(
this.getType( index ) )
+ ve.ce.nodeFactory.isNodeFocusable(
this.getType( index ) )
) {
coveredOffset = index;
return true;
@@ -252,7 +252,7 @@
}
node = this.documentNode.getNodeFromOffset( range.start + 1 );
- if ( node && ve.dm.nodeFactory.isNodeFocusable( node.type ) ) {
+ if ( node && ve.ce.nodeFactory.isNodeFocusable( node.type ) ) {
if ( node === this.documentNode.getNodeFromOffset( range.end -
1 ) ) {
if ( this.model.data.isContentOffset( range.to ) ||
!!this.getSlugAtOffset( range.to ) ) {
return new ve.Range( direction === 1 ?
range.end : range.start );
diff --git a/modules/ve/ce/ve.ce.FocusableNode.js
b/modules/ve/ce/ve.ce.FocusableNode.js
index 96d0716..5c970ec 100644
--- a/modules/ve/ce/ve.ce.FocusableNode.js
+++ b/modules/ve/ce/ve.ce.FocusableNode.js
@@ -50,6 +50,12 @@
* @event blur
*/
+/* Static Methods */
+
+ve.ce.FocusableNode.static = {};
+
+ve.ce.FocusableNode.static.isFocusable = true;
+
/* Methods */
/**
diff --git a/modules/ve/ce/ve.ce.Node.js b/modules/ve/ce/ve.ce.Node.js
index 93addd9..b9fe88f 100644
--- a/modules/ve/ce/ve.ce.Node.js
+++ b/modules/ve/ce/ve.ce.Node.js
@@ -50,6 +50,19 @@
*/
ve.ce.Node.static.canBeSplit = false;
+/**
+ * Whether this node type can be focused.
+ *
+ * If this is set to true on a node, it should implement:
+ * setFocused( boolean val )
+ * boolean isFocused()
+ *
+ * @static
+ * @property static.isFocusable
+ * @inheritable
+ */
+ve.ce.Node.static.isFocusable = false;
+
/* Methods */
/**
diff --git a/modules/ve/ce/ve.ce.NodeFactory.js
b/modules/ve/ce/ve.ce.NodeFactory.js
index 68971a1..ecf64c6 100644
--- a/modules/ve/ce/ve.ce.NodeFactory.js
+++ b/modules/ve/ce/ve.ce.NodeFactory.js
@@ -37,6 +37,21 @@
throw new Error( 'Unknown node type: ' + type );
};
+/**
+ * Check if the node is focusable.
+ *
+ * @method
+ * @param {string} type Node type
+ * @returns {boolean} Whether the node is focusable
+ * @throws {Error} Unknown node type
+ */
+ve.ce.NodeFactory.prototype.isNodeFocusable = function ( type ) {
+ if ( type in this.registry ) {
+ return this.registry[type].static.isFocusable;
+ }
+ throw new Error( 'Unknown node type: ' + type );
+};
+
/* Initialization */
// TODO: Move instantiation to a different file
diff --git a/modules/ve/ce/ve.ce.Surface.js b/modules/ve/ce/ve.ce.Surface.js
index be9245f..6cc86c4 100644
--- a/modules/ve/ce/ve.ce.Surface.js
+++ b/modules/ve/ce/ve.ce.Surface.js
@@ -929,7 +929,7 @@
// Detect when only a single inline element is selected
if ( !selection.isCollapsed() ) {
start =
this.documentView.getDocumentNode().getNodeFromOffset( selection.start + 1 );
- if ( ve.isMixedIn( start, ve.ce.FocusableNode ) ) {
+ if ( ve.ce.nodeFactory.isNodeFocusable(
start.getModel().getType() ) ) {
end =
this.documentView.getDocumentNode().getNodeFromOffset( selection.end - 1 );
if ( start === end ) {
next = start;
@@ -938,7 +938,7 @@
} else {
// Check we haven't been programmatically placed inside
a focusable node with a collapsed selection
start =
this.documentView.getDocumentNode().getNodeFromOffset( selection.start );
- if ( ve.isMixedIn( start, ve.ce.FocusableNode ) ) {
+ if ( ve.ce.nodeFactory.isNodeFocusable(
start.getModel().getType() ) ) {
next = start;
}
}
@@ -1533,7 +1533,7 @@
// If the user tries to delete a focusable node from a
collapsed selection,
// just select the node and cancel the deletion.
startNode =
this.documentView.getDocumentNode().getNodeFromOffset( offset + 1 );
- if ( ve.isMixedIn( startNode, ve.ce.FocusableNode ) ) {
+ if ( ve.ce.nodeFactory.isNodeFocusable(
startNode.getModel().getType() ) ) {
this.model.change( null,
startNode.getModel().getOuterRange() );
return;
}
diff --git a/modules/ve/dm/ve.dm.NodeFactory.js
b/modules/ve/dm/ve.dm.NodeFactory.js
index b49f190..e0f6d1b 100644
--- a/modules/ve/dm/ve.dm.NodeFactory.js
+++ b/modules/ve/dm/ve.dm.NodeFactory.js
@@ -241,21 +241,6 @@
throw new Error( 'Unknown node type: ' + type );
};
-/**
- * Check if the node is focusable.
- *
- * @method
- * @param {string} type Node type
- * @returns {boolean} Whether the node is focusable
- * @throws {Error} Unknown node type
- */
-ve.dm.NodeFactory.prototype.isNodeFocusable = function ( type ) {
- if ( ve.dm.nodeFactory.lookup( type ) ) {
- return ve.isMixedIn( ve.ce.nodeFactory.registry[type],
ve.ce.FocusableNode );
- }
- throw new Error( 'Unknown node type: ' + type );
-};
-
/* Initialization */
ve.dm.nodeFactory = new ve.dm.NodeFactory();
--
To view, visit https://gerrit.wikimedia.org/r/89213
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3cf666280abdfce55bf9b0710827bb25c40bfd51
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Catrope <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Trevor Parscal <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits