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', function() {
8 // TODO(rltoscano): This class needs a throbber while loading the destination
9 // or another solution is persist the settings of the printer so that next
13 * Component used to render the print destination.
14 * @param {!print_preview.DestinationStore} destinationStore Used to determine
15 * the selected destination.
17 * @extends {print_preview.SettingsSection}
19 function DestinationSettings(destinationStore) {
20 print_preview.SettingsSection.call(this);
23 * Used to determine the selected destination.
24 * @type {!print_preview.DestinationStore}
27 this.destinationStore_ = destinationStore;
30 * Current CSS class of the destination icon.
31 * @type {?DestinationSettings.Classes_}
34 this.iconClass_ = null;
38 * Event types dispatched by the component.
41 DestinationSettings.EventType = {
42 CHANGE_BUTTON_ACTIVATE:
43 'print_preview.DestinationSettings.CHANGE_BUTTON_ACTIVATE'
47 * CSS classes used by the component.
51 DestinationSettings.Classes_ = {
52 CHANGE_BUTTON: 'destination-settings-change-button',
53 ICON: 'destination-settings-icon',
54 ICON_CLOUD: 'destination-settings-icon-cloud',
55 ICON_CLOUD_SHARED: 'destination-settings-icon-cloud-shared',
56 ICON_GOOGLE_PROMOTED: 'destination-settings-icon-google-promoted',
57 ICON_LOCAL: 'destination-settings-icon-local',
58 ICON_MOBILE: 'destination-settings-icon-mobile',
59 ICON_MOBILE_SHARED: 'destination-settings-icon-mobile-shared',
60 LOCATION: 'destination-settings-location',
61 NAME: 'destination-settings-name',
63 THOBBER_NAME: 'destination-throbber-name'
66 DestinationSettings.prototype = {
67 __proto__: print_preview.SettingsSection.prototype,
70 isAvailable: function() {
75 hasCollapsibleContent: function() {
80 set isEnabled(isEnabled) {
81 var changeButton = this.getElement().getElementsByClassName(
82 DestinationSettings.Classes_.CHANGE_BUTTON)[0];
83 changeButton.disabled = !isEnabled;
87 enterDocument: function() {
88 print_preview.SettingsSection.prototype.enterDocument.call(this);
89 var changeButton = this.getElement().getElementsByClassName(
90 DestinationSettings.Classes_.CHANGE_BUTTON)[0];
92 changeButton, 'click', this.onChangeButtonClick_.bind(this));
94 this.destinationStore_,
95 print_preview.DestinationStore.EventType.DESTINATION_SELECT,
96 this.onDestinationSelect_.bind(this));
98 this.destinationStore_,
99 print_preview.DestinationStore.EventType.
100 CACHED_SELECTED_DESTINATION_INFO_READY,
101 this.onSelectedDestinationNameSet_.bind(this));
105 * Called when the "Change" button is clicked. Dispatches the
106 * CHANGE_BUTTON_ACTIVATE event.
109 onChangeButtonClick_: function() {
110 cr.dispatchSimpleEvent(
111 this, DestinationSettings.EventType.CHANGE_BUTTON_ACTIVATE);
115 * Called when the destination selection has changed. Updates UI elements.
118 onDestinationSelect_: function() {
119 var destinationSettingsBoxEl =
120 this.getChildElement('.destination-settings-box');
122 var destination = this.destinationStore_.selectedDestination;
123 if (destination != null) {
124 var nameEl = this.getElement().getElementsByClassName(
125 DestinationSettings.Classes_.NAME)[0];
126 nameEl.textContent = destination.displayName;
127 nameEl.title = destination.displayName;
129 var iconEl = this.getElement().getElementsByClassName(
130 DestinationSettings.Classes_.ICON)[0];
131 iconEl.src = destination.iconUrl;
133 var hint = destination.hint;
134 var locationEl = this.getElement().getElementsByClassName(
135 DestinationSettings.Classes_.LOCATION)[0];
136 locationEl.textContent = hint;
137 locationEl.title = hint;
139 var offlineStatusText = destination.offlineStatusText;
140 var offlineStatusEl =
141 this.getChildElement('.destination-settings-offline-status');
142 offlineStatusEl.textContent = offlineStatusText;
143 offlineStatusEl.title = offlineStatusText;
145 var isOffline = destination.isOffline;
146 destinationSettingsBoxEl.classList.toggle(
147 DestinationSettings.Classes_.STALE, isOffline);
148 setIsVisible(locationEl, !isOffline);
149 setIsVisible(offlineStatusEl, isOffline);
153 this.getChildElement('.throbber-container'),
154 this.destinationStore_.isAutoSelectDestinationInProgress);
155 setIsVisible(destinationSettingsBoxEl, !!destination);
158 onSelectedDestinationNameSet_: function() {
159 var destinationName =
160 this.destinationStore_.selectedDestination.displayName;
161 var nameEl = this.getElement().getElementsByClassName(
162 DestinationSettings.Classes_.THOBBER_NAME)[0];
163 nameEl.textContent = destinationName;
164 nameEl.title = destinationName;
170 DestinationSettings: DestinationSettings