Merge pull request #7619 from Snuffleupagus/SecondaryToolbar-setMaxHeight-events
Only update the `max-height` of the `SecondaryToolbar` when it's actually visible
This commit is contained in:
		
						commit
						23a0264a15
					
				
							
								
								
									
										10
									
								
								web/app.js
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								web/app.js
									
									
									
									
									
								
							@ -270,7 +270,7 @@ var PDFViewerApplication = {
 | 
				
			|||||||
      new PDFDocumentProperties(appConfig.documentProperties);
 | 
					      new PDFDocumentProperties(appConfig.documentProperties);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.secondaryToolbar =
 | 
					    this.secondaryToolbar =
 | 
				
			||||||
      new SecondaryToolbar(appConfig.secondaryToolbar, eventBus);
 | 
					      new SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (this.supportsFullscreen) {
 | 
					    if (this.supportsFullscreen) {
 | 
				
			||||||
      this.pdfPresentationMode = new PDFPresentationMode({
 | 
					      this.pdfPresentationMode = new PDFPresentationMode({
 | 
				
			||||||
@ -1807,10 +1807,6 @@ function webViewerResize() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    PDFViewerApplication.pdfViewer.update();
 | 
					    PDFViewerApplication.pdfViewer.update();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Set the 'max-height' CSS property of the secondary toolbar.
 | 
					 | 
				
			||||||
  var mainContainer = PDFViewerApplication.appConfig.mainContainer;
 | 
					 | 
				
			||||||
  PDFViewerApplication.secondaryToolbar.setMaxHeight(mainContainer);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
window.addEventListener('hashchange', function webViewerHashchange(evt) {
 | 
					window.addEventListener('hashchange', function webViewerHashchange(evt) {
 | 
				
			||||||
@ -1894,10 +1890,6 @@ function webViewerLocalized() {
 | 
				
			|||||||
      container.setAttribute('style', 'min-width: ' + width + 'px; ' +
 | 
					      container.setAttribute('style', 'min-width: ' + width + 'px; ' +
 | 
				
			||||||
                                      'max-width: ' + width + 'px;');
 | 
					                                      'max-width: ' + width + 'px;');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Set the 'max-height' CSS property of the secondary toolbar.
 | 
					 | 
				
			||||||
    var mainContainer = PDFViewerApplication.appConfig.mainContainer;
 | 
					 | 
				
			||||||
    PDFViewerApplication.secondaryToolbar.setMaxHeight(mainContainer);
 | 
					 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -34,6 +34,9 @@ var mozL10n = uiUtils.mozL10n;
 | 
				
			|||||||
 * @property {HTMLDivElement} toolbar - Container for the secondary toolbar.
 | 
					 * @property {HTMLDivElement} toolbar - Container for the secondary toolbar.
 | 
				
			||||||
 * @property {HTMLButtonElement} toggleButton - Button to toggle the visibility
 | 
					 * @property {HTMLButtonElement} toggleButton - Button to toggle the visibility
 | 
				
			||||||
 *   of the secondary toolbar.
 | 
					 *   of the secondary toolbar.
 | 
				
			||||||
 | 
					 * @property {HTMLDivElement} toolbarButtonContainer - Container where all the
 | 
				
			||||||
 | 
					 *   toolbar buttons are placed. The maximum height of the toolbar is controlled
 | 
				
			||||||
 | 
					 *   dynamically by adjusting the 'max-height' CSS property of this DOM element.
 | 
				
			||||||
 * @property {HTMLButtonElement} presentationModeButton - Button for entering
 | 
					 * @property {HTMLButtonElement} presentationModeButton - Button for entering
 | 
				
			||||||
 *   presentation mode.
 | 
					 *   presentation mode.
 | 
				
			||||||
 * @property {HTMLButtonElement} openFileButton - Button to open a file.
 | 
					 * @property {HTMLButtonElement} openFileButton - Button to open a file.
 | 
				
			||||||
@ -63,11 +66,13 @@ var SecondaryToolbar = (function SecondaryToolbarClosure() {
 | 
				
			|||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * @constructs SecondaryToolbar
 | 
					   * @constructs SecondaryToolbar
 | 
				
			||||||
   * @param {SecondaryToolbarOptions} options
 | 
					   * @param {SecondaryToolbarOptions} options
 | 
				
			||||||
 | 
					   * @param {HTMLDivElement} mainContainer
 | 
				
			||||||
   * @param {EventBus} eventBus
 | 
					   * @param {EventBus} eventBus
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  function SecondaryToolbar(options, eventBus) {
 | 
					  function SecondaryToolbar(options, mainContainer, eventBus) {
 | 
				
			||||||
    this.toolbar = options.toolbar;
 | 
					    this.toolbar = options.toolbar;
 | 
				
			||||||
    this.toggleButton = options.toggleButton;
 | 
					    this.toggleButton = options.toggleButton;
 | 
				
			||||||
 | 
					    this.toolbarButtonContainer = options.toolbarButtonContainer;
 | 
				
			||||||
    this.buttons = [
 | 
					    this.buttons = [
 | 
				
			||||||
      { element: options.presentationModeButton, eventName: 'presentationmode',
 | 
					      { element: options.presentationModeButton, eventName: 'presentationmode',
 | 
				
			||||||
        close: true },
 | 
					        close: true },
 | 
				
			||||||
@ -87,16 +92,19 @@ var SecondaryToolbar = (function SecondaryToolbarClosure() {
 | 
				
			|||||||
        eventName: 'documentproperties', close: true }
 | 
					        eventName: 'documentproperties', close: true }
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.mainContainer = mainContainer;
 | 
				
			||||||
    this.eventBus = eventBus;
 | 
					    this.eventBus = eventBus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.opened = false;
 | 
					    this.opened = false;
 | 
				
			||||||
 | 
					    this.containerHeight = null;
 | 
				
			||||||
    this.previousContainerHeight = null;
 | 
					    this.previousContainerHeight = null;
 | 
				
			||||||
    this.newContainerHeight = null;
 | 
					 | 
				
			||||||
    this.buttonContainer = this.toolbar.firstElementChild;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Bind the event listeners for click and hand tool actions.
 | 
					    // Bind the event listeners for click and hand tool actions.
 | 
				
			||||||
    this._bindClickListeners();
 | 
					    this._bindClickListeners();
 | 
				
			||||||
    this._bindHandToolListener(options.toggleHandToolButton);
 | 
					    this._bindHandToolListener(options.toggleHandToolButton);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Bind the event listener for adjusting the 'max-height' of the toolbar.
 | 
				
			||||||
 | 
					    this.eventBus.on('resize', this._setMaxHeight.bind(this));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SecondaryToolbar.prototype = {
 | 
					  SecondaryToolbar.prototype = {
 | 
				
			||||||
@ -119,7 +127,7 @@ var SecondaryToolbar = (function SecondaryToolbarClosure() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        element.addEventListener('click', function (eventName, close) {
 | 
					        element.addEventListener('click', function (eventName, close) {
 | 
				
			||||||
          if (eventName !== null) {
 | 
					          if (eventName !== null) {
 | 
				
			||||||
            this.eventBus.dispatch(eventName);
 | 
					            this.eventBus.dispatch(eventName, { source: this, });
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          if (close) {
 | 
					          if (close) {
 | 
				
			||||||
            this.close();
 | 
					            this.close();
 | 
				
			||||||
@ -155,6 +163,8 @@ var SecondaryToolbar = (function SecondaryToolbarClosure() {
 | 
				
			|||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      this.opened = true;
 | 
					      this.opened = true;
 | 
				
			||||||
 | 
					      this._setMaxHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      this.toggleButton.classList.add('toggled');
 | 
					      this.toggleButton.classList.add('toggled');
 | 
				
			||||||
      this.toolbar.classList.remove('hidden');
 | 
					      this.toolbar.classList.remove('hidden');
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@ -176,18 +186,22 @@ var SecondaryToolbar = (function SecondaryToolbarClosure() {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setMaxHeight: function SecondaryToolbar_setMaxHeight(container) {
 | 
					    /**
 | 
				
			||||||
      if (!container || !this.buttonContainer) {
 | 
					     * @private
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    _setMaxHeight: function SecondaryToolbar_setMaxHeight() {
 | 
				
			||||||
 | 
					      if (!this.opened) {
 | 
				
			||||||
 | 
					        return; // Only adjust the 'max-height' if the toolbar is visible.
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.containerHeight = this.mainContainer.clientHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (this.containerHeight === this.previousContainerHeight) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      this.newContainerHeight = container.clientHeight;
 | 
					      this.toolbarButtonContainer.setAttribute('style',
 | 
				
			||||||
      if (this.previousContainerHeight === this.newContainerHeight) {
 | 
					        'max-height: ' + (this.containerHeight - SCROLLBAR_PADDING) + 'px;');
 | 
				
			||||||
        return;
 | 
					
 | 
				
			||||||
      }
 | 
					      this.previousContainerHeight = this.containerHeight;
 | 
				
			||||||
      var maxHeight = this.newContainerHeight - SCROLLBAR_PADDING;
 | 
					 | 
				
			||||||
      this.buttonContainer.setAttribute('style',
 | 
					 | 
				
			||||||
        'max-height: ' + maxHeight + 'px;');
 | 
					 | 
				
			||||||
      this.previousContainerHeight = this.newContainerHeight;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -79,6 +79,8 @@ function getViewerConfiguration() {
 | 
				
			|||||||
    secondaryToolbar: {
 | 
					    secondaryToolbar: {
 | 
				
			||||||
      toolbar: document.getElementById('secondaryToolbar'),
 | 
					      toolbar: document.getElementById('secondaryToolbar'),
 | 
				
			||||||
      toggleButton: document.getElementById('secondaryToolbarToggle'),
 | 
					      toggleButton: document.getElementById('secondaryToolbarToggle'),
 | 
				
			||||||
 | 
					      toolbarButtonContainer:
 | 
				
			||||||
 | 
					        document.getElementById('secondaryToolbarButtonContainer'),
 | 
				
			||||||
      presentationModeButton:
 | 
					      presentationModeButton:
 | 
				
			||||||
        document.getElementById('secondaryPresentationMode'),
 | 
					        document.getElementById('secondaryPresentationMode'),
 | 
				
			||||||
      openFileButton: document.getElementById('secondaryOpenFile'),
 | 
					      openFileButton: document.getElementById('secondaryOpenFile'),
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user