| Index: chrome/browser/resources/print_preview/data/cloud_parsers.js
|
| diff --git a/chrome/browser/resources/print_preview/data/cloud_parsers.js b/chrome/browser/resources/print_preview/data/cloud_parsers.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..965e8812c5634b811bd46a9fbe94e15971481754
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/print_preview/data/cloud_parsers.js
|
| @@ -0,0 +1,207 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +cr.define('cloudprint', function() {
|
| + 'use strict';
|
| +
|
| + /** Namespace which contains a method to parse cloud destinations directly. */
|
| + function CloudDestinationParser() {};
|
| +
|
| + /**
|
| + * Enumeration of cloud destination field names.
|
| + * @enum {string}
|
| + * @private
|
| + */
|
| + CloudDestinationParser.Field_ = {
|
| + CAPABILITIES: 'capabilities',
|
| + DISPLAY_NAME: 'displayName',
|
| + FORMAT: 'capsFormat',
|
| + ID: 'id',
|
| + TAGS: 'tags'
|
| + };
|
| +
|
| + /**
|
| + * Special tag that denotes whether the destination has been recently used.
|
| + * @type {string}
|
| + * @private
|
| + */
|
| + CloudDestinationParser.RECENT_TAG_ = '^recent';
|
| +
|
| + /**
|
| + * Parses a destination from JSON from a Google Cloud Print search or printer
|
| + * response.
|
| + * @param {object} json Object that represents a Google Cloud Print search or
|
| + * printer response.
|
| + * @return {!print_preview.Destination} Parsed destination.
|
| + */
|
| + CloudDestinationParser.parse = function(json) {
|
| + if (!json.hasOwnProperty(CloudDestinationParser.Field_.ID) ||
|
| + !json.hasOwnProperty(CloudDestinationParser.Field_.DISPLAY_NAME)) {
|
| + throw Error('Cloud destination does not have an ID or a display name');
|
| + }
|
| + var isRecent = arrayContains(
|
| + json[CloudDestinationParser.Field_.TAGS] || [],
|
| + CloudDestinationParser.RECENT_TAG_);
|
| + var cloudDest = new print_preview.Destination(
|
| + json[CloudDestinationParser.Field_.ID],
|
| + json[CloudDestinationParser.Field_.DISPLAY_NAME],
|
| + isRecent,
|
| + false /*isLocal*/,
|
| + json[CloudDestinationParser.Field_.TAGS] || []);
|
| + if (json.hasOwnProperty(CloudDestinationParser.Field_.CAPABILITIES) &&
|
| + json.hasOwnProperty(CloudDestinationParser.Field_.FORMAT)) {
|
| + cloudDest.capabilities = CloudCapabilitiesParser.parse(
|
| + json[CloudDestinationParser.Field_.FORMAT],
|
| + json[CloudDestinationParser.Field_.CAPABILITIES]);
|
| + }
|
| + return cloudDest;
|
| + };
|
| +
|
| + /**
|
| + * Namespace which contains a method to parse a cloud destination's print
|
| + * capabilities.
|
| + */
|
| + function CloudCapabilitiesParser() {};
|
| +
|
| + /**
|
| + * Enumeration of cloud destination print capabilities field names.
|
| + * @enum {string}
|
| + * @private
|
| + */
|
| + CloudCapabilitiesParser.Field_ = {
|
| + CAP_ID: 'name',
|
| + DEFAULT: 'default',
|
| + IS_DEFAULT: 'default',
|
| + OPTIONS: 'options',
|
| + OPTION_ID: 'name'
|
| + };
|
| +
|
| + /**
|
| + * Parses print capabilities from an object in a given capabilities format.
|
| + * @param {print_preview.CloudCapabilities.Format} capsFormat Format of the
|
| + * printer capabilities.
|
| + * @param {object} json Object representing the cloud capabilities.
|
| + * @return {!print_preview.CloudCapabilities} Parsed print capabilities.
|
| + */
|
| + CloudCapabilitiesParser.parse = function(capsFormat, json) {
|
| + var colorCapability = null;
|
| + var duplexCapability = null;
|
| + var copiesCapability = null;
|
| + var collateCapability = null;
|
| + for (var cap, i = 0; cap = json[i]; i++) {
|
| + var capId = cap[CloudCapabilitiesParser.Field_.CAP_ID];
|
| + if (capId == print_preview.CollateCapability.Id[capsFormat]) {
|
| + collateCapability = CloudCapabilitiesParser.parseCollate(capId, cap);
|
| + } else if (capId == print_preview.ColorCapability.Id[capsFormat]) {
|
| + colorCapability = CloudCapabilitiesParser.parseColor(capId, cap);
|
| + } else if (capId == print_preview.CopiesCapability.Id[capsFormat]) {
|
| + copiesCapability = new print_preview.CopiesCapability(capId);
|
| + } else if (capId == print_preview.DuplexCapability.Id[capsFormat]) {
|
| + duplexCapability = CloudCapabilitiesParser.parseDuplex(capId, cap);
|
| + }
|
| + }
|
| + return new print_preview.CloudCapabilities(
|
| + collateCapability, colorCapability, copiesCapability, duplexCapability);
|
| + };
|
| +
|
| + /**
|
| + * Parses a collate capability from the given object.
|
| + * @param {string} capId Native ID of the given capability object.
|
| + * @param {object} Object that represents the collate capability.
|
| + * @return {print_preview.CollateCapability} Parsed collate capability or
|
| + * {@code null} if the given capability object was not a valid collate
|
| + * capability.
|
| + */
|
| + CloudCapabilitiesParser.parseCollate = function(capId, cap) {
|
| + var options = cap[CloudCapabilitiesParser.Field_.OPTIONS];
|
| + var collateOption = null;
|
| + var noCollateOption = null;
|
| + var isCollateDefault = false;
|
| + for (var option, i = 0; option = options[i]; i++) {
|
| + var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID];
|
| + if (!collateOption &&
|
| + print_preview.CollateCapability.COLLATE_REGEX.test(optionId)) {
|
| + collateOption = optionId;
|
| + isCollateDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT];
|
| + } else if (!noCollateOption &&
|
| + print_preview.CollateCapability.NO_COLLATE_REGEX.test(optionId)) {
|
| + noCollateOption = optionId;
|
| + }
|
| + }
|
| + if (!collateOption || !noCollateOption) {
|
| + return null;
|
| + }
|
| + return new print_preview.CollateCapability(
|
| + capId, collateOption, noCollateOption, isCollateDefault);
|
| + };
|
| +
|
| + /**
|
| + * Parses a color capability from the given object.
|
| + * @param {string} capId Native ID of the given capability object.
|
| + * @param {object} Object that represents the color capability.
|
| + * @return {print_preview.ColorCapability} Parsed color capability or
|
| + * {@code null} if the given capability object was not a valid color
|
| + * capability.
|
| + */
|
| + CloudCapabilitiesParser.parseColor = function(capId, cap) {
|
| + var options = cap[CloudCapabilitiesParser.Field_.OPTIONS];
|
| + var colorOption = null;
|
| + var bwOption = null;
|
| + var isColorDefault = false;
|
| + for (var option, i = 0; option = options[i]; i++) {
|
| + var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID];
|
| + if (!colorOption &&
|
| + print_preview.ColorCapability.COLOR_REGEX.test(optionId)) {
|
| + colorOption = optionId;
|
| + isColorDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT];
|
| + } else if (!bwOption &&
|
| + print_preview.ColorCapability.BW_REGEX.test(optionId)) {
|
| + bwOption = optionId;
|
| + }
|
| + }
|
| + if (!colorOption || !bwOption) {
|
| + return null;
|
| + }
|
| + return new print_preview.ColorCapability(
|
| + capId, colorOption, bwOption, isColorDefault);
|
| + };
|
| +
|
| + /**
|
| + * Parses a duplex capability from the given object.
|
| + * @param {string} capId Native ID of the given capability object.
|
| + * @param {object} Object that represents the duplex capability.
|
| + * @return {print_preview.DuplexCapability} Parsed duplex capability or
|
| + * {@code null} if the given capability object was not a valid duplex
|
| + * capability.
|
| + */
|
| + CloudCapabilitiesParser.parseDuplex = function(capId, cap) {
|
| + var options = cap[CloudCapabilitiesParser.Field_.OPTIONS];
|
| + var simplexOption = null;
|
| + var longEdgeOption = null;
|
| + var isDuplexDefault = false;
|
| + for (var option, i = 0; option = options[i]; i++) {
|
| + var optionId = option[CloudCapabilitiesParser.Field_.OPTION_ID];
|
| + if (!simplexOption &&
|
| + print_preview.DuplexCapability.SIMPLEX_REGEX.test(optionId)) {
|
| + simplexOption = optionId;
|
| + } else if (!longEdgeOption &&
|
| + print_preview.DuplexCapability.LONG_EDGE_REGEX.test(optionId)) {
|
| + longEdgeOption = optionId;
|
| + isDuplexDefault = !!option[CloudCapabilitiesParser.Field_.DEFAULT];
|
| + }
|
| + }
|
| + if (!simplexOption || !longEdgeOption) {
|
| + return null;
|
| + }
|
| + return new print_preview.DuplexCapability(
|
| + capId, simplexOption, longEdgeOption, isDuplexDefault);
|
| + };
|
| +
|
| + // Export
|
| + return {
|
| + CloudCapabilitiesParser: CloudCapabilitiesParser,
|
| + CloudDestinationParser: CloudDestinationParser
|
| + };
|
| +});
|
| +
|
|
|