detached a034b8c

fix(web): treat a chosen merge mode as a draft that blocks the refresh

commit
a034b8c7f66c4504feddbe52cf1680e19d87a939
author
brice · · 2026-10-20 06:18 UTC
parent
18da841
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
checks
3/4
2 files · +4 -3
M internal/adapters/web/jstest/mr.test.mjs +1 -1
@@ -465,7 +465,7 @@ for (const control of [
465465 const saved = document;
466466 try {
467467 globalThis.document = { activeElement: null, querySelectorAll(sel) {
468- assert.equal(sel, ':is(form.cform, .cmt form) :is(textarea, input, select)');
468+ assert.equal(sel, ':is(form.cform, .cmt form, form.d-acts) :is(textarea, input, select)');
469469 return [control];
470470 } };
471471 assert.equal(window.ermiteMR.hasDraft(), true);
@@ -465,7 +465,7 @@ for (const control of [
465 const saved = document;465 const saved = document;
466 try {466 try {
467 globalThis.document = { activeElement: null, querySelectorAll(sel) {467 globalThis.document = { activeElement: null, querySelectorAll(sel) {
468- assert.equal(sel, ':is(form.cform, .cmt form) :is(textarea, input, select)');468+ assert.equal(sel, ':is(form.cform, .cmt form, form.d-acts) :is(textarea, input, select)');
469 return [control];469 return [control];
470 } };470 } };
471 assert.equal(window.ermiteMR.hasDraft(), true);471 assert.equal(window.ermiteMR.hasDraft(), true);
M internal/adapters/web/static/js/mr.js +3 -2
@@ -456,8 +456,9 @@ window.ermiteMR = (() => {
456456 }
457457
458458 function hasDraft() {
459- // Only form controls, never diff rows. Inline edits live in .cmt forms.
460- return $$(':is(form.cform, .cmt form) :is(textarea, input, select)').some((t) => {
459+ // Only form controls, never diff rows. Inline edits live in .cmt forms; the
460+ // merge form (d-acts) holds a chosen mode and the delete-branch box.
461+ return $$(':is(form.cform, .cmt form, form.d-acts) :is(textarea, input, select)').some((t) => {
461462 if (['hidden', 'submit', 'button', 'reset', 'image'].includes(t.type)) return false;
462463 if (document.activeElement === t) return true;
463464 if (t.type === 'radio' || t.type === 'checkbox') return t.checked !== t.defaultChecked;
@@ -456,8 +456,9 @@ window.ermiteMR = (() => {
456 }456 }
457 457
458 function hasDraft() {458 function hasDraft() {
459- // Only form controls, never diff rows. Inline edits live in .cmt forms.459+ // Only form controls, never diff rows. Inline edits live in .cmt forms; the
460- return $$(':is(form.cform, .cmt form) :is(textarea, input, select)').some((t) => {460+ // merge form (d-acts) holds a chosen mode and the delete-branch box.
461+ return $$(':is(form.cform, .cmt form, form.d-acts) :is(textarea, input, select)').some((t) => {
461 if (['hidden', 'submit', 'button', 'reset', 'image'].includes(t.type)) return false;462 if (['hidden', 'submit', 'button', 'reset', 'image'].includes(t.type)) return false;
462 if (document.activeElement === t) return true;463 if (document.activeElement === t) return true;
463 if (t.type === 'radio' || t.type === 'checkbox') return t.checked !== t.defaultChecked;464 if (t.type === 'radio' || t.type === 'checkbox') return t.checked !== t.defaultChecked;

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 45

↑↓ moveenter openesc close