Files
ranger c5d8a34296 feat: Active/Completed tabs on My Log page (v3.4.0)
Replaces the two stacked sections (Active above, Completed below)
on the main Logbook page with a single-pane WP-admin tabbed view
using the native subsubsub pattern (same as Posts/Comments/Plugins).

- Two tabs: Active (N) | Completed (M) with live counts
- URL-driven state via ?tab=active|completed; bookmarkable,
  refresh-stable, back-button works, invalid values fall back to
  Active server-side via whitelist + sanitize_key
- No JavaScript — each tab is a hyperlink built with add_query_arg
- WP-admin core CSS handles .subsubsub + .current; only a small
  margin block added in wp-notes-styles.php
- Single-pane render: only the selected tab's section is in the
  DOM, so no flash-of-wrong-content
- "Add a Note" form stays visible on both tabs for UI consistency

Flagged in the 2026-05-25 UX audit as the highest-payoff next move
(Tier 3 item #7). When the v4 timer/time_logged field ships, the
structure can extend to 3 tabs (TODO/IN PROGRESS/Completed) in
the same place; without it, an IN PROGRESS tab would always be
empty, so v3.4.0 ships the 2-tab version matching the current
data model.

Storage model unchanged — Active and Completed remain in their
separate options (wp_notes, wp_done_notes). The
wp_notes_display_notes($type) function is unchanged.

MINOR bump: new feature, no breaking changes.
2026-05-26 09:00:15 +01:00

228 lines
5.3 KiB
PHP

<?php
// inc/wp-notes-styles.php
if (!defined('ABSPATH')) {
exit;
}
/**
* Add required styles for Logbook
*/
function wp_notes_admin_styles() {
?>
<style>
/* Footer "buy me a coffee" — lives at the BOTTOM of the page */
.wp-notes-footer-support {
text-align: center;
margin: 32px 0 8px;
}
/* Notes List Container */
.wp-notes-active,
.wp-notes-completed {
margin: 20px 0;
}
/* Section Headers */
.wp-notes-section {
margin-bottom: 2em;
}
.wp-notes-section-title {
display: flex;
align-items: center;
gap: 10px;
color: #23282d;
font-size: 1.3em;
margin: 1.5em 0 1em;
padding-bottom: 0.5em;
border-bottom: 1px solid #ccd0d4;
}
/* Status Indicators */
.status-active,
.status-completed {
padding: 4px 8px;
border-radius: 4px;
font-size: 0.9em;
font-weight: normal;
}
.status-active {
background: #e5f5fa;
color: #0071a1;
}
.status-completed {
background: #dff0d8;
color: #3c763d;
}
.note-count {
color: #666;
font-size: 0.8em;
font-weight: normal;
}
/* Note Items */
.wp-notes-list table {
border-spacing: 0;
width: 100%;
margin-bottom: 2em;
border: 1px solid #ccd0d4;
box-shadow: 0 1px 2px rgba(0,0,0,0.05);
border-radius: 4px;
}
/* Table Hover Effects */
.wp-notes-list table.has-hover tr:hover td {
background-color: #f8f9fa;
}
/* Table Header */
.wp-notes-list th {
font-weight: 600;
text-align: left;
padding: 8px 10px;
}
/* Table Cells */
.wp-notes-list td {
padding: 12px 10px;
vertical-align: top;
}
/* Actions Column */
.wp-notes-list .column-actions {
text-align: right;
white-space: nowrap;
}
/* Edit Form */
.wp-notes-edit-form {
background: #f8f9fa;
padding: 15px;
border: 1px solid #e2e4e7;
border-radius: 4px;
margin-top: 10px;
}
/* Form Fields */
.wp-notes-formatting {
display: flex;
gap: 15px;
flex-wrap: wrap;
align-items: center;
margin: 10px 0;
padding: 12px;
background: #f8f9fa;
border-radius: 4px;
border: 1px solid #e2e4e7;
}
.wp-notes-formatting input[type="color"] {
padding: 0;
width: 40px;
height: 30px;
border: 1px solid #ddd;
}
.wp-notes-formatting input[type="number"] {
width: 70px;
}
.wp-notes-formatting select {
min-width: 120px;
}
.format-option {
display: flex;
align-items: center;
gap: 5px;
}
/* Emoji Picker */
.emoji-picker-container {
position: relative;
display: inline-block;
}
.emoji-picker-dropdown {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
background: white;
border: 1px solid #ccd0d4;
border-radius: 4px;
padding: 10px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.emoji-list {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 5px;
}
.emoji-option {
font-size: 20px;
padding: 5px;
cursor: pointer;
background: none;
border: none;
border-radius: 4px;
transition: background-color 0.2s;
}
.emoji-option:hover {
background-color: #f0f0f1;
}
/* Note Status Indicators */
.note-status {
display: inline-block;
padding: 2px 8px;
border-radius: 12px;
font-size: 12px;
line-height: 1.4;
}
.note-status-active {
background: #e5f5fa;
color: #0071a1;
}
.note-status-completed {
background: #dff0d8;
color: #3c763d;
}
/* v3.4.0 — Active/Completed tab strip on the My Log page.
WP-admin core already styles .subsubsub and .current;
we only need to add breathing room above + below. */
.wp-notes-page .subsubsub,
.wrap > .subsubsub {
margin: 12px 0 18px;
}
/* Responsive Design */
@media screen and (max-width: 782px) {
.wp-notes-formatting {
flex-direction: column;
align-items: flex-start;
}
.wp-notes-list td {
padding: 8px 10px;
}
.column-actions {
text-align: left;
}
}
</style>
<?php
}
add_action('admin_head', 'wp_notes_admin_styles');