15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('print_preview', function() {
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'use strict';
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Component that displays a list of destinations with a heading, action link,
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * and "Show All..." button. An event is dispatched when the action link is
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * activated.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {!cr.EventTarget} eventTarget Event target to pass to destination
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     items for dispatching SELECT events.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {string} title Title of the destination list.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @param {string=} opt_actionLinkLabel Optional label of the action link. If
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   *     no label is provided, the action link will not be shown.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @constructor
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @extends {print_preview.Component}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  function DestinationList(eventTarget, title, opt_actionLinkLabel) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print_preview.Component.call(this);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Event target to pass to destination items for dispatching SELECT events.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {!cr.EventTarget}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.eventTarget_ = eventTarget;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Title of the destination list.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {string}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.title_ = title;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Label of the action link.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {?string}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.actionLinkLabel_ = opt_actionLinkLabel || null;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Backing store for the destination list.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {!Array.<print_preview.Destination>}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.destinations_ = [];
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Current query used for filtering.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {?string}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.query_ = null;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Whether the destination list is fully expanded.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {boolean}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.isShowAll_ = false;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Maximum number of destinations before showing the "Show All..." button.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @type {number}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    this.shortListSize_ = DestinationList.DEFAULT_SHORT_LIST_SIZE_;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Enumeration of event types dispatched by the destination list.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @enum {string}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DestinationList.EventType = {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Dispatched when the action linked is activated.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ACTION_LINK_ACTIVATED: 'print_preview.DestinationList.ACTION_LINK_ACTIVATED'
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Default maximum number of destinations before showing the "Show All..."
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * button.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @type {number}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @const
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @private
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DestinationList.DEFAULT_SHORT_LIST_SIZE_ = 4;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /**
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * Height of a destination list item in pixels.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @type {number}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @const
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   * @private
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   */
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DestinationList.HEIGHT_OF_ITEM_ = 30;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DestinationList.prototype = {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    __proto__: print_preview.Component.prototype,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** @param {boolean} isShowAll Whether the show-all button is activated. */
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setIsShowAll: function(isShowAll) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.isShowAll_ = isShowAll;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.renderDestinations_();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @return {number} Size of list when destination list is in collapsed
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     mode (a.k.a non-show-all mode).
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getShortListSize: function() {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.shortListSize_;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** @return {number} Count of the destinations in the list. */
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getDestinationsCount: function() {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return this.destinations_.length;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Gets estimated height of the destination list for the given number of
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * items.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {number} Number of items to render in the destination list.
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @return {number} Height (in pixels) of the destination list.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getEstimatedHeightInPixels: function(numItems) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      numItems = Math.min(numItems, this.destinations_.length);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var headerHeight =
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.getChildElement('.destination-list > header').offsetHeight;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var throbberHeight =
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          getIsVisible(this.getChildElement('.throbber-container')) ?
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              DestinationList.HEIGHT_OF_ITEM_ : 0;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return headerHeight + numItems * DestinationList.HEIGHT_OF_ITEM_ +
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          throbberHeight;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** @param {boolean} isVisible Whether the throbber is visible. */
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setIsThrobberVisible: function(isVisible) {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setIsVisible(this.getChildElement('.throbber-container'), isVisible);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {number} size Size of list when destination list is in collapsed
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     mode (a.k.a non-show-all mode).
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateShortListSize: function(size) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      size = Math.max(1, Math.min(size, this.destinations_.length));
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (size == 1 && this.destinations_.length > 1) {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // If this is the case, we will only show the "Show All" button and
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // nothing else. Increment the short list size by one so that we can see
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // at least one print destination.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        size++;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setShortListSizeInternal(size);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** @override */
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    createDom: function() {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.setElementInternal(this.cloneTemplateInternal(
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          'destination-list-template'));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.getChildElement('.title').textContent = this.title_;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (this.actionLinkLabel_) {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var actionLinkEl = this.getChildElement('.action-link');
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        actionLinkEl.textContent = this.actionLinkLabel_;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        setIsVisible(actionLinkEl, true);
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** @override */
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enterDocument: function() {
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print_preview.Component.prototype.enterDocument.call(this);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.tracker.add(
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.getChildElement('.action-link'),
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          'click',
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.onActionLinkClick_.bind(this));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.tracker.add(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.getChildElement('.show-all-button'),
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          'click',
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          this.setIsShowAll.bind(this, true));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Updates the destinations to render in the destination list.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {!Array.<print_preview.Destination>} destinations Destinations to
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     render.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateDestinations: function(destinations) {
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.destinations_ = destinations;
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.renderDestinations_();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /** @param {?string} query Query to update the filter with. */
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    updateSearchQuery: function(query) {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.query_ = query;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.renderDestinations_();
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {string} text Text to set the action link to.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @protected
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setActionLinkTextInternal: function(text) {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.actionLinkLabel_ = text;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.getChildElement('.action-link').textContent = text;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Sets the short list size without constraints.
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @protected
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setShortListSizeInternal: function(size) {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.shortListSize_ = size;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.renderDestinations_();
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Renders all destinations in the given list.
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param {!Array.<print_preview.Destination>} destinations List of
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *     destinations to render.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @protected
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    renderListInternal: function(destinations) {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setIsVisible(this.getChildElement('.no-destinations-message'),
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   destinations.length == 0);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      setIsVisible(this.getChildElement('.destination-list > footer'), false);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var numItems = destinations.length;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (destinations.length > this.shortListSize_ && !this.isShowAll_) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        numItems = this.shortListSize_ - 1;
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.getChildElement('.total').textContent =
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            localStrings.getStringF('destinationCount', destinations.length);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        setIsVisible(this.getChildElement('.destination-list > footer'), true);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (var i = 0; i < numItems; i++) {
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var destListItem = new print_preview.DestinationListItem(
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            this.eventTarget_, destinations[i]);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        this.addChild(destListItem);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        destListItem.render(this.getChildElement('.destination-list > ul'));
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Renders all destinations in the list that match the current query. For
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * each render, all old destination items are first removed.
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    renderDestinations_: function() {
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.removeChildren();
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var filteredDests = [];
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.destinations_.forEach(function(destination) {
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (!this.query_ || destination.matches(this.query_)) {
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          filteredDests.push(destination);
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }, this);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      this.renderListInternal(filteredDests);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Called when the action link is clicked. Dispatches an
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * ACTION_LINK_ACTIVATED event.
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @private
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    onActionLinkClick_: function() {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      cr.dispatchSimpleEvent(this,
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             DestinationList.EventType.ACTION_LINK_ACTIVATED);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Export
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return {
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DestinationList: DestinationList
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
276