blob: 9d639b1f9d0651c1c05b13a7701d40965445956d [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.exportPath('print_preview.HeaderNew');
/**
* @typedef {{numPages: number,
* numSheets: number,
* pagesLabel: string,
* summaryLabel: string}}
*/
print_preview.HeaderNew.LabelInfo;
Polymer({
is: 'print-preview-header-new',
behaviors: [SettingsBehavior],
properties: {
cloudPrintErrorMessage: String,
/** @type {!print_preview.Destination} */
destination: Object,
/** @type {!print_preview.Error} */
error: Number,
/** @type {!print_preview.State} */
state: Number,
managed: Boolean,
/** @private {?string} */
summary_: {
type: String,
value: null,
},
},
observers: [
'update_(settings.copies.value, settings.duplex.value, ' +
'settings.pages.value, state, destination.id)',
],
/**
* @return {boolean}
* @private
*/
isPdfOrDrive_: function() {
return this.destination &&
(this.destination.id ==
print_preview.Destination.GooglePromotedId.SAVE_AS_PDF ||
this.destination.id ==
print_preview.Destination.GooglePromotedId.DOCS);
},
/**
* @return {!print_preview.HeaderNew.LabelInfo}
* @private
*/
computeLabelInfo_: function() {
const saveToPdfOrDrive = this.isPdfOrDrive_();
let numPages = this.getSettingValue('pages').length;
let numSheets = numPages;
if (!saveToPdfOrDrive && this.getSettingValue('duplex')) {
numSheets = Math.ceil(numPages / 2);
}
const copies = parseInt(this.getSettingValue('copies'), 10);
numSheets *= copies;
numPages *= copies;
const pagesLabel = loadTimeData.getString('printPreviewPageLabelPlural');
let summaryLabel;
if (numSheets > 1) {
summaryLabel = saveToPdfOrDrive ?
pagesLabel :
loadTimeData.getString('printPreviewSheetsLabelPlural');
} else {
summaryLabel = loadTimeData.getString(
saveToPdfOrDrive ? 'printPreviewPageLabelSingular' :
'printPreviewSheetsLabelSingular');
}
return {
numPages: numPages,
numSheets: numSheets,
pagesLabel: pagesLabel,
summaryLabel: summaryLabel
};
},
/** @private */
update_: function() {
switch (this.state) {
case (print_preview.State.PRINTING):
this.summary_ = loadTimeData.getString(
this.isPdfOrDrive_() ? 'saving' : 'printing');
break;
case (print_preview.State.READY):
const labelInfo = this.computeLabelInfo_();
this.summary_ = this.getSummary_(labelInfo);
break;
case (print_preview.State.FATAL_ERROR):
this.summary_ = this.getErrorMessage_();
break;
default:
this.summary_ = null;
break;
}
},
/**
* @return {string} The error message to display.
* @private
*/
getErrorMessage_: function() {
switch (this.error) {
case print_preview.Error.PRINT_FAILED:
return loadTimeData.getString('couldNotPrint');
case print_preview.Error.CLOUD_PRINT_ERROR:
return this.cloudPrintErrorMessage;
default:
return '';
}
},
/**
* @param {!print_preview.HeaderNew.LabelInfo} labelInfo
* @return {string}
* @private
*/
getSummary_: function(labelInfo) {
return labelInfo.numSheets === 0 ?
'' :
loadTimeData.getStringF(
'printPreviewNewSummaryFormatShort',
labelInfo.numSheets.toLocaleString(), labelInfo.summaryLabel);
},
});