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

Change subject: Display version selector via JavaScript
......................................................................


Display version selector via JavaScript

Change-Id: I4d1da7addbd7776e1ba78988298274b77c1ee8b3
---
A .jshintrc
M ExtensionDistributor.hooks.php
M extension.json
A resources/ext.extensiondistributor.special.css
A resources/ext.extensiondistributor.special.infuse.js
M resources/ext.extensiondistributor.special.js
M specials/SpecialBaseDistributor.php
7 files changed, 174 insertions(+), 14 deletions(-)

Approvals:
  Bartosz Dziewoński: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000..eb7dc06
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,26 @@
+{
+       /* Common */
+
+       // Enforcing
+       "camelcase": true,
+       "curly": true,
+       "eqeqeq": true,
+       "immed": true,
+       "latedef": true,
+       "newcap": true,
+       "noarg": true,
+       "noempty": true,
+       "nonew": true,
+       "quotmark": "single",
+       "trailing": true,
+       "undef": true,
+       "unused": true,
+       // Legacy
+       "onevar": true,
+
+       /* Local */
+       "predef": [
+               "mediaWiki",
+               "jQuery"
+       ]
+}
diff --git a/ExtensionDistributor.hooks.php b/ExtensionDistributor.hooks.php
index 9d696d0..11858e6 100644
--- a/ExtensionDistributor.hooks.php
+++ b/ExtensionDistributor.hooks.php
@@ -20,4 +20,35 @@
 
                return true;
        }
+
+       /**
+        * Hook to register our ResourceLoader module that depends upon 
configuration
+        *
+        * @param ResourceLoader $resourceLoader
+        */
+       public static function onResourceLoaderRegisterModules( ResourceLoader 
&$resourceLoader ) {
+               global $wgExtDistSnapshotRefs;
+               $module = array(
+                       'scripts' => 'ext.extensiondistributor.special.js',
+                       'styles' => 'ext.extensiondistributor.special.css',
+                       'dependencies' => array(
+                               'mediawiki.api',
+                               'mediawiki.jqueryMsg',
+                               'oojs-ui'
+                       ),
+                       'messages' => array(
+                               'extdist-choose-version-extensions',
+                               'extdist-choose-version-skins',
+                               'extdist-submit-version',
+                               'extdist-no-versions-extensions',
+                               'extdist-no-versions-skins',
+                       ),
+                       'localBasePath' => __DIR__ . '/resources',
+                       'remoteExtPath' => 'ExtensionDistributor/resources',
+               );
+               foreach ( $wgExtDistSnapshotRefs as $branchName ) {
+                       $module['messages'][] = "extdist-branch-$branchName";
+               }
+               $resourceLoader->register( 'ext.extensiondistributor.special', 
$module );
+       }
 }
diff --git a/extension.json b/extension.json
index 6d37de6..be10566 100644
--- a/extension.json
+++ b/extension.json
@@ -30,6 +30,9 @@
        "Hooks": {
                "APIQuerySiteInfoGeneralInfo": [
                        
"ExtensionDistributorHooks::onAPIQuerySiteInfoGeneralInfo"
+               ],
+               "ResourceLoaderRegisterModules": [
+                       
"ExtensionDistributorHooks::onResourceLoaderRegisterModules"
                ]
        },
        "SpecialPages": {
@@ -52,9 +55,11 @@
                "remoteExtPath": "ExtensionDistributor/resources"
        },
        "ResourceModules": {
-               "ext.extensiondistributor.special": {
-                       "scripts": "ext.extensiondistributor.special.js",
-                       "dependencies": ["oojs-ui"]
+               "ext.extensiondistributor.special.infuse": {
+                       "scripts": "ext.extensiondistributor.special.infuse.js",
+                       "dependencies": [
+                               "oojs-ui"
+                       ]
                }
        }
 }
diff --git a/resources/ext.extensiondistributor.special.css 
b/resources/ext.extensiondistributor.special.css
new file mode 100644
index 0000000..704aec2
--- /dev/null
+++ b/resources/ext.extensiondistributor.special.css
@@ -0,0 +1,4 @@
+/* make it look the same width as the input fields */
+#mw-extdist-continue {
+       max-width: 50em;
+}
diff --git a/resources/ext.extensiondistributor.special.infuse.js 
b/resources/ext.extensiondistributor.special.infuse.js
new file mode 100644
index 0000000..e398c1b
--- /dev/null
+++ b/resources/ext.extensiondistributor.special.infuse.js
@@ -0,0 +1,7 @@
+/* global OO */
+( function( $, OO ) {
+       'use strict';
+       $( function() {
+               OO.ui.infuse( 'mw-extdist-selector-version' );
+       } );
+}( jQuery, OO ) );
diff --git a/resources/ext.extensiondistributor.special.js 
b/resources/ext.extensiondistributor.special.js
index 88bfe56..1b236c6 100644
--- a/resources/ext.extensiondistributor.special.js
+++ b/resources/ext.extensiondistributor.special.js
@@ -1,9 +1,85 @@
-/* global OO */
-( function( $, OO ) {
-       "use strict";
+/* global OO, window */
+( function( $, mw, OO ) {
+       'use strict';
        $( function() {
                // infusing the DropdownInputWidgets makes
                // them look prettier.
-               OO.ui.infuse( 'mw-extdist-selector' );
+               var selector = OO.ui.infuse( 'mw-extdist-selector' ),
+                       distributorType, progress,
+                       $continue = $( '#mw-extdist-continue' );
+               if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 
'ExtensionDistributor' ) {
+                       distributorType = 'extensions';
+               } else {
+                       distributorType = 'skins';
+               }
+
+               function processAPIResponse( data ) {
+                       var info = 
data.query.extdistbranches[distributorType][selector.getValue()],
+                               options = [],
+                               versionSelector;
+                       $.each( mw.config.get( 'wgExtDistSnapshotRefs' ), 
function( i, value ) {
+                               if ( info[value] ) {
+                                       options.push( { data: value, label: 
mw.msg( 'extdist-branch-' + value ) } );
+                               }
+                       } );
+                       // Hide progress bar
+                       progress.$element.remove();
+                       if ( !options.length ) {
+                               // Eek, no branches found....
+                               $continue.text( mw.message(
+                                               'extdist-no-versions-' + 
distributorType,
+                                               selector.getValue()
+                               ).text() );
+                               return;
+                       }
+                       versionSelector = new OO.ui.DropdownInputWidget( {
+                               id: 'mw-extdist-selector-version',
+                               options: options,
+                               value: mw.config.get( 
'wgExtDistDefaultSnapshot' ),
+                               name: 'extdist_version'
+                       } );
+                       // JS parser doesn't handle \n\n, see T100229
+                       $continue.html( mw.message(
+                               'extdist-choose-version-' + distributorType,
+                               selector.getValue()
+                       ).parse().replace( /\n\n/g, '<p>' ) );
+                       // Add version selector after the help text
+                       $continue.after( versionSelector.$element );
+                       var versionButton = new OO.ui.ButtonInputWidget( {
+                               id: 'mw-extdist-submit-button',
+                               name: 'extdist_submit',
+                               label: mw.msg( 'extdist-submit-version' ),
+                               flags: ['primary', 'progressive']
+                       } ).on( 'click', function() {
+                               // Redirect to download page:
+                               // 
extdist_name=ExtensionDistributor&extdist_version=master
+                               window.location.href = mw.util.getUrl( 
mw.config.get( 'wgPageName' ), {
+                                       'extdist_name': selector.getValue(),
+                                       'extdist_version': 
versionSelector.getValue()
+                               } );
+                       } );
+                       versionSelector.$element.after( versionButton.$element 
);
+               }
+               selector.on( 'change', function() {
+                       var params;
+                       // Hide any things created for previous selections
+                       $( '#mw-extdist-selector-version' ).remove();
+                       $( '#mw-extdist-submit-button' ).remove();
+                       $continue.text( '' );
+                       // Add a progress bar to the page
+                       progress = new OO.ui.ProgressBarWidget();
+                       $continue.before( progress.$element );
+                       params = {
+                               action: 'query',
+                               list: 'extdistbranches'
+                       };
+                       if ( distributorType === 'extensions' ) {
+                               params.edbexts = selector.getValue();
+                       } else {
+                               params.edbskins = selector.getValue();
+                       }
+
+                       ( new mw.Api() ).get( params ).done( processAPIResponse 
);
+               } );
        } );
-}( jQuery, OO ) );
+}( jQuery, mediaWiki, OO ) );
diff --git a/specials/SpecialBaseDistributor.php 
b/specials/SpecialBaseDistributor.php
index a184bc5..8aa3a6a 100644
--- a/specials/SpecialBaseDistributor.php
+++ b/specials/SpecialBaseDistributor.php
@@ -87,6 +87,7 @@
        }
 
        protected function showExtensionSelector() {
+               global $wgExtDistSnapshotRefs, $wgExtDistDefaultSnapshot;
                $repos = $this->getProvider()->getRepositoryList();
 
                if ( !$repos ) {
@@ -111,6 +112,10 @@
                }
                // Add JS infuse magic
                $out->addModules( 'ext.extensiondistributor.special' );
+               $out->addJsConfigVars( array(
+                       'wgExtDistSnapshotRefs' => $wgExtDistSnapshotRefs,
+                       'wgExtDistDefaultSnapshot' => $wgExtDistDefaultSnapshot
+               ) );
                $out->addHTML(
                        new OOUI\DropdownInputWidget( array(
                                'id' => 'mw-extdist-selector',
@@ -118,12 +123,17 @@
                                'options' => $items,
                                'name' => 'extdist_name',
                        ) ) .
-                       new OOUI\ButtonInputWidget( array(
+                       // noscript because JS triggers on selector
+                       Html::rawElement( 'noscript', array(), new 
OOUI\ButtonInputWidget( array(
+                               'id' => 'mw-extdist-ext-submit',
+                               'infusable' => true,
                                'name' => 'extdist_submit',
                                'label' => $this->msg( 
'extdist-submit-extension' )->text(),
                                'type' => 'submit',
-                       ) ) .
-                       Xml::closeElement( 'form' ) . "\n"
+                               'flags' => array( 'primary', 'progressive' ),
+                       ) ) ) .
+                       Xml::closeElement( 'form' ) . "\n" .
+                       Html::element( 'div', array( 'id' => 
'mw-extdist-continue' ) )
                );
        }
 
@@ -142,7 +152,6 @@
                }
 
                $out = $this->getOutput();
-               $out->enableOOUI();
                // extdist-choose-version-extensions, 
extdist-choose-version-skins
                $out->addWikiMsg( $this->msgKey( 'extdist-choose-version-$TYPE' 
), $repoName );
                $html =
@@ -164,10 +173,11 @@
                if ( $selected !== 0 ) {
                        $out->addHTML( $html );
                        // Add JS infuse magic
-                       $out->addModules( 'ext.extensiondistributor.special' );
+                       $out->addModules( 
'ext.extensiondistributor.special.infuse' );
+                       $out->enableOOUI();
                        $out->addHTML(
                                new OOUI\DropdownInputWidget( array(
-                                       'id' => 'mw-extdist-selector',
+                                       'id' => 'mw-extdist-selector-version',
                                        'infusable' => true,
                                        'options' => $options,
                                        'value' => $wgExtDistDefaultSnapshot,
@@ -177,6 +187,7 @@
                                        'name' => 'extdist_submit',
                                        'label' => $this->msg( 
'extdist-submit-version' )->text(),
                                        'type' => 'submit',
+                                       'flags' => array( 'primary', 
'progressive' ),
                                ) ) .
                                Xml::closeElement( 'form' ) . "\n"
                        );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I4d1da7addbd7776e1ba78988298274b77c1ee8b3
Gerrit-PatchSet: 10
Gerrit-Project: mediawiki/extensions/ExtensionDistributor
Gerrit-Branch: master
Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: Bartosz Dziewoński <matma....@gmail.com>
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