Index: chrome/browser/resources/print_preview/data/destination.js |
diff --git a/chrome/browser/resources/print_preview/data/destination.js b/chrome/browser/resources/print_preview/data/destination.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..734878dbb5cb5f9799a75d5eec5d127eb76735ed |
--- /dev/null |
+++ b/chrome/browser/resources/print_preview/data/destination.js |
@@ -0,0 +1,170 @@ |
+// 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'; |
+ |
+ /** |
+ * Destination data object. |
+ * |
+ * This data object holds data for both local and cloud destinations. |
+ * |
+ * @param {string} id ID of the destination. |
+ * @param {string} displayName Display name of the destination. |
+ * @param {boolean} isRecent Whether the destination has been used recently. |
+ * @param {boolean} isLocal Whether the destination is local or cloud-based. |
+ * @param {Array.<string>} tags Tags associated with the destination. |
dpapad1
2012/04/19 22:45:01
If this is optional (seems like it is judging from
Robert Toscano
2012/04/23 23:00:09
Done.
|
+ * @constructor |
+ */ |
+ function Destination(id, displayName, isRecent, isLocal, tags) { |
+ /** |
+ * ID of the destination. |
+ * @type {string} |
+ * @private |
+ */ |
+ this.id_ = id; |
+ |
+ /** |
+ * Display name of the destination. |
+ * @type {string} |
+ * @private |
+ */ |
+ this.displayName_ = displayName; |
+ |
+ /** |
+ * Whether the destination has been used recently. |
+ * @type {boolean} |
+ * @private |
+ */ |
+ this.isRecent_ = isRecent; |
+ |
+ /** |
+ * Whether the destination is local or cloud-based. |
dpapad1
2012/04/19 22:45:01
Nit (optional): "{@code true} if destination is l
Robert Toscano
2012/04/23 23:00:09
I'll leave as is. FWIW, "Whether ...." is a bit mo
|
+ * @type {boolean} |
+ * @private |
+ */ |
+ this.isLocal_ = isLocal; |
+ |
+ /** |
+ * Tags associated with the destination. |
+ * @type {Array.<string>} |
+ * @private |
+ */ |
+ this.tags_ = tags || []; |
+ |
+ /** |
+ * Print capabilities of the destination. |
+ * @type {print_preview.ChromiumCapabilities} |
+ * @private |
+ */ |
+ this.capabilities_ = null; |
+ |
+ /** |
+ * Cache of destination location fetched from tags. |
+ * @type {string} |
+ * @private |
+ */ |
+ this.location_ = null; |
+ }; |
+ |
+ /** |
+ * Prefix of the location destination tag. |
+ * @type {string} |
+ * @const |
+ */ |
+ Destination.LOCATION_TAG_PREFIX = '__cp__printer-location='; |
+ |
+ /** |
+ * Enumeration of Google-promoted destination IDs. |
+ * @enum {string} |
+ * @private |
+ */ |
+ Destination.GooglePromotedIds_ = { |
+ DOCS: '__google__docs', |
+ LOCAL_PDF: PRINT_TO_PDF, |
+ PRINT_WITH_CLOUD_PRINT: 'printWithCloudPrint' |
+ }; |
+ |
+ Destination.prototype = { |
+ get id() { |
+ return this.id_; |
+ }, |
+ |
+ get displayName() { |
+ return this.displayName_; |
+ }, |
+ |
+ get isRecent() { |
+ return this.isRecent_; |
+ }, |
+ |
+ set isRecent(isRecent) { |
+ this.isRecent_ = isRecent; |
+ }, |
+ |
+ get isLocal() { |
+ return this.isLocal_; |
+ }, |
+ |
+ get isGooglePromoted() { |
dpapad1
2012/04/19 22:45:01
I believe is better to use the "get foo() {...}" s
Robert Toscano
2012/04/23 23:00:09
I agree with you on this point, but I'm also worri
|
+ for (var key in Destination.GooglePromotedIds_) { |
+ if (Destination.GooglePromotedIds_[key] == this.id_) { |
+ return true; |
+ } |
+ } |
+ return false; |
+ }, |
+ |
+ get isPrintToPdf() { |
+ return this.id_ == Destination.GooglePromotedIds_.LOCAL_PDF; |
+ }, |
+ |
+ get isPrintWithCloudPrint() { |
+ return this.id_ == Destination.GooglePromotedIds_.PRINT_WITH_CLOUD_PRINT; |
+ }, |
+ |
+ 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); |
+ } |
+ } |
+ if (this.location_ == null) { |
+ this.location_ = ''; |
+ } |
+ } |
+ return this.location_; |
+ }, |
+ |
+ get tags() { |
+ return this.tags_.slice(0); |
+ }, |
+ |
+ get capabilities() { |
+ return this.capabilities_; |
+ }, |
+ |
+ set capabilities(capabilities) { |
+ this.capabilities_ = capabilities; |
+ }, |
+ |
+ /** |
+ * 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; |
+ } |
+ }; |
+ |
+ // Export |
+ return { |
+ Destination: Destination |
+ }; |
+}); |