Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: chrome/browser/resources/print_preview/settings/media_size_settings.js

Issue 692303002: Add DPI option selection to Print Preview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Do not show DPI selection if there's only one option available. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('print_preview', function() { 5 cr.define('print_preview', function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * Encapsulates all settings and logic related to the media size selection UI. 9 * Encapsulates all settings and logic related to the media size selection UI.
10 * @param {!print_preview.ticket_items.MediaSize} ticketItem Used to read and 10 * @param {!print_preview.ticket_items.MediaSize} ticketItem Used to read and
11 * write the media size ticket item. 11 * write the media size ticket item.
12 * @constructor 12 * @constructor
13 * @extends {print_preview.SettingsSection} 13 * @extends {print_preview.SettingsSectionSelect}
14 */ 14 */
15 function MediaSizeSettings(ticketItem) { 15 function MediaSizeSettings(ticketItem) {
16 print_preview.SettingsSection.call(this); 16 print_preview.SettingsSectionSelect.call(this, ticketItem);
17
18 /** @private {!print_preview.ticket_items.MediaSize} */
19 this.ticketItem_ = ticketItem;
20 }; 17 };
21 18
22 MediaSizeSettings.prototype = { 19 MediaSizeSettings.prototype = {
23 __proto__: print_preview.SettingsSection.prototype, 20 __proto__: print_preview.SettingsSectionSelect.prototype,
24 21
25 /** @override */ 22 /** @override */
26 isAvailable: function() { 23 getDefaultDisplayName_: function(option) {
27 return this.ticketItem_.isCapabilityAvailable(); 24 return option.name;
28 },
29
30 /** @override */
31 hasCollapsibleContent: function() {
32 return this.isAvailable();
33 },
34
35 /** @override */
36 set isEnabled(isEnabled) {
37 this.select_.disabled = !isEnabled;
38 },
39
40 /** @override */
41 enterDocument: function() {
42 print_preview.SettingsSection.prototype.enterDocument.call(this);
43 this.tracker.add(this.select_, 'change', this.onSelectChange_.bind(this));
44 this.tracker.add(
45 this.ticketItem_,
46 print_preview.ticket_items.TicketItem.EventType.CHANGE,
47 this.onTicketItemChange_.bind(this));
48 },
49
50 /**
51 * @return {HTMLSelectElement} Select element containing media size options.
52 * @private
53 */
54 get select_() {
55 return this.getElement().getElementsByClassName(
56 'media-size-settings-select')[0];
57 },
58
59 /**
60 * Makes sure the content of the select element matches the capabilities of
61 * the destination.
62 * @private
63 */
64 updateSelect_: function() {
65 var select = this.select_;
66 if (!this.isAvailable()) {
67 select.innerHTML = '';
68 return;
69 }
70 // Should the select content be updated?
71 var sameContent =
72 this.ticketItem_.capability.option.length == select.length &&
73 this.ticketItem_.capability.option.every(function(option, index) {
74 return select.options[index].value == JSON.stringify(option);
75 });
76 var indexToSelect = select.selectedIndex;
77 if (!sameContent) {
78 select.innerHTML = '';
79 // TODO: Better heuristics for the display name and options grouping.
80 this.ticketItem_.capability.option.forEach(function(option, index) {
81 var selectOption = document.createElement('option');
82 var displayName = option.custom_display_name;
83 if (!displayName && option.custom_display_name_localized) {
84 var getLocaleToCompare =
85 /** @type {function(string, boolean=): string} */
86 (function(locale, opt_languageOnly) {
87 var code = opt_languageOnly ? locale.split('-')[0] : locale;
88 return code.toLowerCase();
89 });
90 var getItemForLocale = function(items, locale, languageOnly) {
91 locale = getLocaleToCompare(locale, languageOnly);
92 for (var i = 0; i < items.length; i++) {
93 if (getLocaleToCompare(items[i].locale) == locale)
94 return items[i].value;
95 }
96 return '';
97 };
98 var items = option.custom_display_name_localized;
99 displayName =
100 getItemForLocale(items, navigator.language, false) ||
101 getItemForLocale(items, navigator.language, true);
102 }
103 selectOption.text = displayName || option.name;
104 selectOption.value = JSON.stringify(option);
105 select.appendChild(selectOption);
106 if (option.is_default) {
107 indexToSelect = index;
108 }
109 });
110 }
111 // Try to select current ticket item.
112 var valueToSelect = JSON.stringify(this.ticketItem_.getValue());
113 for (var i = 0, option; option = select.options[i]; i++) {
114 if (option.value == valueToSelect) {
115 indexToSelect = i;
116 break;
117 }
118 }
119 select.selectedIndex = indexToSelect;
120 this.onSelectChange_();
121 },
122
123 /**
124 * Called when the select element is changed. Updates the print ticket.
125 * @private
126 */
127 onSelectChange_: function() {
128 var select = this.select_;
129 var mediaSize = JSON.parse(select.options[select.selectedIndex].value);
130 this.ticketItem_.updateValue(mediaSize);
131 },
132
133 /**
134 * Called when the print ticket store changes. Selects the corresponding
135 * select option.
136 * @private
137 */
138 onTicketItemChange_: function() {
139 this.updateSelect_();
140 this.updateUiStateInternal();
141 } 25 }
142 }; 26 };
143 27
144 // Export 28 // Export
145 return { 29 return {
146 MediaSizeSettings: MediaSizeSettings 30 MediaSizeSettings: MediaSizeSettings
147 }; 31 };
148 }); 32 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698