Index: chrome/browser/resources/print_preview/settings/other_options_settings.js |
diff --git a/chrome/browser/resources/print_preview/settings/other_options_settings.js b/chrome/browser/resources/print_preview/settings/other_options_settings.js |
index c5e1563e29a8b76d05d9eea66f8ca0d5ea0fd5c7..fcb192b14c8a75cec34cefb83b59dabd0ad2a3d1 100644 |
--- a/chrome/browser/resources/print_preview/settings/other_options_settings.js |
+++ b/chrome/browser/resources/print_preview/settings/other_options_settings.js |
@@ -16,117 +16,48 @@ cr.define('print_preview', function() { |
* only ticket item. |
* @param {!print_preview.ticket_items.HeaderFooter} headerFooter Header |
* footer ticket item. |
+ * @param {!print_preview.ticket_items.Rasterize} rasterize Rasterize ticket |
+ * item. |
* @constructor |
* @extends {print_preview.SettingsSection} |
*/ |
function OtherOptionsSettings( |
- duplex, fitToPage, cssBackground, selectionOnly, headerFooter) { |
+ duplex, fitToPage, cssBackground, selectionOnly, headerFooter, |
+ rasterize) { |
print_preview.SettingsSection.call(this); |
/** |
- * Duplex ticket item, used to read/write the duplex selection. |
- * @type {!print_preview.ticket_items.Duplex} |
- * @private |
- */ |
- this.duplexTicketItem_ = duplex; |
- |
- /** |
- * Fit-to-page ticket item, used to read/write the fit-to-page selection. |
- * @type {!print_preview.ticket_items.FitToPage} |
- * @private |
- */ |
- this.fitToPageTicketItem_ = fitToPage; |
- |
- /** |
- * Enable CSS backgrounds ticket item, used to read/write. |
- * @type {!print_preview.ticket_items.CssBackground} |
- * @private |
- */ |
- this.cssBackgroundTicketItem_ = cssBackground; |
- |
- /** |
- * Print selection only ticket item, used to read/write. |
- * @type {!print_preview.ticket_items.SelectionOnly} |
- * @private |
- */ |
- this.selectionOnlyTicketItem_ = selectionOnly; |
- |
- /** |
- * Header-footer ticket item, used to read/write. |
- * @type {!print_preview.ticket_items.HeaderFooter} |
- * @private |
- */ |
- this.headerFooterTicketItem_ = headerFooter; |
- |
- /** |
- * Header footer container element. |
- * @type {HTMLElement} |
- * @private |
- */ |
- this.headerFooterContainer_ = null; |
- |
- /** |
- * Header footer checkbox. |
- * @type {HTMLInputElement} |
- * @private |
- */ |
- this.headerFooterCheckbox_ = null; |
- |
- /** |
- * Fit-to-page container element. |
- * @type {HTMLElement} |
- * @private |
- */ |
- this.fitToPageContainer_ = null; |
- |
- /** |
- * Fit-to-page checkbox. |
- * @type {HTMLInputElement} |
+ * Ticket items, used to read/write. ticketItems_[i] corresponds to the HTML |
+ * container element at index i. |
+ * @type {Array<!print_preview.ticket_items.TicketItem>} |
* @private |
*/ |
- this.fitToPageCheckbox_ = null; |
+ this.ticketItems_ = [headerFooter, fitToPage, duplex, cssBackground, |
dpapad
2016/12/13 23:38:18
Can this be simplified even more? We have M arrays
rbpotter
2016/12/15 00:50:58
Done.
|
+ rasterize, selectionOnly]; |
/** |
- * Duplex container element. |
- * @type {HTMLElement} |
+ * Array indicating whether the container at index i is collapsible. |
+ * @type {Array<boolean>} |
* @private |
*/ |
- this.duplexContainer_ = null; |
+ this.collapsible_ = [true, false, false, true, true, true]; |
/** |
- * Duplex checkbox. |
- * @type {HTMLInputElement} |
+ * Array of container elements. The element at index i corresponds to the |
+ * checkbox at index i of checkboxes_, the ticket item at index i of |
+ * ticketItems_, and is collapsible if collapsible_[i] is true. |
+ * @type {Array<HTMLElement>} |
* @private |
*/ |
- this.duplexCheckbox_ = null; |
+ this.containers_ = [null, null, null, null, null, null]; |
/** |
- * Print CSS backgrounds container element. |
- * @type {HTMLElement} |
+ * Array of checkbox elements. Each checkbox is the checkbox child element |
+ * of the corresponding container element in containers_. |
+ * @type {Array<HTMLElement>} |
* @private |
*/ |
- this.cssBackgroundContainer_ = null; |
- |
- /** |
- * Print CSS backgrounds checkbox. |
- * @type {HTMLInputElement} |
- * @private |
- */ |
- this.cssBackgroundCheckbox_ = null; |
- |
- /** |
- * Print selection only container element. |
- * @type {HTMLElement} |
- * @private |
- */ |
- this.selectionOnlyContainer_ = null; |
- |
- /** |
- * Print selection only checkbox. |
- * @type {HTMLInputElement} |
- * @private |
- */ |
- this.selectionOnlyCheckbox_ = null; |
+ this.checkboxes_ = [null, null, null, null, null, null]; |
}; |
OtherOptionsSettings.prototype = { |
@@ -134,239 +65,106 @@ cr.define('print_preview', function() { |
/** @override */ |
isAvailable: function() { |
- return this.headerFooterTicketItem_.isCapabilityAvailable() || |
- this.fitToPageTicketItem_.isCapabilityAvailable() || |
- this.duplexTicketItem_.isCapabilityAvailable() || |
- this.cssBackgroundTicketItem_.isCapabilityAvailable() || |
- this.selectionOnlyTicketItem_.isCapabilityAvailable(); |
+ return this.ticketItems_.some(function(ticketItem) { |
+ return ticketItem.isCapabilityAvailable(); |
+ }); |
}, |
/** @override */ |
hasCollapsibleContent: function() { |
- return this.headerFooterTicketItem_.isCapabilityAvailable() || |
- this.cssBackgroundTicketItem_.isCapabilityAvailable() || |
- this.selectionOnlyTicketItem_.isCapabilityAvailable(); |
+ return this.collapsible_.some(function(collapsible) { |
+ return collapsible; |
+ }); |
}, |
/** @override */ |
set isEnabled(isEnabled) { |
- this.headerFooterCheckbox_.disabled = !isEnabled; |
- this.fitToPageCheckbox_.disabled = !isEnabled; |
- this.duplexCheckbox_.disabled = !isEnabled; |
- this.cssBackgroundCheckbox_.disabled = !isEnabled; |
+ for (var i = 0; i < this.checkboxes_.length - 1; i++) { |
+ this.checkboxes_[i].disabled = !isEnabled; |
+ } |
}, |
/** @override */ |
enterDocument: function() { |
print_preview.SettingsSection.prototype.enterDocument.call(this); |
- this.tracker.add( |
- this.headerFooterCheckbox_, |
- 'click', |
- this.onHeaderFooterCheckboxClick_.bind(this)); |
- this.tracker.add( |
- this.fitToPageCheckbox_, |
- 'click', |
- this.onFitToPageCheckboxClick_.bind(this)); |
- this.tracker.add( |
- this.duplexCheckbox_, |
- 'click', |
- this.onDuplexCheckboxClick_.bind(this)); |
- this.tracker.add( |
- this.cssBackgroundCheckbox_, |
- 'click', |
- this.onCssBackgroundCheckboxClick_.bind(this)); |
- this.tracker.add( |
- this.selectionOnlyCheckbox_, |
- 'click', |
- this.onSelectionOnlyCheckboxClick_.bind(this)); |
- this.tracker.add( |
- this.duplexTicketItem_, |
- print_preview.ticket_items.TicketItem.EventType.CHANGE, |
- this.onDuplexChange_.bind(this)); |
- this.tracker.add( |
- this.fitToPageTicketItem_, |
- print_preview.ticket_items.TicketItem.EventType.CHANGE, |
- this.onFitToPageChange_.bind(this)); |
- this.tracker.add( |
- this.cssBackgroundTicketItem_, |
- print_preview.ticket_items.TicketItem.EventType.CHANGE, |
- this.onCssBackgroundChange_.bind(this)); |
- this.tracker.add( |
- this.selectionOnlyTicketItem_, |
- print_preview.ticket_items.TicketItem.EventType.CHANGE, |
- this.onSelectionOnlyChange_.bind(this)); |
- this.tracker.add( |
- this.headerFooterTicketItem_, |
- print_preview.ticket_items.TicketItem.EventType.CHANGE, |
- this.onHeaderFooterChange_.bind(this)); |
+ for (var i = 0; i < this.checkboxes_.length; i++) { |
+ this.tracker.add( |
+ this.checkboxes_[i], |
+ 'click', |
+ this.onCheckboxClick_.bind(this, i)); |
+ this.tracker.add( |
+ this.ticketItems_[i], |
+ print_preview.ticket_items.TicketItem.EventType.CHANGE, |
+ this.onTicketItemChange_.bind(this, i)); |
+ } |
}, |
/** @override */ |
exitDocument: function() { |
print_preview.SettingsSection.prototype.exitDocument.call(this); |
- this.headerFooterContainer_ = null; |
- this.headerFooterCheckbox_ = null; |
- this.fitToPageContainer_ = null; |
- this.fitToPageCheckbox_ = null; |
- this.duplexContainer_ = null; |
- this.duplexCheckbox_ = null; |
- this.cssBackgroundContainer_ = null; |
- this.cssBackgroundCheckbox_ = null; |
- this.selectionOnlyContainer_ = null; |
- this.selectionOnlyCheckbox_ = null; |
+ this.containers_ = [null, null, null, null, null, null]; |
+ this.checkboxes_ = [null, null, null, null, null, null]; |
}, |
/** @override */ |
decorateInternal: function() { |
- this.headerFooterContainer_ = this.getElement().querySelector( |
+ this.containers_[0] = this.getElement().querySelector( |
'.header-footer-container'); |
- this.headerFooterCheckbox_ = this.headerFooterContainer_.querySelector( |
- '.header-footer-checkbox'); |
- this.fitToPageContainer_ = this.getElement().querySelector( |
+ this.containers_[1] = this.getElement().querySelector( |
'.fit-to-page-container'); |
- this.fitToPageCheckbox_ = this.fitToPageContainer_.querySelector( |
- '.fit-to-page-checkbox'); |
- this.duplexContainer_ = this.getElement().querySelector( |
+ this.containers_[2] = this.getElement().querySelector( |
'.duplex-container'); |
- this.duplexCheckbox_ = this.duplexContainer_.querySelector( |
- '.duplex-checkbox'); |
- this.cssBackgroundContainer_ = this.getElement().querySelector( |
+ this.containers_[3] = this.getElement().querySelector( |
'.css-background-container'); |
- this.cssBackgroundCheckbox_ = this.cssBackgroundContainer_.querySelector( |
- '.css-background-checkbox'); |
- this.selectionOnlyContainer_ = this.getElement().querySelector( |
+ this.containers_[4] = this.getElement().querySelector( |
+ '.rasterize-container'); |
+ this.containers_[5] = this.getElement().querySelector( |
'.selection-only-container'); |
- this.selectionOnlyCheckbox_ = this.selectionOnlyContainer_.querySelector( |
- '.selection-only-checkbox'); |
+ for (var i = 0; i < this.containers_.length; i++) { |
+ this.checkboxes_[i] = |
+ this.containers_[i].querySelector('.checkbox'); |
+ } |
}, |
/** @override */ |
updateUiStateInternal: function() { |
if (this.isAvailable()) { |
- setIsVisible(this.headerFooterContainer_, |
- this.headerFooterTicketItem_.isCapabilityAvailable() && |
- !this.collapseContent); |
- setIsVisible(this.fitToPageContainer_, |
- this.fitToPageTicketItem_.isCapabilityAvailable()); |
- setIsVisible(this.duplexContainer_, |
- this.duplexTicketItem_.isCapabilityAvailable()); |
- setIsVisible(this.cssBackgroundContainer_, |
- this.cssBackgroundTicketItem_.isCapabilityAvailable() && |
- !this.collapseContent); |
- setIsVisible(this.selectionOnlyContainer_, |
- this.selectionOnlyTicketItem_.isCapabilityAvailable() && |
- !this.collapseContent); |
+ for (var i = 0; i < this.containers_.length; i++) { |
+ var shouldShow = this.ticketItems_[i].isCapabilityAvailable() && |
+ (!this.collapsible_[i] || !this.collapseContent); |
+ setIsVisible(this.containers_[i], shouldShow); |
+ } |
} |
print_preview.SettingsSection.prototype.updateUiStateInternal.call(this); |
}, |
/** @override */ |
isSectionVisibleInternal: function() { |
- if (this.collapseContent) { |
- return this.fitToPageTicketItem_.isCapabilityAvailable() || |
- this.duplexTicketItem_.isCapabilityAvailable(); |
+ for (var i = 0; i < this.containers_.length; i++) { |
+ if (this.ticketItems_[i].isCapabilityAvailable() && |
+ (!this.collapsible_[i] || !this.collapseContent)) { |
+ return true; |
+ } |
} |
- |
- return this.isAvailable(); |
- }, |
- |
- /** |
- * Called when the header-footer checkbox is clicked. Updates the print |
- * ticket. |
- * @private |
- */ |
- onHeaderFooterCheckboxClick_: function() { |
- this.headerFooterTicketItem_.updateValue( |
- this.headerFooterCheckbox_.checked); |
+ return false; |
}, |
/** |
- * Called when the fit-to-page checkbox is clicked. Updates the print |
- * ticket. |
+ * Called when a checkbox is clicked. Updates the print ticket. |
+ * @param {number} index : The index of the checkbox that was clicked. |
* @private |
*/ |
- onFitToPageCheckboxClick_: function() { |
- this.fitToPageTicketItem_.updateValue(this.fitToPageCheckbox_.checked); |
- }, |
- |
- /** |
- * Called when the duplex checkbox is clicked. Updates the print ticket. |
- * @private |
- */ |
- onDuplexCheckboxClick_: function() { |
- this.duplexTicketItem_.updateValue(this.duplexCheckbox_.checked); |
- }, |
- |
- /** |
- * Called when the print CSS backgrounds checkbox is clicked. Updates the |
- * print ticket store. |
- * @private |
- */ |
- onCssBackgroundCheckboxClick_: function() { |
- this.cssBackgroundTicketItem_.updateValue( |
- this.cssBackgroundCheckbox_.checked); |
- }, |
- |
- /** |
- * Called when the print selection only is clicked. Updates the |
- * print ticket store. |
- * @private |
- */ |
- onSelectionOnlyCheckboxClick_: function() { |
- this.selectionOnlyTicketItem_.updateValue( |
- this.selectionOnlyCheckbox_.checked); |
- }, |
- |
- /** |
- * Called when the duplex ticket item has changed. Updates the duplex |
- * checkbox. |
- * @private |
- */ |
- onDuplexChange_: function() { |
- this.duplexCheckbox_.checked = this.duplexTicketItem_.getValue(); |
- this.updateUiStateInternal(); |
- }, |
- |
- /** |
- * Called when the fit-to-page ticket item has changed. Updates the |
- * fit-to-page checkbox. |
- * @private |
- */ |
- onFitToPageChange_: function() { |
- this.fitToPageCheckbox_.checked = this.fitToPageTicketItem_.getValue(); |
- this.updateUiStateInternal(); |
- }, |
- |
- /** |
- * Called when the CSS background ticket item has changed. Updates the |
- * CSS background checkbox. |
- * @private |
- */ |
- onCssBackgroundChange_: function() { |
- this.cssBackgroundCheckbox_.checked = |
- this.cssBackgroundTicketItem_.getValue(); |
- this.updateUiStateInternal(); |
- }, |
- |
- /** |
- * Called when the print selection only ticket item has changed. Updates the |
- * CSS background checkbox. |
- * @private |
- */ |
- onSelectionOnlyChange_: function() { |
- this.selectionOnlyCheckbox_.checked = |
- this.selectionOnlyTicketItem_.getValue(); |
- this.updateUiStateInternal(); |
+ onCheckboxClick_: function(index) { |
+ this.ticketItems_[index].updateValue(this.checkboxes_[index].checked); |
}, |
/** |
- * Called when the header-footer ticket item has changed. Updates the |
- * header-footer checkbox. |
+ * Called a ticket item changes. Updates the UI state. |
+ * @param {number} index : The index of the ticket item that changed. |
* @private |
*/ |
- onHeaderFooterChange_: function() { |
- this.headerFooterCheckbox_.checked = |
- this.headerFooterTicketItem_.getValue(); |
+ onTicketItemChange_: function(index) { |
+ this.checkboxes_[index].checked = this.ticketItems_[index].getValue(); |
this.updateUiStateInternal(); |
}, |
}; |