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

Side by Side Diff: chrome/browser/resources/print_preview/settings/page_settings.js

Issue 10108001: Refactor print preview web ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove extra files Created 8 years, 8 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 PageSettings object. This object encapsulates all settings and
10 * logic related to page selection.
11 *
12 * @param {print_preview.PrintTicketStore} printTicketStore Used to read and
13 * write page range settings.
14 * @constructor
15 * @extends {print_preview.Component}
16 */
17 function PageSettings(printTicketStore) {
18 print_preview.Component.call(this);
19
20 /**
21 * Used to read and write page range settings.
22 * @type {print_preview.PrintTicketStore}
23 * @private
24 */
25 this.printTicketStore_ = printTicketStore;
26
27 /**
28 * Timeout used to delay processing of the custom page range input.
29 * @type {Object}
30 * @private
31 */
32 this.customInputTimeout_ = null;
33 };
34
35 /**
36 * CSS classes used by the page settings.
37 * @enum {string}
38 * @private
39 */
40 PageSettings.Classes_ = {
41 ALL_RADIO: 'page-settings-all-radio',
42 CUSTOM_HINT: 'page-settings-custom-hint',
43 CUSTOM_INPUT: 'page-settings-custom-input',
44 CUSTOM_RADIO: 'page-settings-custom-radio'
45 };
46
47 /**
48 * Delay in milliseconds before processing custom page range input.
49 * @type {number}
50 * @private
51 */
52 PageSettings.CUSTOM_INPUT_DELAY_ = 500;
53
54 PageSettings.prototype = {
55 __proto__: print_preview.Component.prototype,
56
57 set isEnabled(isEnabled) {
dpapad1 2012/04/26 16:04:44 I would name this setEnabled() instead of set isEn
Robert Toscano 2012/04/28 01:41:37 I wanted to model this after dom elements that hav
dpapad 2012/04/30 16:19:25 Ok, so I see two possible namings. - If you prefe
Robert Toscano 2012/05/05 00:02:50 Done.
58 this.customInput_.disabled = !isEnabled;
59 this.allRadio_.disabled = !isEnabled;
60 this.customRadio_.disabled = !isEnabled;
61 },
62
63 /** @override */
64 enterDocument: function() {
65 print_preview.Component.prototype.enterDocument.call(this);
66 this.customHintEl_.textContent = localStrings.getStringF(
67 'pageRangeInstruction',
68 localStrings.getString('examplePageRangeText'));
69 this.tracker.add(
70 this.allRadio_, 'click', this.onAllRadioClick_.bind(this));
71 this.tracker.add(
72 this.customRadio_, 'click', this.onCustomRadioClick_.bind(this));
73 this.tracker.add(
74 this.customInput_, 'blur', this.onCustomInputBlur_.bind(this));
75 this.tracker.add(
76 this.customInput_, 'keyup', this.onCustomInputKeyUp_.bind(this));
77 this.tracker.add(
78 this.printTicketStore_,
79 print_preview.PrintTicketStore.Event.DOCUMENT_CHANGE,
80 this.onPrintTicketStoreChange_.bind(this));
81 this.tracker.add(
82 this.printTicketStore_,
83 print_preview.PrintTicketStore.Event.TICKET_CHANGE,
84 this.onPrintTicketStoreChange_.bind(this));
85 this.tracker.add(
86 this.printTicketStore_,
87 print_preview.PrintTicketStore.Event.CAPABILITIES_CHANGE,
88 this.onPrintTicketStoreChange_.bind(this));
89 },
90
91 get customInput_() {
92 return this.getElement().getElementsByClassName(
93 PageSettings.Classes_.CUSTOM_INPUT)[0];
94 },
95
96 get allRadio_() {
97 return this.getElement().getElementsByClassName(
98 PageSettings.Classes_.ALL_RADIO)[0];
99 },
100
101 get customRadio_() {
102 return this.getElement().getElementsByClassName(
103 PageSettings.Classes_.CUSTOM_RADIO)[0];
104 },
105
106 get customHintEl_() {
107 return this.getElement().getElementsByClassName(
108 PageSettings.Classes_.CUSTOM_HINT)[0];
109 },
110
111 setInvalidStateVisible_: function(isVisible) {
112 if (isVisible) {
113 this.customInput_.classList.add('invalid');
114 this.customHintEl_.setAttribute('aria-hidden', 'false');
115 fadeInElement(this.customHintEl_);
116 } else {
117 this.customInput_.classList.remove('invalid');
118 fadeOutElement(this.customHintEl_);
119 this.customHintEl_.setAttribute('aria-hidden', 'true');
120 }
121 },
122
123 onAllRadioClick_: function() {
124 this.printTicketStore_.updatePageRange('');
125 },
126
127 onCustomRadioClick_: function() {
128 this.customInput_.focus();
129 this.printTicketStore_.updatePageRange(this.customInput_.value);
130 },
131
132 onCustomInputBlur_: function() {
133 if (this.customInput_.value == '') {
134 this.allRadio_.checked = true;
135 this.customRadio_.checked = false;
136 }
137 },
138
139 onCustomInputKeyUp_: function(evt) {
140 if (this.customInputTimeout_) {
141 clearTimeout(this.customInputTimeout_);
142 }
143 if (evt.keyIdentifier == 'Enter') {
144 this.printTicketStore_.updatePageRange(this.customInput_.value);
145 } else {
146 this.allRadio_.checked = false;
147 this.customRadio_.checked = true;
148 this.customInputTimeout_ = setTimeout(
149 this.onCustomInputTimeout_.bind(this),
150 PageSettings.CUSTOM_INPUT_DELAY_);
151 }
152 },
153
154 onCustomInputTimeout_: function() {
155 this.customInputTimeout_ = null;
156 if (this.customRadio_.checked) {
157 this.printTicketStore_.updatePageRange(this.customInput_.value);
158 }
159 },
160
161 onPrintTicketStoreChange_: function() {
162 if (this.printTicketStore_.hasPageRangeCapability()) {
163 var pageRangeStr = this.printTicketStore_.getPageRangeStr();
164 if (pageRangeStr) {
165 // TODO There might be a bad case here where we overwrite what the
166 // user is typing. Also could be the case in copies.
167 this.customInput_.value = pageRangeStr;
168 this.customRadio_.checked = true;
169 this.allRadio_.checked = false;
170 this.setInvalidStateVisible_(
171 !this.printTicketStore_.isPageRangeValid());
172 } else {
173 this.allRadio_.checked = true;
174 this.customRadio_.checked = false;
175 this.customInput_.value = '';
176 this.setInvalidStateVisible_(false);
177 }
178 fadeInOption(this.getElement());
179 } else {
180 fadeOutOption(this.getElement());
181 }
182 }
183 };
184
185 // Export
186 return {
187 PageSettings: PageSettings
188 };
189 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698