Home | History | Annotate | Download | only in ticket_items
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 cr.define('print_preview.ticket_items', function() {
      6   'use strict';
      7 
      8   /**
      9    * Duplex ticket item whose value is a {@code boolean} that indicates whether
     10    * the document should be duplex printed.
     11    * @param {!print_preview.AppState} appState App state used to persist collate
     12    *     selection.
     13    * @param {!print_preview.DestinationStore} destinationStore Destination store
     14    *     used determine if a destination has the collate capability.
     15    * @constructor
     16    * @extends {print_preview.ticket_items.TicketItem}
     17    */
     18   function Duplex(appState, destinationStore) {
     19     print_preview.ticket_items.TicketItem.call(
     20         this,
     21         appState,
     22         print_preview.AppState.Field.IS_DUPLEX_ENABLED,
     23         destinationStore);
     24   };
     25 
     26   Duplex.prototype = {
     27     __proto__: print_preview.ticket_items.TicketItem.prototype,
     28 
     29     /** @override */
     30     wouldValueBeValid: function(value) {
     31       return true;
     32     },
     33 
     34     /** @override */
     35     isCapabilityAvailable: function() {
     36       var cap = this.getDuplexCapability_();
     37       if (!cap) {
     38         return false;
     39       }
     40       var hasLongEdgeOption = false;
     41       var hasSimplexOption = false;
     42       cap.option.forEach(function(option) {
     43         hasLongEdgeOption = hasLongEdgeOption || option.type == 'LONG_EDGE';
     44         hasSimplexOption = hasSimplexOption || option.type == 'NO_DUPLEX';
     45       });
     46       return hasLongEdgeOption && hasSimplexOption;
     47     },
     48 
     49     /** @override */
     50     getDefaultValueInternal: function() {
     51       var cap = this.getDuplexCapability_();
     52       var defaultOptions = cap.option.filter(function(option) {
     53         return option.is_default;
     54       });
     55       return defaultOptions.length == 0 ? false :
     56                                           defaultOptions[0].type == 'LONG_EDGE';
     57     },
     58 
     59     /** @override */
     60     getCapabilityNotAvailableValueInternal: function() {
     61       return false;
     62     },
     63 
     64     /**
     65      * @return {Object} Duplex capability of the selected destination.
     66      * @private
     67      */
     68     getDuplexCapability_: function() {
     69       var dest = this.getSelectedDestInternal();
     70       return (dest &&
     71               dest.capabilities &&
     72               dest.capabilities.printer &&
     73               dest.capabilities.printer.duplex) ||
     74              null;
     75     }
     76   };
     77 
     78   // Export
     79   return {
     80     Duplex: Duplex
     81   };
     82 });
     83