blob: bf0f4457f23617155bfd918cae3c0ea82eeb2ca5 [file] [log] [blame]
// 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
};
});