15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liucr.define('print_preview.ticket_items', function() { 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 'use strict'; 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Media size ticket item. 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @param {!print_preview.AppState} appState App state used to persist media 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * size selection. 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @param {!print_preview.DestinationStore} destinationStore Destination store 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * used to determine if a destination has the media size capability. 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * @param {!print_preview.DocumentInfo} documentInfo Information about the 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) * document to print. 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {!print_preview.ticket_items.MarginsType} marginsType Reset when 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * landscape value changes. 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @param {!print_preview.ticket_items.CustomMargins} customMargins Reset when 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * landscape value changes. 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @constructor 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @extends {print_preview.ticket_items.TicketItem} 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) function MediaSize( 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) appState, destinationStore, documentInfo, marginsType, customMargins) { 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu print_preview.ticket_items.TicketItem.call( 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu appState, 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu print_preview.AppState.Field.MEDIA_SIZE, 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) destinationStore, 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) documentInfo); 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Margins ticket item. Reset when this item changes. 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @private {!print_preview.ticket_items.MarginsType} 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.marginsType_ = marginsType; 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * Custom margins ticket item. Reset when this item changes. 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) * @private {!print_preview.ticket_items.CustomMargins} 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) */ 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.customMargins_ = customMargins; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MediaSize.prototype = { 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu __proto__: print_preview.ticket_items.TicketItem.prototype, 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** @override */ 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu wouldValueBeValid: function(value) { 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!this.isCapabilityAvailable()) { 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return false; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return this.capability.option.some(function(option) { 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return option.width_microns == value.width_microns && 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu option.height_microns == value.height_microns && 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu option.is_continuous_feed == value.is_continuous_feed && 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu option.vendor_id == value.vendor_id; 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }); 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }, 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** @override */ 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu isCapabilityAvailable: function() { 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var knownSizeToSaveAsPdf = 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) (!this.getDocumentInfoInternal().isModifiable || 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) this.getDocumentInfoInternal().hasCssMediaStyles) && 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this.getSelectedDestInternal() && 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this.getSelectedDestInternal().id == 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) print_preview.Destination.GooglePromotedId.SAVE_AS_PDF; 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return !knownSizeToSaveAsPdf && !!this.capability; 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }, 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** @override */ 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) isValueEqual: function(value) { 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var myValue = this.getValue(); 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return myValue.width_microns == value.width_microns && 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) myValue.height_microns == value.height_microns && 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) myValue.is_continuous_feed == value.is_continuous_feed && 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) myValue.vendor_id == value.vendor_id; 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }, 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** @return {Object} Media size capability of the selected destination. */ 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu get capability() { 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu var destination = this.getSelectedDestInternal(); 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return (destination && 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu destination.capabilities && 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu destination.capabilities.printer && 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu destination.capabilities.printer.media_size) || 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu null; 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }, 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** @override */ 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu getDefaultValueInternal: function() { 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu var defaultOptions = this.capability.option.filter(function(option) { 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return option.is_default; 955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }); 965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return defaultOptions.length > 0 ? defaultOptions[0] : null; 975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }, 985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** @override */ 1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu getCapabilityNotAvailableValueInternal: function() { 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return {}; 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }, 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /** @override */ 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) updateValueInternal: function(value) { 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) var updateMargins = !this.isValueEqual(value); 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) print_preview.ticket_items.TicketItem.prototype.updateValueInternal.call( 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this, value); 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (updateMargins) { 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Reset the user set margins when media size changes. 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.marginsType_.updateValue( 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) print_preview.ticket_items.MarginsType.Value.DEFAULT); 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this.customMargins_.updateValue(null); 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Export 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return { 1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MediaSize: MediaSize 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}); 123