Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/78204
Change subject: Generic support for multiple tags in TextStyleAnnotation
......................................................................
Generic support for multiple tags in TextStyleAnnotation
Change-Id: If8e2f541adb045f9b84a913829a5b7430ca83299
---
M modules/ve-mw/test/dm/ve.dm.mwExample.js
M modules/ve/ce/annotations/ve.ce.TextStyleAnnotation.js
M modules/ve/dm/annotations/ve.dm.TextStyleAnnotation.js
M modules/ve/test/dm/ve.dm.example.js
4 files changed, 77 insertions(+), 50 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/04/78204/1
diff --git a/modules/ve-mw/test/dm/ve.dm.mwExample.js
b/modules/ve-mw/test/dm/ve.dm.mwExample.js
index af5a244..e0b8af2 100644
--- a/modules/ve-mw/test/dm/ve.dm.mwExample.js
+++ b/modules/ve-mw/test/dm/ve.dm.mwExample.js
@@ -585,6 +585,7 @@
'b',
[ {
'type': 'textStyle/bold',
+ 'attributes': { 'nodeName': 'b' },
'htmlAttributes': [ { 'values': {
'data-parsoid': '1'
} } ]
@@ -595,6 +596,7 @@
'd',
[ {
'type': 'textStyle/bold',
+ 'attributes': { 'nodeName': 'b' },
'htmlAttributes': [ { 'values': {
'data-parsoid': '2'
} } ]
@@ -608,6 +610,7 @@
'a',
[ {
'type': 'textStyle/bold',
+ 'attributes': { 'nodeName': 'b' },
'htmlAttributes': [ { 'values': {
'data-parsoid': '3'
} } ]
@@ -617,6 +620,7 @@
'b',
[ {
'type': 'textStyle/bold',
+ 'attributes': { 'nodeName': 'b' },
'htmlAttributes': [ { 'values': {
'data-parsoid': '3'
} } ]
@@ -626,6 +630,7 @@
'c',
[ {
'type': 'textStyle/bold',
+ 'attributes': { 'nodeName': 'b' },
'htmlAttributes': [ { 'values': {
'data-parsoid': '4'
} } ]
diff --git a/modules/ve/ce/annotations/ve.ce.TextStyleAnnotation.js
b/modules/ve/ce/annotations/ve.ce.TextStyleAnnotation.js
index d8f2d8f..d8b1cc4 100644
--- a/modules/ve/ce/annotations/ve.ce.TextStyleAnnotation.js
+++ b/modules/ve/ce/annotations/ve.ce.TextStyleAnnotation.js
@@ -30,6 +30,12 @@
ve.ce.TextStyleAnnotation.static.name = 'textStyle';
+/* Methods */
+
+ve.ce.TextStyleAnnotation.prototype.getTagName = function () {
+ return this.getModel().getAttribute( 'nodeName' ) ||
this.constructor.static.tagName;
+};
+
/* Registration */
ve.ce.annotationFactory.register( ve.ce.TextStyleAnnotation );
@@ -236,8 +242,6 @@
this.$.addClass( 've-ce-TextStyleCodeAnnotation' );
};
ve.inheritClass( ve.ce.TextStyleCodeAnnotation, ve.ce.TextStyleAnnotation );
-ve.ce.TextStyleCodeAnnotation.prototype.getTagName = function () {
- return this.getModel().getAttribute( 'nodeName' ) || 'code';
-};
ve.ce.TextStyleCodeAnnotation.static.name = 'textStyle/code';
+ve.ce.TextStyleCodeAnnotation.static.tagName = 'code';
ve.ce.annotationFactory.register( ve.ce.TextStyleCodeAnnotation );
diff --git a/modules/ve/dm/annotations/ve.dm.TextStyleAnnotation.js
b/modules/ve/dm/annotations/ve.dm.TextStyleAnnotation.js
index 4421bfb..fe8b770 100644
--- a/modules/ve/dm/annotations/ve.dm.TextStyleAnnotation.js
+++ b/modules/ve/dm/annotations/ve.dm.TextStyleAnnotation.js
@@ -30,39 +30,53 @@
ve.dm.TextStyleAnnotation.static.matchTagNames = [];
ve.dm.TextStyleAnnotation.static.toDataElement = function ( domElements ) {
- var types = {
- 'b': 'bold',
- 'i': 'italic',
- 'u': 'underline',
- 's': 'strike',
- 'small': 'small',
- 'big': 'big',
- 'span': 'span',
- 'strong': 'strong',
- 'em': 'emphasize',
- 'sup': 'superScript',
- 'sub': 'subScript'
- };
+ var nodeName = domElements[0].nodeName.toLowerCase(),
+ types = {
+ 'b': 'bold',
+ 'i': 'italic',
+ 'u': 'underline',
+ 's': 'strike',
+ 'small': 'small',
+ 'big': 'big',
+ 'span': 'span',
+ 'strong': 'strong',
+ 'em': 'emphasize',
+ 'sup': 'superScript',
+ 'sub': 'subScript',
+ 'code': 'code',
+ 'tt': 'code'
+ };
return {
- 'type': 'textStyle/' +
types[domElements[0].nodeName.toLowerCase()]
+ 'type': 'textStyle/' + types[nodeName],
+ 'attributes': {
+ 'nodeName': nodeName
+ }
};
};
ve.dm.TextStyleAnnotation.static.toDomElements = function ( dataElement, doc )
{
- var nodeNames = {
- 'bold': 'b',
- 'italic': 'i',
- 'underline': 'u',
- 'strike': 's',
- 'small': 'small',
- 'big': 'big',
- 'span': 'span',
- 'strong': 'strong',
- 'emphasize': 'em',
- 'superScript': 'sup',
- 'subScript': 'sub'
- };
- return [ doc.createElement( nodeNames[dataElement.type.substring( 10 )]
) ];
+ var nodeNames,
+ nodeName = ve.getProp( dataElement, 'attributes', 'nodeName' );
+
+ if ( nodeName ) {
+ return [ doc.createElement( ve.getProp( dataElement,
'attributes', 'nodeName' ) ) ];
+ } else {
+ nodeNames = {
+ 'bold': 'b',
+ 'italic': 'i',
+ 'underline': 'u',
+ 'strike': 's',
+ 'small': 'small',
+ 'big': 'big',
+ 'span': 'span',
+ 'strong': 'strong',
+ 'emphasize': 'em',
+ 'superScript': 'sup',
+ 'subScript': 'sub',
+ 'code': 'code'
+ };
+ return [ doc.createElement( nodeNames[
dataElement.type.substring( 10 ) ] ) ];
+ }
};
/* Methods */
@@ -272,18 +286,4 @@
ve.inheritClass( ve.dm.TextStyleCodeAnnotation, ve.dm.TextStyleAnnotation );
ve.dm.TextStyleCodeAnnotation.static.name = 'textStyle/code';
ve.dm.TextStyleCodeAnnotation.static.matchTagNames = ['code', 'tt'];
-
-ve.dm.TextStyleCodeAnnotation.static.toDataElement = function ( domElements ) {
- return {
- 'type': 'textStyle/code',
- 'attributes': {
- 'nodeName': domElements[0].nodeName.toLowerCase()
- }
- };
-};
-
-ve.dm.TextStyleCodeAnnotation.static.toDomElements = function ( dataElement,
doc ) {
- return [ doc.createElement( ve.getProp( dataElement, 'attributes',
'nodeName' ) || 'code' ) ];
-};
-
ve.dm.modelRegistry.register( ve.dm.TextStyleCodeAnnotation );
diff --git a/modules/ve/test/dm/ve.dm.example.js
b/modules/ve/test/dm/ve.dm.example.js
index 888908b..2e941c5 100644
--- a/modules/ve/test/dm/ve.dm.example.js
+++ b/modules/ve/test/dm/ve.dm.example.js
@@ -81,11 +81,13 @@
};
/* Some common annotations in shorthand format */
-ve.dm.example.bold = { 'type': 'textStyle/bold' };
-ve.dm.example.italic = { 'type': 'textStyle/italic' };
-ve.dm.example.underline = { 'type': 'textStyle/underline' };
-ve.dm.example.span = { 'type': 'textStyle/span' };
-ve.dm.example.big = { 'type': 'textStyle/big' };
+ve.dm.example.bold = { 'type': 'textStyle/bold', 'attributes': { 'nodeName':
'b' } };
+ve.dm.example.italic = { 'type': 'textStyle/italic', 'attributes': {
'nodeName': 'i' } };
+ve.dm.example.underline = { 'type': 'textStyle/underline', 'attributes': {
'nodeName': 'u' } };
+ve.dm.example.span = { 'type': 'textStyle/span', 'attributes': { 'nodeName':
'span' } };
+ve.dm.example.big = { 'type': 'textStyle/big', 'attributes': { 'nodeName':
'big' } };
+ve.dm.example.code = { 'type': 'textStyle/code', 'attributes': { 'nodeName':
'code' } };
+ve.dm.example.tt = { 'type': 'textStyle/code', 'attributes': { 'nodeName':
'tt' } };
/**
* Creates a document from example data.
@@ -867,6 +869,22 @@
{ 'type': '/internalList' }
]
},
+ 'equivalent annotations': {
+ 'html':
'<body><p><code>a</code>b<tt>c</tt>d<code>e</code><tt>f</tt></body>',
+ 'data': [
+ { 'type': 'paragraph' },
+ ['a', [ ve.dm.example.code ]],
+ 'b',
+ ['c', [ ve.dm.example.tt ]],
+ 'd',
+ ['e', [ ve.dm.example.code ]],
+ ['f', [ ve.dm.example.tt ]],
+ { 'type': '/paragraph' },
+ { 'type': 'internalList' },
+ { 'type': '/internalList' }
+ ],
+ 'normalizedHtml':
'<body><p><code>a</code>b<tt>c</tt>d<code>ef</code></body>'
+ },
'additive annotations': {
'html':
'<body><p><big>a<big>b</big>c</big><b>d<b>e</b>f</b></p></body>',
'data': [
--
To view, visit https://gerrit.wikimedia.org/r/78204
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If8e2f541adb045f9b84a913829a5b7430ca83299
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits