/*! * VisualEditor ContentEditable ImageCaptionNode class. * * @copyright 2011-2017 VisualEditor Team and others; see AUTHORS.txt * @license The MIT License (MIT); see LICENSE.txt */ /** * ContentEditable image caption node. * * @class * @extends ve.ce.BranchNode * @mixins ve.ce.ActiveNode * * @constructor * @param {ve.dm.MWImageCaptionNode} model Model to observe * @param {Object} [config] Configuration options */ ve.ce.MWImageCaptionNode = function VeCeMWImageCaptionNode() { // Parent constructor ve.ce.MWImageCaptionNode.super.apply( this, arguments ); // Mixin constructor ve.ce.ActiveNode.call( this ); }; /* Inheritance */ OO.inheritClass( ve.ce.MWImageCaptionNode, ve.ce.BranchNode ); OO.mixinClass( ve.ce.MWImageCaptionNode, ve.ce.ActiveNode ); /* Static Properties */ ve.ce.MWImageCaptionNode.static.name = 'mwImageCaption'; ve.ce.MWImageCaptionNode.static.tagName = 'figcaption'; /* Methods */ /** * Reset the magnify button if the structure of the caption changed, * so it is always rendered in the right place. * * The magnify icon will always be attached to the caption; we * handle hiding and showing it per block image type in the CSS rules. */ ve.ce.MWImageCaptionNode.prototype.onSplice = function () { if ( this.$magnify ) { this.$magnify.detach(); } else { this.buildMagnify(); } // Parent method ve.ce.MWImageCaptionNode.super.prototype.onSplice.apply( this, arguments ); // Reset the magnify icon, prepend it to the caption this.$magnify.prependTo( this.$element ); }; /** */ ve.ce.MWImageCaptionNode.prototype.buildMagnify = function () { this.$magnify = $( '
' ) .addClass( 'magnify' ) .prop( 'contentEditable', 'false' ); this.$a = $( '' ) .addClass( 'internal' ) .appendTo( this.$magnify ); }; /* Registration */ ve.ce.nodeFactory.register( ve.ce.MWImageCaptionNode );