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