From 77d025dc14f0a3eabb1ade8c9a46af9a8776ddfa Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 20 Mar 2018 13:25:13 +0100 Subject: [PATCH] Move the `isPortraitOrientation` helper function from `web/base_viewer.js` to `web/ui_utils.js` A couple of basic unit-tests are added, and a manual `isLandscape` check (in `web/base_viewer.js`) is also converted to use the helper function instead. --- test/unit/ui_utils_spec.js | 23 ++++++++++++++++++++++- web/base_viewer.js | 16 ++++++---------- web/ui_utils.js | 5 +++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/test/unit/ui_utils_spec.js b/test/unit/ui_utils_spec.js index 180b7a036..64426c966 100644 --- a/test/unit/ui_utils_spec.js +++ b/test/unit/ui_utils_spec.js @@ -15,7 +15,7 @@ import { binarySearchFirstItem, EventBus, getPageSizeInches, getPDFFileNameFromURL, - isValidRotation, waitOnEventOrTimeout, WaitOnType + isPortraitOrientation, isValidRotation, waitOnEventOrTimeout, WaitOnType } from '../../web/ui_utils'; import { createObjectURL } from '../../src/shared/util'; import isNodeJS from '../../src/shared/is_node'; @@ -285,6 +285,27 @@ describe('ui_utils', function() { }); }); + describe('isPortraitOrientation', function() { + it('should be portrait orientation', function() { + expect(isPortraitOrientation({ + width: 200, + height: 400, + })).toEqual(true); + + expect(isPortraitOrientation({ + width: 500, + height: 500, + })).toEqual(true); + }); + + it('should be landscape orientation', function() { + expect(isPortraitOrientation({ + width: 600, + height: 300, + })).toEqual(false); + }); + }); + describe('waitOnEventOrTimeout', function() { let eventBus; diff --git a/web/base_viewer.js b/web/base_viewer.js index bc7955750..daefce3cc 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -14,9 +14,10 @@ */ import { - CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, isValidRotation, - MAX_AUTO_SCALE, NullL10n, PresentationModeState, RendererType, - SCROLLBAR_PADDING, TextLayerMode, UNKNOWN_SCALE, VERTICAL_PADDING, watchScroll + CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, isPortraitOrientation, + isValidRotation, MAX_AUTO_SCALE, NullL10n, PresentationModeState, + RendererType, SCROLLBAR_PADDING, TextLayerMode, UNKNOWN_SCALE, + VERTICAL_PADDING, watchScroll } from './ui_utils'; import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue'; import { AnnotationLayerBuilder } from './annotation_layer_builder'; @@ -94,10 +95,6 @@ function isSameScale(oldScale, newScale) { return false; } -function isPortraitOrientation(size) { - return size.width <= size.height; -} - /** * Simple viewer control to display PDF content/pages. * @implements {IRenderableView} @@ -578,11 +575,10 @@ class BaseViewer { scale = Math.min(pageWidthScale, pageHeightScale); break; case 'auto': - let isLandscape = (currentPage.width > currentPage.height); // For pages in landscape mode, fit the page height to the viewer // *unless* the page would thus become too wide to fit horizontally. - let horizontalScale = isLandscape ? - Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; + let horizontalScale = isPortraitOrientation(currentPage) ? + pageWidthScale : Math.min(pageHeightScale, pageWidthScale); scale = Math.min(MAX_AUTO_SCALE, horizontalScale); break; default: diff --git a/web/ui_utils.js b/web/ui_utils.js index 67fd93d4a..471ca8202 100644 --- a/web/ui_utils.js +++ b/web/ui_utils.js @@ -439,6 +439,10 @@ function isValidRotation(angle) { return Number.isInteger(angle) && angle % 90 === 0; } +function isPortraitOrientation(size) { + return size.width <= size.height; +} + function cloneObj(obj) { let result = Object.create(null); for (let i in obj) { @@ -642,6 +646,7 @@ export { SCROLLBAR_PADDING, VERTICAL_PADDING, isValidRotation, + isPortraitOrientation, isFileSchema, cloneObj, PresentationModeState,