Index: chrome/browser/resources/print_preview/data/ticket_items/vendor_items.js |
diff --git a/chrome/browser/resources/print_preview/data/ticket_items/vendor_items.js b/chrome/browser/resources/print_preview/data/ticket_items/vendor_items.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d2acb1f780d2b50ba4ea35fe67f2e49cbbe452fa |
--- /dev/null |
+++ b/chrome/browser/resources/print_preview/data/ticket_items/vendor_items.js |
@@ -0,0 +1,108 @@ |
+// Copyright 2014 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.ticket_items', function() { |
+ 'use strict'; |
+ |
+ /** |
+ * An object that represents a user modifiable item in a print ticket. Each |
+ * ticket item has a value which can be set by the user. Ticket items can also |
+ * be unavailable for modifying if the print destination doesn't support it or |
+ * if other ticket item constraints are not met. |
+ * @param {print_preview.AppState} appState Application state model to update |
+ * when ticket items update. |
+ * @param {print_preview.DestinationStore} destinationStore Used listen for |
+ * changes in the currently selected destination's capabilities. Since |
+ * this is a common dependency of ticket items, it's handled in the base |
+ * class. |
+ * @constructor |
+ * @extends {cr.EventTarget} |
+ */ |
+ function VendorItems(appState, destinationStore) { |
+ cr.EventTarget.call(this); |
+ |
+ /** |
+ * Application state model to update when ticket items update. |
+ * @private {print_preview.AppState} |
+ */ |
+ this.appState_ = appState || null; |
+ |
+ /** |
+ * Used listen for changes in the currently selected destination's |
+ * capabilities. |
+ * @private {print_preview.DestinationStore} |
+ */ |
+ this.destinationStore_ = destinationStore || null; |
+ |
+ /** |
+ * Vendor ticket items store, maps item id to the item value. |
+ * @private {!Object.<string, string>} |
+ */ |
+ this.items_ = {}; |
+ }; |
+ |
+ VendorItems.prototype = { |
+ __proto__: cr.EventTarget.prototype, |
+ |
+ /** @return {boolean} Whether vendor capabilities are available. */ |
+ isCapabilityAvailable: function() { |
+ return !!this.capability; |
+ }, |
+ |
+ /** @return {boolean} Whether the ticket item was modified by the user. */ |
+ isUserEdited: function() { |
+ // If there's at least one ticket item stored in values, it was edited. |
+ for (var key in values) { |
+ if (values.hasOwnProperty(key)) |
+ return true; |
+ } |
+ return false; |
+ }, |
+ |
+ /** @return {Object} Media size capability of the selected destination. */ |
+ get capability() { |
+ var destination = this.destinationStore_ ? |
+ this.destinationStore_.selectedDestination : null; |
+ return (destination && |
+ destination.capabilities && |
+ destination.capabilities.printer && |
+ destination.capabilities.printer.vendor_capability) || |
+ null; |
+ }, |
+ |
+ /** |
+ * Vendor ticket items store, maps item id to the item value. |
+ * @return {!Object.<string, string>} |
+ */ |
+ get ticketItems() { |
+ return this.items_; |
+ }, |
+ |
+ /** |
+ * @param {!Object.<string, string>} values Values to set as the values of |
+ * vendor ticket items. Maps vendor item id to the value. |
+ */ |
+ updateValue: function(values) { |
+ this.items_ = {}; |
+ if (typeof values == 'object') { |
+ for (var key in values) { |
+ if (values.hasOwnProperty(key) && typeof values[key] == 'string') { |
+ // Let's empirically limit each value at 2K. |
+ this.items_[key] = values[key].substring(0, 2048); |
+ } |
+ } |
+ } |
+ |
+ if (this.appState_) { |
+ this.appState_.persistField( |
+ print_preview.AppState.Field.VENDOR_OPTIONS, this.items_); |
+ } |
+ } |
+ }; |
+ |
+ // Export |
+ return { |
+ VendorItems: VendorItems |
+ }; |
+}); |