Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/application/calendar/behavior-month-view.js
12242 views
1
/**
2
* @provides javelin-behavior-calendar-month-view
3
*/
4
JX.behavior('calendar-month-view', function() {
5
6
var hover_nodes = [];
7
8
function get_info(e) {
9
var week_body = e.getNode('calendar-week-body');
10
if (!week_body) {
11
week_body = e.getNode('calendar-week-foot').previousSibling;
12
}
13
14
var week_foot = week_body.nextSibling;
15
var day_id = JX.Stratcom.getData(e.getNode('tag:td')).dayID;
16
17
var day_body;
18
var day_foot;
19
var body_nodes = JX.DOM.scry(week_body, 'td');
20
var foot_nodes = JX.DOM.scry(week_foot, 'td');
21
for (var ii = 0; ii < body_nodes.length; ii++) {
22
if (JX.Stratcom.getData(body_nodes[ii]).dayID == day_id) {
23
day_body = body_nodes[ii];
24
day_foot = foot_nodes[ii];
25
break;
26
}
27
}
28
29
return {
30
data: JX.Stratcom.getData(week_body),
31
dayID: day_id,
32
nodes: {
33
week: {
34
body: week_body,
35
foot: week_foot
36
},
37
day: {
38
body: day_body,
39
foot: day_foot
40
}
41
}
42
};
43
}
44
45
function alter_hover(enable) {
46
for (var ii = 0; ii < hover_nodes.length; ii++) {
47
JX.DOM.alterClass(hover_nodes[ii], 'calendar-hover', enable);
48
}
49
}
50
51
JX.enableDispatch(document.body, 'mouseover');
52
JX.enableDispatch(document.body, 'mouseout');
53
54
JX.Stratcom.listen('mouseover', ['calendar-week', 'tag:td'], function(e) {
55
if (e.getNode('calendar-event-list')) {
56
alter_hover(false);
57
hover_nodes = [];
58
return;
59
}
60
61
var info = get_info(e);
62
hover_nodes = [
63
info.nodes.day.body,
64
info.nodes.day.foot
65
];
66
67
alter_hover(true);
68
});
69
70
JX.Stratcom.listen('mouseout', ['calendar-week', 'tag:td'], function() {
71
alter_hover(false);
72
});
73
74
JX.Stratcom.listen('click', ['calendar-week', 'tag:td'], function(e) {
75
if (!e.isNormalClick()) {
76
return;
77
}
78
79
// If this is a click in the event list or on a link, ignore it. This
80
// allows users to follow links to events and select text.
81
if (e.getNode('calendar-event-list') || e.getNode('tag:a')) {
82
return;
83
}
84
85
var info = get_info(e);
86
JX.$U(info.data.actionMap[info.dayID].dayURI).go();
87
});
88
89
});
90
91