Commit c26c311f authored by Jesse Schettler's avatar Jesse Schettler Committed by Commit Bot

scanning: Sort page sizes in page size dropdown

Sort the page sizes and correctly select the default option.

Bug: 1059779
Change-Id: Ibfc1f482d84b75785ae790f3349b93839590327d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2532969
Commit-Queue: Jesse Schettler <jschettler@chromium.org>
Commit-Queue: Zentaro Kavanagh <zentaro@chromium.org>
Reviewed-by: default avatarZentaro Kavanagh <zentaro@chromium.org>
Auto-Submit: Jesse Schettler <jschettler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827048}
parent d0021ba7
...@@ -9,7 +9,7 @@ import {getPageSizeString} from 'chrome://scanning/scanning_app_util.js'; ...@@ -9,7 +9,7 @@ import {getPageSizeString} from 'chrome://scanning/scanning_app_util.js';
import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
import {changeSelect} from './scanning_app_test_utils.js'; import {assertOrderedAlphabetically, changeSelect} from './scanning_app_test_utils.js';
const PageSize = { const PageSize = {
A4: chromeos.scanning.mojom.PageSize.kIsoA4, A4: chromeos.scanning.mojom.PageSize.kIsoA4,
...@@ -86,4 +86,29 @@ export function pageSizeSelectTest() { ...@@ -86,4 +86,29 @@ export function pageSizeSelectTest() {
assertEquals(2, select.length); assertEquals(2, select.length);
assertFalse(select.disabled); assertFalse(select.disabled);
}); });
test('pageSizesSortedCorrectly', () => {
pageSizeSelect.pageSizes = [PageSize.Letter, PageSize.Max, PageSize.A4];
flush();
// Verify the page sizes are sorted alphabetically except for the fit to
// scan area option, which should always be last. Verify that Letter is
// selected by default.
assertOrderedAlphabetically(
pageSizeSelect.pageSizes.slice(0, pageSizeSelect.pageSizes.length - 1),
(pageSize) => getPageSizeString(pageSize));
assertEquals(
PageSize.Max,
pageSizeSelect.pageSizes[pageSizeSelect.pageSizes.length - 1]);
assertEquals(PageSize.Letter.toString(), pageSizeSelect.selectedPageSize);
});
test('firstPageSizeUsedWhenDefaultNotAvailable', () => {
pageSizeSelect.pageSizes = [PageSize.Max, PageSize.A4];
flush();
// Verify the first page size in the sorted page sizes array is selected by
// default when Letter is not an available option.
assertEquals(PageSize.A4.toString(), pageSizeSelect.selectedPageSize);
});
} }
...@@ -350,7 +350,7 @@ export function scanningAppTest() { ...@@ -350,7 +350,7 @@ export function scanningAppTest() {
firstCapabilities.colorModes[0].toString(), firstCapabilities.colorModes[0].toString(),
scanningApp.selectedColorMode); scanningApp.selectedColorMode);
assertEquals( assertEquals(
firstCapabilities.sources[0].pageSizes[0].toString(), firstCapabilities.sources[0].pageSizes[1].toString(),
scanningApp.selectedPageSize); scanningApp.selectedPageSize);
assertEquals( assertEquals(
firstCapabilities.resolutions[0].toString(), firstCapabilities.resolutions[0].toString(),
......
...@@ -8,7 +8,8 @@ ...@@ -8,7 +8,8 @@
disabled="[[disabled]]"> disabled="[[disabled]]">
<!-- TODO(jschettler): Sort the page sizes. --> <!-- TODO(jschettler): Sort the page sizes. -->
<template is="dom-repeat" items="[[pageSizes]]" as="pageSize"> <template is="dom-repeat" items="[[pageSizes]]" as="pageSize">
<option value="[[pageSize]]"> <option value="[[pageSize]]"
selected$="[[isDefaultPageSize_(pageSize)]]">
[[getPageSizeString_(pageSize)]] [[getPageSizeString_(pageSize)]]
</option> </option>
</template> </template>
......
...@@ -9,9 +9,12 @@ import './strings.m.js'; ...@@ -9,9 +9,12 @@ import './strings.m.js';
import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {getPageSizeString} from './scanning_app_util.js'; import {alphabeticalCompare, getPageSizeString} from './scanning_app_util.js';
import {SelectBehavior} from './select_behavior.js'; import {SelectBehavior} from './select_behavior.js';
/** @type {chromeos.scanning.mojom.PageSize} */
const DEFAULT_PAGE_SIZE = chromeos.scanning.mojom.PageSize.kNaLetter;
/** /**
* @fileoverview * @fileoverview
* 'page-size-select' displays the available page sizes in a dropdown. * 'page-size-select' displays the available page sizes in a dropdown.
...@@ -37,14 +40,68 @@ Polymer({ ...@@ -37,14 +40,68 @@ Polymer({
}, },
}, },
observers: ['onNumOptionsChange(pageSizes.length)'], observers: [
'onNumOptionsChange(pageSizes.length)', 'onPageSizesChange_(pageSizes.*)'
],
/** /**
* @param {chromeos.scanning.mojom.PageSize} pageSize * @param {!chromeos.scanning.mojom.PageSize} pageSize
* @return {string} * @return {string}
* @private * @private
*/ */
getPageSizeString_(pageSize) { getPageSizeString_(pageSize) {
return getPageSizeString(pageSize); return getPageSizeString(pageSize);
}, },
/**
* Letter should be the default option if it exists. If not, use the first
* page size in the page sizes array.
* @return {string}
* @private
*/
getDefaultSelectedPageSize_() {
let defaultPageSizeIndex = this.pageSizes.findIndex((pageSize) => {
return this.isDefaultPageSize_(pageSize);
});
if (defaultPageSizeIndex === -1) {
defaultPageSizeIndex = 0;
}
return this.pageSizes[defaultPageSizeIndex].toString();
},
/**
* Sorts the page sizes and sets the selected page size when the page sizes
* array changes.
* @private
*/
onPageSizesChange_() {
if (this.pageSizes.length > 1) {
this.pageSizes = this.customSort(
this.pageSizes, alphabeticalCompare,
(pageSize) => getPageSizeString(pageSize));
// If the fit to scan area option exists, move it to the end of the page
// sizes array.
const fitToScanAreaIndex = this.pageSizes.findIndex((pageSize) => {
return pageSize === chromeos.scanning.mojom.PageSize.kMax;
});
if (fitToScanAreaIndex !== -1) {
this.pageSizes.push(this.pageSizes.splice(fitToScanAreaIndex, 1)[0]);
}
}
if (this.pageSizes.length > 0) {
this.selectedPageSize = this.getDefaultSelectedPageSize_();
}
},
/**
* @param {!chromeos.scanning.mojom.PageSize} pageSize
* @return {boolean}
* @private
*/
isDefaultPageSize_(pageSize) {
return pageSize === DEFAULT_PAGE_SIZE;
},
}); });
...@@ -227,11 +227,6 @@ Polymer({ ...@@ -227,11 +227,6 @@ Polymer({
onCapabilitiesReceived_(response) { onCapabilitiesReceived_(response) {
this.capabilities_ = response.capabilities; this.capabilities_ = response.capabilities;
// Set the first options as the selected options since they will be the
// first options in the dropdowns.
this.selectedPageSize =
this.capabilities_.sources[0].pageSizes[0].toString();
// TODO(jschettler): Change default file type back to PDF when it's // TODO(jschettler): Change default file type back to PDF when it's
// supported. // supported.
this.selectedFileType = chromeos.scanning.mojom.FileType.kPng.toString(); this.selectedFileType = chromeos.scanning.mojom.FileType.kPng.toString();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment