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

Change subject: Add metadata button to go to file description page directly
......................................................................


Add metadata button to go to file description page directly

Change-Id: I0f2c2b24aece3b806d572a0ed41dce8031e6ae6b
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/226
---
M MultimediaViewer.php
M i18n/en.json
M i18n/qqq.json
M resources/mmv/mmv.mixins.less
A resources/mmv/ui/img/commons_gray.svg
A resources/mmv/ui/img/grayscale.svg
M resources/mmv/ui/mmv.ui.js
M resources/mmv/ui/mmv.ui.metadataPanel.js
M resources/mmv/ui/mmv.ui.stripeButtons.js
M resources/mmv/ui/mmv.ui.stripeButtons.less
M tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js
M tests/qunit/mmv/ui/mmv.ui.test.js
12 files changed, 171 insertions(+), 19 deletions(-)

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



diff --git a/MultimediaViewer.php b/MultimediaViewer.php
index 7025634..8757acd 100644
--- a/MultimediaViewer.php
+++ b/MultimediaViewer.php
@@ -317,6 +317,9 @@
                'messages' => array(
                        'multimediaviewer-feedback-button-text',
                        'multimediaviewer-feedback-popup-text',
+                       'multimediaviewer-description-page-button-text',
+                       'multimediaviewer-description-page-popup-text',
+                       'multimediaviewer-description-page-popup-text-local',
                ),
        ), $moduleInfo( 'mmv/ui' ) );
 
diff --git a/i18n/en.json b/i18n/en.json
index 1acc91d..e02ab21 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -89,5 +89,8 @@
     "multimediaviewer-embed-dimensions-separated": "- $1",
     "multimediaviewer-embed-dimensions-with-file-format": "$1 $2",
     "multimediaviewer-feedback-button-text": "Your feedback about this tool",
-    "multimediaviewer-feedback-popup-text": "Leave feedback about this new 
media viewing experience"
-}
\ No newline at end of file
+    "multimediaviewer-feedback-popup-text": "Leave feedback about this new 
media viewing experience",
+    "multimediaviewer-description-page-button-text": "More details",
+    "multimediaviewer-description-page-popup-text": "More details on $1",
+    "multimediaviewer-description-page-popup-text-local": "More details"
+}
diff --git a/i18n/qqq.json b/i18n/qqq.json
index e7078e9..3134b74 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -92,5 +92,8 @@
     "multimediaviewer-embed-dimensions-separated": "Wraps the dimensions with 
a separator styled the same way, for the embed tab.\n* $1 - image 
dimensions\n\nSee also:\n* {{msg-mw|Multimediaviewer-embed-dimensions}}",
     "multimediaviewer-embed-dimensions-with-file-format": "Collates image 
dimensions and a file format.\n* $1 - image dimensions\n* $2 - file format 
extension, lowercased\n\nSee also:\n* 
{{msg-mw|Multimediaviewer-embed-dimensions}}",
     "multimediaviewer-feedback-button-text": "Text of the button on top of the 
metadata panel which brings up a feedback survey. See also 
{{mw-msg|multimediaviewer-feedback-popup-text}}.",
-    "multimediaviewer-feedback-popup-text": "Additional popup text of the 
button on top of the metadata panel which brings up a feedback survey. See also 
{{mw-msg|multimediaviewer-feedback-button-text}}."
+    "multimediaviewer-feedback-popup-text": "Additional popup text of the 
button on top of the metadata panel which brings up a feedback survey. See also 
{{mw-msg|multimediaviewer-feedback-button-text}}.",
+    "multimediaviewer-description-page-button-text": "Text of the button on 
top of the metadata panel which links to the file description page. See also 
{{mw-msg|multimediaviewer-description-page-popup-text}}.",
+    "multimediaviewer-description-page-popup-text": "Additional popup text of 
the button on top of the metadata panel which links to the file description 
page. See also {{mw-msg|multimediaviewer-description-page-button-text}}. $1 is 
the name of the site where the file comes from (e.g. \"Wikimedia Commons\").",
+    "multimediaviewer-description-page-popup-text-local": "Same as 
{{mw-msg|multimediaviewer-description-page-popup-text-local}}, but for local 
files."
 }
diff --git a/resources/mmv/mmv.mixins.less b/resources/mmv/mmv.mixins.less
index f7e9a8a..3b1b995 100644
--- a/resources/mmv/mmv.mixins.less
+++ b/resources/mmv/mmv.mixins.less
@@ -38,4 +38,14 @@
 
     filter:  progid:DXImageTransform.Microsoft.BasicImage(rotation=(@degrees / 
90.0));
        -ms-filter: 
"progid:DXImageTransform.Microsoft.BasicImage(rotation=(@degrees / 90.0))";
+}
+
+// from http://pixelhunter.me/post/25782670606/css3-grayscale
+.grayscale() {
+       -webkit-filter: grayscale(100%);
+       -moz-filter: grayscale(100%);
+       -ms-filter: grayscale(100%);
+       -o-filter: grayscale(100%);
+       filter: grayscale(100%);
+       filter: gray; // IE 6-9
 }
\ No newline at end of file
diff --git a/resources/mmv/ui/img/commons_gray.svg 
b/resources/mmv/ui/img/commons_gray.svg
new file mode 100644
index 0000000..958c687
--- /dev/null
+++ b/resources/mmv/ui/img/commons_gray.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 
6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; x="0px" y="0px"
+        viewBox="0 0 80 80" enable-background="new 0 0 80 80" 
xml:space="preserve">
+<g id="g4939_2_" transform="matrix(1.052195,0,0,1.052195,-7.7556,-16.09329)">
+       <path id="path4653_2_" fill="#777777" 
d="M44.6,85.1c-6.6-0.2-12.7-3.2-17-8.2c-3.6-4.2-5.5-9.5-5.5-15.1c0-5.6,1.9-10.9,5.6-15.2
+               
c0.5-0.6,1.7-1.8,1.8-1.8c0,0,1.4,1.4,3.1,3.1l3.1,3.1l0.9-0.8c0.5-0.5,0.9-0.8,0.9-0.8c0,0,0.6,1.9,1.8,6.4c0,0,0,0.1-0.1,0.1
+               
c0,0-5.9-1.6-6.3-1.7c0,0-0.1,0-0.1,0c0,0,0.4-0.4,0.8-0.9c0.5-0.5,0.8-0.9,0.8-0.9c0-0.1-1.5-1.6-1.5-1.6c0,0-0.4,0.5-0.8,0.9
+               
c-1.9,2.4-3.1,5.4-3.4,8.4c-0.1,0.8-0.1,0.9,0,1c0.1,0,2.1,0,2.2,0c0,0,0-0.3,0-1.2c0-1.2,0-1.2,0.1-1.2c0.1,0,5.7,3.3,5.7,3.3
+               
c0,0,0,0.1-0.1,0.1C36.5,62,31,65.1,31,65.1c0,0,0-0.5,0-1.2l0-1.2h-1.1h-1.1l0,0.3c0,0.6,0.2,1.7,0.4,2.5c0.5,2.4,1.6,4.6,3.1,6.5
+               
c0.3,0.3,0.8,1,0.8,1c0,0,1.6-1.5,1.6-1.6c0,0-0.4-0.4-0.8-0.9c-0.5-0.5-0.8-0.9-0.8-0.9c0-0.1,6.4-1.8,6.4-1.7
+               
c0,0-1.7,6.4-1.7,6.4c0,0-0.3-0.3-0.9-0.8c-0.5-0.5-0.9-0.9-0.9-0.9c-0.1,0-1.6,1.5-1.5,1.6c0,0.1,0.6,0.6,1.1,0.9
+               
c1.9,1.4,4.1,2.5,6.5,3c0.8,0.2,1.9,0.3,2.5,0.4l0.3,0v-1.1v-1.1l-1.2,0c-0.8,0-1.2,0-1.2,0c0-0.1,3.3-5.8,3.3-5.8
+               
c0,0,3.3,5.7,3.3,5.8c0,0-0.4,0-1.2,0l-1.2,0v1.1v1.1l0.3,0c0.6,0,1.7-0.2,2.5-0.4c2.4-0.5,4.6-1.6,6.5-3c0.4-0.3,1-0.8,1.1-0.9
+               
s-1.5-1.6-1.5-1.6c0,0-0.4,0.4-0.9,0.9c-0.5,0.5-0.9,0.8-0.9,0.8c0-0.1-1.7-6.4-1.7-6.4c0,0,6.4,1.7,6.4,1.7c0,0-0.3,0.3-0.8,0.9
+               
c-0.5,0.5-0.8,0.9-0.8,0.9c0,0.1,1.5,1.6,1.6,1.6c0.1,0,0.6-0.6,0.8-1c1.5-1.9,2.5-4.2,3.1-6.5c0.2-0.8,0.3-1.9,0.3-2.5l0-0.3H61
+               
h-1.1l0,1.2c0,0.7,0,1.2,0,1.2c0,0-5.5-3.1-5.7-3.3c0,0-0.1-0.1-0.1-0.1c0,0,5.6-3.3,5.7-3.3c0.1,0,0.1,0,0.1,1.2
+               
c0,0.9,0,1.2,0,1.2c0,0,2.1,0.1,2.2,0c0,0,0-0.1,0-1c-0.3-3-1.5-6-3.4-8.4c-0.4-0.5-0.8-0.9-0.8-0.9c0,0-1.5,1.5-1.5,1.5
+               
c0,0,0.4,0.4,0.8,0.9c0.5,0.5,0.8,0.9,0.8,0.9c0,0,0,0-0.1,0.1c-0.4,0.1-6.3,1.7-6.3,1.7c0,0-0.1,0,0-0.1c1.2-4.4,1.7-6.3,1.8-6.4
+               
c0,0,0.4,0.3,0.9,0.8l0.9,0.8l0.8-0.8c0.4-0.4,0.8-0.8,0.8-0.8c0,0-0.5-0.4-0.9-0.7c-0.9-0.6-1.5-0.8-4.4-2c-2-0.8-3-1.3-4.2-2.1
+               
c-2.6-1.8-4.3-4.1-5.4-7.4c-0.1-0.4-0.5-1.6-0.5-1.6c0-0.1-0.2,0-1.6,0.5C38,36.7,37.3,37,37.1,37c-0.3,0-0.4-0.1-0.2-0.3
+               
c0.1-0.2,0.2-0.3,0.5-0.7c0.7-0.9,1.3-1.7,2-3.1c1.2-2.2,2.4-5.2,3.4-8.6c0.3-1,0.7-2.3,0.8-2.6c0-0.1,0-0.2,0.1-0.2
+               
c0,0,2.9,4.9,4.3,7.2c2.7,4.8,3.9,7.3,3.6,7.5c-0.1,0.1-0.2,0-0.7-0.5c-0.7-0.7-1.1-0.9-1.8-1.2c-0.3-0.1-0.8-0.2-1.1-0.2
+               
c-0.3,0-0.3,0-0.2,0.4c0.4,1.6,1.1,2.8,2,3.6c0.9,0.9,2,1.5,4.8,2.6c2.2,0.9,3.6,1.6,4.8,2.4c1,0.7,1.8,1.3,2.6,2.2
+               
c5,5.1,7.3,12,6.5,19.1c-0.7,6.2-4,11.8-8.9,15.6c-2.8,2.1-5.9,3.6-9.3,4.3C48.5,84.9,46.4,85.1,44.6,85.1z"/>
+       <path id="path4697_2_" fill="#777777" 
d="M44.9,69.6c-1.2-0.1-2-0.3-2.9-0.8c-0.9-0.4-1.5-0.9-2.2-1.6c-1.1-1.2-1.9-2.6-2.1-4.3
+               
c-0.1-0.6-0.1-1.7,0-2.2c0.1-0.8,0.3-1.5,0.6-2.1c1.1-2.4,3.3-4.1,6-4.5c0.3,0,0.5-0.1,1.1-0.1c0.6,0,0.9,0,1.1,0.1
+               
c2.7,0.4,4.9,2.1,6,4.5c0.3,0.7,0.5,1.3,0.6,2.1c0.1,0.5,0.1,1.7,0,2.2c-0.1,0.8-0.3,1.5-0.7,2.2C52,66,51.6,66.6,51,67.2
+               
c-0.7,0.7-1.3,1.2-2.2,1.6c-1.1,0.5-2.1,0.8-3.3,0.8C45.3,69.6,45,69.6,44.9,69.6z"/>
+</g>
+</svg>
diff --git a/resources/mmv/ui/img/grayscale.svg 
b/resources/mmv/ui/img/grayscale.svg
new file mode 100644
index 0000000..80a4cfe
--- /dev/null
+++ b/resources/mmv/ui/img/grayscale.svg
@@ -0,0 +1,8 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg";>
+<filter id="grayscale">
+<feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0
+ 0.3333 0.3333 0.3333 0 0
+ 0.3333 0.3333 0.3333 0 0
+ 0  0  0  1 0"/>
+</filter>
+</svg>
diff --git a/resources/mmv/ui/mmv.ui.js b/resources/mmv/ui/mmv.ui.js
index 2b92d6d..82f348f 100644
--- a/resources/mmv/ui/mmv.ui.js
+++ b/resources/mmv/ui/mmv.ui.js
@@ -31,6 +31,12 @@
 
                /** @property {Object.<string, string[]>} eventsRegistered 
Events that this element has registered with the DOM. */
                this.eventsRegistered = {};
+
+               /**
+                * @property {Object.<string, jQuery>} $inlineStyles a list of 
`<style>` elements in the head
+                *  which we use to manipulate pseudo-classes and 
pseudo-elements.
+                */
+               this.$inlineStyles = [];
        }
        EP = Element.prototype;
 
@@ -93,6 +99,28 @@
                }
        };
 
+       /**
+        * Manipulate CSS directly. This is needed to set styles for 
pseudo-classes and pseudo-elements.
+        * @param {string} key some name to identify the style
+        * @param {string|null} style a CSS snippet (set to null to delete the 
given style)
+        */
+       EP.setRepoInlineStyle = function ( key, style ) {
+
+               if ( !this.$inlineStyles ) {
+                       this.$inlineStyles = [];
+               }
+
+               if ( !this.$inlineStyles[key] ) {
+                       if ( !style ) {
+                               return;
+                       }
+
+                       this.$inlineStyles[key] = $( '<style type="text/css" 
/>' ).appendTo( 'head' );
+               }
+
+               this.$inlineStyles[key].html( style || '' );
+       };
+
        mw.mmv.ui = {};
        mw.mmv.ui.reuse = {};
        mw.mmv.ui.Element = Element;
diff --git a/resources/mmv/ui/mmv.ui.metadataPanel.js 
b/resources/mmv/ui/mmv.ui.metadataPanel.js
index 3cbefe2..e92b151 100644
--- a/resources/mmv/ui/mmv.ui.metadataPanel.js
+++ b/resources/mmv/ui/mmv.ui.metadataPanel.js
@@ -420,17 +420,13 @@
                // This horror exists because the CSS uses a :before 
pseudo-class to
                // define the repo icon. This is the only way to override it.
                if ( favIcon ) {
-                       if ( !this.$repoLiInlineStyle ) {
-                               this.$repoLiInlineStyle = $( '<style 
type="text/css" />' ).appendTo( 'head' );
-                       }
-
-                       this.$repoLiInlineStyle.html( '.mw-mmv-image-links 
li.mw-mmv-repo-li:before '
-                               + '{ background-image: url("'
-                               + favIcon
-                               + '"); }'
+                       this.setRepoInlineStyle( 'repoDisplay',
+                               '.mw-mmv-image-links li.mw-mmv-repo-li:before 
{' +
+                                       'background-image: url("' + favIcon + 
'");' +
+                               '}'
                        );
-               } else if ( this.$repoLiInlineStyle ) {
-                       this.$repoLiInlineStyle.html( '' );
+               } else {
+                       this.setRepoInlineStyle( 'repoDisplay', null );
                }
 
                this.$repoLi.removeClass( 'empty' );
@@ -667,7 +663,7 @@
 
                this.consolidateCredit( !!imageData.source, !!imageData.author 
);
 
-               this.buttons.set();
+               this.buttons.set( imageData, repoData );
 
                this.description.set( imageData.description, image.caption );
                this.categories.set( repoData.getArticlePath(), 
imageData.categories );
diff --git a/resources/mmv/ui/mmv.ui.stripeButtons.js 
b/resources/mmv/ui/mmv.ui.stripeButtons.js
index 072c8ec..f29c882 100644
--- a/resources/mmv/ui/mmv.ui.stripeButtons.js
+++ b/resources/mmv/ui/mmv.ui.stripeButtons.js
@@ -41,6 +41,7 @@
 
                this.initFeedbackButton();
                this.initReuseButton();
+               this.initDescriptionPageButton();
        }
        oo.inheritClass( StripeButtons, mw.mmv.ui.Element );
        SBP = StripeButtons.prototype;
@@ -69,6 +70,13 @@
                this.buttons.$reuse = this.createButton(
                        'mw-mmv-stripe-button-reuse',
                        mw.message( 'multimediaviewer-reuse-link' ).text()
+               );
+       };
+
+       SBP.initDescriptionPageButton = function() {
+               this.buttons.$descriptionPage = this.createButton(
+                       'mw-mmv-stripe-button-commons',
+                       mw.message( 
'multimediaviewer-description-page-button-text' ).plain()
                );
        };
 
@@ -151,11 +159,35 @@
 
        /**
         * @inheritdoc
+        * @param {mw.mmv.model.Image} imageInfo
+        * @param {mw.mmv.model.Repo} repoInfo
         */
-       SBP.set = function () {
+       SBP.set = function ( imageInfo, repoInfo ) {
+               var descPagePopupMessage;
+
                this.eachButton( function ( $button ) {
                        $button.removeClass( 'empty' );
                } );
+
+               descPagePopupMessage = repoInfo.isLocal
+                       ? 'multimediaviewer-description-page-popup-text-local'
+                       : 'multimediaviewer-description-page-popup-text';
+
+               this.buttons.$descriptionPage.prop( {
+                       href: imageInfo.descriptionUrl,
+                       title: mw.message( descPagePopupMessage, 
repoInfo.displayName ).plain()
+               } );
+
+               if ( imageInfo.repo === 'wikimediacommons' ) {
+                       this.buttons.$descriptionPage.addClass( 
'mw-mmv-stripe-button-commons' );
+               } else {
+                       this.buttons.$descriptionPage.addClass( 
'mw-mmv-stripe-button-dynamic' );
+                       this.setRepoInlineStyle( 
'stripe-button-description-page',
+                               '.mw-mmv-stripe-button-dynamic:before {' +
+                                       'background-image: url("' + 
repoInfo.favIcon + '");' +
+                               '}'
+                       );
+               }
        };
 
        /**
@@ -163,8 +195,14 @@
         */
        SBP.empty = function () {
                this.eachButton( function ( $button ) {
-                       $button.addClass( 'empty' ).removeClass( 'open' );
+                       $button.addClass( 'empty' );
                } );
+
+               this.buttons.$reuse.removeClass( 'open' );
+               this.buttons.$descriptionPage.prop( 'href', undefined )
+                       .removeClass( 'mw-mmv-stripe-button-dynamic 
mw-mmv-stripe-button-commons' );
+               $( '.mw-mmv-stripe-button-dynamic-before' ).remove();
+               this.setRepoInlineStyle( 'stripe-button-description-page', null 
);
        };
 
        /**
diff --git a/resources/mmv/ui/mmv.ui.stripeButtons.less 
b/resources/mmv/ui/mmv.ui.stripeButtons.less
index 8928bf8..326af11 100644
--- a/resources/mmv/ui/mmv.ui.stripeButtons.less
+++ b/resources/mmv/ui/mmv.ui.stripeButtons.less
@@ -61,3 +61,16 @@
        background-image: url(img/horn_grey.svg);
        background-size: 100%;
 }
+
+.mw-mmv-stripe-button-commons:before {
+       /* @embed */
+       background-image: url(img/commons_gray.svg);
+}
+
+// for othe repos than Wikimedia Commons we manipulate :before dynamically 
from JS
+.mw-mmv-stripe-button-dynamic:before {
+       .grayscale;
+
+       width: 0.8em;
+       height: 0.8em;
+}
diff --git a/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js 
b/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js
index 442638f..354bc18 100644
--- a/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js
+++ b/tests/qunit/mmv/ui/mmv.ui.stripeButtons.test.js
@@ -18,18 +18,21 @@
 ( function( mw, $ ) {
        QUnit.module( 'mmv.ui.StripeButtons', QUnit.newMwEnvironment() );
 
-       QUnit.test( 'Sanity test, object creation and UI construction', 3, 
function ( assert ) {
+       QUnit.test( 'Sanity test, object creation and UI construction', 4, 
function ( assert ) {
                var buttons = new mw.mmv.ui.StripeButtons( $( '#qunit-fixture' 
) );
 
                assert.ok( buttons, 'UI element is created.' );
                assert.strictEqual( buttons.buttons.$reuse.length, 1, 'Reuse 
button created.' );
                assert.strictEqual( buttons.buttons.$feedback.length, 1, 
'Feedback button created.' );
+               assert.strictEqual( buttons.buttons.$descriptionPage.length, 1, 
'Feedback button created.' );
        } );
 
        QUnit.test( 'set()/empty() sanity test:', 1, function ( assert ) {
-               var buttons = new mw.mmv.ui.StripeButtons( $( '#qunit-fixture' 
) );
+               var buttons = new mw.mmv.ui.StripeButtons( $( '#qunit-fixture' 
) ),
+                       fakeImageInfo = { descriptionUrl: 
'//commons.wikimedia.org/wiki/File:Foo.jpg' },
+                       fakeRepoInfo = { displayName: 'Wikimedia Commons' };
 
-               buttons.set();
+               buttons.set( fakeImageInfo, fakeRepoInfo );
                buttons.empty();
 
                assert.ok( true, 'No error on set()/empty().' );
diff --git a/tests/qunit/mmv/ui/mmv.ui.test.js 
b/tests/qunit/mmv/ui/mmv.ui.test.js
index b9a3af8..a195881 100755
--- a/tests/qunit/mmv/ui/mmv.ui.test.js
+++ b/tests/qunit/mmv/ui/mmv.ui.test.js
@@ -14,4 +14,19 @@
 
                $( document ).trigger( new $.Event( 'mmv-foo' ) );
        } );
+
+       QUnit.test( 'setRepoInlineStyle()', 3, function ( assert ) {
+               var element = new mw.mmv.ui.Element( $( '<div>' ) ),
+                       $testDiv = $( '<div id="mmv-testdiv">!!!</div>' 
).appendTo( '#qunit-fixture' );
+
+               assert.ok( $testDiv.is( ':visible' ), 'Test div is visible' );
+
+               element.setRepoInlineStyle( 'test', '#mmv-testdiv { display: 
none; }' );
+
+               assert.ok( !$testDiv.is( ':visible' ), 'Test div is hidden by 
inline style' );
+
+               element.setRepoInlineStyle( 'test', null );
+
+               assert.ok( $testDiv.is( ':visible' ), 'Test div is visible 
again' );
+       } );
 }( mediaWiki, jQuery ) );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I0f2c2b24aece3b806d572a0ed41dce8031e6ae6b
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/extensions/MultimediaViewer
Gerrit-Branch: master
Gerrit-Owner: Gergő Tisza <gti...@wikimedia.org>
Gerrit-Reviewer: Aarcos <aarcos.w...@gmail.com>
Gerrit-Reviewer: Gergő Tisza <gti...@wikimedia.org>
Gerrit-Reviewer: Gilles <gdu...@wikimedia.org>
Gerrit-Reviewer: Siebrand <siebr...@kitano.nl>
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