All files / src/ce ve.ce.ClassAttributeNode.js

100% Statements 11/11
50% Branches 1/2
100% Functions 2/2
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47                              1x   35x 35x     35x             35x 35x         1x         1x   33x 33x   33x    
/*!
 * VisualEditor ContentEditable ClassAttributeNode class.
 *
 * @copyright See AUTHORS.txt
 */
 
/**
 * ContentEditable class-attribute node.
 *
 * @class
 * @abstract
 *
 * @constructor
 * @param {jQuery} [$classedElement=this.$element] Element to which attribute-based classes are attached
 */
ve.ce.ClassAttributeNode = function VeCeClassAttributeNode( $classedElement ) {
	// Properties
	this.$classedElement = $classedElement || this.$element;
	this.currentAttributeClasses = '';
 
	// eslint-disable-next-line mediawiki/class-doc
	this.$classedElement
		// Clear all but unrecognized classes. Attributes classes will be applied
		// correctly on setup.
		.removeClass( this.getModel().getAttribute( 'originalClasses' ) )
		.addClass( this.getModel().getAttribute( 'unrecognizedClasses' ) );
 
	// Events
	this.connect( this, { setup: 'updateAttributeClasses' } );
	this.model.connect( this, { attributeChange: 'updateAttributeClasses' } );
};
 
/* Inheritance */
 
OO.initClass( ve.ce.ClassAttributeNode );
 
/**
 * Update classes from attributes
 */
ve.ce.ClassAttributeNode.prototype.updateAttributeClasses = function () {
	// eslint-disable-next-line mediawiki/class-doc
	this.$classedElement.removeClass( this.currentAttributeClasses );
	this.currentAttributeClasses = this.model.constructor.static.getClassAttrFromAttributes( this.model.element.attributes );
	// eslint-disable-next-line mediawiki/class-doc
	this.$classedElement.addClass( this.currentAttributeClasses );
};