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

Unified Diff: chrome/browser/resources/print_preview/search/destination_search.js

Issue 10108001: Refactor print preview web ui (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/print_preview/search/destination_search.js
diff --git a/chrome/browser/resources/print_preview/search/destination_search.js b/chrome/browser/resources/print_preview/search/destination_search.js
new file mode 100644
index 0000000000000000000000000000000000000000..93b943301a41740fedcf1891a9b5d1b6484f6b27
--- /dev/null
+++ b/chrome/browser/resources/print_preview/search/destination_search.js
@@ -0,0 +1,330 @@
+// 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.
+
+// TODO Make sub classes for this widget, one for chrome (logged in and not
+// logged in) and one for chrome OS.
+
+cr.define('print_preview', function() {
+ 'use strict';
+
+ /**
+ * Component used for searching for a print destination.
+ *
+ * This is a modal dialog that allows the user to search and select a
+ * destination to print to. When a destination is selected, it is written to
+ * the destination store.
+ *
+ * @param {!print_preview.DestinationStore} destinationStore Data store
+ * containing the destinations to search through.
+ * @constructor
+ * @extends {print_preview.Component}
+ */
+ function DestinationSearch(destinationStore) {
+ print_preview.Component.call(this);
+
+ /**
+ * Data store containing the destinations to search through.
+ * @type {!print_preview.DestinationStore}
+ * @private
+ */
+ this.destinationStore_ = destinationStore;
+
+ /**
+ * Search box used to search through the destination lists.
+ * @type {print_preview.SearchBox}
+ * @private
+ */
+ this.searchBox_ = new print_preview.SearchBox();
+ this.addChild(this.searchBox_);
+
+ /**
+ * Destination list containing recent destinations.
+ * @type {print_preview.DestinationList}
+ * @private
+ */
+ this.recentList_ = new print_preview.DestinationList(
+ this, 'Recent Destinations', 3);
+ this.addChild(this.recentList_);
+
+ /**
+ * Destination list containing local destinations.
+ * TODO Internationalize link text
+ * @type {print_preview.DestinationList}
+ * @private
+ */
+ this.localList_ = new print_preview.DestinationList(
+ this,
+ 'Local Destinations',
+ 0 /*opt_maxSize*/,
+ 'Manage Local Printers...');
+ this.addChild(this.localList_);
+
+ /**
+ * Destination list containing cloud destinations.
+ * TODO Internationalize link text
+ * @type {print_preview.DestinationList}
+ * @private
+ */
+ this.cloudList_ = new print_preview.DestinationList(
+ this,
+ 'Cloud Destinations',
+ 0 /*opt_maxSize*/,
+ 'Manage Google Cloud Print...');
+ this.addChild(this.cloudList_);
+ };
+
+ DestinationSearch.Event = {
+ SIGN_IN: 'print_preview.DestinationSearch.SIGN_IN'
+ },
+
+ /**
+ * CSS classes used by the search widget.
+ * @enum {string}
+ * @private
+ */
+ DestinationSearch.Classes_ = {
+ CLOSE_BUTTON: 'destination-search-close-button',
+ CLOUDPRINT_PROMO: 'destination-search-cloudprint-promo',
+ CLOUD_LIST: 'destination-search-cloud-list',
+ LOCAL_LIST: 'destination-search-local-list',
+ RECENT_LIST: 'destination-search-recent-list',
+ SEARCH_BOX_CONTAINER: 'destination-search-search-box-container',
+ SIGN_IN: 'destination-search-sign-in',
+ USER_EMAIL: 'destination-search-user-email',
+ USER_INFO: 'destination-search-user-info'
+ };
+
+ /**
+ * Chrome API ID of the manage cloud printers action.
+ * @type {string}
+ * @private
+ */
+ DestinationSearch.MANAGE_CLOUD_PRINTERS_ACTION_ = 'manageCloudPrinters';
+
+ /**
+ * Chrome API ID of the manage local printers action.
+ * @type {string}
+ * @private
+ */
+ DestinationSearch.MANAGE_LOCAL_PRINTERS_ACTION_ = 'manageLocalPrinters';
+
+ DestinationSearch.prototype = {
+ __proto__: print_preview.Component.prototype,
+
+ get isVisible() {
+ return this.getElement().style.display == '';
+ },
+
+ set isVisible(isVisible) {
+ this.getElement().style.display = isVisible ? '' : 'none';
+ if (!isVisible) {
+ // Collapse all destination lists
+ this.localList_.isShowAll = false;
+ this.cloudList_.isShowAll = false;
+ }
+ },
+
+ set cloudPrintEmail(email) {
+ var userEmailEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.USER_EMAIL)[0];
+ userEmailEl.textContent = email;
+ var userInfoEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.USER_INFO)[0];
+ userInfoEl.style.display = '';
+ var cloudListEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.CLOUD_LIST)[0];
+ cloudListEl.style.display = '';
+ var promoEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.CLOUDPRINT_PROMO)[0];
+ promoEl.style.display = 'none';
+ },
+
+ showCloudPrintPromo: function() {
+ var promoEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.CLOUDPRINT_PROMO)[0];
+ promoEl.style.display = '';
+ },
+
+ /** @override */
+ decorateInternal: function() {
+ this.searchBox_.decorate($('search-box'));
+
+ var recentListEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.RECENT_LIST)[0];
+ this.recentList_.render(recentListEl);
+
+ var localListEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.LOCAL_LIST)[0];
+ this.localList_.render(localListEl);
+
+ var cloudListEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.CLOUD_LIST)[0];
+ this.cloudList_.render(cloudListEl);
+ },
+
+ /** @override */
+ enterDocument: function() {
+ print_preview.Component.prototype.enterDocument.call(this);
+ var closeButtonEl = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.CLOSE_BUTTON)[0];
+ var signInButton = this.getElement().getElementsByClassName(
+ DestinationSearch.Classes_.SIGN_IN)[0];
+
+ this.tracker.add(
+ closeButtonEl, 'click', this.onCloseClick_.bind(this));
+ this.tracker.add(
+ signInButton, 'click', this.onSignInActivated_.bind(this));
+ this.tracker.add(
+ this.searchBox_,
+ print_preview.SearchBox.Event.SEARCH,
+ this.onSearch_.bind(this));
+ this.tracker.add(
+ this,
+ print_preview.DestinationListItem.Event.SELECT,
+ this.onDestinationSelect_.bind(this));
+
+ this.tracker.add(
+ this.destinationStore_,
+ print_preview.DestinationStore.Event.DESTINATIONS_INSERTED,
+ this.onDestinationsInserted_.bind(this));
+ this.tracker.add(
+ this.destinationStore_,
+ print_preview.DestinationStore.Event.DESTINATION_SELECT,
+ this.onDestinationStoreSelect_.bind(this));
+
+ this.tracker.add(
+ this.localList_,
+ print_preview.DestinationList.Event.ACTION_LINK_ACTIVATED,
+ this.onManageLocalPrintersActivated_.bind(this));
+ this.tracker.add(
+ this.cloudList_,
+ print_preview.DestinationList.Event.ACTION_LINK_ACTIVATED,
+ this.onManageCloudPrintersActivated_.bind(this));
+ },
+
+ /**
+ * Filters all destination lists with the given query.
+ * @param {string?} query Query to filter destination lists by.
+ * @private
+ */
+ filterLists_: function(query) {
+ this.recentList_.filter(query);
+ this.localList_.filter(query);
+ this.cloudList_.filter(query);
+ },
+
+ /**
+ * Resets the search query.
+ * @private
+ */
+ resetSearch_: function() {
+ this.searchBox_.query = null;
+ this.filterLists_(null);
+ },
+
+ /**
+ * Called when a destination search should be executed. Filters the
+ * destination lists with the given query.
+ * @param {cr.Event} evt Contains the search query.
+ * @private
+ */
+ onSearch_: function(evt) {
+ this.filterLists_(evt.query);
+ },
+
+ /**
+ * Called when the close button is clicked. Hides the search widget.
+ * @private
+ */
+ onCloseClick_: function() {
+ this.isVisible = false;
+ this.resetSearch_();
+ },
+
+ /**
+ * Called when a destination is selected. Clears the search and hides the
+ * widget.
+ * @param {cr.Event} evt Contains the selected destination.
+ * @private
+ */
+ onDestinationSelect_: function(evt) {
+ this.isVisible = false;
+ this.resetSearch_();
+ this.destinationStore_.selectDestination(evt.destination);
+ },
+
+ /**
+ * Called when destinations are added to the destination store. Refreshes UI
+ * with new destinations.
+ * @private
+ */
+ onDestinationsInserted_: function() {
+ var destinations = this.destinationStore_.destinations;
+ var recentDestinations = [];
+ var localDestinations = [];
+ var cloudDestinations = [];
+ for (var destination, i = 0; destination = destinations[i]; i++) {
+ if (destination.isRecent) {
+ recentDestinations.push(destination);
+ }
+ if (destination.isLocal) {
+ localDestinations.push(destination);
+ } else {
+ cloudDestinations.push(destination);
+ }
+ }
+ this.recentList_.updateDestinations(recentDestinations);
+ this.localList_.updateDestinations(localDestinations);
+ this.cloudList_.updateDestinations(cloudDestinations);
+ },
+
+ /**
+ * Called when a destination is selected. Selected destination are marked as
+ * recent, so we have to update our recent destinations list.
+ * @private
+ */
+ onDestinationStoreSelect_: function() {
+ var destinations = this.destinationStore_.destinations;
+ var recentDestinations = [];
+ for (var destination, i = 0; destination = destinations[i]; i++) {
+ if (destination.isRecent) {
+ recentDestinations.push(destination);
+ }
+ }
+ this.recentList_.updateDestinations(recentDestinations);
+ },
+
+ /**
+ * Called when the manage cloud printers action is activated.
+ * @private
+ */
+ onManageCloudPrintersActivated_: function() {
+ cr.dispatchSimpleEvent(
+ document, print_preview.CommonEvent.MANAGE_CLOUD_PRINTERS);
+ },
+
+ /**
+ * Called when the manage local printers action is activated.
+ * @private
+ */
+ onManageLocalPrintersActivated_: function() {
+ cr.dispatchSimpleEvent(
+ document, print_preview.CommonEvent.MANAGE_LOCAL_PRINTERS);
+ },
+
+ /**
+ * Called when the "Sign in" link on the Google Cloud Print promo is
+ * activated.
+ * @private
+ */
+ onSignInActivated_: function() {
+ cr.dispatchSimpleEvent(this, DestinationSearch.Event.SIGN_IN);
+ }
+ };
+
+ // Export
+ return {
+ DestinationSearch: DestinationSearch
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698