This commit is contained in:
2026-03-22 00:43:56 +08:00
parent 557e25d187
commit cd40757167
6 changed files with 86 additions and 73 deletions

View File

@@ -183,9 +183,9 @@
GlobalGuard <span>Audit V9.4</span>
</div>
<nav class="nav-top" aria-label="Main navigation">
<button onclick="app.nav('dashboard')" class="active" aria-current="page">Workspace</button>
<button onclick="app.nav('orders')">Order Queue (200+)</button>
<button onclick="app.nav('settings')">Settings</button>
<button id="nav-btn-dashboard" onclick="app.nav('dashboard')" class="active" aria-current="page">Workspace</button>
<button id="nav-btn-orders" onclick="app.nav('orders')">Order Queue (200+)</button>
<button id="nav-btn-settings" onclick="app.nav('settings')">Settings</button>
</nav>
<div class="user-area">
<div style="text-align: right; font-size:12px;">
@@ -193,7 +193,7 @@
<div style="color:rgba(255,255,255,0.6)">East China Audit Group</div>
</div>
<div class="avatar" aria-label="User avatar">A</div>
<button class="btn" style="background:rgba(255,255,255,0.1); padding:5px 10px;" onclick="app.showLogout()">Logout</button>
<button id="btn-logout" class="btn" style="background:rgba(255,255,255,0.1); padding:5px 10px;" onclick="app.showLogout()">Logout</button>
</div>
</header>
@@ -294,8 +294,8 @@
</select>
</div>
<div style="margin-left:auto; display:flex; gap:10px;">
<button class="btn btn-secondary" onclick="app.resetFilter()" aria-label="Reset all filters">Reset</button>
<button class="btn btn-primary" onclick="app.applyFilter()" aria-label="Apply filters and search">
<button id="btn-filter-reset" class="btn btn-secondary" onclick="app.resetFilter()" aria-label="Reset all filters">Reset</button>
<button id="btn-filter-search" class="btn btn-primary" onclick="app.applyFilter()" aria-label="Apply filters and search">
<svg class="icon" aria-hidden="true"><use xlink:href="#i-list"></use></svg> Search
</button>
</div>
@@ -324,8 +324,8 @@
</div>
<div style="margin-top:15px; display:flex; gap:10px; align-items:center;">
<button class="btn btn-primary" onclick="app.batchAction('approve')" aria-label="Batch approve selected orders">Batch Approve</button>
<button class="btn btn-danger" onclick="app.batchAction('reject')" aria-label="Batch reject selected orders">Batch Reject</button>
<button id="btn-batch-approve" class="btn btn-primary" onclick="app.batchAction('approve')" aria-label="Batch approve selected orders">Batch Approve</button>
<button id="btn-batch-reject" class="btn btn-danger" onclick="app.batchAction('reject')" aria-label="Batch reject selected orders">Batch Reject</button>
<span style="margin-left:auto; font-size:12px; color:var(--text-muted);" role="status" aria-live="polite">
Showing <strong id="current-count">0</strong> results / Total <span id="total-db-count">0</span>
</span>
@@ -372,8 +372,8 @@
<div class="drawer-body" id="d-content" role="region" aria-label="Order information">
</div>
<div class="drawer-footer" id="d-footer">
<button class="btn btn-danger" onclick="app.rejectCurrent()" aria-label="Reject this order">Reject Order</button>
<button class="btn btn-primary" onclick="app.approveCurrent()" aria-label="Approve this order">Approve Order</button>
<button id="btn-drawer-reject" class="btn btn-danger" onclick="app.rejectCurrent()" aria-label="Reject this order">Reject Order</button>
<button id="btn-drawer-approve" class="btn btn-primary" onclick="app.approveCurrent()" aria-label="Approve this order">Approve Order</button>
</div>
</aside>
@@ -393,8 +393,8 @@
<textarea class="input-control" id="reject-note" style="width:100%; height:80px;" placeholder="Notes (Optional)..." aria-label="Additional rejection notes"></textarea>
</div>
<div class="modal-actions">
<button onclick="app.closeModal('modal-reject')" aria-label="Cancel rejection">Cancel</button>
<button class="confirm" onclick="app.confirmReject()" aria-label="Confirm order rejection">Confirm Reject</button>
<button id="btn-reject-cancel" onclick="app.closeModal('modal-reject')" aria-label="Cancel rejection">Cancel</button>
<button id="btn-reject-confirm" class="confirm" onclick="app.confirmReject()" aria-label="Confirm order rejection">Confirm Reject</button>
</div>
</div>
</div>
@@ -406,8 +406,8 @@
<p style="color:var(--text-muted);">Are you sure you want to log out? Unsaved changes will be lost.</p>
</div>
<div class="modal-actions">
<button onclick="app.closeModal('modal-logout')" aria-label="Cancel logout">Cancel</button>
<button class="confirm" onclick="location.reload()" aria-label="Confirm logout">Confirm Logout</button>
<button id="btn-logout-cancel" onclick="app.closeModal('modal-logout')" aria-label="Cancel logout">Cancel</button>
<button id="btn-logout-confirm" class="confirm" onclick="location.reload()" aria-label="Confirm logout">Confirm Logout</button>
</div>
</div>
</div>
@@ -600,9 +600,10 @@ const app = {
return '';
}).join('');
const safeId = order.id.replace(/[^a-zA-Z0-9\-_]/g, '-');
htmlBuffer += `
<tr role="row">
<td role="cell"><input type="checkbox" class="row-check" value="${order.id}" onchange="app.toggleSelect('${order.id}')" aria-label="Select order ${order.id}" ${this.data.selectedIds.has(order.id) ? 'checked' : ''} ${order.status !== 'pending' ? 'disabled' : ''}></td>
<tr role="row" id="row-${safeId}">
<td role="cell"><input type="checkbox" id="check-${safeId}" class="row-check" value="${order.id}" onchange="app.toggleSelect('${order.id}')" aria-label="Select order ${order.id}" ${this.data.selectedIds.has(order.id) ? 'checked' : ''} ${order.status !== 'pending' ? 'disabled' : ''}></td>
<td role="cell">
<div style="font-weight:600; font-family:'Consolas', monospace;">${order.id}</div>
<div style="font-size:12px; color:var(--text-muted);">${order.date}</div>
@@ -616,13 +617,13 @@ const app = {
<td role="cell" style="font-weight:600; color:var(--text-main);">¥ ${order.total.toLocaleString()}</td>
<td role="cell">
<div style="font-weight:bold; color:${riskColor};">${order.score} / 100</div>
<div class="risk-bar-container" role="progressbar" aria-valuenow="${order.score}" aria-valuemin="0" aria-valuemax="100" aria-label="Risk score progress">
<div class="risk-bar-container" role="progressbar" aria-valuenow="${order.score}" aria-valuemin="0" aria-valuemax="100" aria-label="Risk score progress for order ${order.id}">
<div class="risk-bar-fill" style="width: ${order.score}%; background: ${riskColor};"></div>
</div>
</td>
<td role="cell">${statusBadge}</td>
<td role="cell" style="text-align:right;">
<button class="btn btn-secondary" style="padding:4px 8px;" onclick="app.openDrawer('${order.id}')" aria-label="View details for order ${order.id}">
<button id="view-${safeId}" class="btn btn-secondary" style="padding:4px 8px;" onclick="app.openDrawer('${order.id}')" aria-label="View details for order ${order.id}">
<svg class="icon" aria-hidden="true" style="margin:0;"><use xlink:href="#i-eye"></use></svg>
</button>
</td>

View File

@@ -215,7 +215,7 @@
<input type="text" id="searchInput" placeholder="Search threads, users or resources..." onkeydown="if(event.key==='Enter') doSearch()" aria-label="Search threads, users or resources">
</div>
<div class="nav-user" id="navUser">
<button class="btn btn-primary" onclick="openModal('loginModal')" aria-label="Open login or registration modal">Register / Login</button>
<button id="btn-register-login" class="btn btn-primary" onclick="openModal('loginModal')" aria-label="Open login or registration modal">Register / Login</button>
</div>
</header>
@@ -227,12 +227,12 @@
<div class="card">
<h2 class="card-header">Navigation</h2>
<div class="card-body" style="padding:0;">
<button class="forum-category-item" onclick="switchView('home')" aria-label="Go to home">🏠 Home</button>
<button class="forum-category-item" onclick="filterCategory('hardware')" aria-label="Filter by hardware category">🖥️ Hardware</button>
<button class="forum-category-item" onclick="filterCategory('software')" aria-label="Filter by software category">💿 Software</button>
<button class="forum-category-item" onclick="filterCategory('water')" aria-label="Filter by off-topic category">🌊 Off-topic</button>
<button class="forum-category-item" onclick="filterCategory('market')" aria-label="Filter by marketplace category">💹 Marketplace</button>
<button class="forum-category-item" onclick="filterCategory('feedback')" aria-label="Filter by announcements category">📢 Announcements</button>
<button id="nav-home" class="forum-category-item" onclick="switchView('home')" aria-label="Go to home">🏠 Home</button>
<button id="nav-hardware" class="forum-category-item" onclick="filterCategory('hardware')" aria-label="Filter by hardware category">🖥️ Hardware</button>
<button id="nav-software" class="forum-category-item" onclick="filterCategory('software')" aria-label="Filter by software category">💿 Software</button>
<button id="nav-water" class="forum-category-item" onclick="filterCategory('water')" aria-label="Filter by off-topic category">🌊 Off-topic</button>
<button id="nav-market" class="forum-category-item" onclick="filterCategory('market')" aria-label="Filter by marketplace category">💹 Marketplace</button>
<button id="nav-feedback" class="forum-category-item" onclick="filterCategory('feedback')" aria-label="Filter by announcements category">📢 Announcements</button>
</div>
</div>
@@ -614,7 +614,7 @@
<label for="loginPassword" style="display:block; margin-bottom:5px;">Password</label>
<input type="password" id="loginPassword" class="form-control" style="width:100%; padding:8px;" value="123456" aria-label="Password">
</div>
<button class="btn btn-primary btn-block" onclick="doLogin()" aria-label="Submit login form">Login</button>
<button id="btn-login-submit" class="btn btn-primary btn-block" onclick="doLogin()" aria-label="Submit login form">Login</button>
</div>
</div>
</div>
@@ -638,8 +638,8 @@
<label for="newPostContent" style="display:block; margin-bottom:5px; font-weight:bold;">Content</label>
<textarea id="newPostContent" style="width:100%; height:300px; padding:10px; border:1px solid #ddd; border-top:none; resize:vertical;" placeholder="Describe your issue detailedly..." aria-label="Thread content"></textarea>
<div style="margin-top:10px; text-align:right;">
<button class="btn" onclick="closeModal('newThreadModal')" aria-label="Cancel thread creation">Cancel</button>
<button class="btn btn-primary" onclick="submitNewThread()" aria-label="Submit new thread">Post Thread</button>
<button id="btn-cancel-thread" class="btn" onclick="closeModal('newThreadModal')" aria-label="Cancel thread creation">Cancel</button>
<button id="btn-submit-thread" class="btn btn-primary" onclick="submitNewThread()" aria-label="Submit new thread">Post Thread</button>
</div>
</div>
</div>
@@ -841,7 +841,7 @@
<span style="color:#888; margin-left:10px; font-size:0.9rem;">Total ${data.length} threads</span>
</div>
<div>
<button class="btn btn-primary" onclick="openModal('newThreadModal')">✍️ New Thread</button>
<button id="btn-new-thread" class="btn btn-primary" onclick="openModal('newThreadModal')">✍️ New Thread</button>
<select style="padding:5px; border-radius:4px; border:1px solid #ddd; margin-left:10px;" onchange="showToast('Sorting feature in development...', 'info')">
<option>Latest Replies</option>
<option>Newest</option>

View File

@@ -188,13 +188,13 @@
<div class="modal-content" role="dialog" aria-modal="true" aria-labelledby="citation-modal-title">
<div class="modal-header" id="citation-modal-title">
<span>Generate Citation</span>
<button class="modal-close" onclick="closeModal('modal-citation')" aria-label="Close citation dialog">&times;</button>
<button id="btn-citation-close-x" class="modal-close" onclick="closeModal('modal-citation')" aria-label="Close citation dialog">&times;</button>
</div>
<div id="citation-body">
<!-- Dynamic Content -->
</div>
<div style="margin-top:20px; text-align:right;">
<button onclick="closeModal('modal-citation')" style="padding:8px 20px; cursor:pointer;" aria-label="Close">Close</button>
<button id="btn-citation-close" onclick="closeModal('modal-citation')" style="padding:8px 20px; cursor:pointer;" aria-label="Close">Close</button>
</div>
</div>
</div>
@@ -262,7 +262,7 @@
<div class="header-info">
<span>Welcome, <strong>Student_2024</strong> (Card Status: <span style="color:#aeffae">Normal</span>)</span>
<span>
<button onclick="openShelf()" style="background:none; border:none; color:white; cursor:pointer; text-decoration:underline;" aria-label="Open my shelf">My Shelf <span id="shelf-count" style="background:#b3a369; color:black; padding:0 4px; border-radius:10px; font-size:10px;">0</span></button> | <a href="#">Borrowing History</a> | <button onclick="showCustomAlert('Logout Successful')" style="background:none; border:none; color:white; cursor:pointer; text-decoration:underline;" aria-label="Logout">Logout</button>
<button id="btn-my-shelf" onclick="openShelf()" style="background:none; border:none; color:white; cursor:pointer; text-decoration:underline;" aria-label="Open my shelf">My Shelf <span id="shelf-count" style="background:#b3a369; color:black; padding:0 4px; border-radius:10px; font-size:10px;">0</span></button> | <a href="#">Borrowing History</a> | <button onclick="showCustomAlert('Logout Successful')" style="background:none; border:none; color:white; cursor:pointer; text-decoration:underline;" aria-label="Logout">Logout</button>
</span>
</div>
</div>
@@ -330,7 +330,7 @@
<option value="title">Title</option>
<option value="author">Author</option>
</select>
<button type="submit" aria-label="Submit search">Search</button>
<button id="btn-search-submit" type="submit" aria-label="Submit search">Search</button>
<div style="margin-top:10px; font-size:14px; display:flex; justify-content:space-between;">
<div>
<label><input type="checkbox" id="chkFullText" onchange="handleSearch()" aria-label="Full text only"> Full Text Only</label>
@@ -917,13 +917,13 @@
const html = `
<p><strong>APA 7th:</strong></p>
<div class="citation-box">${apa} <button class="copy-btn" onclick="copyText('${apa.replace(/'/g, "\\'")}')">Copy</button></div>
<div class="citation-box">${apa} <button id="btn-copy-apa" class="copy-btn" onclick="copyText('${apa.replace(/'/g, "\\'")}')">Copy</button></div>
<p><strong>MLA 9th:</strong></p>
<div class="citation-box">${mla} <button class="copy-btn" onclick="copyText('${mla.replace(/'/g, "\\'")}')">Copy</button></div>
<div class="citation-box">${mla} <button id="btn-copy-mla" class="copy-btn" onclick="copyText('${mla.replace(/'/g, "\\'")}')">Copy</button></div>
<p><strong>BibTeX:</strong></p>
<div class="citation-box">${bib} <button class="copy-btn" onclick="copyText('${bib.replace(/'/g, "\\'")}')">Copy</button></div>
<div class="citation-box">${bib} <button id="btn-copy-bibtex" class="copy-btn" onclick="copyText('${bib.replace(/'/g, "\\'")}')">Copy</button></div>
`;
document.getElementById('citation-body').innerHTML = html;
@@ -1121,8 +1121,8 @@
div.className = 'result-item';
div.innerHTML = `
<div class="result-title">
<input type="checkbox">
<strong style="cursor:pointer;" onclick="openDetail(${item.id})">${start + index + 1}. ${item.title}</strong>
<input type="checkbox" id="chk-result-${item.id}">
<button id="btn-result-${item.id}" style="cursor:pointer; background:none; border:none; font-size:inherit; font-weight:bold; color:var(--primary); text-align:left; padding:0;" onclick="openDetail(${item.id})">${start + index + 1}. ${item.title}</button>
</div>
<div class="result-meta">
<p>Authors: ${item.authors} | ${item.year} | <span style="background:#eee; padding:2px 6px; border-radius:3px; font-size:12px;">${item.type}</span> | Citations: ${item.cites}</p>
@@ -1131,8 +1131,8 @@
</div>
<div class="action-row">
${item.hasPdf ? `<a href="javascript:void(0)">PDF Download</a> <a href="javascript:void(0)">HTML Full Text</a>` : `<span style="color:#999; font-size:12px; border:1px solid #eee; padding:4px;">[PDF Unavailable]</span> <a href="javascript:void(0)" style="background:white; color:#333; border:1px solid #ccc;">Document Delivery</a>`}
<a href="javascript:void(0)" onclick="showExportCitation(${item.id})">Cite</a>
<a href="javascript:void(0)" id="btn-shelf-${item.id}" onclick="addToShelf(${item.id})" style="${isShelved ? 'color:#aaa;' : ''}">${isShelved ? 'Shelved' : 'Add to Shelf'}</a>
<button id="btn-cite-${item.id}" style="background:white; border:1px solid var(--border); border-radius:4px; padding:5px 12px; font-size:13px; color:var(--text-main); cursor:pointer;" onclick="showExportCitation(${item.id})">Cite</button>
<button id="btn-shelf-${item.id}" style="background:white; border:1px solid var(--border); border-radius:4px; padding:5px 12px; font-size:13px; cursor:pointer; ${isShelved ? 'color:#aaa;' : ''}" onclick="addToShelf(${item.id})">${isShelved ? 'Shelved' : 'Add to Shelf'}</button>
</div>
`;
container.appendChild(div);
@@ -1202,8 +1202,8 @@
? `<button style="background:var(--primary); color:white; border:none; padding:10px 25px; border-radius:4px; cursor:pointer;" onclick="showCustomAlert('Start downloading ${item.title}.pdf')">Download Full Text (PDF)</button>`
: `<button style="background:#ccc; color:white; border:none; padding:10px 25px; border-radius:4px; cursor:not-allowed;">PDF Unauthorized</button> <button style="background:white; color:#333; border:1px solid #ccc; padding:10px 25px; border-radius:4px; cursor:pointer;" onclick="showCustomAlert('Request Document Delivery...')">Request Document Delivery</button>`
}
<button style="background:white; color:var(--text-main); border:1px solid #ccc; padding:10px 25px; border-radius:4px; cursor:pointer;" onclick="showExportCitation(${item.id})">Get Citation</button>
<button style="background:white; color:var(--text-main); border:1px solid #ccc; padding:10px 25px; border-radius:4px; cursor:pointer;" onclick="addToShelf(${item.id})">Add to Shelf</button>
<button id="btn-detail-cite-${item.id}" style="background:white; color:var(--text-main); border:1px solid #ccc; padding:10px 25px; border-radius:4px; cursor:pointer;" onclick="showExportCitation(${item.id})">Get Citation</button>
<button id="btn-detail-shelf-${item.id}" style="background:white; color:var(--text-main); border:1px solid #ccc; padding:10px 25px; border-radius:4px; cursor:pointer;" onclick="addToShelf(${item.id})">Add to Shelf</button>
</div>
`;
}

View File

@@ -202,20 +202,20 @@
</head>
<body bgcolor="#ffffff" text="#000000" link="#0000EE" vlink="#551A8B" alink="#FF0000">
<div class="theme-toggle" onclick="toggleTheme()" title="切换夜间模式" aria-label="Toggle dark/light mode">🌓</div>
<button id="btn-theme-toggle" class="theme-toggle" onclick="toggleTheme()" title="切换夜间模式" aria-label="Toggle dark/light mode">🌓</button>
<!-- Modals -->
<div id="modal-container" class="modal-overlay" role="presentation" aria-hidden="true">
<div class="modal-box" id="modal-box" role="dialog" aria-modal="true" aria-labelledby="modal-title">
<div class="modal-header">
<span class="modal-title" id="modal-title">Alert</span>
<button class="close-btn" onclick="closeModal()" aria-label="Close modal">×</button>
<button id="btn-modal-close-x" class="close-btn" onclick="closeModal()" aria-label="Close modal">×</button>
</div>
<div class="modal-body" id="modal-content">
<!-- Content -->
</div>
<div class="modal-footer" id="modal-footer">
<button class="modal-btn btn-secondary" onclick="closeModal()" style="padding: 6px 15px; border: 1px solid #ccc; background: white; border-radius: 4px; cursor: pointer;" aria-label="Close">Close</button>
<button id="btn-modal-close" class="modal-btn btn-secondary" onclick="closeModal()" style="padding: 6px 15px; border: 1px solid #ccc; background: white; border-radius: 4px; cursor: pointer;" aria-label="Close">Close</button>
<button class="modal-btn btn-primary" id="modal-confirm-btn" style="padding: 6px 15px; border: none; background: var(--accent); color: white; border-radius: 4px; cursor: pointer; margin-left: 10px; display:none;" aria-label="Confirm">Confirm</button>
</div>
</div>
@@ -476,11 +476,11 @@
<div class="card-header">Daily Poll</div>
<p style="font-size:13px; margin-bottom:10px;"><strong>How do you get news?</strong></p>
<form>
<label style="display:block; margin-bottom:5px; font-size:13px;"><input type="radio" name="poll"> Social Media APP</label>
<label style="display:block; margin-bottom:5px; font-size:13px;"><input type="radio" name="poll"> Traditional Portals</label>
<label style="display:block; margin-bottom:5px; font-size:13px;"><input type="radio" name="poll"> TV/Radio</label>
<label style="display:block; margin-bottom:10px; font-size:13px;"><input type="radio" name="poll"> Newspapers</label>
<button type="button" class="btn-login" style="width:100%; border-radius:15px;" onclick="showCustomAlert('Thanks! 68% users chose Social Media.')">Submit Vote</button>
<label style="display:block; margin-bottom:5px; font-size:13px;"><input id="poll-social-media" type="radio" name="poll" value="social"> Social Media APP</label>
<label style="display:block; margin-bottom:5px; font-size:13px;"><input id="poll-portals" type="radio" name="poll" value="portal"> Traditional Portals</label>
<label style="display:block; margin-bottom:5px; font-size:13px;"><input id="poll-tv" type="radio" name="poll" value="tv"> TV/Radio</label>
<label style="display:block; margin-bottom:10px; font-size:13px;"><input id="poll-newspaper" type="radio" name="poll" value="newspaper"> Newspapers</label>
<button id="btn-poll-submit" type="button" class="btn-login" style="width:100%; border-radius:15px;" onclick="showCustomAlert('Thanks! 68% users chose Social Media.')">Submit Vote</button>
</form>
</div>
</td>
@@ -490,7 +490,7 @@
<!-- Headline Focus (Enhanced) -->
<div class="card-panel highlight">
<div class="headline-box">
<h2 onclick="showArticle('Global Sustainable Development Summit Closes in Geneva', 'After three days of intense discussion, the global summit concluded successfully...')">Global Summit Closes: "2030 Climate Action Declaration" Adopted</h2>
<h2 id="btn-headline-geneva" onclick="showArticle('Global Sustainable Development Summit Closes in Geneva', 'After three days of intense discussion, the global summit concluded successfully...')" style="cursor:pointer;">Global Summit Closes: "2030 Climate Action Declaration" Adopted</h2>
<div class="headline-meta">
<span>2026-01-19 08:30</span> |
<span>Source: Global Daily</span> |
@@ -670,7 +670,7 @@
Sports Arena <a href="javascript:void(0)" style="font-weight:normal; font-size:12px; color:#999;">More &gt;</a>
</div>
<ul class="compact-list">
<li><a href="javascript:void(0)" class="text-red">World Cup expands to 48 teams, more Asian slots</a></li>
<li><a id="news-worldcup" href="javascript:void(0)" class="text-red">World Cup expands to 48 teams, more Asian slots</a></li>
<li><a href="javascript:void(0)">NBA Finals G6: Lakers vs Celtics at home</a></li>
<li><a href="javascript:void(0)">F1 Monaco GP: Ferrari locks front row</a></li>
<li><a href="javascript:void(0)">Wimbledon: Chinese youngster upsets champion to reach QF</a></li>
@@ -1183,6 +1183,15 @@
});
console.log("Global Daily Portal Initialized. Version 2.4.0 (EN)");
// -------------------------------------------------------------------------
// Core: Theme Toggle
// -------------------------------------------------------------------------
window.toggleTheme = function() {
const body = document.body;
const isDark = body.getAttribute('data-theme') === 'dark';
body.setAttribute('data-theme', isDark ? '' : 'dark');
};
</script>
</body>

View File

@@ -297,29 +297,29 @@
<nav>
<ul id="nav-folder-list" role="list">
<li class="nav-item active" onclick="selectFolder('inbox')" role="menuitem" aria-current="page">
<li id="nav-inbox" class="nav-item active" onclick="selectFolder('inbox')" role="menuitem" aria-current="page">
<div style="display:flex; align-items:center;">
<span class="nav-icon" aria-hidden="true">📥</span> Inbox
</div>
<span class="unread-badge" id="badge-inbox" aria-label="Unread messages count">3</span>
</li>
<li class="nav-item" onclick="selectFolder('sent')" role="menuitem">
<li id="nav-sent" class="nav-item" onclick="selectFolder('sent')" role="menuitem">
<div style="display:flex; align-items:center;">
<span class="nav-icon" aria-hidden="true">📤</span> Sent
</div>
</li>
<li class="nav-item" onclick="selectFolder('drafts')" role="menuitem">
<li id="nav-drafts" class="nav-item" onclick="selectFolder('drafts')" role="menuitem">
<div style="display:flex; align-items:center;">
<span class="nav-icon" aria-hidden="true">📝</span> Drafts
</div>
<span class="unread-badge" aria-label="Draft messages count">1</span>
</li>
<li class="nav-item" onclick="selectFolder('junk')" role="menuitem">
<li id="nav-junk" class="nav-item" onclick="selectFolder('junk')" role="menuitem">
<div style="display:flex; align-items:center;">
<span class="nav-icon" aria-hidden="true">🚫</span> Junk
</div>
</li>
<li class="nav-item" onclick="selectFolder('trash')" role="menuitem">
<li id="nav-trash" class="nav-item" onclick="selectFolder('trash')" role="menuitem">
<div style="display:flex; align-items:center;">
<span class="nav-icon" aria-hidden="true">🗑️</span> Trash
</div>
@@ -350,9 +350,9 @@
<main class="mail-list-panel" role="main" aria-label="Mail list">
<div class="toolbar" role="toolbar" aria-label="Mail actions">
<div class="tool-icon" title="Select All" role="button" tabindex="0"><label><input type="checkbox" style="margin:0;" id="select-all-checkbox" onclick="toggleSelectAll()" aria-label="Select all emails in current folder"></label></div>
<button class="tool-icon" title="Refresh" onclick="refreshMail()" aria-label="Refresh mail list">🔄</button>
<button class="tool-icon" title="Mark as Read" onclick="markSelectedAsRead()" aria-label="Mark selected emails as read">✉️</button>
<button class="tool-icon" title="Delete" onclick="deleteSelected()" aria-label="Delete selected emails">🗑️</button>
<button id="btn-toolbar-refresh" class="tool-icon" title="Refresh" onclick="refreshMail()" aria-label="Refresh mail list">🔄</button>
<button id="btn-toolbar-mark-read" class="tool-icon" title="Mark as Read" onclick="markSelectedAsRead()" aria-label="Mark selected emails as read">✉️</button>
<button id="btn-toolbar-delete" class="tool-icon" title="Delete" onclick="deleteSelected()" aria-label="Delete selected emails">🗑️</button>
<div style="flex:1"></div>
<div style="font-size:12px; color:var(--text-secondary);">Sort: <b>Date</b></div>
</div>
@@ -394,7 +394,7 @@
</div>
</div>
<div class="modal-footer">
<button class="btn-compose" style="width:100px;" onclick="sendEmail()" aria-label="Send email">Send</button>
<button id="btn-compose-send" class="btn-compose" style="width:100px;" onclick="sendEmail()" aria-label="Send email">Send</button>
<button style="color:var(--text-secondary); background:none; border:none; cursor:pointer;" onclick="closeCompose()" aria-label="Discard email">Discard</button>
</div>
</div>
@@ -591,6 +591,7 @@
filtered.forEach(email => {
const el = document.createElement('div');
el.id = `mail-item-${email.id}`;
el.className = `mail-item ${email.unread ? 'unread' : ''} ${selectedEmailId === email.id ? 'selected' : ''}`;
el.onclick = () => openEmail(email.id);
@@ -603,7 +604,7 @@
// Insert Checkbox in HTML
el.innerHTML = `
<div class="mail-left" onclick="event.stopPropagation()">
<input type="checkbox" class="mail-checkbox" ${email.checked ? 'checked' : ''} onchange="toggleEmailCheck(${email.id})">
<input type="checkbox" id="check-mail-${email.id}" class="mail-checkbox" ${email.checked ? 'checked' : ''} onchange="toggleEmailCheck(${email.id})" aria-label="Select email from ${email.sender}">
</div>
<div class="mail-content-block">
<div class="mail-header-row">
@@ -723,9 +724,9 @@
</div>
</div>
<div class="email-actions">
<button class="tool-icon" title="Reply" onclick="replyEmail(${email.id})">↩️</button>
<button class="tool-icon" title="Forward" onclick="forwardEmail(${email.id})">➡️</button>
<button class="tool-icon" title="Delete" onclick="deleteEmail(${email.id})">🗑️</button>
<button id="btn-reply-${email.id}" class="tool-icon" title="Reply" onclick="replyEmail(${email.id})" aria-label="Reply to email">↩️</button>
<button id="btn-forward-${email.id}" class="tool-icon" title="Forward" onclick="forwardEmail(${email.id})" aria-label="Forward email">➡️</button>
<button id="btn-delete-${email.id}" class="tool-icon" title="Delete" onclick="deleteEmail(${email.id})" aria-label="Delete email">🗑️</button>
</div>
</div>
</div>

View File

@@ -316,12 +316,12 @@
<table width="100%" border="1" cellpadding="0" cellspacing="0" bgcolor="#343a40" role="navigation" aria-label="Module navigation">
<tr>
<td style="display:flex; padding:0;">
<button class="nav-item active" onclick="switchModule(this, 'clinic')" role="menuitem" aria-current="page" aria-label="Outpatient module">Outpatient</button>
<button class="nav-item" onclick="switchModule(this, 'inpatient')" role="menuitem" aria-label="Inpatient module">Inpatient</button>
<button class="nav-item" onclick="switchModule(this, 'surgery')" role="menuitem" aria-label="Surgery module">Surgery</button>
<button class="nav-item" onclick="switchModule(this, 'lab')" role="menuitem" aria-label="Lab results module">Lab Results</button>
<button class="nav-item" onclick="switchModule(this, 'pharmacy')" role="menuitem" aria-label="Pharmacy module">Pharmacy</button>
<button class="nav-item" onclick="switchModule(this, 'admin')" role="menuitem" aria-label="Order admin module">Order Admin</button>
<button id="nav-btn-clinic" class="nav-item active" onclick="switchModule(this, 'clinic')" role="menuitem" aria-current="page" aria-label="Outpatient module">Outpatient</button>
<button id="nav-btn-inpatient" class="nav-item" onclick="switchModule(this, 'inpatient')" role="menuitem" aria-label="Inpatient module">Inpatient</button>
<button id="nav-btn-surgery" class="nav-item" onclick="switchModule(this, 'surgery')" role="menuitem" aria-label="Surgery module">Surgery</button>
<button id="nav-btn-lab" class="nav-item" onclick="switchModule(this, 'lab')" role="menuitem" aria-label="Lab results module">Lab Results</button>
<button id="nav-btn-pharmacy" class="nav-item" onclick="switchModule(this, 'pharmacy')" role="menuitem" aria-label="Pharmacy module">Pharmacy</button>
<button id="nav-btn-admin" class="nav-item" onclick="switchModule(this, 'admin')" role="menuitem" aria-label="Order admin module">Order Admin</button>
</td>
</tr>
</table>
@@ -475,7 +475,7 @@
<table width="100%" border="0" cellpadding="8">
<tr style="border-bottom:2px solid #eee;"><td>Drug Name</td><td>Stock</td><td>Status</td><td>Action</td></tr>
<tr><td>Aspirin</td><td>12,000</td><td style="color:green">Sufficient</td><td>-</td></tr>
<tr><td>Insulin Inj</td><td>50</td><td style="color:red; font-weight:bold;">Low Stock</td><td><a href="javascript:void(0)" onclick="restockDrug('Insulin')">Request Restock</a></td></tr>
<tr><td>Insulin Inj</td><td>50</td><td style="color:red; font-weight:bold;">Low Stock</td><td><a id="btn-restock-insulin" href="javascript:void(0)" onclick="restockDrug('Insulin')">Request Restock</a></td></tr>
<tr><td>Cefradine</td><td>340</td><td style="color:orange">Normal</td><td>-</td></tr>
</table>
</div>
@@ -732,6 +732,7 @@
PATIENTS.forEach(p => {
const tr = document.createElement('tr');
tr.id = `patient-row-${p.id}`;
tr.className = `patient-row ${currentPatientId === p.id ? 'active' : ''}`;
tr.onclick = () => selectPatient(p.id);
@@ -793,7 +794,8 @@
labList.innerHTML = '<li style="color:#999;font-style:italic;">No lab results</li>';
} else {
p.labs.forEach(lab => {
const linkPart = lab.link ? ` <a href="javascript:void(0)" onclick="viewLabImage('${lab.name}')">[View Image]</a>` : '';
const safeLabName = lab.name.replace(/[^a-zA-Z0-9]/g, '-');
const linkPart = lab.link ? ` <a id="btn-view-lab-${safeLabName}" href="javascript:void(0)" onclick="viewLabImage('${lab.name}')" aria-label="View image for ${lab.name}">[View Image]</a>` : '';
const li = document.createElement('li');
li.style.marginBottom = '5px';
li.innerHTML = `${lab.date}: ${lab.name} - ${lab.result} ${linkPart}`;