1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/**
6 * @fileoverview Implement the recommended apps card in the launcher start page.
7 */
8
9cr.define('appList.startPage', function() {
10  'use strict';
11
12  /**
13   * Create a view with icon and label for the given app data.
14   * @constructor
15   * @extends {HTMLDivElement}
16   */
17  var AppItemView = cr.ui.define('div');
18
19  AppItemView.prototype = {
20    __proto__: HTMLDivElement.prototype,
21
22    /**
23     * The app id of the app displayed by this view. Used to launch
24     * the app when the view is clicked.
25     * @type {string}
26     */
27    appId: '',
28
29    /**
30     * Sets the icon URL to display the app icon.
31     * @type {string}
32     */
33    set iconUrl(url) {
34      this.style.backgroundImage = 'url(' + url + ')';
35    },
36
37    /**
38     * Sets the text title.
39     * @type {string}
40     */
41    set textTitle(title) {
42      this.textContent = title;
43    },
44
45    /** @override */
46    decorate: function() {
47      this.className = 'app';
48      this.addEventListener('click', this.handleClick_.bind(this));
49    },
50
51    /**
52     * Handles 'click' event.
53     * @private
54     */
55    handleClick_: function() {
56      assert(this.appId);
57      chrome.send('launchApp', [this.appId]);
58    }
59  };
60
61  /**
62   * Create recommended apps card.
63   * @constructor
64   * @extends {HTMLDivElement}
65   */
66  var RecommendedApps = cr.ui.define('div');
67
68  RecommendedApps.prototype = {
69    __proto__: HTMLDivElement.prototype,
70
71    /** @override */
72    decorate: function() {
73      this.className = 'recommended-apps';
74    },
75
76    /**
77     * Sets the apps to be displayed in this card.
78     */
79    setApps: function(apps) {
80      this.textContent = '';
81      for (var i = 0; i < apps.length; ++i) {
82        this.appendChild(new AppItemView(apps[i]));
83      }
84    }
85  };
86
87  return {
88    RecommendedApps: RecommendedApps
89  };
90});
91