Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/phuix/PHUIXFormationView.js
12241 views
1
/**
2
* @provides phuix-formation-view
3
* @requires javelin-install
4
* javelin-dom
5
* phuix-formation-column-view
6
* phuix-formation-flank-view
7
*/
8
9
JX.install('PHUIXFormationView', {
10
11
construct: function(node) {
12
this._node = node;
13
this._columns = [];
14
15
var config = JX.Stratcom.getData(this._node);
16
17
var items = config.items;
18
var count = items.length;
19
for (var ii = 0; ii < count; ii++) {
20
var item = items[ii];
21
var item_node = JX.$(item.itemID);
22
23
var column = new JX.PHUIXFormationColumnView(item_node)
24
.setIsRightAligned(item.isRightAligned)
25
.setWidth(item.width)
26
.setIsVisible(item.isVisible);
27
28
if (item.expanderID) {
29
column.setExpanderNode(JX.$(item.expanderID));
30
}
31
32
if (item.resizer) {
33
column
34
.setWidthSettingKey(item.resizer.widthKey)
35
.setVisibleSettingKey(item.resizer.visibleKey)
36
.setMinimumWidth(item.resizer.minimumWidth)
37
.setMaximumWidth(item.resizer.maximumWidth)
38
.setResizerItem(JX.$(item.resizer.itemID))
39
.setResizerControl(JX.$(item.resizer.controlID));
40
}
41
42
var spec = item.column;
43
if (spec) {
44
if (spec.type === 'flank') {
45
var flank_node = JX.$(spec.nodeID);
46
47
var head = JX.$(spec.headID);
48
var body = JX.$(spec.bodyID);
49
var tail = JX.$(spec.tailID);
50
51
var flank = new JX.PHUIXFormationFlankView(
52
flank_node,
53
head,
54
body,
55
tail);
56
57
flank.setIsFixed(spec.isFixed);
58
59
column.setFlank(flank);
60
}
61
}
62
63
this.addColumn(column);
64
}
65
},
66
67
members: {
68
_node: null,
69
_columns: null,
70
71
addColumn: function(column) {
72
this._columns.push(column);
73
},
74
75
getColumn: function(idx) {
76
return this._columns[idx];
77
},
78
79
start: function() {
80
JX.enableDispatch(document.body, 'mousemove');
81
82
for (var ii = 0; ii < this._columns.length; ii++) {
83
this._columns[ii].start();
84
}
85
86
var repaint = JX.bind(this, this.repaint);
87
JX.Stratcom.listen(['scroll', 'resize'], null, repaint);
88
89
this.repaint();
90
},
91
92
repaint: function(e) {
93
// Unless we've scrolled past it, the page has a 44px main menu banner.
94
var menu_height = (44 - JX.Vector.getScroll().y);
95
96
// When the buoyant header is visible, move the menu down below it. This
97
// is a bit of a hack.
98
var banner_height = 0;
99
try {
100
var banner = JX.$('diff-banner');
101
banner_height = JX.Vector.getDim(banner).y;
102
} catch (error) {
103
// Ignore if there's no banner on the page.
104
}
105
106
var header_height = Math.max(0, menu_height, banner_height);
107
108
var column;
109
var flank;
110
for (var ii = 0; ii < this._columns.length; ii++) {
111
column = this._columns[ii];
112
113
flank = column.getFlank();
114
if (!flank) {
115
continue;
116
}
117
118
flank
119
.setBannerHeight(header_height)
120
.setWidth(column.getWidth())
121
.repaint();
122
}
123
}
124
125
}
126
127
});
128
129