| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| cr.define('print_preview', function() { |
| 'use strict'; |
| |
| // TODO(rltoscano): This class needs a throbber while loading the destination |
| // or another solution is persist the settings of the printer so that next |
| // load is fast. |
| |
| /** |
| * Component used to render the print destination. |
| * @param {!print_preview.DestinationStore} destinationStore Used to determine |
| * the selected destination. |
| * @constructor |
| * @extends {print_preview.Component} |
| */ |
| function DestinationSettings(destinationStore) { |
| print_preview.Component.call(this); |
| |
| /** |
| * Used to determine the selected destination. |
| * @type {!print_preview.DestinationStore} |
| * @private |
| */ |
| this.destinationStore_ = destinationStore; |
| |
| /** |
| * Current CSS class of the destination icon. |
| * @type {?DestinationSettings.Classes_} |
| * @private |
| */ |
| this.iconClass_ = null; |
| }; |
| |
| /** |
| * Event types dispatched by the component. |
| * @enum {string} |
| */ |
| DestinationSettings.EventType = { |
| CHANGE_BUTTON_ACTIVATE: |
| 'print_preview.DestinationSettings.CHANGE_BUTTON_ACTIVATE' |
| }; |
| |
| /** |
| * CSS classes used by the component. |
| * @enum {string} |
| * @private |
| */ |
| DestinationSettings.Classes_ = { |
| CHANGE_BUTTON: 'destination-settings-change-button', |
| ICON: 'destination-settings-icon', |
| ICON_CLOUD: 'destination-settings-icon-cloud', |
| ICON_CLOUD_SHARED: 'destination-settings-icon-cloud-shared', |
| ICON_GOOGLE_PROMOTED: 'destination-settings-icon-google-promoted', |
| ICON_LOCAL: 'destination-settings-icon-local', |
| ICON_MOBILE: 'destination-settings-icon-mobile', |
| ICON_MOBILE_SHARED: 'destination-settings-icon-mobile-shared', |
| LOCATION: 'destination-settings-location', |
| NAME: 'destination-settings-name', |
| STALE: 'stale', |
| THOBBER_NAME: 'destination-throbber-name' |
| }; |
| |
| DestinationSettings.prototype = { |
| __proto__: print_preview.Component.prototype, |
| |
| /** @param {boolean} Whether the component is enabled. */ |
| set isEnabled(isEnabled) { |
| var changeButton = this.getElement().getElementsByClassName( |
| DestinationSettings.Classes_.CHANGE_BUTTON)[0]; |
| changeButton.disabled = !isEnabled; |
| }, |
| |
| /** @override */ |
| enterDocument: function() { |
| print_preview.Component.prototype.enterDocument.call(this); |
| var changeButton = this.getElement().getElementsByClassName( |
| DestinationSettings.Classes_.CHANGE_BUTTON)[0]; |
| this.tracker.add( |
| changeButton, 'click', this.onChangeButtonClick_.bind(this)); |
| this.tracker.add( |
| this.destinationStore_, |
| print_preview.DestinationStore.EventType.DESTINATION_SELECT, |
| this.onDestinationSelect_.bind(this)); |
| this.tracker_.add( |
| this.destinationStore_, |
| print_preview.DestinationStore.EventType. |
| CACHED_SELECTED_DESTINATION_INFO_READY, |
| this.onSelectedDestinationNameSet_.bind(this)); |
| }, |
| |
| /** |
| * Called when the "Change" button is clicked. Dispatches the |
| * CHANGE_BUTTON_ACTIVATE event. |
| * @private |
| */ |
| onChangeButtonClick_: function() { |
| cr.dispatchSimpleEvent( |
| this, DestinationSettings.EventType.CHANGE_BUTTON_ACTIVATE); |
| }, |
| |
| /** |
| * Called when the destination selection has changed. Updates UI elements. |
| * @private |
| */ |
| onDestinationSelect_: function() { |
| var destinationSettingsBoxEl = |
| this.getChildElement('.destination-settings-box'); |
| |
| var destination = this.destinationStore_.selectedDestination; |
| if (destination != null) { |
| var nameEl = this.getElement().getElementsByClassName( |
| DestinationSettings.Classes_.NAME)[0]; |
| nameEl.textContent = destination.displayName; |
| nameEl.title = destination.displayName; |
| |
| var iconEl = this.getElement().getElementsByClassName( |
| DestinationSettings.Classes_.ICON)[0]; |
| iconEl.src = destination.iconUrl; |
| |
| var hint = destination.hint; |
| var locationEl = this.getElement().getElementsByClassName( |
| DestinationSettings.Classes_.LOCATION)[0]; |
| locationEl.textContent = hint; |
| locationEl.title = hint; |
| |
| var offlineStatusText = destination.offlineStatusText; |
| var offlineStatusEl = |
| this.getChildElement('.destination-settings-offline-status'); |
| offlineStatusEl.textContent = offlineStatusText; |
| offlineStatusEl.title = offlineStatusText; |
| |
| var isOffline = destination.isOffline; |
| destinationSettingsBoxEl.classList.toggle( |
| DestinationSettings.Classes_.STALE, isOffline); |
| setIsVisible(locationEl, !isOffline); |
| setIsVisible(offlineStatusEl, isOffline); |
| } |
| |
| setIsVisible( |
| this.getChildElement('.throbber-container'), |
| this.destinationStore_.isAutoSelectDestinationInProgress); |
| setIsVisible(destinationSettingsBoxEl, !!destination); |
| }, |
| |
| onSelectedDestinationNameSet_: function() { |
| var destinationName = |
| this.destinationStore_.selectedDestination.displayName; |
| var nameEl = this.getElement().getElementsByClassName( |
| DestinationSettings.Classes_.THOBBER_NAME)[0]; |
| nameEl.textContent = destinationName; |
| nameEl.title = destinationName; |
| } |
| }; |
| |
| // Export |
| return { |
| DestinationSettings: DestinationSettings |
| }; |
| }); |