Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / resources / print_preview / data / ticket_items / landscape.js
blob907e54f2edeeb96eee841993c73921f1368f8ad6
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 cr.define('print_preview.ticket_items', function() {
6   'use strict';
8   /**
9    * Landscape ticket item whose value is a {@code boolean} that indicates
10    * whether the document should be printed in landscape orientation.
11    * @param {!print_preview.AppState} appState App state object used to persist
12    *     ticket item values.
13    * @param {!print_preview.DestinationStore} destinationStore Destination store
14    *     used to determine the default landscape value and if landscape
15    *     printing is available.
16    * @param {!print_preview.DocumentInfo} documentInfo Information about the
17    *     document to print.
18    * @param {!print_preview.ticket_items.MarginsType} marginsType Reset when
19    *     landscape value changes.
20    * @param {!print_preview.ticket_items.CustomMargins} customMargins Reset when
21    *     landscape value changes.
22    * @constructor
23    * @extends {print_preview.ticket_items.TicketItem}
24    */
25   function Landscape(appState, destinationStore, documentInfo, marginsType,
26                      customMargins) {
27     print_preview.ticket_items.TicketItem.call(
28         this,
29         appState,
30         print_preview.AppState.Field.IS_LANDSCAPE_ENABLED,
31         destinationStore,
32         documentInfo);
34     /**
35      * Margins ticket item. Reset when landscape ticket item changes.
36      * @type {!print_preview.ticket_items.MarginsType}
37      * @private
38      */
39     this.marginsType_ = marginsType;
41     /**
42      * Custom margins ticket item. Reset when landscape ticket item changes.
43      * @type {!print_preview.ticket_items.CustomMargins}
44      * @private
45      */
46     this.customMargins_ = customMargins;
47   };
49   Landscape.prototype = {
50     __proto__: print_preview.ticket_items.TicketItem.prototype,
52     /** @override */
53     wouldValueBeValid: function(value) {
54       return true;
55     },
57     /** @override */
58     isCapabilityAvailable: function() {
59       var cap = this.getPageOrientationCapability_();
60       if (!cap) {
61         return false;
62       }
63       var hasAutoOrPortraitOption = false;
64       var hasLandscapeOption = false;
65       cap.option.forEach(function(option) {
66         hasAutoOrPortraitOption = hasAutoOrPortraitOption ||
67             option.type == 'AUTO' ||
68             option.type == 'PORTRAIT';
69         hasLandscapeOption = hasLandscapeOption || option.type == 'LANDSCAPE';
70       });
71       // TODO(rltoscano): Technically, the print destination can still change
72       // the orientation of the print out (at least for cloud printers) if the
73       // document is not modifiable. But the preview wouldn't update in this
74       // case so it would be a bad user experience.
75       return this.getDocumentInfoInternal().isModifiable &&
76           !this.getDocumentInfoInternal().hasCssMediaStyles &&
77           hasAutoOrPortraitOption &&
78           hasLandscapeOption;
79     },
81     /** @override */
82     getDefaultValueInternal: function() {
83       var cap = this.getPageOrientationCapability_();
84       var defaultOptions = cap.option.filter(function(option) {
85         return option.is_default;
86       });
87       return defaultOptions.length == 0 ? false :
88                                           defaultOptions[0].type == 'LANDSCAPE';
89     },
91     /** @override */
92     getCapabilityNotAvailableValueInternal: function() {
93       var doc = this.getDocumentInfoInternal();
94       return doc.hasCssMediaStyles ?
95           (doc.pageSize.width > doc.pageSize.height) :
96           false;
97     },
99     /** @override */
100     updateValueInternal: function(value) {
101       var updateMargins = !this.isValueEqual(value);
102       print_preview.ticket_items.TicketItem.prototype.updateValueInternal.call(
103           this, value);
104       if (updateMargins) {
105         // Reset the user set margins when page orientation changes.
106         this.marginsType_.updateValue(
107           print_preview.ticket_items.MarginsType.Value.DEFAULT);
108         this.customMargins_.updateValue(null);
109       }
110     },
112     /**
113      * @return {Object} Page orientation capability of the selected destination.
114      * @private
115      */
116     getPageOrientationCapability_: function() {
117       var dest = this.getSelectedDestInternal();
118       return (dest &&
119               dest.capabilities &&
120               dest.capabilities.printer &&
121               dest.capabilities.printer.page_orientation) ||
122              null;
123     }
124   };
126   // Export
127   return {
128     Landscape: Landscape
129   };