jenkins-bot has submitted this change and it was merged.

Change subject: Use Parsoid's new Cite HTML and CSS
......................................................................


Use Parsoid's new Cite HTML and CSS

Starting with I21fbbd3247bf7801e5ef9bd5312f95777f4dd6ef, Parsoid
will emit a new HTML for its Cite extension, which enables CSS
styling. In I487095df8a7c4241a14f7b4480360f6774130bec the new
module 'ext.cite.style' is added to the Cite extension to style
this new HTML format.

This patch
* Loads the ext.cite.style module if the Cite extension is
  present.
* Uses the new HTML format for the internal structure of
  reference and reference list nodes, so they are correctly
  styled.

Backwards compatibility: Only new HTML is used internally in VE,
so as long as ext.cite.style can be loaded the new styles will be
used. It does not depend on which format Parsoid returns, so this
patch only depends on the Cite extension patch, not on the Parsoid
one.

Note: The only way I've found of adding a ext.cite.style dependency
only if Cite is present is to register the whole
ext.visualEditor.mwreference module in the
onResourceLoaderRegisterModules hook. Maybe someone can point to
a better way?

Bug: T86782
Change-Id: Ibf333a502d64d2ed6e029221458b7c606554e414
---
M VisualEditor.hooks.php
M extension.json
M modules/ve-mw/ce/nodes/ve.ce.MWReferenceNode.js
M modules/ve-mw/ce/nodes/ve.ce.MWReferencesListNode.js
M modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js
5 files changed, 154 insertions(+), 65 deletions(-)

Approvals:
  Jforrester: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/VisualEditor.hooks.php b/VisualEditor.hooks.php
index 6113d9b..abf4d17 100644
--- a/VisualEditor.hooks.php
+++ b/VisualEditor.hooks.php
@@ -460,6 +460,71 @@
                }
 
                $resourceLoader->register( $addModules );
+
+               // Register ext.visualEditor.mwreference here, as it depends on 
the new
+               // Cite CSS style module ext.cite.style only if the Cite 
extension is
+               // present.
+               // This is a temporary hack, once the Cite extension uses the 
new CSS
+               // for everything (and it takes care of loading ext.cite.style 
itself),
+               // it can be removed from here and put back in extension.json.
+               $mwreferenceModule = $veResourceTemplate + array(
+                       'scripts' => array(
+                               
'modules/ve-mw/ui/widgets/ve.ui.MWReferenceGroupInputWidget.js',
+                               
'modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js',
+                               
'modules/ve-mw/ui/widgets/ve.ui.MWReferenceResultWidget.js',
+
+                               
'modules/ve-mw/ui/commands/ve.ui.MWUseExistingReferenceCommand.js',
+
+                               
'modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js',
+                               
'modules/ve-mw/ui/dialogs/ve.ui.MWReferencesListDialog.js',
+                               
'modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js',
+
+                               
'modules/ve-mw/ui/widgets/ve.ui.MWReferenceSourceSelectWidget.js',
+
+                               
'modules/ve-mw/ui/tools/ve.ui.MWReferenceDialogTool.js',
+                               
'modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js',
+
+                               
'modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js',
+                               
'modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js',
+                               
'modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js',
+                               
'modules/ve-mw/ui/actions/ve.ui.MWCitationAction.js',
+                       ),
+                       'styles' => array(
+                               
'modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceGroupInputWidget.css',
+                               
'modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceResultWidget.css',
+                               
'modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceSearchWidget.css',
+                       ),
+                       'dependencies' => array(
+                               'ext.visualEditor.mwreference.core',
+                               'ext.visualEditor.mwtransclusion',
+                               'ext.visualEditor.mediawiki'
+                       ),
+                       'messages' => array(
+                               'visualeditor-dialog-reference-editing-reused',
+                               
'visualeditor-dialog-reference-options-group-label',
+                               
'visualeditor-dialog-reference-options-group-placeholder',
+                               
'visualeditor-dialog-reference-options-name-label',
+                               'visualeditor-dialog-reference-options-section',
+                               'visualeditor-dialog-reference-title',
+                               
'visualeditor-dialog-reference-useexisting-full-label',
+                               
'visualeditor-dialog-reference-useexisting-label',
+                               
'visualeditor-dialog-reference-useexisting-tool',
+                               
'visualeditor-dialog-referenceslist-contextitem-description-general',
+                               
'visualeditor-dialog-referenceslist-contextitem-description-named',
+                               'visualeditor-dialog-referenceslist-title',
+                               
'visualeditor-dialogbutton-reference-full-label',
+                               'visualeditor-dialogbutton-reference-tooltip',
+                               
'visualeditor-dialogbutton-referenceslist-tooltip',
+                               'visualeditor-reference-input-placeholder',
+                       ),
+                       'targets' => array( 'desktop', 'mobile' ),
+               );
+
+               if ( isset( $resourceModules['ext.cite.style'] ) ||
+                               $resourceLoader->isModuleRegistered( 
'ext.cite.style' ) ) {
+                       $mwreferenceModule['dependencies'][] = 'ext.cite.style';
+               }
+               $resourceLoader->register( array( 
'ext.visualEditor.mwreference' => $mwreferenceModule ) );
                return true;
        }
 
diff --git a/extension.json b/extension.json
index fe4b536..cd6c056 100644
--- a/extension.json
+++ b/extension.json
@@ -1315,56 +1315,6 @@
                                "mobile"
                        ]
                },
-               "ext.visualEditor.mwreference": {
-                       "scripts": [
-                               
"modules/ve-mw/ui/widgets/ve.ui.MWReferenceGroupInputWidget.js",
-                               
"modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js",
-                               
"modules/ve-mw/ui/widgets/ve.ui.MWReferenceResultWidget.js",
-                               
"modules/ve-mw/ui/commands/ve.ui.MWUseExistingReferenceCommand.js",
-                               
"modules/ve-mw/ui/dialogs/ve.ui.MWCitationDialog.js",
-                               
"modules/ve-mw/ui/dialogs/ve.ui.MWReferencesListDialog.js",
-                               
"modules/ve-mw/ui/dialogs/ve.ui.MWReferenceDialog.js",
-                               
"modules/ve-mw/ui/widgets/ve.ui.MWReferenceSourceSelectWidget.js",
-                               
"modules/ve-mw/ui/tools/ve.ui.MWReferenceDialogTool.js",
-                               
"modules/ve-mw/ui/tools/ve.ui.MWCitationDialogTool.js",
-                               
"modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js",
-                               
"modules/ve-mw/ui/contextitems/ve.ui.MWReferencesListContextItem.js",
-                               
"modules/ve-mw/ui/contextitems/ve.ui.MWCitationContextItem.js",
-                               
"modules/ve-mw/ui/actions/ve.ui.MWCitationAction.js"
-                       ],
-                       "styles": [
-                               
"modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceGroupInputWidget.css",
-                               
"modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceResultWidget.css",
-                               
"modules/ve-mw/ui/styles/widgets/ve.ui.MWReferenceSearchWidget.css"
-                       ],
-                       "dependencies": [
-                               "ext.visualEditor.mwreference.core",
-                               "ext.visualEditor.mwtransclusion",
-                               "ext.visualEditor.mediawiki"
-                       ],
-                       "messages": [
-                               "visualeditor-dialog-reference-editing-reused",
-                               
"visualeditor-dialog-reference-options-group-label",
-                               
"visualeditor-dialog-reference-options-group-placeholder",
-                               
"visualeditor-dialog-reference-options-name-label",
-                               "visualeditor-dialog-reference-options-section",
-                               "visualeditor-dialog-reference-title",
-                               
"visualeditor-dialog-reference-useexisting-full-label",
-                               
"visualeditor-dialog-reference-useexisting-label",
-                               
"visualeditor-dialog-reference-useexisting-tool",
-                               
"visualeditor-dialog-referenceslist-contextitem-description-general",
-                               
"visualeditor-dialog-referenceslist-contextitem-description-named",
-                               "visualeditor-dialog-referenceslist-title",
-                               
"visualeditor-dialogbutton-reference-full-label",
-                               "visualeditor-dialogbutton-reference-tooltip",
-                               
"visualeditor-dialogbutton-referenceslist-tooltip",
-                               "visualeditor-reference-input-placeholder"
-                       ],
-                       "targets": [
-                               "desktop",
-                               "mobile"
-                       ]
-               },
                "ext.visualEditor.mwtransclusion.core": {
                        "scripts": [
                                
"modules/ve-mw/dm/nodes/ve.dm.MWTransclusionNode.js",
diff --git a/modules/ve-mw/ce/nodes/ve.ce.MWReferenceNode.js 
b/modules/ve-mw/ce/nodes/ve.ce.MWReferenceNode.js
index 6812672..aacd4b8 100644
--- a/modules/ve-mw/ce/nodes/ve.ce.MWReferenceNode.js
+++ b/modules/ve-mw/ce/nodes/ve.ce.MWReferenceNode.js
@@ -25,7 +25,13 @@
 
        // DOM changes
        this.$link = $( '<a>' ).attr( 'href', '#' );
-       this.$element.addClass( 've-ce-mwReferenceNode reference' ).append( 
this.$link );
+       this.$element.addClass( 've-ce-mwReferenceNode mw-ref' ).append( 
this.$link )
+               // In case we have received a version with old-style Cite HTML, 
remove the
+               // old reference class
+               .removeClass( 'reference' );
+       // Add a backwards-compatible text for browsers that don't support 
counters
+       this.$text = $( '<span>' ).addClass( 'mw-reflink-text' );
+       this.$link.append( this.$text );
 
        this.index = '';
        this.internalList = this.model.getDocument().internalList;
@@ -96,7 +102,14 @@
  * @method
  */
 ve.ce.MWReferenceNode.prototype.update = function () {
-       this.$link.text( this.model.getIndexLabel() );
+       var group = this.model.getGroup();
+       this.$text.text( this.model.getIndexLabel() );
+       this.$link.css( 'counterReset', 'mw-Ref ' + this.model.getIndex() );
+       if ( group ) {
+               this.$link.attr( 'data-mw-group', group );
+       } else {
+               this.$link.removeAttr( 'data-mw-group' );
+       }
 };
 
 /** */
diff --git a/modules/ve-mw/ce/nodes/ve.ce.MWReferencesListNode.js 
b/modules/ve-mw/ce/nodes/ve.ce.MWReferencesListNode.js
index 8e76157..da2649f 100644
--- a/modules/ve-mw/ce/nodes/ve.ce.MWReferencesListNode.js
+++ b/modules/ve-mw/ce/nodes/ve.ce.MWReferencesListNode.js
@@ -28,8 +28,8 @@
        this.listNode = null;
 
        // DOM changes
-       this.$element.addClass( 've-ce-mwReferencesListNode references' );
-       this.$reflist = $( '<ol class="references"></ol>' );
+       this.$element.addClass( 've-ce-mwReferencesListNode' );
+       this.$reflist = $( '<ol class="mw-references"></ol>' );
        this.$refmsg = $( '<p>' )
                .addClass( 've-ce-mwReferencesListNode-muted' );
 
@@ -143,7 +143,8 @@
  * Update the references list.
  */
 ve.ce.MWReferencesListNode.prototype.update = function () {
-       var i, j, n, iLen, jLen, index, firstNode, key, keyedNodes, $li, 
modelNode, viewNode,
+       var i, j, n, iLen, jLen, index, firstNode, key, keyedNodes, modelNode, 
viewNode,
+               $li, $refSpan, $link,
                internalList = this.model.getDocument().internalList,
                refGroup = this.model.getAttribute( 'refGroup' ),
                listGroup = this.model.getAttribute( 'listGroup' ),
@@ -151,6 +152,12 @@
 
        this.$reflist.detach().empty();
        this.$refmsg.detach();
+
+       if ( refGroup !== '' ) {
+               this.$reflist.attr( 'data-mw-group', refGroup );
+       } else {
+               this.$reflist.removeAttr( 'data-mw-group' );
+       }
 
        if ( !nodes || !nodes.indexOrder.length ) {
                if ( refGroup !== '' ) {
@@ -191,13 +198,26 @@
                        $li = $( '<li>' );
 
                        if ( keyedNodes.length > 1 ) {
+                               $refSpan = $( '<span rel="mw:referencedBy">' );
                                for ( j = 0, jLen = keyedNodes.length; j < 
jLen; j++ ) {
-                                       $li.append(
-                                               $( '<sup>' ).append(
-                                                       $( '<a>' ).text( n + 
'.' + j )
-                                               )
-                                       ).append( ' ' );
+                                       $link = $( '<a>' ).append(
+                                               $( '<span 
class="mw-linkback-text">' )
+                                                       .text( ( j + 1 ) + ' ' )
+                                       );
+                                       if ( refGroup !== '' ) {
+                                               $link.attr( 'data-mw-group', 
refGroup );
+                                       }
+                                       $refSpan.append( $link );
                                }
+                               $li.append( $refSpan );
+                       } else {
+                               $link = $( '<a rel="mw:referencedBy">' ).append(
+                                       $( '<span class="mw-linkback-text">' 
).text( '↑ ' )
+                               );
+                               if ( refGroup !== '' ) {
+                                       $link.attr( 'data-mw-group', refGroup );
+                               }
+                               $li.append( $link );
                        }
 
                        // Generate reference HTML from first item in key
diff --git a/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js 
b/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js
index aa60520..37a2ba4 100644
--- a/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js
+++ b/modules/ve-mw/dm/nodes/ve.dm.MWReferenceNode.js
@@ -244,6 +244,31 @@
 };
 
 /**
+ * Gets the index for the reference
+ * @static
+ * @param {Object} dataElement Element data
+ * @param {ve.dm.InternalList} internalList Internal list
+ * @return {Number} Index
+ */
+ve.dm.MWReferenceNode.static.getIndex = function ( dataElement, internalList ) 
{
+       var listIndex = dataElement.attributes.listIndex,
+               listGroup = dataElement.attributes.listGroup,
+               position = internalList.getIndexPosition( listGroup, listIndex 
);
+
+       return position + 1;
+};
+
+/**
+ * Gets the group for the reference
+ * @static
+ * @param {Object} dataElement Element data
+ * @return {string} Group
+ */
+ve.dm.MWReferenceNode.static.getGroup = function ( dataElement ) {
+       return dataElement.attributes.refGroup;
+};
+
+/**
  * Gets the index label for the reference
  * @static
  * @param {Object} dataElement Element data
@@ -251,12 +276,10 @@
  * @return {string} Reference label
  */
 ve.dm.MWReferenceNode.static.getIndexLabel = function ( dataElement, 
internalList ) {
-       var listIndex = dataElement.attributes.listIndex,
-               listGroup = dataElement.attributes.listGroup,
-               refGroup = dataElement.attributes.refGroup,
-               position = internalList.getIndexPosition( listGroup, listIndex 
);
+       var refGroup = dataElement.attributes.refGroup,
+               index = ve.dm.MWReferenceNode.static.getIndex( dataElement, 
internalList );
 
-       return '[' + ( refGroup ? refGroup + ' ' : '' ) + ( position + 1 ) + 
']';
+       return '[' + ( refGroup ? refGroup + ' ' : '' ) + index + ']';
 };
 
 /* Methods */
@@ -281,6 +304,24 @@
 };
 
 /**
+ * Gets the index for the reference
+ *
+ * @return {Number} Index
+ */
+ve.dm.MWReferenceNode.prototype.getIndex = function () {
+       return this.constructor.static.getIndex( this.element, 
this.getDocument().getInternalList() );
+};
+
+/**
+ * Gets the group for the reference
+ *
+ * @return {string} Group
+ */
+ve.dm.MWReferenceNode.prototype.getGroup = function () {
+       return this.constructor.static.getGroup( this.element );
+};
+
+/**
  * Gets the index label for the reference
  *
  * @return {string} Reference label

-- 
To view, visit https://gerrit.wikimedia.org/r/207483
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ibf333a502d64d2ed6e029221458b7c606554e414
Gerrit-PatchSet: 12
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Marcoil <m...@marcoil.org>
Gerrit-Reviewer: Alex Monk <kren...@gmail.com>
Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org>
Gerrit-Reviewer: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: Marcoil <m...@marcoil.org>
Gerrit-Reviewer: MarkTraceur <mtrac...@member.fsf.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to