Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / devtools / front_end / components / TargetsComboBoxController.js
1 // Copyright 2014 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  * @constructor
7  * @implements {WebInspector.TargetManager.Observer}
8  * @param {!Element} selectElement
9  * @param {!Element} elementToHide
10  */
11 WebInspector.TargetsComboBoxController = function(selectElement, elementToHide)
12 {
13     elementToHide.classList.add("hidden");
14     selectElement.addEventListener("change", this._onComboBoxSelectionChange.bind(this), false);
15     this._selectElement = selectElement;
16     this._elementToHide = elementToHide;
17     /** @type {!Map.<!WebInspector.Target, !Element>} */
18     this._targetToOption = new Map();
19
20     WebInspector.context.addFlavorChangeListener(WebInspector.Target, this._targetChangedExternally, this);
21     WebInspector.targetManager.observeTargets(this);
22 }
23
24 WebInspector.TargetsComboBoxController.prototype = {
25
26     /**
27      * @param {!WebInspector.Target} target
28      */
29     targetAdded: function(target)
30     {
31         var option = this._selectElement.createChild("option");
32         option.text = target.name();
33         option.__target = target;
34         this._targetToOption.put(target, option);
35         if (WebInspector.context.flavor(WebInspector.Target) === target)
36             this._selectElement.selectedIndex = Array.prototype.indexOf.call(/** @type {?} */ (this._selectElement), option);
37
38         this._updateVisibility();
39     },
40
41     /**
42      * @param {!WebInspector.Target} target
43      */
44     targetRemoved: function(target)
45     {
46         var option = this._targetToOption.remove(target);
47         this._selectElement.removeChild(option);
48         this._updateVisibility();
49     },
50
51     _onComboBoxSelectionChange: function()
52     {
53         var selectedOption = this._selectElement[this._selectElement.selectedIndex];
54         if (!selectedOption)
55             return;
56
57         WebInspector.context.setFlavor(WebInspector.Target, selectedOption.__target);
58     },
59
60     _updateVisibility: function()
61     {
62         var hidden = this._selectElement.childElementCount === 1;
63         this._elementToHide.classList.toggle("hidden", hidden);
64     },
65
66     /**
67      * @param {!WebInspector.Event} event
68      */
69     _targetChangedExternally: function(event)
70     {
71         var target = /** @type {?WebInspector.Target} */ (event.data);
72         if (target) {
73             var option = /** @type {!Element} */ (this._targetToOption.get(target));
74             this._select(option);
75         }
76     },
77
78     /**
79      * @param {!Element} option
80      */
81     _select: function(option)
82     {
83         this._selectElement.selectedIndex = Array.prototype.indexOf.call(/** @type {?} */ (this._selectElement), option);
84     }
85
86 }