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

Reply via email to