Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / print_preview / print_preview.js
index 5d43e21..f17e871 100644 (file)
@@ -4,10 +4,8 @@
 
 // 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';
@@ -57,6 +55,13 @@ cr.define('print_preview', function() {
         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
@@ -79,7 +84,7 @@ cr.define('print_preview', function() {
      * @private
      */
     this.destinationSearch_ = new print_preview.DestinationSearch(
-        this.destinationStore_, this.userInfo_);
+        this.destinationStore_, this.invitationStore_, this.userInfo_);
     this.addChild(this.destinationSearch_);
 
     /**
@@ -164,7 +169,7 @@ cr.define('print_preview', function() {
      * @private
      */
     this.advancedOptionsSettings_ = new print_preview.AdvancedOptionsSettings(
-        this.destinationStore_);
+        this.printTicketStore_.vendorItems, this.destinationStore_);
     this.addChild(this.advancedOptionsSettings_);
 
     /**
@@ -177,6 +182,25 @@ cr.define('print_preview', function() {
     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
@@ -214,6 +238,13 @@ cr.define('print_preview', function() {
     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
@@ -226,6 +257,13 @@ cr.define('print_preview', function() {
      * @private
      */
     this.isPreviewGenerationInProgress_ = true;
+
+    /**
+     * Whether to show system dialog before next printing.
+     * @type {boolean}
+     * @private
+     */
+    this.showSystemDialogBeforeNextPrint_ = false;
   };
 
   /**
@@ -262,7 +300,6 @@ cr.define('print_preview', function() {
     /** 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);
       }
@@ -319,10 +356,12 @@ cr.define('print_preview', function() {
           $('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_,
@@ -427,9 +466,8 @@ cr.define('print_preview', function() {
       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);
     },
 
     /**
@@ -441,7 +479,9 @@ cr.define('print_preview', function() {
     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;
@@ -515,12 +555,22 @@ cr.define('print_preview', function() {
         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;
     },
@@ -540,6 +590,13 @@ cr.define('print_preview', function() {
      * @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;
@@ -581,9 +638,9 @@ cr.define('print_preview', function() {
       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_());
     },
 
     /**
@@ -622,8 +679,10 @@ cr.define('print_preview', function() {
           this.onCloudPrintError_.bind(this));
 
       this.destinationStore_.setCloudPrintInterface(this.cloudPrintInterface_);
+      this.invitationStore_.setCloudPrintInterface(this.cloudPrintInterface_);
       if (this.destinationSearch_.getIsVisible()) {
         this.destinationStore_.startLoadCloudDestinations();
+        this.invitationStore_.startLoadingInvitations();
       }
     },
 
@@ -667,7 +726,7 @@ cr.define('print_preview', function() {
              '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;
     },
 
@@ -758,7 +817,7 @@ cr.define('print_preview', function() {
                  this.uiState_);
       setIsVisible($('open-preview-app-throbber'), true);
       this.previewArea_.showCustomMessage(
-          localStrings.getString('openingPDFInPreview'));
+          loadTimeData.getString('openingPDFInPreview'));
       this.printDocumentOrOpenPdfPreview_(true /*isPdfPreview*/);
     },
 
@@ -814,6 +873,13 @@ cr.define('print_preview', function() {
         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) ||
@@ -851,7 +917,7 @@ cr.define('print_preview', function() {
       this.uiState_ = PrintPreview.UiState_.ERROR;
       console.error('Invalid settings error reported from native layer');
       this.previewArea_.showCustomMessage(
-          localStrings.getString('invalidPrinterSettings'));
+          loadTimeData.getString('invalidPrinterSettings'));
     },
 
     /**
@@ -861,9 +927,6 @@ cr.define('print_preview', function() {
      */
     onDestinationChangeButtonActivate_: function() {
       this.destinationSearch_.setIsVisible(true);
-      this.destinationStore_.startLoadCloudDestinations();
-      this.destinationStore_.startLoadLocalDestinations();
-      this.destinationStore_.startLoadPrivetDestinations();
     },
 
     /**
@@ -924,7 +987,7 @@ cr.define('print_preview', function() {
       console.error('Privet printing failed with error code ' +
                     event.httpError);
       this.printHeader_.setErrorMessage(
-        localStrings.getString('couldNotPrint'));
+          loadTimeData.getString('couldNotPrint'));
     },
 
     /**
@@ -987,13 +1050,13 @@ cr.define('print_preview', function() {
      * @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_();
+      }
     },
 
     /**
@@ -1063,6 +1126,23 @@ cr.define('print_preview', function() {
     },
 
     /**
+     * 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
@@ -1087,6 +1167,9 @@ cr.define('print_preview', function() {
       setIsVisible(
           $('cloud-print-dialog-link'),
           selectedDest && !cr.isChromeOS && !selectedDest.isLocal);
+      setIsVisible(
+          $('system-dialog-link'),
+          this.shouldShowSystemDialogLink_());
       if (selectedDest && this.isInKioskAutoPrintMode_) {
         this.onPrintButtonClick_();
       }
@@ -1148,72 +1231,78 @@ cr.define('print_preview', function() {
 });
 
 // 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();