Trevor Parscal has uploaded a new change for review.
https://gerrit.wikimedia.org/r/60699
Change subject: Mixin tracking
......................................................................
Mixin tracking
Change-Id: Ic3e4472b9e69458f0797c17f72dbcd2ec5267893
---
M modules/ve/ce/ve.ce.Surface.js
M modules/ve/ve.js
2 files changed, 38 insertions(+), 6 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/99/60699/1
diff --git a/modules/ve/ce/ve.ce.Surface.js b/modules/ve/ce/ve.ce.Surface.js
index ff7403c..a3eb001 100644
--- a/modules/ve/ce/ve.ce.Surface.js
+++ b/modules/ve/ce/ve.ce.Surface.js
@@ -607,7 +607,7 @@
// Detect when only a single inline element is selected
if ( !selection.isCollapsed() ) {
start =
this.documentView.getDocumentNode().getNodeFromOffset( selection.start + 1 );
- if ( typeof start.setFocused === 'function' ) {
+ if ( ve.isMixedIn( start, ve.ce.FocusableNode ) ) {
end =
this.documentView.getDocumentNode().getNodeFromOffset( selection.end - 1 );
if ( start === end ) {
next = start;
diff --git a/modules/ve/ve.js b/modules/ve/ve.js
index fa12bb6..27acd95 100644
--- a/modules/ve/ve.js
+++ b/modules/ve/ve.js
@@ -92,11 +92,12 @@
// Restore constructor property of targetFn
targetFn.prototype.constructor = targetConstructor;
- // Messing with static properties can be harmful, but we've
agreed on one
- // common property that will be inherited, and that one only.
Use this for
- // for making static values visible in child classes
- originFn.static = originFn.static || {}; // Lazy-init
+ // Extend static properties
+ originFn.static = originFn.static || {};
targetFn.static = ve.createObject( originFn.static );
+
+ // Copy mixin tracking
+ targetFn.mixins = originFn.mixins ? originFn.mixins.slice( 0 )
: [];
};
/**
@@ -131,11 +132,42 @@
* @param {Function} originFn
*/
ve.mixinClass = function ( targetFn, originFn ) {
- for ( var key in originFn.prototype ) {
+ var key;
+
+ // Copy prototype properties
+ for ( key in originFn.prototype ) {
if ( key !== 'constructor' && hasOwn.call(
originFn.prototype, key ) ) {
targetFn.prototype[key] =
originFn.prototype[key];
}
}
+
+ // Copy static properties
+ if ( originFn.static ) {
+ targetFn.static = targetFn.static || {};
+ for ( key in originFn.static ) {
+ if ( hasOwn.call( originFn.static, key ) ) {
+ targetFn.static[key] =
originFn.static[key];
+ }
+ }
+ }
+
+ // Track mixins
+ targetFn.mixins = targetFn.mixins || [];
+ targetFn.mixins.push( originFn );
+ };
+
+ /**
+ * Check if a class or object uses a mixin.
+ *
+ * @param {Function|Object} a Class or object to check
+ * @param {Function} mixin Mixin to check for
+ * @return {Boolean} Class or object uses mixin
+ */
+ ve.isMixedIn = function ( subject, mixin ) {
+ if ( subject.constructor ) {
+ subject = subject.constructor;
+ }
+ return subject.mixins && subject.mixins.indexOf( mixin ) !== -1;
};
/**
--
To view, visit https://gerrit.wikimedia.org/r/60699
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic3e4472b9e69458f0797c17f72dbcd2ec5267893
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Trevor Parscal <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits