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

Reply via email to