| Index: chrome/browser/resources/print_preview/print_header.js
|
| diff --git a/chrome/browser/resources/print_preview/print_header.js b/chrome/browser/resources/print_preview/print_header.js
|
| index 6a74d042d786b3cf83a28b5e0b74fefde080917a..2d9342975da554b7ba2e8e45562eb375757ac94a 100644
|
| --- a/chrome/browser/resources/print_preview/print_header.js
|
| +++ b/chrome/browser/resources/print_preview/print_header.js
|
| @@ -8,176 +8,232 @@ cr.define('print_preview', function() {
|
| /**
|
| * Creates a PrintHeader object. This object encapsulates all the elements
|
| * and logic related to the top part of the left pane in print_preview.html.
|
| + * @param {!print_preview.PrintTicketStore} printTicketStore Used to read
|
| + * information about the document.
|
| + * @param {!print_preview.DestinationStore} destinationStore Used to get the
|
| + * selected destination.
|
| * @constructor
|
| + * @extends {print_preview.Component}
|
| */
|
| - function PrintHeader() {
|
| - this.printButton_ = $('print-button');
|
| - this.cancelButton_ = $('cancel-button');
|
| - this.summary_ = $('print-summary');
|
| - this.printButton_.focus();
|
| - this.addEventListeners_();
|
| - }
|
| -
|
| - cr.addSingletonGetter(PrintHeader);
|
| -
|
| - PrintHeader.prototype = {
|
| - get printButton() {
|
| - return this.printButton_;
|
| - },
|
| -
|
| - get cancelButton() {
|
| - return this.cancelButton_;
|
| - },
|
| -
|
| - get summary() {
|
| - return this.summary_;
|
| - },
|
| + function PrintHeader(printTicketStore, destinationStore) {
|
| + print_preview.Component.call(this);
|
|
|
| /**
|
| - * Adding event listeners where necessary. Listeners take care of changing
|
| - * their behavior depending on the current state, no need to remove them.
|
| + * Used to read information about the document.
|
| + * @type {!print_preview.PrintTicketStore}
|
| * @private
|
| */
|
| - addEventListeners_: function() {
|
| - this.cancelButton_.onclick = function() {
|
| - this.disableCancelButton();
|
| - closePrintPreviewTab();
|
| - }.bind(this);
|
| - this.printButton_.onclick = this.onPrintRequested.bind(this);
|
| - document.addEventListener(customEvents.UPDATE_SUMMARY,
|
| - this.updateSummary_.bind(this));
|
| - document.addEventListener(customEvents.UPDATE_PRINT_BUTTON,
|
| - this.updatePrintButton_.bind(this));
|
| - document.addEventListener(customEvents.PDF_GENERATION_ERROR,
|
| - this.onPDFGenerationError_.bind(this));
|
| - document.addEventListener(customEvents.PRINTER_CAPABILITIES_UPDATED,
|
| - this.onPrinterCapabilitiesUpdated_.bind(this));
|
| - },
|
| + this.printTicketStore_ = printTicketStore;
|
|
|
| /**
|
| - * Enables the cancel button and attaches its keydown event listener.
|
| + * Used to get the selected destination.
|
| + * @type {!print_preview.DestinationStore}
|
| + * @private
|
| */
|
| - enableCancelButton: function() {
|
| - window.onkeydown = onKeyDown;
|
| - this.cancelButton_.disabled = false;
|
| - },
|
| + this.destinationStore_ = destinationStore;
|
|
|
| /**
|
| - * Executes when a |customEvents.PDF_GENERATION_ERROR| event occurs.
|
| + * Whether the component is enabled.
|
| + * @type {boolean}
|
| * @private
|
| */
|
| - onPDFGenerationError_: function() {
|
| - this.printButton_.disabled = true;
|
| + this.isEnabled_ = true;
|
| + };
|
| +
|
| + /**
|
| + * Event types dispatched by the print header.
|
| + * @enum {string}
|
| + */
|
| + PrintHeader.EventType = {
|
| + PRINT_BUTTON_CLICK: 'print_preview.PrintHeader.PRINT_BUTTON_CLICK',
|
| + CANCEL_BUTTON_CLICK: 'print_preview.PrintHeader.CANCEL_BUTTON_CLICK'
|
| + },
|
| +
|
| + /**
|
| + * CSS classes used by the print header.
|
| + * @enum {string}
|
| + * @private
|
| + */
|
| + PrintHeader.Classes_ = {
|
| + CANCEL_BUTTON: 'print-header-cancel-button',
|
| + PRINT_BUTTON: 'print-header-print-button',
|
| + SUMMARY: 'print-header-summary'
|
| + };
|
| +
|
| + PrintHeader.prototype = {
|
| + __proto__: print_preview.Component.prototype,
|
| +
|
| + set isEnabled(isEnabled) {
|
| + this.isEnabled_ = isEnabled;
|
| + this.printButton_.disabled = !isEnabled;
|
| + this.cancelButton_.disabled = !isEnabled;
|
| },
|
|
|
| - /**
|
| - * Executes when a |customEvents.PRINTER_CAPABILITIES_UPDATED| event occurs.
|
| - * @private
|
| - */
|
| - onPrinterCapabilitiesUpdated_: function() {
|
| - getSelectedPrinterName() == PRINT_TO_PDF ?
|
| - this.printButton.textContent = localStrings.getString('saveButton') :
|
| - this.printButton.textContent = localStrings.getString('printButton');
|
| + setErrorMessage: function(message) {
|
| + var summaryEl = this.getElement().getElementsByClassName(
|
| + PrintHeader.Classes_.SUMMARY)[0];
|
| + summaryEl.innerHTML = '';
|
| + summaryEl.textContent = message;
|
| },
|
|
|
| - /**
|
| - * Disables the cancel button and removes its keydown event listener.
|
| - */
|
| - disableCancelButton: function() {
|
| - window.onkeydown = null;
|
| - this.cancelButton_.disabled = true;
|
| + /** @override */
|
| + enterDocument: function() {
|
| + print_preview.Component.prototype.enterDocument.call(this);
|
| + this.printButton_.focus();
|
| +
|
| + // User events
|
| + this.tracker.add(
|
| + this.cancelButton_, 'click', this.onCancelButtonClick_.bind(this));
|
| + this.tracker.add(
|
| + this.printButton_, 'click', this.onPrintButtonClick_.bind(this));
|
| +
|
| + // Data events.
|
| + this.tracker.add(
|
| + this.printTicketStore_,
|
| + print_preview.PrintTicketStore.EventType.INITIALIZE,
|
| + this.onTicketChange_.bind(this));
|
| + this.tracker.add(
|
| + this.printTicketStore_,
|
| + print_preview.PrintTicketStore.EventType.DOCUMENT_CHANGE,
|
| + this.onTicketChange_.bind(this));
|
| + this.tracker.add(
|
| + this.printTicketStore_,
|
| + print_preview.PrintTicketStore.EventType.TICKET_CHANGE,
|
| + this.onTicketChange_.bind(this));
|
| + this.tracker.add(
|
| + this.destinationStore_,
|
| + print_preview.DestinationStore.EventType.DESTINATION_SELECT,
|
| + this.onDestinationSelect_.bind(this));
|
| },
|
|
|
| /**
|
| - * Listener executing whenever the print button is clicked or user presses
|
| - * the enter button while focus is in the pages field.
|
| + * @return {Element} Print button element.
|
| + * @private
|
| */
|
| - onPrintRequested: function() {
|
| - var printToPDF = getSelectedPrinterName() == PRINT_TO_PDF;
|
| - if (!printToPDF) {
|
| - this.printButton_.classList.add('loading');
|
| - this.cancelButton_.classList.add('loading');
|
| - this.summary_.innerHTML = localStrings.getString('printing');
|
| - }
|
| - this.disableCancelButton();
|
| - requestToPrintDocument();
|
| + get printButton_() {
|
| + return this.getElement().getElementsByClassName(
|
| + PrintHeader.Classes_.PRINT_BUTTON)[0];
|
| },
|
|
|
| /**
|
| - * Updates the state of |this.printButton_| depending on the user selection.
|
| - * The button is enabled only when the following conditions are true.
|
| - * 1) The selected page ranges are valid.
|
| - * 2) The number of copies is valid (if applicable).
|
| + * @return {Element} Cancel button element.
|
| * @private
|
| */
|
| - updatePrintButton_: function() {
|
| - if (showingSystemDialog)
|
| - return;
|
| - this.printButton_.disabled = !areSettingsValid();
|
| + get cancelButton_() {
|
| + return this.getElement().getElementsByClassName(
|
| + PrintHeader.Classes_.CANCEL_BUTTON)[0];
|
| },
|
|
|
| /**
|
| - * Updates |this.summary_| based on the currently selected user options.
|
| + * Updates the summary element based on the currently selected user options.
|
| * @private
|
| */
|
| updateSummary_: function() {
|
| - var printToPDF = getSelectedPrinterName() == PRINT_TO_PDF;
|
| - var copies = printToPDF ? 1 : copiesSettings.numberOfCopies;
|
| -
|
| - if ((!printToPDF && !copiesSettings.isValid()) ||
|
| - !pageSettings.isPageSelectionValid()) {
|
| - this.summary_.innerHTML = '';
|
| + var summaryEl = this.getElement().getElementsByClassName(
|
| + PrintHeader.Classes_.SUMMARY)[0];
|
| + if (!this.printTicketStore_.isTicketValid()) {
|
| + summaryEl.innerHTML = '';
|
| return;
|
| }
|
|
|
| - if (!marginSettings.areMarginSettingsValid()) {
|
| - this.summary_.innerHTML = '';
|
| - return;
|
| - }
|
| -
|
| - var pageSet = pageSettings.selectedPagesSet;
|
| - var numOfSheets = pageSet.length;
|
| - if (numOfSheets == 0)
|
| - return;
|
| -
|
| var summaryLabel =
|
| localStrings.getString('printPreviewSheetsLabelSingular');
|
| - var numOfPagesText = '';
|
| var pagesLabel = localStrings.getString('printPreviewPageLabelPlural');
|
|
|
| - if (printToPDF)
|
| + var saveToPdf = this.destinationStore_.selectedDestination &&
|
| + this.destinationStore_.selectedDestination.id ==
|
| + print_preview.Destination.GooglePromotedId.SAVE_AS_PDF;
|
| + if (saveToPdf) {
|
| summaryLabel = localStrings.getString('printPreviewPageLabelSingular');
|
| + }
|
|
|
| - if (!printToPDF &&
|
| - copiesSettings.duplexMode == print_preview.CopiesSettings.LONG_EDGE) {
|
| - numOfSheets = Math.ceil(numOfSheets / 2);
|
| + var numPages = this.printTicketStore_.getPageNumberSet().size;
|
| + var numSheets = numPages;
|
| + if (!saveToPdf && this.printTicketStore_.isDuplexEnabled()) {
|
| + numSheets = Math.ceil(numPages / 2);
|
| }
|
| - numOfSheets *= copies;
|
|
|
| - if (numOfSheets > 1) {
|
| - summaryLabel = printToPDF ? pagesLabel :
|
| + var copies = this.printTicketStore_.getCopies();
|
| + numSheets *= copies;
|
| + numPages *= copies;
|
| +
|
| + if (numSheets > 1) {
|
| + summaryLabel = saveToPdf ? pagesLabel :
|
| localStrings.getString('printPreviewSheetsLabelPlural');
|
| }
|
|
|
| - var html = '';
|
| - if (pageSet.length * copies != numOfSheets) {
|
| - numOfPagesText = pageSet.length * copies;
|
| + var html;
|
| + if (numPages != numSheets) {
|
| html = localStrings.getStringF('printPreviewSummaryFormatLong',
|
| - '<b>' + numOfSheets + '</b>',
|
| + '<b>' + numSheets + '</b>',
|
| '<b>' + summaryLabel + '</b>',
|
| - numOfPagesText, pagesLabel);
|
| + numPages,
|
| + pagesLabel);
|
| } else {
|
| html = localStrings.getStringF('printPreviewSummaryFormatShort',
|
| - '<b>' + numOfSheets + '</b>',
|
| + '<b>' + numSheets + '</b>',
|
| '<b>' + summaryLabel + '</b>');
|
| }
|
|
|
| // Removing extra spaces from within the string.
|
| html = html.replace(/\s{2,}/g, ' ');
|
| - this.summary_.innerHTML = html;
|
| + summaryEl.innerHTML = html;
|
| + },
|
| +
|
| + /**
|
| + * Called when the print button is clicked. Dispatches a PRINT_DOCUMENT
|
| + * common event.
|
| + * @private
|
| + */
|
| + onPrintButtonClick_: function() {
|
| + if (this.destinationStore_.selectedDestination.id !=
|
| + print_preview.Destination.GooglePromotedId.SAVE_AS_PDF) {
|
| + this.printButton_.classList.add('loading');
|
| + this.cancelButton_.classList.add('loading');
|
| + var summaryEl = this.getElement().getElementsByClassName(
|
| + PrintHeader.Classes_.SUMMARY)[0];
|
| + summaryEl.innerHTML = localStrings.getString('printing');
|
| + }
|
| + cr.dispatchSimpleEvent(this, PrintHeader.EventType.PRINT_BUTTON_CLICK);
|
| + },
|
| +
|
| + /**
|
| + * Called when the cancel button is clicked. Dispatches a
|
| + * CLOSE_PRINT_PREVIEW event.
|
| + * @private
|
| + */
|
| + onCancelButtonClick_: function() {
|
| + cr.dispatchSimpleEvent(this, PrintHeader.EventType.CANCEL_BUTTON_CLICK);
|
| + },
|
| +
|
| + /**
|
| + * Called when a new destination is selected. Updates the text on the print
|
| + * button.
|
| + * @private
|
| + */
|
| + onDestinationSelect_: function() {
|
| + if (this.destinationStore_.selectedDestination.id ==
|
| + print_preview.Destination.GooglePromotedId.SAVE_AS_PDF) {
|
| + this.printButton_.textContent = localStrings.getString('saveButton');
|
| + } else {
|
| + this.printButton_.textContent = localStrings.getString('printButton');
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Called when the print ticket has changed. Disables the print button if
|
| + * any of the settings are invalid.
|
| + * @private
|
| + */
|
| + onTicketChange_: function() {
|
| + this.printButton_.disabled =
|
| + !this.printTicketStore_.isTicketValid() ||
|
| + !this.isEnabled_;
|
| + this.updateSummary_();
|
| }
|
| };
|
|
|
| + // Export
|
| return {
|
| PrintHeader: PrintHeader
|
| };
|
|
|