OLD | NEW |
| (Empty) |
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 * This is a view class showing subs of selected item. | |
7 * TODO(junjianx): use dropdown menu to show. | |
8 * @param {Object} profiler Must have addListener method. | |
9 * @construct | |
10 */ | |
11 var DropdownView = function(profiler) { | |
12 this.profiler_ = profiler; | |
13 this.placeholder_ = '#subs-dropdown'; | |
14 // Clear state when profiler model changed. | |
15 profiler.addListener('changed', this.redraw_.bind(this)); | |
16 profiler.addListener('changed:selected', this.update_.bind(this)); | |
17 }; | |
18 | |
19 /** | |
20 * Render new dropdown at first time being called and recover otherwise. | |
21 * @private | |
22 */ | |
23 DropdownView.prototype.redraw_ = function() { | |
24 var self = this; | |
25 | |
26 var data = [{ label: 'subs' }]; | |
27 if (!this.$tree_) { | |
28 this.$tree_ = $(this.placeholder_).tree({ | |
29 data: data, | |
30 autoOpen: true | |
31 }); | |
32 | |
33 // Delegate click event to profiler. | |
34 this.$tree_.bind('tree.click', function(event) { | |
35 event.preventDefault(); | |
36 self.profiler_.setSub(event.node.id); | |
37 }); | |
38 } else { | |
39 this.$tree_.tree('loadData', data); | |
40 } | |
41 }; | |
42 | |
43 /** | |
44 * Update dropdown view when new model is selected in menu view. | |
45 * @param {string} id Model id. | |
46 * @private | |
47 */ | |
48 DropdownView.prototype.update_ = function(id) { | |
49 var self = this; | |
50 | |
51 // Get all subs of selected model. | |
52 var prof = this.profiler_; | |
53 var models = prof.getModelsbyId(id); | |
54 var children = models.reduce(function(previous, current) { | |
55 if ('subs' in current) { | |
56 current.subs.forEach(function(sub) { | |
57 var id = sub.join(','); | |
58 var label = sub.join(':'); | |
59 if (!previous.some(function(sub) { | |
60 return sub.id === id; | |
61 })) { | |
62 var child = { | |
63 id: id, | |
64 label: label | |
65 }; | |
66 previous.push(child); | |
67 } | |
68 }); | |
69 } | |
70 return previous; | |
71 }, []); | |
72 | |
73 // Update data of subs tree. | |
74 var data = [{ | |
75 label: 'subs', | |
76 children: children | |
77 }]; | |
78 var $tree = this.$tree_; | |
79 $tree.tree('loadData', data); | |
80 | |
81 // Select current sub if exists. | |
82 var curSub = prof.getCurSubById(id); | |
83 if (curSub) { | |
84 var node = $tree.tree('getNodeById', curSub); | |
85 $tree.tree('selectNode', node); | |
86 $tree.tree('scrollToNode', node); | |
87 } | |
88 }; | |
OLD | NEW |