Marcoil has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/159483

Change subject: WIP: Use CSS to style Cite references
......................................................................

WIP: Use CSS to style Cite references

Remove directly outputting reference numbers and text for <ref>s and
<references>, use CSS instead to add those so that it can be configured
per-wiki.

This is an exploratory patch to see if the strategy is sound. Right now
the CSS is served directly from localhost.

Change-Id: I74d487874be4e2692f17a9bd5ec351f4a20eadc6
---
A api/static/css/cite.css
M lib/ext.Cite.js
M lib/mediawiki.DOMPostProcessor.js
3 files changed, 70 insertions(+), 23 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/parsoid 
refs/changes/83/159483/1

diff --git a/api/static/css/cite.css b/api/static/css/cite.css
new file mode 100644
index 0000000..da9133a
--- /dev/null
+++ b/api/static/css/cite.css
@@ -0,0 +1,38 @@
+/* Styling for back-links from references to their <ref> */
+
+/* Both single and multiple backlinks */
+*[rel="mw:referencedBy"]::before {
+       content: "^ ";
+       font-weight: bold;
+}
+
+span[rel="mw:referencedBy"]::before {
+       font-weight: normal;
+}
+
+/* Each back-link */
+span[rel="mw:referencedBy"] a::before {
+       content: counter(mw-Ref, lower-alpha);
+       vertical-align: super;
+       line-height: 1;
+       font-weight: bold;
+       font-style: italic;
+       font-size: 80%;
+       padding-right: 0.40em;
+}
+
+/* Styling for <ref>s */
+
+span.reference {
+       font-size: 80%;
+}
+
+/* with group */
+span.reference a[data-mw-group]::after {
+       content: "[" attr(data-mw-group) " " counter(mw-Ref, decimal) "]";
+}
+
+/* without group */
+span.reference a::after {
+       content: "[" counter(mw-Ref, decimal) "]";
+}
\ No newline at end of file
diff --git a/lib/ext.Cite.js b/lib/ext.Cite.js
index c685436..0bf2c50 100644
--- a/lib/ext.Cite.js
+++ b/lib/ext.Cite.js
@@ -189,8 +189,7 @@
 
 RefGroup.prototype.renderLine = function(refsList, ref) {
        var ownerDoc = refsList.ownerDocument,
-               arrow = ownerDoc.createTextNode('↑'),
-               li, a;
+               li, a, reftext_span;
 
        // Generate the li and set ref content first, so the HTML gets parsed.
        // We then append the rest of the ref nodes before the first node
@@ -199,39 +198,43 @@
                'about': "#" + ref.target,
                'id': ref.target
        });
-       li.innerHTML = ref.content;
+       reftext_span = ownerDoc.createElement('span');
+       reftext_span.setAttribute('class', 'reference-text');
+       reftext_span.innerHTML = ref.content;
+       li.appendChild(reftext_span);
 
        var contentNode = li.firstChild;
-
-       // 'mw:referencedBy' span wrapper
-       var span = ownerDoc.createElement('span');
-       span.setAttribute('rel', 'mw:referencedBy');
-       li.insertBefore(span, contentNode);
 
        // Generate leading linkbacks
        if (ref.linkbacks.length === 1) {
                a = ownerDoc.createElement('a');
                DU.addAttributes(a, {
-                       'href': '#' + ref.linkbacks[0]
+                       'href': '#' + ref.linkbacks[0],
+                       'rel': 'mw:referencedBy',
+                       'style': "counter-reset: mw-Ref 0"
                });
-               a.appendChild(arrow);
-               span.appendChild(a);
+               if (ref.group) {
+                       a.setAttribute('data-mw-group', ref.group);
+               }
+               li.insertBefore(a, contentNode);
        } else {
-               span.appendChild(arrow);
+               // 'mw:referencedBy' span wrapper
+               var span = ownerDoc.createElement('span');
+               span.setAttribute('rel', 'mw:referencedBy');
+               li.insertBefore(span, contentNode);
+
                ref.linkbacks.forEach(function(linkback, i) {
                        a = ownerDoc.createElement('a');
                        DU.addAttributes(a, {
-                               'href': '#' + ref.linkbacks[i]
+                               'href': '#' + ref.linkbacks[i],
+                               'style': "counter-reset: mw-Ref " + (i+1)
                        });
-                       a.appendChild(ownerDoc.createTextNode(ref.groupIndex + 
'.' + i));
-                       // Separate linkbacks with a space
-                       span.appendChild(ownerDoc.createTextNode(' '));
+                       if (ref.group) {
+                               a.setAttribute('data-mw-group', ref.group);
+                       }
                        span.appendChild(a);
                });
        }
-
-       // Space before content node
-       li.insertBefore(ownerDoc.createTextNode(' '), contentNode);
 
        // Add it to the ref list
        refsList.appendChild(li);
@@ -392,10 +395,13 @@
 
        // refIndex-a
        var refIndex = doc.createElement('a');
-       refIndex.setAttribute('href', '#' + ref.target);
-       refIndex.appendChild(doc.createTextNode(
-               '[' + ((group === '') ? '' : group + ' ') + ref.groupIndex + ']'
-       ));
+       DU.addAttributes(refIndex, {
+               'href': '#' + ref.target,
+               'style': 'counter-reset: mw-Ref ' + ref.groupIndex
+       });
+       if (ref.group) {
+               refIndex.setAttribute('data-mw-group', ref.group);
+       }
        span.appendChild(refIndex);
 
        if (!nestedInReferences) {
diff --git a/lib/mediawiki.DOMPostProcessor.js 
b/lib/mediawiki.DOMPostProcessor.js
index b20c8bf..b2b88c1 100644
--- a/lib/mediawiki.DOMPostProcessor.js
+++ b/lib/mediawiki.DOMPostProcessor.js
@@ -347,6 +347,9 @@
                appendToHead( document, 'link', { rel: 'stylesheet', href: 
styleURI } );
        }
 
+       // TEMP: Send a CSS file here for testing Cite styling
+       appendToHead(document, 'link', {rel: 'stylesheet', href: 
'http://localhost:8000/static/css/cite.css'});
+
        // stick data-parsoid in the head
        if ( psd.storeDataParsoid ) {
                var dp = JSON.stringify( DU.getDataParsoid( document ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I74d487874be4e2692f17a9bd5ec351f4a20eadc6
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/parsoid
Gerrit-Branch: master
Gerrit-Owner: Marcoil <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to