Merge "Preserve font size in ApiSandbox when going fullscreen"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 11 Oct 2016 16:24:47 +0000 (16:24 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 11 Oct 2016 16:24:47 +0000 (16:24 +0000)
1  2 
resources/src/mediawiki.special/mediawiki.special.apisandbox.js

@@@ -10,8 -10,7 +10,8 @@@
                suppressErrors = true,
                updatingBooklet = false,
                pages = {},
 -              moduleInfoCache = {};
 +              moduleInfoCache = {},
 +              baseRequestParams;
  
        WidgetMethods = {
                textInputWidget: {
                init: function () {
                        var $toolbar;
  
+                       ApiSandbox.isFullscreen = false;
                        $content = $( '#mw-apisandbox' );
  
                        windowManager = new OO.ui.WindowManager();
                                        fullscreenButton.$element,
                                        new OO.ui.ButtonWidget( {
                                                label: mw.message( 'apisandbox-submit' ).text(),
 -                                              flags: [ 'primary', 'constructive' ]
 +                                              flags: [ 'primary', 'progressive' ]
                                        } ).on( 'click', ApiSandbox.sendRequest ).$element,
                                        new OO.ui.ButtonWidget( {
                                                label: mw.message( 'apisandbox-reset' ).text(),
                 * Toggle "fullscreen" mode
                 */
                toggleFullscreen: function () {
-                       var $body = $( document.body );
+                       var $body = $( document.body ),
+                               $ui = $( '#mw-apisandbox-ui' );
+                       ApiSandbox.isFullscreen = !ApiSandbox.isFullscreen;
  
-                       $body.toggleClass( 'mw-apisandbox-fullscreen' );
-                       if ( $body.hasClass( 'mw-apisandbox-fullscreen' ) ) {
+                       $body.toggleClass( 'mw-apisandbox-fullscreen', ApiSandbox.isFullscreen );
+                       $ui.toggleClass( 'mw-body-content', ApiSandbox.isFullscreen );
+                       if ( ApiSandbox.isFullscreen ) {
                                fullscreenButton.setLabel( mw.message( 'apisandbox-unfullscreen' ).text() );
                                fullscreenButton.setTitle( mw.message( 'apisandbox-unfullscreen-tooltip' ).text() );
-                               $body.append( $( '#mw-apisandbox-ui' ) );
+                               $body.append( $ui );
                        } else {
                                fullscreenButton.setLabel( mw.message( 'apisandbox-fullscreen' ).text() );
                                fullscreenButton.setTitle( mw.message( 'apisandbox-fullscreen-tooltip' ).text() );
-                               $content.append( $( '#mw-apisandbox-ui' ) );
+                               $content.append( $ui );
                        }
                        ApiSandbox.resizePanel();
                },
                        var height = $( window ).height(),
                                contentTop = $content.offset().top;
  
-                       if ( $( document.body ).hasClass( 'mw-apisandbox-fullscreen' ) ) {
+                       if ( ApiSandbox.isFullscreen ) {
                                height -= panel.$element.offset().top - $( '#mw-apisandbox-ui' ).offset().top;
                                panel.$element.height( height - 1 );
                        } else {
  
                /**
                 * Submit button handler
 +               *
 +               * @param {Object} [params] Use this set of params instead of those in the form fields.
 +               *   The form fields will be updated to match.
                 */
 -              sendRequest: function () {
 +              sendRequest: function ( params ) {
                        var page, subpages, i, query, $result, $focus,
                                progress, $progressText, progressLoading,
                                deferreds = [],
 -                              params = {},
 +                              paramsAreForced = !!params,
                                displayParams = {},
                                checkPages = [ pages.main ];
  
  
                        suppressErrors = false;
  
 +                      // save widget state in params (or load from it if we are forced)
 +                      if ( paramsAreForced ) {
 +                              ApiSandbox.updateUI( params );
 +                      }
 +                      params = {};
                        while ( checkPages.length ) {
                                page = checkPages.shift();
                                deferreds.push( page.apiCheckValid() );
                                }
                        }
  
 +                      if ( !paramsAreForced ) {
 +                              // forced params means we are continuing a query; the base query should be preserved
 +                              baseRequestParams = $.extend( {}, params );
 +                      }
 +
                        $.when.apply( $, deferreds ).done( function () {
                                if ( $.inArray( false, arguments ) !== -1 ) {
                                        windowManager.openWindow( 'errorAlert', {
                                                        );
                                        } )
                                        .done( function ( data, jqXHR ) {
 -                                              var m, loadTime, button,
 +                                              var m, loadTime, button, clear,
                                                        ct = jqXHR.getResponseHeader( 'Content-Type' );
  
                                                $result.empty();
                                                                .text( data )
                                                                .appendTo( $result );
                                                }
 +                                              if ( paramsAreForced || data[ 'continue' ] ) {
 +                                                      $result.append(
 +                                                              $( '<div>' ).append(
 +                                                                      new OO.ui.ButtonWidget( {
 +                                                                              label: mw.message( 'apisandbox-continue' ).text()
 +                                                                      } ).on( 'click', function () {
 +                                                                              ApiSandbox.sendRequest( $.extend( {}, baseRequestParams, data[ 'continue' ] ) );
 +                                                                      } ).setDisabled( !data[ 'continue' ] ).$element,
 +                                                                      ( clear = new OO.ui.ButtonWidget( {
 +                                                                              label: mw.message( 'apisandbox-continue-clear' ).text()
 +                                                                      } ).on( 'click', function () {
 +                                                                              ApiSandbox.updateUI( baseRequestParams );
 +                                                                              clear.setDisabled( true );
 +                                                                              booklet.setPage( '|results|' );
 +                                                                      } ).setDisabled( !paramsAreForced ) ).$element,
 +                                                                      new OO.ui.PopupButtonWidget( {
 +                                                                              framed: false,
 +                                                                              icon: 'info',
 +                                                                              popup: {
 +                                                                                      $content: $( '<div>' ).append( mw.message( 'apisandbox-continue-help' ).parse() ),
 +                                                                                      padded: true
 +                                                                              }
 +                                                                      } ).$element
 +                                                              )
 +                                                      );
 +                                              }
                                                if ( typeof loadTime === 'number' ) {
                                                        $result.append(
                                                                $( '<div>' ).append(
                                                // Don't grey out the label when the field is disabled,
                                                // it makes it too hard to read and our "disabled"
                                                // isn't really disabled.
 +                                              widgetField.onFieldDisable( false );
                                                widgetField.onFieldDisable = doNothing;
  
                                                if ( Util.apiBool( pi.parameters[ i ].deprecated ) ) {
                                                        dynamicParamNameWidget,
                                                        new OO.ui.ButtonWidget( {
                                                                icon: 'add',
 -                                                              flags: 'constructive'
 +                                                              flags: 'progressive'
                                                        } ).on( 'click', addDynamicParamWidget ),
                                                        {
                                                                label: mw.message( 'apisandbox-dynamic-parameters-add-label' ).text(),