From 0a834417a9049ae391c127de7450c3f250a2bdbd Mon Sep 17 00:00:00 2001 From: aewing Date: Fri, 12 Dec 2025 18:20:58 +0000 Subject: [PATCH] UI Improvements buttons, viewable area, exchanged folder link heading and url text and replaced with a button - states for if a folder exists and if one doesn't --- CHANGELOG_SESSION.md | 54 ++++++++++++++++++++++++++++++++++++++++++++ frontend/index.html | 45 ++++++++++++++++++++++++------------ 2 files changed, 85 insertions(+), 14 deletions(-) diff --git a/CHANGELOG_SESSION.md b/CHANGELOG_SESSION.md index 9eeaa46..253e8c2 100644 --- a/CHANGELOG_SESSION.md +++ b/CHANGELOG_SESSION.md @@ -56,3 +56,57 @@ - Initial page load shows first 40 cards immediately - Remaining pages load in background with progress bar indication - Full list renders with all filters/search applied once complete + +--- + +## December 12, 2025 - UI/UX Refinements + +### 1. Show Filters Button Width Reduction +- **Change**: Added `max-width:110px` to `#filterToggle` to constrain button width +- **Benefit**: Cleaner, more compact home screen layout +- **File**: Frontend/index.html + +### 2. Job Folder Link Conversion to Button (Modal) +- **Previous**: Text-based hyperlink with label "Job Folder Link" and "No Link Available" placeholder +- **New**: Two-state button in job detail modal + - **Disabled State**: Grey button (`#4b5563`), disabled, text = "No Folder Available" + - **Active State**: Blue button matching accent color (`#0d6efd`), clickable, text = "Show Job Folder" +- **Behavior**: Clicking active button opens job folder URL in new tab with noopener/noreferrer +- **File**: Frontend/index.html +- **CSS**: Added `#jobFolderBtn` styling with state classes +- **JavaScript**: Updated `openDetail()` function to configure button state + +### 3. Job Folder Button Typography +- **Font Size**: Increased to 17px (was 15px) +- **Font Weight**: Changed to bold (700) +- **Result**: Better visual prominence matching modal design + +### 4. Notes Section Color Scheme +- **Border Color**: Changed from light (`#e6e9ef`) to dark grey (`#4b5563`) for both `#jobNotes` and `#newNote` +- **Text Color**: `#jobNotes` now displays text in dark grey (`#4b5563`) for consistency +- **Design Goal**: Unified dark grey accent color matching disabled button background +- **File**: Frontend/index.html + +### 5. Notes Section Heading +- **Change**: Added blue accent color (`color:var(--accent)`) to Notes h3 heading +- **Result**: Matches "Job Detail" h3 styling for visual consistency +- **File**: Frontend/index.html + +### 6. Modal Height Expansion +- **Previous**: `max-height:84vh` +- **Updated**: `max-height:96vh` +- **Additional Space**: ~60px more at bottom for better content visibility +- **Auto-Scroll**: Modal now automatically scrolls to top when opened +- **Implementation**: Added `document.getElementById('detailBox').scrollTop = 0;` in `openDetail()` function +- **File**: Frontend/index.html + +## UI/UX Summary +All changes focused on improving the job detail modal design: +- Converted job folder link from text to button interface for better UX +- Implemented cohesive color scheme using dark grey (`#4b5563`) as accent +- Increased modal height to 96vh for better content visibility +- Auto-scroll to top ensures users always see details from the beginning +- Typography enhancements (larger, bolder button text) improve readability + +## Files Modified (December 12) +- Frontend/index.html (all UI/UX changes) diff --git a/frontend/index.html b/frontend/index.html index 2be05b3..74b8e39 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -21,7 +21,7 @@ /* Search + filter toggle */ #searchBox{width:100%;padding:10px;border-radius:8px;border:1px solid #d1d5db;margin-bottom:8px;box-sizing:border-box;font-size: 18px;} #searchBox::placeholder{color:#9ca3af;} - #filterToggle{background:var(--accent);color:#fff;padding:8px 10px;border-radius:8px;border:none;cursor:pointer;margin-bottom:8px;display:inline-block;} + #filterToggle{background:var(--accent);color:#fff;padding:8px 10px;border-radius:8px;border:none;cursor:pointer;margin-bottom:8px;display:inline-block;max-width:110px;} /* Filters panel */ #filtersPanel{display:none;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:10px;margin-bottom:10px;} @@ -38,17 +38,19 @@ /* Modal */ #detailModal{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.45);align-items:flex-start;justify-content:center;padding-top:2vh;z-index:999;} - #detailBox{margin-block-start:0;margin-block-end:0;background:#fff;border-radius:10px;padding:2px 12px 6px 10px;max-width:380px;width:92%;max-height:84vh;overflow:auto;box-sizing:border-box;} + #detailBox{margin-block-start:0;margin-block-end:0;background:#fff;border-radius:10px;padding:2px 12px 6px 10px;max-width:380px;width:92%;max-height:96vh;overflow:auto;box-sizing:border-box;} .h2{margin-top:0; margin-bottom:2px;margin-block-end:0;} .detail-table{margin-top: 0;width:100%;border-collapse:collapse;margin-bottom:4px;} .detail-table td{border:1px solid #eef2ff;padding:0px 6px 6px 6px;font-size:13px;vertical-align:top;} .detail-table td.label{width:40%;background:#fbfdff;font-weight:700;color:#374151;} - #jobFolderLink{margin-bottom:10px;font-size:13px;} - #jobFolderLink a, #jobFolderLink span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} + #jobFolderBtn{width:100%;padding:10px 12px;border-radius:8px;border:none;color:#fff;cursor:pointer;font-size:17px;font-weight:700;margin-bottom:10px;transition:background 0.2s;} + #jobFolderBtn.active{background:var(--accent);} + #jobFolderBtn.active:hover{background:#0b5ed7;} + #jobFolderBtn:disabled{background:#4b5563;cursor:not-allowed;opacity:0.7;} /* Notes */ - #jobNotes{min-height:120px;max-height:200px;overflow:auto;padding:4px;border:1px solid #e6e9ef;border-radius:4px;font-size:11px;background:transparent;white-space:pre-wrap;word-wrap:break-word;} - #newNote{min-height:56px;max-height:120px;overflow:auto;padding:8px;border:1px solid #d7dbe3;border-radius:8px;font-size:16px;background:transparent;margin-top:6px;} + #jobNotes{min-height:120px;max-height:200px;overflow:auto;padding:4px;border:1px solid #4b5563;border-radius:4px;font-size:11px;background:transparent;white-space:pre-wrap;word-wrap:break-word;color:#4b5563;} + #newNote{min-height:56px;max-height:120px;overflow:auto;padding:8px;border:1px solid #4b5563;border-radius:8px;font-size:16px;background:transparent;margin-top:6px;} .toolbar{display:flex;flex-wrap:wrap;margin-bottom:3px;margin-top:5px} /* small space below toolbar */ .toolbar button{ height:28px; @@ -144,9 +146,9 @@
- + -

Notes

+

Notes

@@ -194,7 +196,7 @@ const detailModal = document.getElementById('detailModal'); const detailTable = document.getElementById('detailTable'); - const jobFolderAnchor = document.getElementById('jobFolderAnchor'); + const jobFolderBtn = document.getElementById('jobFolderBtn'); const jobNotes = document.getElementById('jobNotes'); const newNote = document.getElementById('newNote'); @@ -374,17 +376,32 @@ tr.appendChild(tdLabel); tr.appendChild(tdVal); detailTable.appendChild(tr); } - // Job folder link - jobFolderAnchor.innerHTML = ''; + // Job folder button if(job.Job_Folder_Link && String(job.Job_Folder_Link).trim()!==''){ - try{ const url=new URL(job.Job_Folder_Link); const a=document.createElement('a'); a.href=url.href; a.target='_blank'; a.rel='noopener noreferrer'; a.textContent=url.href; a.style.color='#0d6efd'; a.style.textDecoration='underline'; jobFolderAnchor.appendChild(a); - }catch(e){ jobFolderAnchor.textContent='No Link Available'; jobFolderAnchor.style.color='#374151'; jobFolderAnchor.style.textDecoration='none'; } - } else { jobFolderAnchor.textContent='No Link Available'; jobFolderAnchor.style.color='#374151'; jobFolderAnchor.style.textDecoration='none'; } + try{ + const url=new URL(job.Job_Folder_Link); + jobFolderBtn.textContent='Show Job Folder'; + jobFolderBtn.disabled=false; + jobFolderBtn.className='active'; + jobFolderBtn.onclick=()=>window.open(url.href, '_blank', 'noopener,noreferrer'); + }catch(e){ + jobFolderBtn.textContent='No Folder Available'; + jobFolderBtn.disabled=true; + jobFolderBtn.className=''; + jobFolderBtn.onclick=null; + } + } else { + jobFolderBtn.textContent='No Folder Available'; + jobFolderBtn.disabled=true; + jobFolderBtn.className=''; + jobFolderBtn.onclick=null; + } jobNotes.innerHTML = job.Notes || ''; newNote.innerHTML = ''; tbButtons.forEach(b=>b.classList.remove('active')); detailModal.style.display='flex'; + document.getElementById('detailBox').scrollTop = 0; } document.getElementById('btnClose').addEventListener('click',()=>{detailModal.style.display='none';});