Skip to content

Commit 0046b51

Browse files
committed
Move next uncovered line before rightmost button (review changes)
1 parent c413ec2 commit 0046b51

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

src/github-injector.ts

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ function tryInjectDiffPullRequestUI() {
5454
tryInjectDiffPullRequestUIElement(el as HTMLElement);
5555
});
5656

57-
const prReviewToolsDiv = document.querySelector(SELECTOR_PR_REVIEW_TOOLS) as HTMLDivElement;
57+
const prReviewToolsDiv = document.querySelector(
58+
SELECTOR_PR_REVIEW_TOOLS,
59+
) as HTMLDivElement;
5860
addNextUncoveredLineButton(prReviewToolsDiv);
5961
setupJumpToUncoveredLineHotkey();
6062
}
@@ -81,21 +83,20 @@ function tryInjectDiffPullRequestUIElement(
8183
}
8284

8385
const uncoveredLineKeyListener = (event: KeyboardEvent) => {
84-
const ignoredTags = new Set(['INPUT', 'TEXTAREA', 'SELECT']);
86+
const ignoredTags = new Set(["INPUT", "TEXTAREA", "SELECT"]);
8587

8688
const isTypingInEditable = (element: EventTarget | null) => {
8789
if (!(element instanceof HTMLElement)) {
8890
return false;
8991
}
9092

9193
return (
92-
element?.isContentEditable === true ||
93-
ignoredTags.has(element?.tagName)
94+
element?.isContentEditable === true || ignoredTags.has(element?.tagName)
9495
);
95-
}
96+
};
9697

97-
const {key, target, ctrlKey, metaKey, altKey, repeat} = event;
98-
if (key !== 'n' || ctrlKey || metaKey || altKey || repeat) {
98+
const { key, target, ctrlKey, metaKey, altKey, repeat } = event;
99+
if (key !== "n" || ctrlKey || metaKey || altKey || repeat) {
99100
return;
100101
}
101102

@@ -109,8 +110,8 @@ const uncoveredLineKeyListener = (event: KeyboardEvent) => {
109110
};
110111

111112
function setupJumpToUncoveredLineHotkey() {
112-
document.removeEventListener('keydown', uncoveredLineKeyListener);
113-
document.addEventListener('keydown', uncoveredLineKeyListener);
113+
document.removeEventListener("keydown", uncoveredLineKeyListener);
114+
document.addEventListener("keydown", uncoveredLineKeyListener);
114115
}
115116

116117
function addPRPageBadge(): void {
@@ -171,7 +172,7 @@ function createBadge(type: "pr" | "commit"): HTMLDivElement | null {
171172
}
172173

173174
function getUncoveredLineDivs(): HTMLDivElement[] {
174-
return Array.from(document.querySelectorAll('.qlty-coverage-miss'));
175+
return Array.from(document.querySelectorAll(".qlty-coverage-miss"));
175176
}
176177

177178
function jumpToNextUncoveredLine() {
@@ -180,30 +181,30 @@ function jumpToNextUncoveredLine() {
180181
return;
181182
}
182183

183-
const currentlySelectedIndex = uncoveredLineDivs.findIndex(
184-
el => el.parentElement?.classList.contains('selected-line')
184+
const currentlySelectedIndex = uncoveredLineDivs.findIndex((el) =>
185+
el.parentElement?.classList.contains("selected-line"),
185186
);
186187

187188
const nextIndex = (currentlySelectedIndex + 1) % uncoveredLineDivs.length;
188189
const nextElement = uncoveredLineDivs[nextIndex];
189-
nextElement.scrollIntoView({behavior: 'smooth', block: 'center'});
190+
nextElement.scrollIntoView({ behavior: "smooth", block: "center" });
190191

191192
const linkableLine = nextElement.parentElement!;
192-
if (!linkableLine.classList.contains('js-linkable-line-number')) {
193+
if (!linkableLine.classList.contains("js-linkable-line-number")) {
193194
console.warn("[qlty] Could not find linkable line number");
194195
return;
195196
}
196197

197198
// Click the line to highlight it
198199
// If we don't also trigger a click event, then our line gets unhighlighted on
199200
// subsequent button clicks
200-
linkableLine.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
201-
linkableLine.dispatchEvent(new MouseEvent('mouseup', {bubbles: true}));
202-
linkableLine.dispatchEvent(new MouseEvent("click", {bubbles: true}));
201+
linkableLine.dispatchEvent(new MouseEvent("mousedown", { bubbles: true }));
202+
linkableLine.dispatchEvent(new MouseEvent("mouseup", { bubbles: true }));
203+
linkableLine.dispatchEvent(new MouseEvent("click", { bubbles: true }));
203204
}
204205

205206
function addNextUncoveredLineButton(prReviewToolsDiv: HTMLDivElement): void {
206-
let existingButton = document.querySelector('.qlty-btn-next-uncovered-line');
207+
let existingButton = document.querySelector(".qlty-btn-next-uncovered-line");
207208
if (existingButton) {
208209
return;
209210
}
@@ -213,20 +214,27 @@ function addNextUncoveredLineButton(prReviewToolsDiv: HTMLDivElement): void {
213214
return;
214215
}
215216

216-
const buttonIcon = document.createElement('span');
217-
buttonIcon.classList.add('qlty-icon');
217+
const buttonIcon = document.createElement("span");
218+
buttonIcon.classList.add("qlty-icon");
218219

219220
const button = createButton(
220-
'Jump to next uncovered line',
221-
['qlty-btn-next-uncovered-line', 'qlty-ml-2'],
221+
"Jump to next uncovered line",
222+
[
223+
"qlty-btn-next-uncovered-line",
224+
prReviewToolsDiv.lastElementChild ? "qlty-mr-2" : "qlty-ml-2",
225+
],
222226
(e) => {
223227
e.preventDefault();
224228
jumpToNextUncoveredLine();
225229
},
226230
createButtonContent([buttonIcon]),
227231
);
228232

229-
prReviewToolsDiv.appendChild(button);
233+
if (prReviewToolsDiv.lastElementChild) {
234+
prReviewToolsDiv.insertBefore(button, prReviewToolsDiv.lastElementChild);
235+
} else {
236+
prReviewToolsDiv.appendChild(button);
237+
}
230238
}
231239

232240
async function injectIntoFileContainer(
@@ -293,7 +301,9 @@ function injectCoverageSummary(
293301
icon.classList.add("qlty-icon");
294302
el.appendChild(document.createTextNode("Coverage: "));
295303
const percent = el.appendChild(document.createElement("span"));
296-
const covPercent = coverage.coveredLines / (coverage.coveredLines + coverage.missedLines) * 100;
304+
const covPercent =
305+
(coverage.coveredLines / (coverage.coveredLines + coverage.missedLines)) *
306+
100;
297307
percent.innerText = `${covPercent.toFixed(2)}%`;
298308
const progress = el.appendChild(document.createElement("div"));
299309
progress.classList.add("qlty-coverage-progress");

0 commit comments

Comments
 (0)