/*! * VisualEditor ContentEditable AlienNode, AlienBlockNode and AlienInlineNode classes. * * @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt * @license The MIT License (MIT); see LICENSE.txt */ /** * ContentEditable alien node. * * @class * @abstract * @extends ve.ce.LeafNode * @mixins ve.ce.ProtectedNode * @mixins ve.ce.GeneratedContentNode * * @constructor * @param {ve.dm.AlienNode} model Model to observe * @param {Object} [config] Configuration options */ ve.ce.AlienNode = function VeCeAlienNode( model, config ) { // Parent constructor ve.ce.LeafNode.call( this, model, config ); // Mixin constructors ve.ce.ProtectedNode.call( this ); ve.ce.GeneratedContentNode.call( this ); // DOM changes this.$element.addClass( 've-ce-alienNode' ); }; /* Inheritance */ OO.inheritClass( ve.ce.AlienNode, ve.ce.LeafNode ); OO.mixinClass( ve.ce.AlienNode, ve.ce.ProtectedNode ); OO.mixinClass( ve.ce.AlienNode, ve.ce.GeneratedContentNode ); /* Static Properties */ 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 */ ve.ce.AlienNode.prototype.generateContents = function ( config ) { var deferred = $.Deferred(); deferred.resolve( ( config && config.domElements ) || this.model.getAttribute( 'domElements' ) || [] ); return deferred.promise(); }; /* Concrete subclasses */ /** * ContentEditable alien block node. * * @class * @extends ve.ce.AlienNode * @constructor * @param {ve.dm.AlienBlockNode} model Model to observe */ ve.ce.AlienBlockNode = function VeCeAlienBlockNode( model ) { // Parent constructor ve.ce.AlienNode.call( this, model ); // DOM changes this.$element.addClass( 've-ce-alienBlockNode' ); }; /* Inheritance */ OO.inheritClass( ve.ce.AlienBlockNode, ve.ce.AlienNode ); /* Static Properties */ ve.ce.AlienBlockNode.static.name = 'alienBlock'; /** * ContentEditable alien inline node. * * @class * @extends ve.ce.AlienNode * @constructor * @param {ve.dm.AlienInlineNode} model Model to observe */ ve.ce.AlienInlineNode = function VeCeAlienInlineNode( model ) { // Parent constructor ve.ce.AlienNode.call( this, model ); // DOM changes this.$element.addClass( 've-ce-alienInlineNode' ); }; /* Inheritance */ OO.inheritClass( ve.ce.AlienInlineNode, ve.ce.AlienNode ); /* Static Properties */ ve.ce.AlienInlineNode.static.name = 'alienInline'; /* Registration */ ve.ce.nodeFactory.register( ve.ce.AlienNode ); ve.ce.nodeFactory.register( ve.ce.AlienBlockNode ); ve.ce.nodeFactory.register( ve.ce.AlienInlineNode );