Skip to content

Commit 1efb1b9

Browse files
schedule.js: Optimize duplicate code and add JSDoc
1 parent 73c2030 commit 1efb1b9

File tree

1 file changed

+40
-24
lines changed

1 file changed

+40
-24
lines changed

public/js/schedule.js

+40-24
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
this.on('mouseleave', '#notifications-schedule .entry', this.onEntryLeave, this);
2121
}
2222

23+
/**
24+
* Make the sidebar sortable and add drag&drop support.
25+
*
26+
* @param event The event object.
27+
*/
2328
onRendered(event)
2429
{
2530
if (event.target !== event.currentTarget) {
@@ -46,6 +51,11 @@
4651
});
4752
}
4853

54+
/**
55+
* Handle drop event on the sidebar.
56+
*
57+
* @param event The event object.
58+
*/
4959
onDrop(event)
5060
{
5161
event = event.originalEvent;
@@ -74,33 +84,33 @@
7484
form.requestSubmit();
7585
}
7686

87+
/**
88+
* Handle hover (`mouseenter`) event on schedule entries.
89+
*
90+
* @param event The mouse event object.
91+
*/
7792
onEntryHover(event)
7893
{
79-
const entry = event.currentTarget;
80-
const overlay = entry.parentElement;
81-
const grid = overlay.previousSibling;
82-
const sideBar = grid.previousSibling;
83-
84-
let relatedElements;
85-
if ('rotationPosition' in entry.dataset) {
86-
relatedElements = Array.from(
87-
grid.querySelectorAll('[data-y-position="' + entry.dataset.rotationPosition + '"]')
88-
);
89-
90-
relatedElements.push(sideBar.childNodes[Number(entry.dataset.rotationPosition)]);
91-
} else {
92-
relatedElements = overlay.querySelectorAll(
93-
'[data-rotation-position="' + entry.dataset.entryPosition + '"]'
94-
);
95-
}
96-
97-
relatedElements.forEach((relatedElement) => {
98-
relatedElement.classList.add('highlighted');
99-
});
94+
event.data.self.handleEntryHover(event, true);
10095
}
10196

97+
/**
98+
* Handle hover (`mouseleave`) event on schedule entries.
99+
*
100+
* @param event The mouse event object.
101+
*/
102102
onEntryLeave(event)
103103
{
104+
event.data.self.handleEntryHover(event);
105+
}
106+
107+
/**
108+
* Handle hover (`mouseenter`|`mouseleave`) events on schedule entries.
109+
*
110+
* @param event The mouse event object.
111+
* @param {boolean} isHovered Whether the entry is hovered.
112+
*/
113+
handleEntryHover(event, isHovered = false) {
104114
const entry = event.currentTarget;
105115
const overlay = entry.parentElement;
106116
const grid = overlay.previousSibling;
@@ -119,9 +129,15 @@
119129
);
120130
}
121131

122-
relatedElements.forEach((relatedElement) => {
123-
relatedElement.classList.remove('highlighted');
124-
});
132+
if (isHovered) {
133+
relatedElements.forEach((relatedElement) => {
134+
relatedElement.classList.add('highlighted');
135+
});
136+
} else {
137+
relatedElements.forEach((relatedElement) => {
138+
relatedElement.classList.remove('highlighted');
139+
});
140+
}
125141
}
126142
}
127143

0 commit comments

Comments
 (0)