mediawiki-extensions-Visual.../modules/ve-mw/ce/annotations/ve.ce.MWNowikiAnnotation.js
Roan Kattouw 7294c65a2e Add a node class for mw:Nowiki
These represent <nowiki> tags. If the user doesn't edit the text inside
the nowiki, we round-trip the <span typeof="mw:Nowiki"> wrapper cleanly,
but if they do edit it, we unwrap it. This then triggers re-escaping
in Parsoid, and prevents cases where the user edits the text to no
longer need escaping but Parsoid still wraps it in <nowiki> because
of the <span typeof="mw:Nowiki"> wrapper.

In order to detect whether the contents have changed, the nowiki
annotation stores a copy of its contents. To avoid infinite recursion,
we have to exclude this attribute for hash generation.

Bug: 47678
Change-Id: I2edc46b6d87d2f91e952efcb09c0edae5166958f
2013-07-16 19:35:24 -07:00

38 lines
924 B
JavaScript

/*!
* VisualEditor ContentEditable MWNowikiAnnotation class.
*
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* ContentEditable MediaWiki nowiki annotation.
*
* @class
* @extends ve.ce.Annotation
* @constructor
* @param {ve.dm.MWNowikiAnnotation} model Model to observe
* @param {Object} [config] Config options
*/
ve.ce.MWNowikiAnnotation = function VeCeMWInternalLinkAnnotation( model, config ) {
// Parent constructor
ve.ce.Annotation.call( this, model, config );
// DOM changes
this.$.addClass( 've-ce-mwNowikiAnnotation' );
};
/* Inheritance */
ve.inheritClass( ve.ce.MWNowikiAnnotation, ve.ce.Annotation );
/* Static Properties */
ve.ce.MWNowikiAnnotation.static.name = 'mwNowiki';
ve.ce.MWNowikiAnnotation.static.tagName = 'span';
/* Registration */
ve.ce.annotationFactory.register( ve.ce.MWNowikiAnnotation );