Merge branch 'main' of https://gitea.ccllc.pro/aewing/Job-Info
This commit is contained in:
@@ -56,3 +56,57 @@
|
|||||||
- Initial page load shows first 40 cards immediately
|
- Initial page load shows first 40 cards immediately
|
||||||
- Remaining pages load in background with progress bar indication
|
- Remaining pages load in background with progress bar indication
|
||||||
- Full list renders with all filters/search applied once complete
|
- 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)
|
||||||
|
|||||||
+31
-14
@@ -21,7 +21,7 @@
|
|||||||
/* Search + filter toggle */
|
/* 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{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;}
|
#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 */
|
/* Filters panel */
|
||||||
#filtersPanel{display:none;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:10px;margin-bottom:10px;}
|
#filtersPanel{display:none;background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:10px;margin-bottom:10px;}
|
||||||
@@ -38,17 +38,19 @@
|
|||||||
|
|
||||||
/* Modal */
|
/* 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;}
|
#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;}
|
.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{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{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;}
|
.detail-table td.label{width:40%;background:#fbfdff;font-weight:700;color:#374151;}
|
||||||
#jobFolderLink{margin-bottom:10px;font-size:13px;}
|
#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;}
|
||||||
#jobFolderLink a, #jobFolderLink span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
|
#jobFolderBtn.active{background:var(--accent);}
|
||||||
|
#jobFolderBtn.active:hover{background:#0b5ed7;}
|
||||||
|
#jobFolderBtn:disabled{background:#4b5563;cursor:not-allowed;opacity:0.7;}
|
||||||
|
|
||||||
/* Notes */
|
/* 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;}
|
#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 #d7dbe3;border-radius:8px;font-size:16px;background:transparent;margin-top:6px;}
|
#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{display:flex;flex-wrap:wrap;margin-bottom:3px;margin-top:5px} /* small space below toolbar */
|
||||||
.toolbar button{
|
.toolbar button{
|
||||||
height:28px;
|
height:28px;
|
||||||
@@ -145,9 +147,9 @@
|
|||||||
|
|
||||||
<table class="detail-table" id="detailTable"></table>
|
<table class="detail-table" id="detailTable"></table>
|
||||||
|
|
||||||
<div id="jobFolderLink"><strong>Job Folder Link</strong><div><span id="jobFolderAnchor">No Link Available</span></div></div>
|
<button id="jobFolderBtn" disabled>No Folder Available</button>
|
||||||
|
|
||||||
<h3 style="margin:8px 0 6px 0">Notes</h3>
|
<h3 style="margin:8px 0 6px 0;color:var(--accent)">Notes</h3>
|
||||||
<div id="jobNotes"></div>
|
<div id="jobNotes"></div>
|
||||||
|
|
||||||
<div class="toolbar" id="toolbar">
|
<div class="toolbar" id="toolbar">
|
||||||
@@ -195,7 +197,7 @@
|
|||||||
|
|
||||||
const detailModal = document.getElementById('detailModal');
|
const detailModal = document.getElementById('detailModal');
|
||||||
const detailTable = document.getElementById('detailTable');
|
const detailTable = document.getElementById('detailTable');
|
||||||
const jobFolderAnchor = document.getElementById('jobFolderAnchor');
|
const jobFolderBtn = document.getElementById('jobFolderBtn');
|
||||||
const jobNotes = document.getElementById('jobNotes');
|
const jobNotes = document.getElementById('jobNotes');
|
||||||
const newNote = document.getElementById('newNote');
|
const newNote = document.getElementById('newNote');
|
||||||
|
|
||||||
@@ -375,17 +377,32 @@
|
|||||||
tr.appendChild(tdLabel); tr.appendChild(tdVal); detailTable.appendChild(tr);
|
tr.appendChild(tdLabel); tr.appendChild(tdVal); detailTable.appendChild(tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Job folder link
|
// Job folder button
|
||||||
jobFolderAnchor.innerHTML = '';
|
|
||||||
if(job.Job_Folder_Link && String(job.Job_Folder_Link).trim()!==''){
|
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);
|
try{
|
||||||
}catch(e){ jobFolderAnchor.textContent='No Link Available'; jobFolderAnchor.style.color='#374151'; jobFolderAnchor.style.textDecoration='none'; }
|
const url=new URL(job.Job_Folder_Link);
|
||||||
} else { jobFolderAnchor.textContent='No Link Available'; jobFolderAnchor.style.color='#374151'; jobFolderAnchor.style.textDecoration='none'; }
|
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 || '';
|
jobNotes.innerHTML = job.Notes || '';
|
||||||
newNote.innerHTML = '';
|
newNote.innerHTML = '';
|
||||||
tbButtons.forEach(b=>b.classList.remove('active'));
|
tbButtons.forEach(b=>b.classList.remove('active'));
|
||||||
detailModal.style.display='flex';
|
detailModal.style.display='flex';
|
||||||
|
document.getElementById('detailBox').scrollTop = 0;
|
||||||
}
|
}
|
||||||
document.getElementById('btnClose').addEventListener('click',()=>{detailModal.style.display='none';});
|
document.getElementById('btnClose').addEventListener('click',()=>{detailModal.style.display='none';});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user