jenkins-bot has submitted this change and it was merged. Change subject: Create phantom/shield nodes with methods not templates ......................................................................
Create phantom/shield nodes with methods not templates Templates have the following problems: * Static, so don't have access to this.*, hence the importNode hack. * Run on file node, so potential load order issues with things like ve.msg. Change-Id: Ia7f6a2b7ac10b111bcd7245aa96c8ec9bfb183fb --- M modules/ve/ce/nodes/ve.ce.AlienNode.js M modules/ve/ce/ve.ce.ProtectedNode.js 2 files changed, 33 insertions(+), 26 deletions(-) Approvals: Krinkle: 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 6af1e09..d3f06d6 100644 --- a/modules/ve/ce/nodes/ve.ce.AlienNode.js +++ b/modules/ve/ce/nodes/ve.ce.AlienNode.js @@ -42,12 +42,21 @@ ve.ce.AlienNode.static.name = 'alien'; -ve.ce.AlienNode.static.$phantomTemplate = ve.ce.AlienNode.static.$phantomTemplate.clone() - .addClass( 've-ce-alienNode-phantom' ) - .attr( 'title', ve.msg( 'visualeditor-aliennode-tooltip' ) ); - /* Methods */ +/** + * @inheritdoc + */ +ve.ce.AlienNode.prototype.createPhantom = function () { + // Mixin method + return ve.ce.ProtectedNode.prototype.createPhantom.call( this ) + .addClass( 've-ce-alienNode-phantom' ) + .attr( 'title', ve.msg( 'visualeditor-aliennode-tooltip' ) ); +}; + +/** + * @inheritdoc + */ ve.ce.AlienNode.prototype.generateContents = function ( config ) { var deferred = $.Deferred(); deferred.resolve( ( config && config.domElements ) || this.model.getAttribute( 'domElements' ) || [] ); diff --git a/modules/ve/ce/ve.ce.ProtectedNode.js b/modules/ve/ce/ve.ce.ProtectedNode.js index 3411e7e..f3342ca 100644 --- a/modules/ve/ce/ve.ce.ProtectedNode.js +++ b/modules/ve/ce/ve.ce.ProtectedNode.js @@ -34,31 +34,31 @@ ve.ce.ProtectedNode.static = {}; +/* Methods */ + /** - * Template for shield elements. + * Create a shield element. * * Uses data URI to inject a 1x1 transparent GIF image into the DOM. * - * @property {jQuery} - * @static - * @inheritable + * @returns {jQuery} A shield element */ -ve.ce.ProtectedNode.static.$shieldTemplate = $( '<img>' ) - .addClass( 've-ce-protectedNode-shield' ) - .attr( 'src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' ); +ve.ce.ProtectedNode.prototype.createShield = function () { + return this.$( '<img>' ) + .addClass( 've-ce-protectedNode-shield' ) + .attr( 'src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' ); +}; /** - * Phantom element template. + * Create a phantom element. * - * @property {jQuery} - * @static - * @inheritable + * @returns {jQuery} A phantom element */ -ve.ce.ProtectedNode.static.$phantomTemplate = $( '<div>' ) - .addClass( 've-ce-protectedNode-phantom' ) - .attr( 'draggable', false ); - -/* Methods */ +ve.ce.ProtectedNode.prototype.createPhantom = function () { + return this.$( '<div>' ) + .addClass( 've-ce-protectedNode-phantom' ) + .attr( 'draggable', false ); +}; /** * Handle setup events. @@ -67,8 +67,7 @@ */ ve.ce.ProtectedNode.prototype.onProtectedSetup = function () { var $shield, - node = this, - $shieldTemplate = this.constructor.static.$shieldTemplate; + node = this; // Exit if already setup or not unattached if ( this.isSetup || !this.root ) { @@ -97,7 +96,7 @@ ) { return; } - $shield = node.$( node.$.context.importNode( $shieldTemplate[0], true ) ) + $shield = node.createShield() .appendTo( $this ) .on( 'dblclick', function () { node.emit( 'dblclick' ); @@ -219,14 +218,13 @@ * @method */ ve.ce.ProtectedNode.prototype.createPhantoms = function () { - var $phantomTemplate = this.constructor.static.$phantomTemplate, - surface = this.root.getSurface(), + var surface = this.root.getSurface(), node = this; this.$phantomable.find( '.ve-ce-protectedNode-shield:visible' ).each( ve.bind( function () { this.$phantoms = this.$phantoms.add( - this.$( this.$.context.importNode( $phantomTemplate[0], true ) ) + this.createPhantom() .on( 'mousedown', ve.bind( this.onPhantomMouseDown, this ) ) .on( 'dblclick', function () { node.emit( 'dblclick' ); -- To view, visit https://gerrit.wikimedia.org/r/133236 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ia7f6a2b7ac10b111bcd7245aa96c8ec9bfb183fb Gerrit-PatchSet: 2 Gerrit-Project: VisualEditor/VisualEditor Gerrit-Branch: master Gerrit-Owner: Esanders <esand...@wikimedia.org> Gerrit-Reviewer: Catrope <roan.katt...@gmail.com> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits