%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/src/dm/nodes/ |
Current File : /www/varak.net/wiki.varak.net/extensions/VisualEditor/lib/ve/src/dm/nodes/ve.dm.CommentNode.js |
/*! * VisualEditor DataModel CommentNode class. * * @copyright 2011-2016 VisualEditor Team and others; see http://ve.mit-license.org */ /** * @class * @abstract * @extends ve.dm.LeafNode * @mixins ve.dm.FocusableNode * * @constructor * @param {Object} element Reference to element in meta-linmod */ ve.dm.CommentNode = function VeDmCommentNode( element ) { // Parent constructor ve.dm.CommentNode.super.call( this, element ); // Mixin constructors ve.dm.FocusableNode.call( this ); }; /* Inheritance */ OO.inheritClass( ve.dm.CommentNode, ve.dm.LeafNode ); OO.mixinClass( ve.dm.CommentNode, ve.dm.FocusableNode ); /* Static Properties */ ve.dm.CommentNode.static.isContent = true; ve.dm.CommentNode.static.preserveHtmlAttributes = false; ve.dm.CommentNode.static.toDataElement = function ( domElements, converter ) { var text; if ( domElements[ 0 ].nodeType === Node.COMMENT_NODE ) { // Decode HTML entities, safely (no elements permitted inside textarea) text = $( '<textarea/>' ).html( domElements[ 0 ].data ).text(); } else { text = domElements[ 0 ].getAttribute( 'data-ve-comment' ); } return { // Disallows comment nodes between table rows and such type: converter.isValidChildNodeType( 'comment' ) && text !== '' ? 'comment' : 'commentMeta', attributes: { text: text } }; }; ve.dm.CommentNode.static.toDomElements = function ( dataElement, doc, converter ) { var span, data; if ( converter.isForClipboard() ) { // Fake comment node span = doc.createElement( 'span' ); span.setAttribute( 'rel', 've:Comment' ); span.setAttribute( 'data-ve-comment', dataElement.attributes.text ); span.appendChild( doc.createTextNode( '\u00a0' ) ); return [ span ]; } else { // Real comment node // Encode '&', and certain '-' and '>' characters (see T95040) data = dataElement.attributes.text.replace( /^[->]|--|-$|&/g, function ( m ) { return m.slice( 0, m.length - 1 ) + '&#' + m.charCodeAt( m.length - 1 ) + ';'; } ); return [ doc.createComment( data ) ]; } }; /** * @class * @extends ve.dm.CommentNode * * @constructor * @param {Object} element Reference to element in meta-linmod */ ve.dm.RealCommentNode = function VeDmRealCommentNode() { ve.dm.RealCommentNode.super.apply( this, arguments ); }; /* Inheritance */ OO.inheritClass( ve.dm.RealCommentNode, ve.dm.CommentNode ); /* Static Properties */ ve.dm.RealCommentNode.static.name = 'comment'; ve.dm.RealCommentNode.static.matchTagNames = [ '#comment' ]; /** * Fake comments generated by the converter for the clipboard * * `<span rel="ve:Comment">` is used to to preserve * comments in the clipboard * * @class * @extends ve.dm.CommentNode * * @constructor * @param {Object} element Reference to element in meta-linmod */ ve.dm.FakeCommentNode = function VeDmFakeCommentNode() { ve.dm.FakeCommentNode.super.apply( this, arguments ); }; /* Inheritance */ OO.inheritClass( ve.dm.FakeCommentNode, ve.dm.CommentNode ); /* Static Properties */ ve.dm.FakeCommentNode.static.name = 'fakeComment'; ve.dm.FakeCommentNode.static.matchRdfaTypes = [ 've:Comment' ]; /* Registration */ ve.dm.modelRegistry.register( ve.dm.RealCommentNode ); ve.dm.modelRegistry.register( ve.dm.FakeCommentNode );