From 474109a5df0a06f5343ab184838fe2d80e3872a8 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 11 Jan 2026 19:23:20 +0000
Subject: [PATCH] =Fixed timeline CRUD.js issue where this.activeItem was set null when we still needed it
---
inc/helpers/ui.php | 97 ++++++++++++++++++++++++++++--------------------
1 files changed, 57 insertions(+), 40 deletions(-)
diff --git a/inc/helpers/ui.php b/inc/helpers/ui.php
index 85f276d..5b0a616 100644
--- a/inc/helpers/ui.php
+++ b/inc/helpers/ui.php
@@ -1,6 +1,7 @@
<?php
use JVBase\utility\Features;
+use JVBase\utility\Image;
if (!defined('ABSPATH')) {
exit;
@@ -16,7 +17,7 @@
}
?>
- <aside id="queue" class="left col start btw" aria-expanded="false" hidden>
+ <aside id="queue" class="left col start btw main" aria-expanded="false" >
<div class="status-actions row start nowrap">
<div class="refresh row btw">
<span class="countdown row" title="Will refresh again...">5</span>
@@ -45,7 +46,8 @@
foreach($filters as $filter => $title) {
$active = ($i === 0) ? ' active': '';
?>
- <button class="filter<?=$active?>" data-filter="<?=$filter?>" data-count="0"><span class="count row"></span><?=$title?></button>
+ <input type="radio" id="qfilter-<?=$filter?>" name="qfilter" class="btn filter<?=$active?>" data-filter="<?=$filter?>">
+ <label for="qfilter-<?=$filter?>" data-count="0"><span class="count row"></span><?=$title?></label>
<?php
$i++;
}
@@ -53,15 +55,14 @@
?>
</nav>
</div>
- <div class="qitems col">
- <!-- Operations will be listed here -->
+ <div class="qitems col a-start nowrap">
</div>
- <div class="queue-actions row btw">
+ <div class="queue-actions row btw nowrap">
<button class="dismiss-all">Clear Completed</button>
<button class="retry-all">Retry Failed</button>
</div>
</aside>
- <button class="qtoggle row" title="Show Queue" aria-controls="queue" hidden>
+ <button class="qtoggle row" title="Show Queue" aria-controls="queue" >
<?= jvbIcon('floppy-disk') ?>
<span class="screen-reader-text"></span>
<span class="indicator"></span>
@@ -71,18 +72,22 @@
<div class="item">
<div class="header row btw">
<span class="type"></span>
- <span class="status row"><span class="screen-reader-text"></span></span>
+ <span class="status row"><?= jvbIcon('arrows-clockwise') ?><span class="screen-reader-text"></span></span>
</div>
- <?php jvbRenderProgressBar() ?>
+ <?php jvbRenderProgressBar('',false,false) ?>
<div class="info">
<div class="details"></div>
<div class="time row start">
<?= jvbIcon('clock') ?>
- <span class="started">Started: <span class="time"></span>
- <span class="completed"></span>
+ <span class="started">Started: <time></time></span>
+ <span class="completed" hidden><span>Completed: </span><time></time></span>
</div>
</div>
<div class="actions row end">
+ <button class="retry" data-action="retry"><span>Retry</span><?= jvbIcon('arrows-clockwise')?></button>
+ <button class="cancel" data-action="cancel"><span>Cancel</span><?= jvbIcon('x-square')?></button>
+ <button class="dismiss" data-action="dismiss"><span>Dismiss</span><?= jvbIcon('eye-closed')?></button>
+
</div>
</div>
</template>
@@ -152,6 +157,9 @@
*/
function jvbHelpMenu():string
{
+ if (!Features::forSite()->has('helpMenu')) {
+ return '';
+ }
$out = get_option(BASE.'help_menu');
if ($out === false) {
@@ -202,19 +210,26 @@
* Outputs the search bar (likely don't need anymore)
* @return string
*/
-function jvbSearch(string $placeholder = 'Search...'):string
+function jvbSearch(string $placeholder = 'Search...', string $id = 'search'):string
{
- return '<div class="search-container row start nowrap">
- <input type="search" id="search" placeholder="'.$placeholder.'">
- <button
- title="Clear Search"
- type="button"
- class="clear-search"
- aria-label="Clear search"
- onclick="this.previousElementSibling.value = \'\'; this.previousElementSibling.focus();"
- >'.jvbIcon('x', ['title'=> 'Clear Search']).'</button>
- <button type="button" title="Search" class="toggle search" aria-label="Toggles search input visually" onclick="this.parentNode.classList.toggle(\'open\');this.previousElementSibling.previousElementSibling.focus();">'.jvbIcon('magnifying-glass').'</button>
-</div>';
+ $id = sanitize_title($id);
+ return sprintf(
+ '<div class="search-container row start nowrap">
+ <input type="search" id="%s" placeholder="%s">
+ <button
+ title="Clear Search"
+ type="button"
+ class="clear-search"
+ aria-label="Clear search"
+ onclick="this.previousElementSibling.value = \'\'; this.previousElementSibling.focus();"
+ >%s</button>
+ <button type="button" title="Search" class="toggle search" aria-label="Toggles search input visually" onclick="this.parentNode.classList.toggle(\'open\');this.previousElementSibling.previousElementSibling.focus();">%s</button>
+ </div>',
+ $id,
+ $placeholder,
+ jvbIcon('x', ['title'=> 'Clear Search']),
+ jvbIcon('magnifying-glass')
+ );
}
@@ -245,19 +260,17 @@
*
* @return string
*/
-function jvbFormatImage(int|string $imgID, string $start = 'tiny', string $end = 'large'):string
+function jvbFormatImage(int $imgID, string $start = 'tiny', string $end = 'large', bool $addLink = true, ?string $postSlug = null):string
{
- $block = new \JVBase\blocks\CustomBlocks();
- if ($imgID === '' || $imgID === 0) {
- $imgID = $block->imageID($imgID);
- }
- if ($imgID === '' || $imgID === 0 || $imgID === false) {
- return '';
- }
+ $image = new Image();
+ return $image->formatImage($imgID, $start, $end, $addLink, $postSlug);
+}
- $imgID = (int)$imgID;
-
- return $block->formatImage($imgID, $start, $end);
+function jvbImageCaption(int $imgID, string $start = 'tiny', string $end = 'large', bool $addLink = true, ?string $postSlug = null):string
+{
+ $caption = wp_get_attachment_caption($imgID);
+ $caption = ($caption && $caption !== '') ? '<figcaption>'.apply_filters('the_content', $caption).'</figcaption>' : '';
+ return '<figure>'.jvbFormatImage($imgID, $start, $end, $addLink, $postSlug).$caption.'</figure>';
}
/**
@@ -265,8 +278,6 @@
* @return void
*/
add_action('wp_footer', 'jvbToastContainer');
-
-
function jvbToastContainer():void
{
?>
@@ -332,11 +343,12 @@
add_action('wp_footer', 'jvbLoadingScreen');
function jvbLoadingScreen():string
{
+ $icon = apply_filters('jvbLoadingIcon', 'drop-simple');
return '<dialog class="loading">
<div class="col">
<div class="spinner"></div>
<div class="status col">
- <div class="icon">'.apply_filters('jvbLoadingIcon', jvbIcon('drop-simple')).'</div>
+ <div class="icon">'.jvbIcon($icon).'</div>
<h3>Loading</h3>
<p class="typeText">Please wait...</p>
</div>
@@ -396,7 +408,7 @@
}
$content .= '>
<h2>'.$config['title'].'</h2>';
- if ( $config['description']) {
+ if ( array_key_exists('description', $config)) {
if (!is_array($config['description'])) {
$content .= apply_filters('the_content', $config['description']);
} else {
@@ -424,7 +436,7 @@
return $out;
}
-function jvbRenderProgressBar(string $inside ='', $top = false)
+function jvbRenderProgressBar(string $inside ='', $top = false, $icon = true)
{
$top = $top ? ' abs top' : '';
?>
@@ -432,8 +444,13 @@
<div class="bar">
<div class="fill"></div>
</div>
- <div class="details row btw">
- <?=$inside?>
+ <div class="row btw">
+ <?php if ($icon) { ?>
+ <i class="icon"></i>
+ <?php } ?>
+ <div class="details">
+ <?=$inside?>
+ </div>
</div>
</div>
<?php
--
Gitblit v1.10.0