// TODO(rltoscano): Move data/* into print_preview.data namespace
-var localStrings = new LocalStrings(templateData);
-
-<include src="component.js"/>
-<include src="print_preview_focus_manager.js"/>
+<include src="component.js">
+<include src="print_preview_focus_manager.js">
cr.define('print_preview', function() {
'use strict';
this.nativeLayer_, this.userInfo_, this.appState_);
/**
+ * Data store which holds printer sharing invitations.
+ * @type {!print_preview.InvitationStore}
+ * @private
+ */
+ this.invitationStore_ = new print_preview.InvitationStore(this.userInfo_);
+
+ /**
* Storage of the print ticket used to create the print job.
* @type {!print_preview.PrintTicketStore}
* @private
* @private
*/
this.destinationSearch_ = new print_preview.DestinationSearch(
- this.destinationStore_, this.userInfo_);
+ this.destinationStore_, this.invitationStore_, this.userInfo_);
this.addChild(this.destinationSearch_);
/**
* @private
*/
this.advancedOptionsSettings_ = new print_preview.AdvancedOptionsSettings(
- this.destinationStore_);
+ this.printTicketStore_.vendorItems, this.destinationStore_);
this.addChild(this.advancedOptionsSettings_);
/**
this.addChild(this.advancedSettings_);
/**
+ * Component representing more/less settings button.
+ * @type {!print_preview.MoreSettings}
+ * @private
+ */
+ var settingsSections = [
+ this.destinationSettings_,
+ this.pageSettings_,
+ this.copiesSettings_,
+ this.mediaSizeSettings_,
+ this.layoutSettings_,
+ this.marginSettings_,
+ this.colorSettings_,
+ this.otherOptionsSettings_,
+ this.advancedOptionsSettings_];
+ this.moreSettings_ = new print_preview.MoreSettings(
+ this.destinationStore_, settingsSections);
+ this.addChild(this.moreSettings_);
+
+ /**
* Area of the UI that holds the print preview.
* @type {!print_preview.PreviewArea}
* @private
this.isInAppKioskMode_ = false;
/**
+ * Whether Print with System Dialog option is available.
+ * @type {boolean}
+ * @private
+ */
+ this.isSystemDialogAvailable_ = false;
+
+ /**
* State of the print preview UI.
* @type {print_preview.PrintPreview.UiState_}
* @private
* @private
*/
this.isPreviewGenerationInProgress_ = true;
+
+ /**
+ * Whether to show system dialog before next printing.
+ * @type {boolean}
+ * @private
+ */
+ this.showSystemDialogBeforeNextPrint_ = false;
};
/**
/** Sets up the page and print preview by getting the printer list. */
initialize: function() {
this.decorate($('print-preview'));
- i18nTemplate.process(document, templateData);
if (!this.previewArea_.hasCompatiblePlugin) {
this.setIsEnabled_(false);
}
$('cloud-print-dialog-link'),
'click',
this.onCloudPrintDialogLinkClick_.bind(this));
- this.tracker.add(
- $('open-pdf-in-preview-link'),
- 'click',
- this.onOpenPdfInPreviewLinkClick_.bind(this));
+ if ($('open-pdf-in-preview-link')) {
+ this.tracker.add(
+ $('open-pdf-in-preview-link'),
+ 'click',
+ this.onOpenPdfInPreviewLinkClick_.bind(this));
+ }
this.tracker.add(
this.previewArea_,
this.otherOptionsSettings_.decorate($('other-options-settings'));
this.advancedOptionsSettings_.decorate($('advanced-options-settings'));
this.advancedSettings_.decorate($('advanced-settings'));
+ this.moreSettings_.decorate($('more-settings'));
this.previewArea_.decorate($('preview-area'));
-
- setIsVisible($('open-pdf-in-preview-link'), cr.isMac);
},
/**
setIsEnabled_: function(isEnabled) {
$('system-dialog-link').disabled = !isEnabled;
$('cloud-print-dialog-link').disabled = !isEnabled;
- $('open-pdf-in-preview-link').disabled = !isEnabled;
+ if ($('open-pdf-in-preview-link')) {
+ $('open-pdf-in-preview-link').disabled = !isEnabled;
+ }
this.printHeader_.isEnabled = isEnabled;
this.destinationSettings_.isEnabled = isEnabled;
this.pageSettings_.isEnabled = isEnabled;
this.nativeLayer_.startShowCloudPrintDialog(
this.printTicketStore_.pageRange.getPageNumberSet().size);
} else {
+ if (getIsVisible(this.moreSettings_.getElement())) {
+ new print_preview.PrintSettingsUiMetricsContext().record(
+ this.moreSettings_.isExpanded ?
+ print_preview.Metrics.PrintSettingsUiBucket.
+ PRINT_WITH_SETTINGS_EXPANDED :
+ print_preview.Metrics.PrintSettingsUiBucket.
+ PRINT_WITH_SETTINGS_COLLAPSED);
+ }
this.nativeLayer_.startPrint(
this.destinationStore_.selectedDestination,
this.printTicketStore_,
this.cloudPrintInterface_,
this.documentInfo_,
- this.uiState_ == PrintPreview.UiState_.OPENING_PDF_PREVIEW);
+ this.uiState_ == PrintPreview.UiState_.OPENING_PDF_PREVIEW,
+ this.showSystemDialogBeforeNextPrint_);
+ this.showSystemDialogBeforeNextPrint_ = false;
}
return PrintPreview.PrintAttemptResult_.PRINTED;
},
* @private
*/
openSystemPrintDialog_: function() {
+ if (!this.shouldShowSystemDialogLink_())
+ return;
+ if (cr.isWindows) {
+ this.showSystemDialogBeforeNextPrint_ = true;
+ this.printDocumentOrOpenPdfPreview_(false /*isPdfPreview*/);
+ return;
+ }
setIsVisible($('system-dialog-throbber'), true);
this.setIsEnabled_(false);
this.uiState_ = PrintPreview.UiState_.OPENING_NATIVE_PRINT_DIALOG;
this.appState_.setInitialized();
$('document-title').innerText = settings.documentTitle;
- setIsVisible($('system-dialog-link'),
- !settings.hidePrintWithSystemDialogLink &&
- !settings.isInAppKioskMode);
+ this.isSystemDialogAvailable_ = !settings.hidePrintWithSystemDialogLink &&
+ !settings.isInAppKioskMode;
+ setIsVisible($('system-dialog-link'), this.shouldShowSystemDialogLink_());
},
/**
this.onCloudPrintError_.bind(this));
this.destinationStore_.setCloudPrintInterface(this.cloudPrintInterface_);
+ this.invitationStore_.setCloudPrintInterface(this.cloudPrintInterface_);
if (this.destinationSearch_.getIsVisible()) {
this.destinationStore_.startLoadCloudDestinations();
+ this.invitationStore_.startLoadingInvitations();
}
},
'File selection completed when not in file-selection state: ' +
this.uiState_);
this.previewArea_.showCustomMessage(
- localStrings.getString('printingToPDFInProgress'));
+ loadTimeData.getString('printingToPDFInProgress'));
this.uiState_ = PrintPreview.UiState_.PRINTING;
},
this.uiState_);
setIsVisible($('open-preview-app-throbber'), true);
this.previewArea_.showCustomMessage(
- localStrings.getString('openingPDFInPreview'));
+ loadTimeData.getString('openingPDFInPreview'));
this.printDocumentOrOpenPdfPreview_(true /*isPdfPreview*/);
},
return;
}
+ // On Mac, Cmd- should close the print dialog.
+ if (cr.isMac && e.keyCode == 189 && e.metaKey) {
+ this.close_();
+ e.preventDefault();
+ return;
+ }
+
// Ctrl + Shift + p / Mac equivalent.
if (e.keyCode == 80) {
if ((cr.isMac && e.metaKey && e.altKey && !e.shiftKey && !e.ctrlKey) ||
this.uiState_ = PrintPreview.UiState_.ERROR;
console.error('Invalid settings error reported from native layer');
this.previewArea_.showCustomMessage(
- localStrings.getString('invalidPrinterSettings'));
+ loadTimeData.getString('invalidPrinterSettings'));
},
/**
*/
onDestinationChangeButtonActivate_: function() {
this.destinationSearch_.setIsVisible(true);
- this.destinationStore_.startLoadCloudDestinations();
- this.destinationStore_.startLoadLocalDestinations();
- this.destinationStore_.startLoadPrivetDestinations();
},
/**
console.error('Privet printing failed with error code ' +
event.httpError);
this.printHeader_.setErrorMessage(
- localStrings.getString('couldNotPrint'));
+ loadTimeData.getString('couldNotPrint'));
},
/**
* @private
*/
setLayoutSettingsForTest_: function(portrait) {
- var element = document.querySelector(portrait ?
- '.layout-settings-portrait-radio' :
- '.layout-settings-landscape-radio');
- if (element.checked)
+ var combobox = document.querySelector('.layout-settings-select');
+ if (combobox.value == 'portrait') {
this.nativeLayer_.previewReadyForTest();
- else
- element.click();
+ } else {
+ combobox.value = 'landscape';
+ this.layoutSettings_.onSelectChange_();
+ }
},
/**
},
/**
+ * Returns true if "Print using system dialog" link should be shown for
+ * current destination.
+ * @return {boolean} Returns true if link should be shown.
+ */
+ shouldShowSystemDialogLink_: function() {
+ if (!this.isSystemDialogAvailable_)
+ return false;
+ if (!cr.isWindows)
+ return true;
+ var selectedDest = this.destinationStore_.selectedDestination;
+ return selectedDest &&
+ selectedDest.origin == print_preview.Destination.Origin.LOCAL &&
+ selectedDest.id !=
+ print_preview.Destination.GooglePromotedId.SAVE_AS_PDF;
+ },
+
+ /**
* Called when the open-cloud-print-dialog link is clicked. Opens the Google
* Cloud Print web dialog.
* @private
setIsVisible(
$('cloud-print-dialog-link'),
selectedDest && !cr.isChromeOS && !selectedDest.isLocal);
+ setIsVisible(
+ $('system-dialog-link'),
+ this.shouldShowSystemDialogLink_());
if (selectedDest && this.isInKioskAutoPrintMode_) {
this.onPrintButtonClick_();
}
});
// Pull in all other scripts in a single shot.
-<include src="common/overlay.js"/>
-<include src="common/search_box.js"/>
-
-<include src="data/page_number_set.js"/>
-<include src="data/destination.js"/>
-<include src="data/local_parsers.js"/>
-<include src="data/cloud_parsers.js"/>
-<include src="data/destination_store.js"/>
-<include src="data/margins.js"/>
-<include src="data/document_info.js"/>
-<include src="data/printable_area.js"/>
-<include src="data/measurement_system.js"/>
-<include src="data/print_ticket_store.js"/>
-<include src="data/coordinate2d.js"/>
-<include src="data/size.js"/>
-<include src="data/capabilities_holder.js"/>
-<include src="data/user_info.js"/>
-<include src="data/app_state.js"/>
-
-<include src="data/ticket_items/ticket_item.js"/>
-
-<include src="data/ticket_items/custom_margins.js"/>
-<include src="data/ticket_items/collate.js"/>
-<include src="data/ticket_items/color.js"/>
-<include src="data/ticket_items/copies.js"/>
-<include src="data/ticket_items/duplex.js"/>
-<include src="data/ticket_items/header_footer.js"/>
-<include src="data/ticket_items/media_size.js"/>
-<include src="data/ticket_items/landscape.js"/>
-<include src="data/ticket_items/margins_type.js"/>
-<include src="data/ticket_items/page_range.js"/>
-<include src="data/ticket_items/fit_to_page.js"/>
-<include src="data/ticket_items/css_background.js"/>
-<include src="data/ticket_items/selection_only.js"/>
-
-<include src="native_layer.js"/>
-<include src="print_preview_animations.js"/>
-<include src="cloud_print_interface.js"/>
-<include src="print_preview_utils.js"/>
-<include src="print_header.js"/>
-<include src="metrics.js"/>
-
-<include src="settings/page_settings.js"/>
-<include src="settings/copies_settings.js"/>
-<include src="settings/media_size_settings.js"/>
-<include src="settings/layout_settings.js"/>
-<include src="settings/color_settings.js"/>
-<include src="settings/margin_settings.js"/>
-<include src="settings/destination_settings.js"/>
-<include src="settings/other_options_settings.js"/>
-<include src="settings/advanced_options_settings.js"/>
-<include src="settings/advanced_settings/advanced_settings.js"/>
-<include src="settings/advanced_settings/advanced_settings_item.js"/>
-
-<include src="previewarea/margin_control.js"/>
-<include src="previewarea/margin_control_container.js"/>
-<include src="../pdf/pdf_scripting_api.js" />
-<include src="previewarea/preview_area.js"/>
-<include src="preview_generator.js"/>
-
-<include src="search/destination_list.js"/>
-<include src="search/cloud_destination_list.js"/>
-<include src="search/recent_destination_list.js"/>
-<include src="search/destination_list_item.js"/>
-<include src="search/destination_search.js"/>
-<include src="search/fedex_tos.js"/>
+<include src="common/overlay.js">
+<include src="common/search_box.js">
+<include src="common/search_bubble.js">
+
+<include src="data/page_number_set.js">
+<include src="data/destination.js">
+<include src="data/local_parsers.js">
+<include src="data/cloud_parsers.js">
+<include src="data/destination_store.js">
+<include src="data/invitation.js">
+<include src="data/invitation_store.js">
+<include src="data/margins.js">
+<include src="data/document_info.js">
+<include src="data/printable_area.js">
+<include src="data/measurement_system.js">
+<include src="data/print_ticket_store.js">
+<include src="data/coordinate2d.js">
+<include src="data/size.js">
+<include src="data/capabilities_holder.js">
+<include src="data/user_info.js">
+<include src="data/app_state.js">
+
+<include src="data/ticket_items/ticket_item.js">
+
+<include src="data/ticket_items/custom_margins.js">
+<include src="data/ticket_items/collate.js">
+<include src="data/ticket_items/color.js">
+<include src="data/ticket_items/copies.js">
+<include src="data/ticket_items/duplex.js">
+<include src="data/ticket_items/header_footer.js">
+<include src="data/ticket_items/media_size.js">
+<include src="data/ticket_items/landscape.js">
+<include src="data/ticket_items/margins_type.js">
+<include src="data/ticket_items/page_range.js">
+<include src="data/ticket_items/fit_to_page.js">
+<include src="data/ticket_items/css_background.js">
+<include src="data/ticket_items/selection_only.js">
+<include src="data/ticket_items/vendor_items.js">
+
+<include src="native_layer.js">
+<include src="print_preview_animations.js">
+<include src="cloud_print_interface.js">
+<include src="print_preview_utils.js">
+<include src="print_header.js">
+<include src="metrics.js">
+
+<include src="settings/settings_section.js">
+<include src="settings/page_settings.js">
+<include src="settings/copies_settings.js">
+<include src="settings/media_size_settings.js">
+<include src="settings/layout_settings.js">
+<include src="settings/color_settings.js">
+<include src="settings/margin_settings.js">
+<include src="settings/destination_settings.js">
+<include src="settings/other_options_settings.js">
+<include src="settings/advanced_options_settings.js">
+<include src="settings/advanced_settings/advanced_settings.js">
+<include src="settings/advanced_settings/advanced_settings_item.js">
+<include src="settings/more_settings.js">
+
+<include src="previewarea/margin_control.js">
+<include src="previewarea/margin_control_container.js">
+<include src="../pdf/pdf_scripting_api.js">
+<include src="previewarea/preview_area.js">
+<include src="preview_generator.js">
+
+<include src="search/destination_list.js">
+<include src="search/cloud_destination_list.js">
+<include src="search/recent_destination_list.js">
+<include src="search/destination_list_item.js">
+<include src="search/destination_search.js">
+<include src="search/fedex_tos.js">
window.addEventListener('DOMContentLoaded', function() {
printPreview = new print_preview.PrintPreview();