Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .jules/palette.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## 2024-05-18 - Disabled and Loading States for Async Actions
**Learning:** Adding explicit loading and disabled states to asynchronous action buttons (like "Refresh") provides immediate feedback, reducing user confusion and preventing double-submissions.
**Action:** Always ensure that buttons triggering network requests visually indicate the loading state and are disabled until the request completes.
## 2024-05-18 - External Link Context Switching UX
**Learning:** Opening secondary artifacts (like the JSON bootstrap or original file) in the same tab disrupts the user's viewing context and forces them to re-navigate. Adding `target="_blank"` with a descriptive `aria-label` ensures a smoother experience and maintains accessibility.
**Action:** Always configure external or secondary document links to open in a new tab (`target="_blank" rel="noopener noreferrer"`) and explicitly indicate this behavior to screen readers using `aria-label`.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# λ³€κ²½ 둜그 (Changelog)

## [Unreleased]

### UX 및 μ ‘κ·Όμ„± κ°œμ„  (UX & Accessibility Improvements)
* μ™ΈλΆ€ 링크 및 JSON λΆ€νŠΈμŠ€νŠΈλž© μ—΄κΈ° μ‹œ μƒˆ νƒ­μ—μ„œ 열리도둝 `target="_blank"`, `rel="noopener noreferrer"` 속성을 μΆ”κ°€ν•˜μ—¬ μ‚¬μš©μžκ°€ λ¬Έμ„œ λ·°μ–΄ μ»¨ν…μŠ€νŠΈλ₯Ό μœ μ§€ν•  수 μžˆλ„λ‘ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.
* 슀크린 리더 μ‚¬μš©μžλ₯Ό μœ„ν•΄ μƒˆ νƒ­μ—μ„œ 열림을 λͺ…ν™•νžˆ μ•ˆλ‚΄ν•˜λŠ” `aria-label` 속성을 μ™ΈλΆ€ 링크 μš”μ†Œμ— μΆ”κ°€ν•˜μ—¬ μ›Ή 접근성을 ν–₯μƒμ‹œμΌ°μŠ΅λ‹ˆλ‹€.
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ private static String viewerShellHtml(UUID docId, String initialState) {

<div class="actions" aria-label="Actions">
<button type="button" class="btn btn-primary" id="retry-btn">Refresh</button>
<a class="btn btn-secondary" id="open-json-link" href="#" hidden>Open JSON bootstrap</a>
<a class="btn btn-secondary" id="open-json-link" href="#" hidden
target="_blank" rel="noopener noreferrer"
aria-label="Open JSON bootstrap (opens in a new tab)">Open JSON bootstrap</a>
</div>
</section>

Expand Down
4 changes: 3 additions & 1 deletion src/main/resources/static/assets/viewer/viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ function renderPreviewLink(path) {
link.href = path;
link.textContent = "Open artifact";
link.className = "btn btn-secondary";
link.rel = "noopener";
link.rel = "noopener noreferrer";
link.target = "_blank";
link.setAttribute("aria-label", "Open artifact (opens in a new tab)");
el.preview.appendChild(link);
}

Expand Down
Loading