Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: chrome/browser/resources/print_preview/data/cloud_parsers.js

Issue 10108001: Refactor print preview web ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review feedback Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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('cloudprint', function() {
6 'use strict';
7
8 function CloudDestinationParser() {};
9
10 /**
11 * Enumeration of cloud destination field names.
12 * @enum {string}
13 * @private
14 */
15 CloudDestinationParser.Field_ = {
16 CAPABILITIES: 'capabilities',
17 DISPLAY_NAME: 'displayName',
18 FORMAT: 'capsFormat',
19 ID: 'id',
20 TAGS: 'tags'
21 };
22
23 /**
24 * Special tag that denotes whether the destination has been recently used.
25 * @type {string}
26 * @private
27 */
28 CloudDestinationParser.RECENT_TAG_ = '^recent';
29
30 /**
31 * Parses a destination from JSON from a Google Cloud Print search or printer
32 * response.
33 * @return {!print_preview.Destination} Parsed destination.
34 */
35 CloudDestinationParser.parse = function(json) {
36 // TODO Error handling.
37 var isRecent = arrayContains(
38 json[CloudDestinationParser.Field_.TAGS],
39 CloudDestinationParser.RECENT_TAG_);
40 var cloudDest = new print_preview.Destination(
41 json[CloudDestinationParser.Field_.ID],
42 json[CloudDestinationParser.Field_.DISPLAY_NAME],
43 isRecent,
44 false /*isLocal*/,
45 json[CloudDestinationParser.Field_.TAGS]);
46 if (json.hasOwnProperty(CloudDestinationParser.Field_.CAPABILITIES) &&
47 json.hasOwnProperty(CloudDestinationParser.Field_.FORMAT)) {
48 cloudDest.capabilities = CloudCapabilitiesParser.parse(
49 json[CloudDestinationParser.Field_.FORMAT],
50 json[CloudDestinationParser.Field_.CAPABILITIES]);
51 }
52 return cloudDest;
53 };
54
55 function CloudCapabilitiesParser() {};
56
57 CloudCapabilitiesParser.Field_ = {
58 CAP_ID: 'name',
59 DEFAULT: 'default',
60 IS_DEFAULT: 'default',
61 OPTIONS: 'options',
62 OPTION_ID: 'name'
63 };
64
65 CloudCapabilitiesParser.parse = function(capsFormat, json) {
66 log('CloudCapabilitiesParser.parse');
67 var colorCapability = null;
68 var duplexCapability = null;
69 var copiesCapability = null;
70 var collateCapability = null;
71 for (var cap, i = 0; cap = json[i]; i++) {
72 var capId = cap[CloudCapabilitiesParser.Field_.CAP_ID];
73 if (capId == print_preview.CollateCapability.Id[capsFormat]) {
74 collateCapability = CloudCapabilitiesParser.parseCollate(capId, cap);
75 } else if (capId == print_preview.ColorCapability.Id[capsFormat]) {
76 colorCapability = CloudCapabilitiesParser.parseColor(capId, cap);
77 } else if (capId == print_preview.CopiesCapability.Id[capsFormat]) {
78 copiesCapability = new print_preview.CopiesCapability(capId);
79 } else if (capId == print_preview.DuplexCapability.Id[capsFormat]) {
80 duplexCapability = CloudCapabilitiesParser.parseDuplex(capId, cap);
81 }
82 }
83 return new print_preview.CloudCapabilities(
84 collateCapability, colorCapability, copiesCapability, duplexCapability);
85 };
86
87 CloudCapabilitiesParser.parseCollate = function(capId, cap) {
88 var options = cap[CloudCapabilitiesParser.Field_.OPTIONS];
89 var collateOption = null;
90 var noCollateOption = null;
91 var isCollateDefault = false;
92 for (var option, i = 0; option = options[i]; i++) {
93 var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID];
94 if (!collateOption &&
95 print_preview.CollateCapability.COLLATE_REGEX.test(optionId)) {
96 collateOption = optionId;
97 isCollateDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT];
98 } else if (!noCollateOption &&
99 print_preview.CollateCapability.NO_COLLATE_REGEX.test(optionId)) {
100 noCollateOption = optionId;
101 }
102 }
103 if (!collateOption || !noCollateOption) {
104 return null;
105 }
106 return new print_preview.CollateCapability(
107 capId, collateOption, noCollateOption, isCollateDefault);
108 };
109
110 CloudCapabilitiesParser.parseColor = function(capId, cap) {
111 var options = cap[CloudCapabilitiesParser.Field_.OPTIONS];
112 var colorOption = null;
113 var bwOption = null;
114 var isColorDefault = false;
115 for (var option, i = 0; option = options[i]; i++) {
116 var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID];
117 if (!colorOption &&
118 print_preview.ColorCapability.COLOR_REGEX.test(optionId)) {
119 colorOption = optionId;
120 isColorDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT];
121 } else if (!bwOption &&
122 print_preview.ColorCapability.BW_REGEX.test(optionId)) {
123 bwOption = optionId;
124 }
125 }
126 if (!colorOption || !bwOption) {
127 return null;
128 }
129 return new print_preview.ColorCapability(
130 capId, colorOption, bwOption, isColorDefault);
131 };
132
133 CloudCapabilitiesParser.parseDuplex = function(capId, cap) {
134 var options = cap[CloudCapabilitiesParser.Field_.OPTIONS];
135 var simplexOption = null;
136 var longEdgeOption = null;
137 var isDuplexDefault = false;
138 for (var option, i = 0; option = options[i]; i++) {
139 var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID];
140 if (!simplexOption &&
141 print_preview.DuplexCapability.SIMPLEX_REGEX.test(optionId)) {
142 simplexOption = optionId;
143 } else if (!longEdgeOption &&
144 print_preview.DuplexCapability.LONG_EDGE_REGEX.test(optionId)) {
145 longEdgeOption = optionId;
146 isDuplexDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT];
147 }
148 }
149 if (!simplexOption || !longEdgeOption) {
150 return null;
151 }
152 return new print_preview.DuplexCapability(
153 capId, simplexOption, longEdgeOption, isDuplexDefault);
154 };
155
156 // Export
157 return {
158 CloudCapabilitiesParser: CloudCapabilitiesParser,
159 CloudDestinationParser: CloudDestinationParser
160 };
161 });
162
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698