Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: chrome/browser/resources/print_preview/copies_settings.js

Issue 10108001: Refactor print preview web ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Resolve conflicts Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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', function() {
6 'use strict';
7
8 /**
9 * Creates a CopiesSettings object.
10 * @constructor
11 */
12 function CopiesSettings() {
13 this.copiesOption_ = $('copies-option');
14 this.textfield_ = $('copies');
15 this.incrementButton_ = $('increment');
16 this.decrementButton_ = $('decrement');
17 // Minimum allowed value for number of copies.
18 this.minValue_ = 1;
19 // Maximum allowed value for number of copies.
20 this.maxValue_ = 999;
21 this.collateOption_ = $('collate-option');
22 this.collateCheckbox_ = $('collate');
23 this.hint_ = $('copies-hint');
24 this.twoSidedCheckbox_ = $('two-sided');
25 this.twoSidedOption_ = $('two-sided-option');
26
27 this.previousDuplexMode_ = CopiesSettings.UNKNOWN_DUPLEX_MODE;
28 this.addEventListeners_();
29 }
30
31 // Constant values matches printing::DuplexMode enum.
32 CopiesSettings.SIMPLEX = 0;
33 CopiesSettings.LONG_EDGE = 1;
34 CopiesSettings.UNKNOWN_DUPLEX_MODE = -1;
35
36 cr.addSingletonGetter(CopiesSettings);
37
38 CopiesSettings.prototype = {
39 /**
40 * The number of copies represented by the contents of |this.textfield_|.
41 * If the text is not valid returns |this.minValue_|.
42 * @type {number}
43 */
44 get numberOfCopies() {
45 var value = parseInt(this.textfield_.value, 10);
46 if (!value || value <= this.minValue_)
47 value = this.minValue_;
48 return value;
49 },
50
51 /**
52 * Getter method for |collateOption_|.
53 * @type {HTMLElement}
54 */
55 get collateOption() {
56 return this.collateOption_;
57 },
58
59 /**
60 * Getter method for |twoSidedCheckbox_|.
61 * @type {HTMLInputElement}
62 */
63 get twoSidedCheckbox() {
64 return this.twoSidedCheckbox_;
65 },
66
67 /**
68 * Gets the duplex mode information for printing.
69 * @return {number} duplex mode.
70 */
71 get duplexMode() {
72 if (this.twoSidedOption_.hidden)
73 return CopiesSettings.UNKNOWN_DUPLEX_MODE;
74 else if (this.twoSidedCheckbox_.checked)
75 return CopiesSettings.LONG_EDGE;
76 else
77 return CopiesSettings.SIMPLEX;
78 },
79
80 set previousDuplexMode(duplexMode) {
81 this.previousDuplexMode_ = duplexMode;
82 },
83
84 /**
85 * @return {boolean} true if |this.textfield_| is empty, or represents a
86 * positive integer value.
87 */
88 isValid: function() {
89 return !this.textfield_.value || isPositiveInteger(this.textfield_.value);
90 },
91
92 /**
93 * Checks whether the preview collate setting value is set or not.
94 * @return {boolean} true if collate option is enabled and checked.
95 */
96 isCollated: function() {
97 return !this.collateOption_.hidden && this.collateCheckbox_.checked;
98 },
99
100 /**
101 * Resets |this.textfield_| to |this.minValue_|.
102 * @private
103 */
104 reset_: function() {
105 this.textfield_.value = this.minValue_;
106 },
107
108 /**
109 * Listener function to execute whenever the increment/decrement buttons are
110 * clicked.
111 * @private
112 * @param {int} sign Must be 1 for an increment button click and -1 for a
113 * decrement button click.
114 */
115 onButtonClicked_: function(sign) {
116 if (!this.isValid()) {
117 this.reset_();
118 } else {
119 var newValue = this.numberOfCopies + sign;
120 this.textfield_.value = newValue;
121 }
122 this.updateButtonsState_();
123 this.showHideCollateOption_();
124
125 if (!hasPendingPreviewRequest) {
126 cr.dispatchSimpleEvent(document, customEvents.UPDATE_SUMMARY);
127 cr.dispatchSimpleEvent(document, customEvents.UPDATE_PRINT_BUTTON);
128 }
129 },
130
131 /**
132 * Listener function to execute whenever a change occurs in |textfield_|
133 * textfield.
134 * @private
135 */
136 onTextfieldChanged_: function() {
137 this.updateButtonsState_();
138 this.showHideCollateOption_();
139 if (!hasPendingPreviewRequest) {
140 cr.dispatchSimpleEvent(document, customEvents.UPDATE_SUMMARY);
141 cr.dispatchSimpleEvent(document, customEvents.UPDATE_PRINT_BUTTON);
142 }
143 },
144
145 /**
146 * Adding listeners to all copies related controls. The listeners take care
147 * of altering their behavior depending on |hasPendingPreviewRequest|.
148 * @private
149 */
150 addEventListeners_: function() {
151 this.textfield_.oninput = this.onTextfieldChanged_.bind(this);
152 this.incrementButton_.onclick = this.onIncrementButtonClicked_.bind(this);
153 this.decrementButton_.onclick = this.onDecrementButtonClicked_.bind(this);
154 this.twoSidedCheckbox_.onclick = function() {
155 if (!hasPendingPreviewRequest)
156 cr.dispatchSimpleEvent(document, customEvents.UPDATE_SUMMARY);
157 }
158 document.addEventListener(customEvents.PDF_LOADED,
159 this.updateButtonsState_.bind(this));
160 document.addEventListener(customEvents.PRINTER_CAPABILITIES_UPDATED,
161 this.onPrinterCapabilitiesUpdated_.bind(this));
162 },
163
164 /**
165 * Executes when a |customEvents.PRINTER_CAPABILITIES_UPDATED| event occurs.
166 * @private
167 */
168 onPrinterCapabilitiesUpdated_: function(e) {
169 var duplexValue = e.printerCapabilities.printerDefaultDuplexValue;
170 if (duplexValue != CopiesSettings.UNKNOWN_DUPLEX_MODE &&
171 this.previousDuplexMode_ != CopiesSettings.UNKNOWN_DUPLEX_MODE) {
172 duplexValue = this.previousDuplexMode_;
173 }
174 this.updateTwoSidedOption_(duplexValue);
175 e.printerCapabilities.disableCopiesOption ?
176 fadeOutOption(this.copiesOption_) :
177 fadeInOption(this.copiesOption_);
178 },
179
180 /**
181 * Listener triggered when |incrementButton_| is clicked.
182 * @private
183 */
184 onIncrementButtonClicked_: function() {
185 this.onButtonClicked_(1);
186 },
187
188 /**
189 * Listener triggered when |decrementButton_| is clicked.
190 * @private
191 */
192 onDecrementButtonClicked_: function() {
193 this.onButtonClicked_(-1);
194 },
195
196 /**
197 * Takes care of showing/hiding the collate option.
198 * @private
199 */
200 showHideCollateOption_: function() {
201 this.collateOption_.hidden = this.numberOfCopies <= 1;
202 },
203
204 /*
205 * Takes care of showing/hiding the two sided option.
206 * @param {number} defaultDuplexValue Specifies the default duplex value.
207 * @private
208 */
209 updateTwoSidedOption_: function(defaultDuplexValue) {
210 // On Windows, some printers don't specify their duplex values in the
211 // printer schema. If the printer duplex value is UNKNOWN_DUPLEX_MODE,
212 // hide the two sided option in preview tab UI.
213 // Ref bug: http://crbug.com/89204
214 this.twoSidedOption_.hidden =
215 (defaultDuplexValue == CopiesSettings.UNKNOWN_DUPLEX_MODE);
216
217 if (!this.twoSidedOption_.hidden) {
218 this.twoSidedCheckbox_.checked = !!defaultDuplexValue;
219 if (pageSettings.totalPageCount)
220 cr.dispatchSimpleEvent(document, customEvents.UPDATE_SUMMARY);
221 }
222 },
223
224 /**
225 * Updates the state of the increment/decrement buttons based on the current
226 * |textfield_| value.
227 * @private
228 */
229 updateButtonsState_: function() {
230 if (!this.isValid()) {
231 this.textfield_.classList.add('invalid');
232 this.incrementButton_.disabled = false;
233 this.decrementButton_.disabled = false;
234 fadeInElement(this.hint_);
235 } else {
236 this.textfield_.classList.remove('invalid');
237 this.incrementButton_.disabled = this.numberOfCopies == this.maxValue_;
238 this.decrementButton_.disabled = this.numberOfCopies == this.minValue_;
239 fadeOutElement(this.hint_);
240 }
241 this.hint_.setAttribute('aria-hidden', this.isValid());
242 }
243 };
244
245 return {
246 CopiesSettings: CopiesSettings
247 };
248 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698