- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / print_preview / settings / margin_settings.js
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   /**
9    * Creates a MarginSettings object. This object encapsulates all settings and
10    * logic related to the margins mode.
11    * @param {!print_preview.ticket_items.MarginsType} marginsTypeTicketItem Used
12    *     to read and write the margins type ticket item.
13    * @constructor
14    * @extends {print_preview.Component}
15    */
16   function MarginSettings(marginsTypeTicketItem) {
17     print_preview.Component.call(this);
18
19     /**
20      * Used to read and write the margins type ticket item.
21      * @type {!print_preview.ticket_items.MarginsType}
22      * @private
23      */
24     this.marginsTypeTicketItem_ = marginsTypeTicketItem;
25   };
26
27   /**
28    * CSS classes used by the margin settings component.
29    * @enum {string}
30    * @private
31    */
32   MarginSettings.Classes_ = {
33     SELECT: 'margin-settings-select'
34   };
35
36   MarginSettings.prototype = {
37     __proto__: print_preview.Component.prototype,
38
39     /** @param {boolean} isEnabled Whether this component is enabled. */
40     set isEnabled(isEnabled) {
41       this.select_.disabled = !isEnabled;
42     },
43
44     /** @override */
45     enterDocument: function() {
46       print_preview.Component.prototype.enterDocument.call(this);
47       this.tracker.add(
48           this.select_, 'change', this.onSelectChange_.bind(this));
49       this.tracker.add(
50           this.marginsTypeTicketItem_,
51           print_preview.ticket_items.TicketItem.EventType.CHANGE,
52           this.onMarginsTypeTicketItemChange_.bind(this));
53     },
54
55     /**
56      * @return {HTMLSelectElement} Select element containing the margin options.
57      * @private
58      */
59     get select_() {
60       return this.getElement().getElementsByClassName(
61           MarginSettings.Classes_.SELECT)[0];
62     },
63
64     /**
65      * Called when the select element is changed. Updates the print ticket
66      * margin type.
67      * @private
68      */
69     onSelectChange_: function() {
70       var select = this.select_;
71       var marginsType =
72           /** @type {!print_preview.ticket_items.MarginsType.Value} */ (
73               select.selectedIndex);
74       this.marginsTypeTicketItem_.updateValue(marginsType);
75     },
76
77     /**
78      * Called when the print ticket store changes. Selects the corresponding
79      * select option.
80      * @private
81      */
82     onMarginsTypeTicketItemChange_: function() {
83       if (this.marginsTypeTicketItem_.isCapabilityAvailable()) {
84         var select = this.select_;
85         var marginsType = this.marginsTypeTicketItem_.getValue();
86         var selectedMarginsType =
87             /** @type {!print_preview.ticket_items.MarginsType.Value} */ (
88                 select.selectedIndex);
89         if (marginsType != selectedMarginsType) {
90           select.options[selectedMarginsType].selected = false;
91           select.options[marginsType].selected = true;
92         }
93         fadeInOption(this.getElement());
94       } else {
95         fadeOutOption(this.getElement());
96       }
97     }
98   };
99
100   // Export
101   return {
102     MarginSettings: MarginSettings
103   };
104 });