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

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

Issue 10108001: Refactor print preview web ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix fit-to-page tests 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 // TODO This class needs a throbber while loading the destination.
kmadhusu 2012/05/18 20:13:46 nit: TODO()
9
10 /**
11 * Component used to render the print destination.
12 * @param {!print_preview.DestinationStore} destinationStore Used to determine
13 * the selected destination.
14 * @constructor
15 * @extends {print_preview.Component}
16 */
17 function DestinationSettings(destinationStore) {
18 print_preview.Component.call(this);
19
20 /**
21 * Used to determine the selected destination.
22 * @type {!print_preview.DestinationStore}
23 * @private
24 */
25 this.destinationStore_ = destinationStore;
26 };
27
28 /**
29 * Event types dispatched by the component.
30 * @enum {string}
31 */
32 DestinationSettings.EventType = {
33 MANAGE_PRINTERS_SELECT:
34 'print_preview.DestinationSettings.MANAGE_PRINTERS_SELECT'
35 };
36
37 /**
38 * CSS classes used by the component.
39 * @enum {string}
40 * @private
41 */
42 DestinationSettings.Classes_ = {
43 SELECT: 'destination-settings-select'
44 };
45
46 /**
47 * Option value of the "Manage Printers..." select option.
48 * @type {string}
49 * @const
50 * @private
51 */
52 DestinationSettings.MANAGE_ID_ = '__manage';
53
54 DestinationSettings.prototype = {
55 __proto__: print_preview.Component.prototype,
56
57 set isEnabled(isEnabled) {
58 this.select_.disabled = !isEnabled;
59 },
60
61 /** @override */
62 enterDocument: function() {
63 print_preview.Component.prototype.enterDocument.call(this);
64 this.tracker.add(
65 this.select_, 'change', this.onSelectChange_.bind(this));
66 this.tracker.add(
67 this.destinationStore_,
68 print_preview.DestinationStore.EventType.DESTINATION_SELECT,
69 this.onDestinationSelect_.bind(this));
70 this.tracker.add(
71 this.destinationStore_,
72 print_preview.DestinationStore.EventType.DESTINATIONS_INSERTED,
73 this.onDestinationsInserted_.bind(this));
74 },
75
76 get select_() {
77 return this.getElement().getElementsByClassName(
78 DestinationSettings.Classes_.SELECT)[0];
79 },
80
81 renderDestinations_: function() {
82 var select = this.select_;
83 select.innerHTML = '';
84 var destinations = this.destinationStore_.destinations;
85 var selectedDestination = this.destinationStore_.selectedDestination;
86 var printToPdfDest = null;
87 var printWithCloudPrintDest = null;
88 for (var dest, i = 0; dest = destinations[i]; i++) {
89 if (dest.isPrintToPdf) {
90 printToPdfDest = dest;
91 continue;
92 }
93 if (dest.isPrintWithCloudPrint) {
94 printWithCloudPrintDest = dest;
95 continue;
96 }
97 var optionEl = document.createElement('option');
98 optionEl.value = dest.id;
99 optionEl.selected =
100 selectedDestination && selectedDestination.id == dest.id;
101 optionEl.textContent = dest.displayName;
102 select.appendChild(optionEl);
103 }
104
105 // Add special destinations.
106 if (printToPdfDest) {
107 select.appendChild(this.createSeparatorOption_());
108 var printToPdfOptionEl = document.createElement('option');
109 printToPdfOptionEl.value = printToPdfDest.id;
110 printToPdfOptionEl.selected =
111 selectedDestination && selectedDestination.id == printToPdfDest.id;
112 printToPdfOptionEl.textContent = printToPdfDest.displayName;
113 select.appendChild(printToPdfOptionEl);
114 }
115 if (printWithCloudPrintDest) {
116 select.appendChild(this.createSeparatorOption_());
117 var printWithCloudPrintOptionEl = document.createElement('option');
118 printWithCloudPrintOptionEl.value = printWithCloudPrintDest.id;
119 printWithCloudPrintOptionEl.selected =
120 selectedDestination &&
121 selectedDestination.id == printWithCloudPrintDest.id;
122 printWithCloudPrintOptionEl.textContent =
123 printWithCloudPrintDest.displayName;
124 select.appendChild(printWithCloudPrintOptionEl);
125 }
126 select.appendChild(this.createSeparatorOption_());
127 var manageOptionEl = document.createElement('option');
128 manageOptionEl.value = DestinationSettings.MANAGE_ID_;
129 manageOptionEl.textContent = localStrings.getString('managePrinters');
130 select.appendChild(manageOptionEl);
131 },
132
133 createSeparatorOption_: function() {
134 var sep = document.createElement('option');
135 sep.disabled = true;
136 sep.role = 'separator';
137 return sep;
138 },
139
140 /**
141 * Called when a destination is selected. Selects the corresponding option.
142 * @private
143 */
144 onDestinationSelect_: function() {
145 var select = this.select_;
146 if (select.options.length > 0) {
147 select.options[select.selectedIndex].selected = false;
148 }
149 var selectedDestination = this.destinationStore_.selectedDestination;
150 for (var option, i = 0; option = select.options[i]; i++) {
151 if (selectedDestination.id == option.value) {
152 option.selected = true;
153 break;
154 }
155 }
156 },
157
158 /**
159 * Called when destinations are inserted into the destination store. Updates
160 * the select element.
161 * @private
162 */
163 onDestinationsInserted_: function() {
164 this.renderDestinations_();
165 },
166
167 /**
168 * Called when the select element changes options. Selects the corresponding
169 * print destination.
170 * @private
171 */
172 onSelectChange_: function() {
173 var select = this.select_;
174 var selectedDestId = select.options[select.selectedIndex].value;
175
176 if (selectedDestId == DestinationSettings.MANAGE_ID_) {
177 cr.dispatchSimpleEvent(
178 this, DestinationSettings.EventType.MANAGE_PRINTERS_SELECT);
179 } else {
180 var destinations = this.destinationStore_.destinations;
181 for (var dest, i = 0; dest = destinations[i]; i++) {
182 if (dest.id == selectedDestId) {
183 this.destinationStore_.selectDestination(dest);
184 break;
185 }
186 }
187 }
188 }
189 };
190
191 return {
192 DestinationSettings: DestinationSettings
193 };
194 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698