11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccicr.define('print_preview.ticket_items', function() { 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'use strict'; 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * An object that represents a user modifiable item in a print ticket. Each 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * ticket item has a value which can be set by the user. Ticket items can also 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * be unavailable for modifying if the print destination doesn't support it or 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * if other ticket item constraints are not met. 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {print_preview.AppState} appState Application state model to update 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * when ticket items update. 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {print_preview.DestinationStore} destinationStore Used listen for 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * changes in the currently selected destination's capabilities. Since 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * this is a common dependency of ticket items, it's handled in the base 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * class. 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @constructor 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @extends {cr.EventTarget} 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function VendorItems(appState, destinationStore) { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cr.EventTarget.call(this); 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Application state model to update when ticket items update. 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @private {print_preview.AppState} 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.appState_ = appState || null; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Used listen for changes in the currently selected destination's 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * capabilities. 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @private {print_preview.DestinationStore} 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.destinationStore_ = destinationStore || null; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Vendor ticket items store, maps item id to the item value. 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @private {!Object.<string, string>} 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.items_ = {}; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VendorItems.prototype = { 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci __proto__: cr.EventTarget.prototype, 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** @return {boolean} Whether vendor capabilities are available. */ 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci isCapabilityAvailable: function() { 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return !!this.capability; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** @return {boolean} Whether the ticket item was modified by the user. */ 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci isUserEdited: function() { 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If there's at least one ticket item stored in values, it was edited. 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var key in this.items_) { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (this.items_.hasOwnProperty(key)) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** @return {Object} Vendor capabilities of the selected destination. */ 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci get capability() { 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var destination = this.destinationStore_ ? 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.destinationStore_.selectedDestination : null; 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!destination) 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return null; 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (destination.id == print_preview.Destination.GooglePromotedId.FEDEX || 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci destination.type == print_preview.Destination.Type.MOBILE) { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return null; 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return (destination.capabilities && 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci destination.capabilities.printer && 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci destination.capabilities.printer.vendor_capability) || 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci null; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Vendor ticket items store, maps item id to the item value. 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {!Object.<string, string>} 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci get ticketItems() { 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return this.items_; 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {!Object.<string, string>} values Values to set as the values of 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * vendor ticket items. Maps vendor item id to the value. 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateValue: function(values) { 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.items_ = {}; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (typeof values == 'object') { 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var key in values) { 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (values.hasOwnProperty(key) && typeof values[key] == 'string') { 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Let's empirically limit each value at 2K. 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.items_[key] = values[key].substring(0, 2048); 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (this.appState_) { 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.appState_.persistField( 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci print_preview.AppState.Field.VENDOR_OPTIONS, this.items_); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Export 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return { 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci VendorItems: VendorItems 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}); 114