Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / print_preview / data / ticket_items / color.js
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.
4
5 cr.define('print_preview.ticket_items', function() {
6   'use strict';
7
8   /**
9    * Color ticket item whose value is a {@code boolean} that indicates whether
10    * the document should be printed in color.
11    * @param {!print_preview.AppState} appState App state persistence object to
12    *     save the state of the color selection.
13    * @param {!print_preview.DestinationStore} destinationStore Used to determine
14    *     whether color printing should be available.
15    * @constructor
16    * @extends {print_preview.ticket_items.TicketItem}
17    */
18   function Color(appState, destinationStore) {
19     print_preview.ticket_items.TicketItem.call(
20         this,
21         appState,
22         print_preview.AppState.Field.IS_COLOR_ENABLED,
23         destinationStore);
24   };
25
26   /**
27    * @private {!Array.<string>} List of capability types considered color.
28    * @const
29    */
30   Color.COLOR_TYPES_ = ['STANDARD_COLOR', 'CUSTOM_COLOR'];
31
32   /**
33    * @private {!Array.<string>} List of capability types considered monochrome.
34    * @const
35    */
36   Color.MONOCHROME_TYPES_ = ['STANDARD_MONOCHROME', 'CUSTOM_MONOCHROME'];
37
38   Color.prototype = {
39     __proto__: print_preview.ticket_items.TicketItem.prototype,
40
41     /** @override */
42     wouldValueBeValid: function(value) {
43       return true;
44     },
45
46     /** @override */
47     isCapabilityAvailable: function() {
48       var capability = this.capability;
49       if (!capability) {
50         return false;
51       }
52       var hasColor = false;
53       var hasMonochrome = false;
54       capability.option.forEach(function(option) {
55         hasColor = hasColor || (Color.COLOR_TYPES_.indexOf(option.type) >= 0);
56         hasMonochrome = hasMonochrome ||
57             (Color.MONOCHROME_TYPES_.indexOf(option.type) >= 0);
58       });
59       return hasColor && hasMonochrome;
60     },
61
62     /** @return {Object} Color capability of the selected destination. */
63     get capability() {
64       var dest = this.getSelectedDestInternal();
65       return (dest &&
66               dest.capabilities &&
67               dest.capabilities.printer &&
68               dest.capabilities.printer.color) ||
69              null;
70     },
71
72     /** @return {Object} Color option corresponding to the current value. */
73     getSelectedOption: function() {
74       var capability = this.capability;
75       var options = capability ? capability.option : null;
76       if (options) {
77         var typesToLookFor =
78             this.getValue() ? Color.COLOR_TYPES_ : Color.MONOCHROME_TYPES_;
79         for (var i = 0; i < typesToLookFor.length; i++) {
80           var matchingOptions = options.filter(function(option) {
81             return option.type == typesToLookFor[i];
82           });
83           if (matchingOptions.length > 0) {
84             return matchingOptions[0];
85           }
86         }
87       }
88       return null;
89     },
90
91     /** @override */
92     getDefaultValueInternal: function() {
93       var capability = this.capability;
94       var defaultOption = capability ?
95           this.getDefaultColorOption_(capability.option) : null;
96       return defaultOption &&
97           (Color.COLOR_TYPES_.indexOf(defaultOption.type) >= 0);
98     },
99
100     /** @override */
101     getCapabilityNotAvailableValueInternal: function() {
102       // TODO(rltoscano): Get rid of this check based on destination ID. These
103       // destinations should really update their CDDs to have only one color
104       // option that has type 'STANDARD_COLOR'.
105       var dest = this.getSelectedDestInternal();
106       if (dest) {
107         if (dest.id == print_preview.Destination.GooglePromotedId.DOCS ||
108             dest.id == print_preview.Destination.GooglePromotedId.FEDEX ||
109             dest.type == print_preview.Destination.Type.MOBILE) {
110           return true;
111         }
112       }
113       return this.getDefaultValueInternal();
114     },
115
116     /**
117      * @param {!Array.<!Object.<{type: string=, is_default: boolean=}>>} options
118      * @return {Object.<{type: string=, is_default: boolean=}>} Default color
119      *     option of the given list.
120      * @private
121      */
122     getDefaultColorOption_: function(options) {
123       var defaultOptions = options.filter(function(option) {
124         return option.is_default;
125       });
126       return (defaultOptions.length == 0) ? null : defaultOptions[0];
127     }
128   };
129
130   // Export
131   return {
132     Color: Color
133   };
134 });