- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / print_preview / data / ticket_items / duplex.js
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 });