| // 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'; |
| |
| /** |
| * Creates a MarginSettings object. This object encapsulates all settings and |
| * logic related to the margins mode. |
| * @param {!print_preview.ticket_items.MarginsType} marginsTypeTicketItem Used |
| * to read and write the margins type ticket item. |
| * @constructor |
| * @extends {print_preview.Component} |
| */ |
| function MarginSettings(marginsTypeTicketItem) { |
| print_preview.Component.call(this); |
| |
| /** |
| * Used to read and write the margins type ticket item. |
| * @type {!print_preview.ticket_items.MarginsType} |
| * @private |
| */ |
| this.marginsTypeTicketItem_ = marginsTypeTicketItem; |
| }; |
| |
| /** |
| * CSS classes used by the margin settings component. |
| * @enum {string} |
| * @private |
| */ |
| MarginSettings.Classes_ = { |
| SELECT: 'margin-settings-select' |
| }; |
| |
| MarginSettings.prototype = { |
| __proto__: print_preview.Component.prototype, |
| |
| /** @param {boolean} isEnabled Whether this component is enabled. */ |
| set isEnabled(isEnabled) { |
| this.select_.disabled = !isEnabled; |
| }, |
| |
| /** @override */ |
| enterDocument: function() { |
| print_preview.Component.prototype.enterDocument.call(this); |
| this.tracker.add( |
| this.select_, 'change', this.onSelectChange_.bind(this)); |
| this.tracker.add( |
| this.marginsTypeTicketItem_, |
| print_preview.ticket_items.TicketItem.EventType.CHANGE, |
| this.onMarginsTypeTicketItemChange_.bind(this)); |
| }, |
| |
| /** |
| * @return {HTMLSelectElement} Select element containing the margin options. |
| * @private |
| */ |
| get select_() { |
| return this.getElement().getElementsByClassName( |
| MarginSettings.Classes_.SELECT)[0]; |
| }, |
| |
| /** |
| * Called when the select element is changed. Updates the print ticket |
| * margin type. |
| * @private |
| */ |
| onSelectChange_: function() { |
| var select = this.select_; |
| var marginsType = |
| /** @type {!print_preview.ticket_items.MarginsType.Value} */ ( |
| select.selectedIndex); |
| this.marginsTypeTicketItem_.updateValue(marginsType); |
| }, |
| |
| /** |
| * Called when the print ticket store changes. Selects the corresponding |
| * select option. |
| * @private |
| */ |
| onMarginsTypeTicketItemChange_: function() { |
| if (this.marginsTypeTicketItem_.isCapabilityAvailable()) { |
| var select = this.select_; |
| var marginsType = this.marginsTypeTicketItem_.getValue(); |
| var selectedMarginsType = |
| /** @type {!print_preview.ticket_items.MarginsType.Value} */ ( |
| select.selectedIndex); |
| if (marginsType != selectedMarginsType) { |
| select.options[selectedMarginsType].selected = false; |
| select.options[marginsType].selected = true; |
| } |
| fadeInOption(this.getElement()); |
| } else { |
| fadeOutOption(this.getElement()); |
| } |
| } |
| }; |
| |
| // Export |
| return { |
| MarginSettings: MarginSettings |
| }; |
| }); |