blob: d38d0cc4a7740615042fe5d0a56dc603d175a08d [file] [log] [blame]
// 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('print_preview', function() {
'use strict';
/**
* Print destination data object that holds data for both local and cloud
* destinations.
* @param {string} id ID of the destination.
* @param {!print_preview.Destination.Type} type Type of the destination.
* @param {!print_preview.Destination.Origin} origin Origin of the
* destination.
* @param {string} displayName Display name of the destination.
* @param {boolean} isRecent Whether the destination has been used recently.
* @param {!print_preview.Destination.ConnectionStatus} connectionStatus
* Connection status of the print destination.
* @param {{tags: Array.<string>,
* isOwned: ?boolean,
* lastAccessTime: ?number,
* isTosAccepted: ?boolean}=} opt_params Optional parameters for the
* destination.
* @constructor
*/
function Destination(id, type, origin, displayName, isRecent,
connectionStatus, opt_params) {
/**
* ID of the destination.
* @type {string}
* @private
*/
this.id_ = id;
/**
* Type of the destination.
* @type {!print_preview.Destination.Type}
* @private
*/
this.type_ = type;
/**
* Origin of the destination.
* @type {!print_preview.Destination.Origin}
* @private
*/
this.origin_ = origin;
/**
* Display name of the destination.
* @type {string}
* @private
*/
this.displayName_ = displayName;
/**
* Whether the destination has been used recently.
* @type {boolean}
* @private
*/
this.isRecent_ = isRecent;
/**
* Tags associated with the destination.
* @type {!Array.<string>}
* @private
*/
this.tags_ = (opt_params && opt_params.tags) || [];
/**
* Print capabilities of the destination.
* @type {print_preview.Cdd}
* @private
*/
this.capabilities_ = null;
/**
* Whether the destination is owned by the user.
* @type {boolean}
* @private
*/
this.isOwned_ = (opt_params && opt_params.isOwned) || false;
/**
* Cache of destination location fetched from tags.
* @type {?string}
* @private
*/
this.location_ = null;
/**
* Connection status of the destination.
* @type {!print_preview.Destination.ConnectionStatus}
* @private
*/
this.connectionStatus_ = connectionStatus;
/**
* Number of milliseconds since the epoch when the printer was last
* accessed.
* @type {number}
* @private
*/
this.lastAccessTime_ = (opt_params && opt_params.lastAccessTime) ||
Date.now();
/**
* Whether the user has accepted the terms-of-service for the print
* destination. Only applies to the FedEx Office cloud-based printer.
* {@code} null if terms-of-service does not apply to the print destination.
* @type {?boolean}
* @private
*/
this.isTosAccepted_ = (opt_params && opt_params.isTosAccepted) || false;
};
/**
* Prefix of the location destination tag.
* @type {string}
* @const
*/
Destination.LOCATION_TAG_PREFIX = '__cp__printer-location=';
/**
* Enumeration of Google-promoted destination IDs.
* @enum {string}
*/
Destination.GooglePromotedId = {
DOCS: '__google__docs',
FEDEX: '__google__fedex',
SAVE_AS_PDF: 'Save as PDF'
};
/**
* Enumeration of the types of destinations.
* @enum {string}
*/
Destination.Type = {
GOOGLE: 'google',
LOCAL: 'local',
MOBILE: 'mobile'
};
/**
* Enumeration of the origin types for cloud destinations.
* @enum {string}
*/
Destination.Origin = {
LOCAL: 'local',
COOKIES: 'cookies',
PROFILE: 'profile',
DEVICE: 'device',
PRIVET: 'privet'
};
/**
* Enumeration of the connection statuses of printer destinations.
* @enum {string}
*/
Destination.ConnectionStatus = {
DORMANT: 'DORMANT',
OFFLINE: 'OFFLINE',
ONLINE: 'ONLINE',
UNKNOWN: 'UNKNOWN',
UNREGISTERED: 'UNREGISTERED'
};
/**
* Enumeration of relative icon URLs for various types of destinations.
* @enum {string}
* @private
*/
Destination.IconUrl_ = {
CLOUD: 'images/printer.png',
CLOUD_SHARED: 'images/printer_shared.png',
LOCAL: 'images/printer.png',
MOBILE: 'images/mobile.png',
MOBILE_SHARED: 'images/mobile_shared.png',
THIRD_PARTY: 'images/third_party.png',
PDF: 'images/pdf.png',
DOCS: 'images/google_doc.png',
FEDEX: 'images/third_party_fedex.png'
};
Destination.prototype = {
/** @return {string} ID of the destination. */
get id() {
return this.id_;
},
/** @return {!print_preview.Destination.Type} Type of the destination. */
get type() {
return this.type_;
},
/**
* @return {!print_preview.Destination.Origin} Origin of the destination.
*/
get origin() {
return this.origin_;
},
/** @return {string} Display name of the destination. */
get displayName() {
return this.displayName_;
},
/** @return {boolean} Whether the destination has been used recently. */
get isRecent() {
return this.isRecent_;
},
/**
* @param {boolean} isRecent Whether the destination has been used recently.
*/
set isRecent(isRecent) {
this.isRecent_ = isRecent;
},
/**
* @return {boolean} Whether the user owns the destination. Only applies to
* cloud-based destinations.
*/
get isOwned() {
return this.isOwned_;
},
/** @return {boolean} Whether the destination is local or cloud-based. */
get isLocal() {
return this.origin_ == Destination.Origin.LOCAL ||
this.origin_ == Destination.Origin.PRIVET;
},
/** @return {boolean} Whether the destination is a privet local printer */
get isPrivet() {
return this.origin_ == Destination.Origin.PRIVET;
},
/**
* @return {string} The location of the destination, or an empty string if
* the location is unknown.
*/
get location() {
if (this.location_ == null) {
for (var tag, i = 0; tag = this.tags_[i]; i++) {
if (tag.indexOf(Destination.LOCATION_TAG_PREFIX) == 0) {
this.location_ = tag.substring(
Destination.LOCATION_TAG_PREFIX.length) || '';
break;
}
}
}
return this.location_;
},
/** @return {!Array.<string>} Tags associated with the destination. */
get tags() {
return this.tags_.slice(0);
},
/** @return {print_preview.Cdd} Print capabilities of the destination. */
get capabilities() {
return this.capabilities_;
},
/**
* @param {!print_preview.Cdd} capabilities Print capabilities of the
* destination.
*/
set capabilities(capabilities) {
this.capabilities_ = capabilities;
},
/**
* @return {!print_preview.Destination.ConnectionStatus} Connection status
* of the print destination.
*/
get connectionStatus() {
return this.connectionStatus_;
},
/**
* @param {!print_preview.Destination.ConnectionStatus} status Connection
* status of the print destination.
*/
set connectionStatus(status) {
this.connectionStatus_ = status;
},
/**
* @return {number} Number of milliseconds since the epoch when the printer
* was last accessed.
*/
get lastAccessTime() {
return this.lastAccessTime_;
},
/** @return {string} Relative URL of the destination's icon. */
get iconUrl() {
if (this.id_ == Destination.GooglePromotedId.DOCS) {
return Destination.IconUrl_.DOCS;
} else if (this.id_ == Destination.GooglePromotedId.FEDEX) {
return Destination.IconUrl_.FEDEX;
} else if (this.id_ == Destination.GooglePromotedId.SAVE_AS_PDF) {
return Destination.IconUrl_.PDF;
} else if (this.isLocal) {
return Destination.IconUrl_.LOCAL;
} else if (this.type_ == Destination.Type.MOBILE && this.isOwned_) {
return Destination.IconUrl_.MOBILE;
} else if (this.type_ == Destination.Type.MOBILE) {
return Destination.IconUrl_.MOBILE_SHARED;
} else if (this.isOwned_) {
return Destination.IconUrl_.CLOUD;
} else {
return Destination.IconUrl_.CLOUD_SHARED;
}
},
/**
* @return {?boolean} Whether the user has accepted the terms-of-service of
* the print destination or {@code null} if a terms-of-service does not
* apply.
*/
get isTosAccepted() {
return this.isTosAccepted_;
},
/**
* @param {?boolean} Whether the user has accepted the terms-of-service of
* the print destination or {@code null} if a terms-of-service does not
* apply.
*/
set isTosAccepted(isTosAccepted) {
this.isTosAccepted_ = isTosAccepted;
},
/**
* Matches a query against the destination.
* @param {string} query Query to match against the destination.
* @return {boolean} {@code true} if the query matches this destination,
* {@code false} otherwise.
*/
matches: function(query) {
return this.displayName_.toLowerCase().indexOf(
query.toLowerCase().trim()) != -1;
}
};
/**
* The CDD (Cloud Device Description) describes the capabilities of a print
* destination.
*
* @typedef {{
* version: string,
* printer: {
* vendor_capability: !Array.<{Object}>,
* collate: {default: boolean=}=,
* color: {
* option: !Array.<{
* type: string=,
* vendor_id: string=,
* custom_display_name: string=,
* is_default: boolean=
* }>
* }=,
* copies: {default: number=, max: number=}=,
* duplex: {option: !Array.<{type: string=, is_default: boolean=}>}=,
* page_orientation: {
* option: !Array.<{type: string=, is_default: boolean=}>
* }=
* }
* }}
*/
var Cdd = Object;
// Export
return {
Destination: Destination,
Cdd: Cdd
};
});