/*! * VisualEditor DataModel MediaWiki-specific example data sets. * * @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt * @license The MIT License (MIT); see LICENSE.txt */ /** * @class * @singleton * @ignore */ ve.dm.mwExample = {}; ve.dm.mwExample.createExampleDocument = ( name, store ) => ve.dm.example.createExampleDocumentFromObject( name, store, ve.dm.mwExample ); ve.dm.mwExample.MWTransclusion = { blockOpen: '
Hello, world!
', blockContentClipboard: 'Hello, world!
', inlineOpen: '', inlineOpenModified: '', inlineOpenFromData: '', inlineOpenClipboard: '', inlineOpenFromDataModified: '', inlineOpenModifiedClipboard: '' + ' ', inlineContent: '$1,234.00', inlineClose: '', mixed: '' + 'Foo', mixedFromData: '', mixedClipboard: ' ' + 'Foo', pairOne: 'foo
', pairTwo: 'foo
', pairFromData: '', pairClipboard: 'foo
', meta: '' + '\n' + '', metaFromData: '', metaClipboard: ' ' }; ve.dm.mwExample.MWTransclusion.blockData = { type: 'mwTransclusionBlock', attributes: { mw: { parts: [ { template: { target: { wt: 'Test', href: './Template:Test' }, params: { 1: { wt: 'Hello, world!' } }, i: 0 } } ] }, originalMw: '{"parts":[{"template":{"target":{"wt":"Test","href":"./Template:Test"},"params":{"1":{"wt":"Hello, world!"}},"i":0}}]}' } }; ve.dm.mwExample.MWTransclusion.inlineData = { type: 'mwTransclusionInline', attributes: { mw: { parts: [ { template: { target: { wt: 'Inline', href: './Template:Inline' }, params: { 1: { wt: '1,234' } }, i: 0 } } ] }, originalMw: '{"parts":[{"template":{"target":{"wt":"Inline","href":"./Template:Inline"},"params":{"1":{"wt":"1,234"}},"i":0}}]}' } }; ve.dm.mwExample.MWTransclusion.mixedDataOpen = { type: 'mwTransclusionInline', attributes: { mw: { parts: [ { template: { target: { wt: 'Inline', href: './Template:Inline' }, params: { 1: { wt: '5,678' } }, i: 0 } } ] }, originalMw: '{"parts":[{"template":{"target":{"wt":"Inline","href":"./Template:Inline"},"params":{"1":{"wt":"5,678"}},"i":0}}]}' } }; ve.dm.mwExample.MWTransclusion.mixedDataClose = { type: '/mwTransclusionInline' }; ve.dm.mwExample.MWTransclusion.blockParamsHash = OO.getHash( [ ve.dm.MWTransclusionNode.static.getHashObject( ve.dm.mwExample.MWTransclusion.blockData ), undefined ] ); ve.dm.mwExample.MWTransclusion.blockStoreItems = {}; ve.dm.mwExample.MWTransclusion.blockStoreItems[ ve.dm.HashValueStore.prototype.hashOfValue( null, ve.dm.mwExample.MWTransclusion.blockParamsHash ) ] = $.parseHTML( ve.dm.mwExample.MWTransclusion.blockOpen + ve.dm.mwExample.MWTransclusion.blockContent ); ve.dm.mwExample.MWTransclusion.inlineParamsHash = OO.getHash( [ ve.dm.MWTransclusionNode.static.getHashObject( ve.dm.mwExample.MWTransclusion.inlineData ), undefined ] ); ve.dm.mwExample.MWTransclusion.inlineStoreItems = {}; ve.dm.mwExample.MWTransclusion.inlineStoreItems[ ve.dm.HashValueStore.prototype.hashOfValue( null, ve.dm.mwExample.MWTransclusion.inlineParamsHash ) ] = $.parseHTML( ve.dm.mwExample.MWTransclusion.inlineOpen + ve.dm.mwExample.MWTransclusion.inlineContent + ve.dm.mwExample.MWTransclusion.inlineClose ); ve.dm.mwExample.MWTransclusion.mixedParamsHash = OO.getHash( [ ve.dm.MWTransclusionNode.static.getHashObject( ve.dm.mwExample.MWTransclusion.mixedDataOpen ), undefined ] ); ve.dm.mwExample.MWTransclusion.mixedStoreItems = {}; ve.dm.mwExample.MWTransclusion.mixedStoreItems[ ve.dm.HashValueStore.prototype.hashOfValue( null, ve.dm.mwExample.MWTransclusion.mixedParamsHash ) ] = $.parseHTML( ve.dm.mwExample.MWTransclusion.mixed ); ve.dm.mwExample.MWInternalLink = { absoluteHref: ve.resolveUrl( '/wiki/Foo/Bar', ve.dm.example.base ) }; ve.dm.mwExample.MWInternalLink.absoluteOpen = ''; ve.dm.mwExample.MWInternalLink.absoluteData = { type: 'link/mwInternal', attributes: { title: 'Foo/Bar', origTitle: 'Foo/Bar', normalizedTitle: 'Foo/Bar', lookupTitle: 'Foo/Bar' } }; ve.dm.mwExample.MWInternalSectionLink = { absoluteHref: ve.resolveUrl( '/wiki/Foo#Bar', ve.dm.example.base ) }; ve.dm.mwExample.MWInternalSectionLink.absoluteOpen = ''; ve.dm.mwExample.MWInternalSectionLink.absoluteData = { type: 'link/mwInternal', attributes: { title: 'Foo#Bar', origTitle: 'Foo#Bar', normalizedTitle: 'Foo#Bar', lookupTitle: 'Foo' } }; ve.dm.mwExample.MWMediaLinkExistsData = { type: 'link/mwInternal', attributes: { lookupTitle: 'Media:Exists.png', normalizedTitle: 'Media:Exists.png', origTitle: 'Media:Exists.png', title: 'Media:Exists.png' } }; ve.dm.mwExample.MWMediaLinkMissingData = { type: 'link/mwInternal', attributes: { lookupTitle: 'Media:Missing.png', normalizedTitle: 'Media:Missing.png', origTitle: 'Media:Missing.png', title: 'Media:Missing.png' } }; ve.dm.mwExample.MWBlockImage = { html: '', data: [ { type: 'mwBlockImage', attributes: { type: 'thumb', align: 'right', href: './Foo', imageClassAttr: null, imgWrapperClassAttr: null, mediaClass: 'Image', mediaTag: 'img', src: ve.ce.minImgDataUri, width: 1, height: 2, alt: 'alt text', isError: false, resource: './FooBar', mw: {}, originalClasses: 'mw-halign-right foobar', unrecognizedClasses: [ 'foobar' ] } }, { type: 'mwImageCaption' }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'a', 'b', 'c', { type: '/paragraph' }, { type: '/mwImageCaption' }, { type: '/mwBlockImage' } ], storeItems: { h1d9b405cfd633576: ve.ce.minImgDataUri } }; ve.dm.mwExample.MWInlineImage = { html: '' + '' + '' + '' + '', data: { type: 'mwInlineImage', attributes: { src: 'http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png', href: './File:Wiki.png', imageClassAttr: null, imgWrapperClassAttr: null, mediaClass: 'Image', mediaTag: 'img', width: 135, height: 155, alt: 'alt text', isError: false, valign: 'text-top', resource: './File:Wiki.png', mw: {}, type: 'none', originalClasses: 'foo mw-valign-text-top', unrecognizedClasses: [ 'foo' ] } }, storeItems: { hbb0aeb2b8e907b74: 'http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png' } }; ve.dm.mwExample.MWInlineImageWithWrapperClass = { html: '' + '' + '' + '' + '', data: { type: 'mwInlineImage', attributes: { src: 'http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png', href: './File:Wiki.png', imageClassAttr: null, imgWrapperClassAttr: 'mw-file-description', mediaClass: 'Image', mediaTag: 'img', width: 135, height: 155, alt: 'alt text', isError: false, valign: 'text-top', resource: './File:Wiki.png', mw: {}, type: 'none', originalClasses: 'foo mw-valign-text-top', unrecognizedClasses: [ 'foo' ] } } }; ve.dm.mwExample.mwNowikiAnnotation = { type: 'mwNowiki' }; ve.dm.mwExample.mwNowiki = [ { type: 'paragraph' }, 'F', 'o', 'o', [ '[', [ ve.dm.mwExample.mwNowikiAnnotation ] ], [ '[', [ ve.dm.mwExample.mwNowikiAnnotation ] ], [ 'B', [ ve.dm.mwExample.mwNowikiAnnotation ] ], [ 'a', [ ve.dm.mwExample.mwNowikiAnnotation ] ], [ 'r', [ ve.dm.mwExample.mwNowikiAnnotation ] ], [ ']', [ ve.dm.mwExample.mwNowikiAnnotation ] ], [ ']', [ ve.dm.mwExample.mwNowikiAnnotation ] ], 'B', 'a', 'z', { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ]; ve.dm.mwExample.mwNowikiHtml = 'Foo[[Bar]]Baz
'; ve.dm.mwExample.mwNowikiHtmlFromData = 'Foo[[Bar]]Baz
'; ve.dm.mwExample.withMeta = [ { type: 'paragraph', internal: { generated: 'wrapper' } }, { type: 'comment', attributes: { text: ' No conversion ' } }, { type: '/comment' }, { type: '/paragraph' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'paragraph' }, 'F', 'o', 'o', { type: 'mwCategory', attributes: { category: 'Category:Bar', origCategory: 'Category:Bar', sortkey: '', origSortkey: '' } }, { type: '/mwCategory' }, 'B', 'a', 'r', { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, 'B', 'a', { type: 'comment', attributes: { text: ' inline ' } }, { type: '/comment' }, 'z', { type: '/paragraph' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'paragraph', internal: { generated: 'wrapper' } }, { type: 'comment', attributes: { text: 'barbaz' } }, { type: '/comment' }, { type: '/paragraph' }, { type: 'mwCategory', attributes: { category: 'Category:Foo foo', origCategory: 'Category:Foo_foo', sortkey: 'Bar baz#quux', origSortkey: 'Bar baz%23quux' } }, { type: '/mwCategory' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'internalList' }, { type: '/internalList' } ]; ve.dm.mwExample.withMetaRealData = [ { type: 'paragraph', internal: { generated: 'wrapper' } }, { type: 'comment', attributes: { text: ' No conversion ' } }, { type: '/comment' }, { type: '/paragraph' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'paragraph' }, 'F', 'o', 'o', 'B', 'a', 'r', 'B', 'a', { type: 'comment', attributes: { text: ' inline ' } }, { type: '/comment' }, 'z', { type: '/paragraph' }, { type: 'mwCategory', attributes: { category: 'Category:Bar', origCategory: 'Category:Bar', sortkey: '', origSortkey: '' } }, { type: '/mwCategory' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'paragraph', internal: { generated: 'wrapper' } }, { type: 'comment', attributes: { text: 'barbaz' } }, { type: '/comment' }, { type: '/paragraph' }, { type: 'mwCategory', attributes: { category: 'Category:Foo foo', origCategory: 'Category:Foo_foo', sortkey: 'Bar baz#quux', origSortkey: 'Bar baz%23quux' } }, { type: '/mwCategory' }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienMeta' }, { type: 'internalList' }, { type: '/internalList' } ]; ve.dm.mwExample.withMetaMetaData = [ [ { type: 'alienMeta', originalDomElements: $.parseHTML( '' ) }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) } ], undefined, undefined, undefined, [ { type: 'mwCategory', attributes: { category: 'Category:Bar', origCategory: 'Category:Bar', sortkey: '', origSortkey: '' } } ], undefined, undefined, [ { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) } ], undefined, [ { type: 'alienMeta', originalDomElements: $.parseHTML( '' ) } ], undefined, [ { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) }, { type: 'comment', attributes: { text: 'barbaz' } }, { type: 'mwCategory', attributes: { category: 'Category:Foo foo', origCategory: 'Category:Foo_foo', sortkey: 'Bar baz#quux', origSortkey: 'Bar baz%23quux' } }, { type: 'mwAlienMeta', originalDomElements: $.parseHTML( '' ) } ], undefined, undefined ]; ve.dm.mwExample.domToDataCases = { 'adjacent annotations (data-parsoid)': { preserveAnnotationDomElements: true, body: 'abc ' + 'dd', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, [ 'a', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'a' ) } ] ], [ 'b', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'b' ) } ] ], [ 'c', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'c' ) } ] ], ' ', [ 'd', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'a' ) } ] ], [ 'd', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'a' ) } ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], modify: ( model ) => { const data = [ 'x', [ ve.dm.example.bold ] ], linearData = ve.dm.example.preprocessAnnotations( [ data ], model.getStore() ); model.data.data.splice( 3, 0, linearData.data[ 0 ] ); }, normalizedBody: 'abxc ' + 'dd', fromDataBody: 'abxc ' + 'dd' }, 'adjacent annotations (RESTBase IDs)': { preserveAnnotationDomElements: true, body: 'abc ' + 'dd', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, [ 'a', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'a' ) } ] ], [ 'b', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'b' ) } ] ], [ 'c', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'c' ) } ] ], ' ', [ 'd', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'a' ) } ] ], [ 'd', [ { type: 'textStyle/bold', attributes: { nodeName: 'b' }, originalDomElements: $.parseHTML( 'a' ) } ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], modify: ( model ) => { const data = [ 'x', [ ve.dm.example.bold ] ], linearData = ve.dm.example.preprocessAnnotations( [ data ], model.getStore() ); model.data.data.splice( 3, 0, linearData.data[ 0 ] ); }, normalizedBody: 'abxc ' + 'dd', fromDataBody: 'abxc ' + 'dd' }, mwImage: { body: '' + ve.dm.mwExample.MWInlineImage.html + '
', data: [ { type: 'paragraph' }, ve.dm.mwExample.MWInlineImage.data, { type: '/mwInlineImage' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], ceHtml: '' + '' + '' + '' + '' + ve.dm.example.inlineSlug + '
', storeItems: ve.dm.mwExample.MWInlineImage.storeItems }, mwImageWithWrapperClass: { body: '' + ve.dm.mwExample.MWInlineImageWithWrapperClass.html + '
', data: [ { type: 'paragraph' }, ve.dm.mwExample.MWInlineImageWithWrapperClass.data, { type: '/mwInlineImage' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], ceHtml: '' + '' + '' + '' + '' + ve.dm.example.inlineSlug + '
', storeItems: ve.dm.mwExample.MWInlineImage.storeItems }, 'mwHeading and mwPreformatted nodes': { body: 'Bar', data: [ { type: 'mwHeading', attributes: { level: 2 } }, 'F', 'o', 'o', { type: '/mwHeading' }, { type: 'mwPreformatted' }, 'B', 'a', 'r', { type: '/mwPreformatted' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'mwTable with duplicate class attributes': { body: '
Foo |
Foo |
foo
' ) } }, 'mw:Transclusion containing only meta data': { body: ve.dm.mwExample.MWTransclusion.meta, fromDataBody: ve.dm.mwExample.MWTransclusion.metaFromData, clipboardBody: ve.dm.mwExample.MWTransclusion.metaClipboard, previewBody: false, data: [ { internal: { generated: 'wrapper' }, type: 'paragraph' }, { type: 'mwTransclusionInline', attributes: { mw: { parts: [ { template: { target: { wt: 'Template:Echo', href: './Template:Echo' }, params: { 1: { wt: '[[Category:Page]]\n[[Category:Book]]' } }, i: 0 } } ] }, originalMw: '{"parts":[{"template":{"target":{"wt":"Template:Echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Page]]\\n[[Category:Book]]"}},"i":0}}]}' } }, { type: '/mwTransclusionInline' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'mw:Transclusion which is also a language annotation': { body: 'content', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, { type: 'mwTransclusionInline', attributes: { mw: {}, originalMw: '{}' }, originalDomElements: $.parseHTML( 'content' ) }, { type: '/mwTransclusionInline' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], clipboardBody: 'content', previewBody: false }, 'mw:AlienBlockExtension': { body: '' + '' + '
', normalizedBody: '' + '' + '
', data: [ { type: 'paragraph' }, { type: 'mwAlienInlineExtension', attributes: { mw: { name: 'score', attrs: {}, body: { extsrc: '\\relative c\' { e d c d e e e }' } }, originalMw: '{"name":"score","attrs":{},"body":{"extsrc":"\\\\relative c\' { e d c d e e e }"}}' }, originalDomElements: $.parseHTML( '' ) }, { type: '/mwAlienInlineExtension' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], modify: ( model ) => { model.data.modifyData( 1, ( item ) => { item.attributes.mw.body.extsrc = '\\relative c\' { d d d e e e }'; } ); } }, 'internal link with absolute path': { body: '' + ve.dm.mwExample.MWInternalLink.absoluteOpen + 'Foo
', data: [ { type: 'paragraph' }, [ 'F', [ ve.dm.mwExample.MWInternalLink.absoluteData ] ], [ 'o', [ ve.dm.mwExample.MWInternalLink.absoluteData ] ], [ 'o', [ ve.dm.mwExample.MWInternalLink.absoluteData ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], normalizedBody: '', mwConfig: { wgArticlePath: '/wiki/$1' } }, 'internal link with absolute path and section': { body: '' + ve.dm.mwExample.MWInternalSectionLink.absoluteOpen + 'Foo
', data: [ { type: 'paragraph' }, [ 'F', [ ve.dm.mwExample.MWInternalSectionLink.absoluteData ] ], [ 'o', [ ve.dm.mwExample.MWInternalSectionLink.absoluteData ] ], [ 'o', [ ve.dm.mwExample.MWInternalSectionLink.absoluteData ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], normalizedBody: '', mwConfig: { wgArticlePath: '/wiki/$1' } }, 'internal link with href set to ./': { body: '', head: 'Foo[1]Bar
' }, 'numbered external link (non-empty mw:Extlink as cross-document paste)': { body: 'Foo[1]Bar
', data: [ { type: 'paragraph' }, 'F', 'o', 'o', { type: 'link/mwNumberedExternal', attributes: { href: 'http://www.example.com' } }, { type: '/link/mwNumberedExternal' }, 'B', 'a', 'r', { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], clipboardBody: 'Foo[1]Bar
', normalizedBody: '' }, 'URL link': { body: '', data: [ { type: 'paragraph' }, [ 'm', [ { type: 'link/mwExternal', attributes: { href: 'https://www.mediawiki.org/', rel: 'mw:ExtLink' } } ] ], [ 'w', [ { type: 'link/mwExternal', attributes: { href: 'https://www.mediawiki.org/', rel: 'mw:ExtLink' } } ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], previewBody: '' }, /* FIXME T185902: Temporarily commented out failing test case 'whitespace preservation with wrapped comments and language links': { body: 'Foo\n' + '\n' + '', data: [ { type: 'paragraph', internal: { generated: 'wrapper', metaItems: [ { originalDomElementsHash: 'h188ab6af88887790', type: 'mwLanguage', attributes: { href: 'http://de.wikipedia.org/wiki/Foo' }, internal: { loadMetaParentHash: 'hbc66e1df10d058e6', loadMetaParentOffset: 3 } }, { originalDomElementsHash: 'h188ab6ff88887790', type: 'mwLanguage', attributes: { href: 'http://fr.wikipedia.org/wiki/Foo' }, internal: { loadMetaParentHash: 'h4e7ce2a82b7ce627', loadMetaParentOffset: 6 } } ], whitespace: [ undefined, undefined, undefined, '\n' ] } }, 'F', 'o', 'o', { type: '/paragraph' }, { type: 'mwLanguage', attributes: { href: 'http://de.wikipedia.org/wiki/Foo' }, internal: { whitespace: [ '\n', undefined, undefined, '\n' ] } }, { type: '/mwLanguage' }, { type: 'mwLanguage', attributes: { href: 'http://fr.wikipedia.org/wiki/Foo' }, internal: { whitespace: [ '\n' ] } }, { type: '/mwLanguage' }, { type: 'internalList' }, { type: '/internalList' } ] }, */ 'document with meta elements': { body: 'Foo' + 'Bar' + 'Baz
' + '' + '' + '', clipboardBody: 'Foo' + 'Bar' + 'Ba z
' + ' ' + '' + '', previewBody: ve.dm.example.commentNodePreview( ' No conversion ' ) + 'Foo' + 'Bar' + 'Ba' + ve.dm.example.commentNodePreview( ' inline ' ) + 'z
' + '' + ve.dm.example.commentNodePreview( 'barbaz' ) + '' + '', head: 'a¢b¥™
', data: [ { type: 'paragraph' }, 'a', { type: 'mwEntity', attributes: { character: '¢' } }, { type: '/mwEntity' }, 'b', { type: 'mwEntity', attributes: { character: '¥' } }, { type: '/mwEntity' }, { type: 'mwEntity', attributes: { character: '™' } }, { type: '/mwEntity' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'mw:DisplaySpace': { body: 'a : b
', data: [ { type: 'paragraph' }, 'a', { type: 'mwEntity', attributes: { character: '\u00a0', displaySpace: true } }, { type: '/mwEntity' }, ':', ' ', 'b', { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'wrapping with mw:Entity': { body: 'a¢b¥™', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, 'a', { type: 'mwEntity', attributes: { character: '¢' } }, { type: '/mwEntity' }, 'b', { type: 'mwEntity', attributes: { character: '¥' } }, { type: '/mwEntity' }, { type: 'mwEntity', attributes: { character: '™' } }, { type: '/mwEntity' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'whitespace preservation with mw:Entity': { body: 'a b ¥\t™
', data: [ { type: 'paragraph', internal: { whitespace: [ undefined, ' ' ] } }, 'a', ' ', ' ', { type: 'mwEntity', attributes: { character: ' ' } }, { type: '/mwEntity' }, ' ', ' ', ' ', 'b', ' ', ' ', ' ', ' ', { type: 'mwEntity', attributes: { character: '¥' } }, { type: '/mwEntity' }, '\t', { type: 'mwEntity', attributes: { character: '™' } }, { type: '/mwEntity' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'category default sort key': { body: '', data: [ { type: 'mwDefaultSort', attributes: { content: 'foo' } }, { type: '/mwDefaultSort' }, { type: 'paragraph', internal: { generated: 'empty' } }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ] }, 'thumb image': { body: ve.dm.mwExample.MWBlockImage.html, data: ve.dm.mwExample.MWBlockImage.data.concat( [ { type: 'internalList' }, { type: '/internalList' } ] ), storeItems: ve.dm.mwExample.MWBlockImage.storeItems }, 'broken block image': { body: '', data: [ { type: 'mwBlockImage', attributes: { type: 'thumb', align: 'default', href: './Special:FilePath/Missing_image.jpg', imageClassAttr: 'mw-broken-media', imgWrapperClassAttr: null, mediaClass: 'Image', mediaTag: 'span', src: null, defaultSize: true, width: 220, height: null, originalWidth: 220, originalHeight: null, alt: null, isError: true, resource: './File:Missing_image.jpg', mw: { errors: [ { key: 'apierror-filedoesnotexist', message: 'This image does not exist.' } ] }, originalClasses: 'mw-default-size', unrecognizedClasses: [] } }, { type: 'mwImageCaption' }, { type: 'paragraph', internal: { generated: 'wrapper' } }, 'a', 'b', 'c', { type: '/paragraph' }, { type: '/mwImageCaption' }, { type: '/mwBlockImage' }, { type: 'internalList' }, { type: '/internalList' } ], previewBody: '' }, 'broken inline image': { body: '' + '' + '' + 'File:Missing image.jpg' + '' + '' + '
', data: [ { type: 'paragraph' }, { type: 'mwInlineImage', attributes: { type: 'none', href: './Special:FilePath/Missing_image.jpg', imageClassAttr: 'mw-broken-media', imgWrapperClassAttr: null, mediaClass: 'Image', mediaTag: 'span', src: null, width: 200, height: null, valign: 'default', alt: null, isError: true, resource: './File:Missing_image.jpg', mw: { errors: [ { key: 'apierror-filedoesnotexist', message: 'This image does not exist.' } ] }, originalClasses: null, unrecognizedClasses: [] } }, { type: '/mwInlineImage' }, { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], previewBody: '' + '' + '' + 'File:Missing image.jpg' + '' + '' + '
' }, 'attribute preservation does not crash due to text node split': { body: '', fromDataBody: '', head: 'Foo[[Bzr]]Baz
' }, 'mw:Nowiki unwraps when annotations modified': { data: ve.dm.mwExample.mwNowiki, modify: ( model ) => { model.data.modifyData( 7, ( item ) => { item[ 1 ].push( model.getStore().hash( ve.dm.example.createAnnotation( ve.dm.example.bold ) ) ); } ); }, normalizedBody: 'Foo[[Bar]]Baz
' }, 'plain external links when pasted are converted to link/mwExternal': { fromClipboard: true, body: 'ab', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, [ 'a', [ { type: 'link/mwExternal', attributes: { href: 'https://www.mediawiki.org/' } } ] ], [ 'b', [ { type: 'link/mwExternal', attributes: { href: 'https://www.mediawiki.org/' } } ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], normalizedBody: 'ab', previewBody: 'ab' }, 'plain internal links when pasted are converted to link/mwInternal': { fromClipboard: true, body: 'ab', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, [ 'a', [ { type: 'link/mwInternal', attributes: { title: 'Foo/Bar', normalizedTitle: 'Foo/Bar', lookupTitle: 'Foo/Bar' } } ] ], [ 'b', [ { type: 'link/mwInternal', attributes: { title: 'Foo/Bar', normalizedTitle: 'Foo/Bar', lookupTitle: 'Foo/Bar' } } ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], normalizedBody: 'ab', mwConfig: { wgArticlePath: '/wiki/$1' } }, 'plain href-less anchors when pasted are converted to spans': { fromClipboard: true, body: 'ab', data: [ { type: 'paragraph', internal: { generated: 'wrapper' } }, [ 'a', [ { type: 'textStyle/span', attributes: { nodeName: 'span' } } ] ], [ 'b', [ { type: 'textStyle/span', attributes: { nodeName: 'span' } } ] ], { type: '/paragraph' }, { type: 'internalList' }, { type: '/internalList' } ], normalizedBody: 'ab', fromDataBody: 'ab' } };