From 5b5f37de365ff84fc231e414a719d1b2ff4ceff6 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 01 Jan 2026 22:38:58 +0000
Subject: [PATCH] =further feed block testing

---
 inc/helpers/ui.php |  125 ++++++++++++++++++++++++++++-------------
 1 files changed, 85 insertions(+), 40 deletions(-)

diff --git a/inc/helpers/ui.php b/inc/helpers/ui.php
index 7026729..bbd289a 100644
--- a/inc/helpers/ui.php
+++ b/inc/helpers/ui.php
@@ -1,5 +1,8 @@
 <?php
 
+use JVBase\utility\Features;
+use JVBase\utility\Image;
+
 if (!defined('ABSPATH')) {
 	exit;
 }
@@ -9,16 +12,17 @@
 
 function jvbClientQueue():void
 {
-    if (!jvbSiteHasDashboard() || !is_user_logged_in()) {
+    if (!Features::forSite()->has('dashboard') || !is_user_logged_in()) {
         return;
     }
+
     ?>
-    <aside id="queue" class="col start btw" aria-expanded="false" hidden>
+    <aside id="queue" class="left col start btw main" aria-expanded="false" hidden>
         <div class="status-actions row start nowrap">
 			<div class="refresh row btw">
                 <span class="countdown row" title="Will refresh again...">5</span>
                 <button class="refreshNow row" title="Check now">
-                    <?= jvbIcon('refresh', ['title'=> 'Check now']) ?>
+                    <?= jvbIcon('arrows-clockwise', ['title'=> 'Check now']) ?>
                 </button>
             </div>
             <div class="popup row"><span></span></div>
@@ -50,16 +54,16 @@
 				?>
 			</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>
-		<?= jvbIcon('save') ?>
+		<?= jvbIcon('floppy-disk') ?>
+		<span class="screen-reader-text"></span>
 		<span class="indicator"></span>
 		<span class="count row"></span>
 	</button>
@@ -106,8 +110,8 @@
         ob_start();
         ?>
         <li>
-            <a href="<?=get_home_url(2, '/dash/')?>" title="Behind the Scenes">
-                <?= jvbIcon('dashboard', ['title' => 'Behind the Scenes'])?>
+            <a href="<?=get_home_url(null, '/dash/')?>" title="Behind the Scenes">
+                <?= jvbIcon('door', ['title' => 'Behind the Scenes'])?>
                 <span class="screen-reader-text">Go Behind the Scenes</span>
             </a>
         </li>
@@ -119,7 +123,7 @@
                 </span>
             </button>
             <ul class="notifications-preview submenu">
-                <li id="view-all"><a href="<?=get_home_url(2, '/dash/notifications/')?>" class="view-all">View All Notifications</a></li>
+                <li id="view-all"><a href="<?=get_home_url(null, '/dash/notifications/')?>" class="view-all">View All Notifications</a></li>
             </ul>
             <template class="notificationItem">
                 <li class="notification-preview">
@@ -148,7 +152,11 @@
  */
 function jvbHelpMenu():string
 {
+	if (!Features::forSite()->has('helpMenu')) {
+		return '';
+	}
     $out = get_option(BASE.'help_menu');
+
     if ($out === false) {
         $open = '<li><a href="';
         $mid = '">';
@@ -168,14 +176,14 @@
                 'fields'    => 'ids'
             ));
             if ($page->have_posts()) {
-                $end = ($t == 'About') ? '<li><a href="'.get_home_url(2, '/directory/partners/').'" title="View our Partners">Partners</a></li>' : '';
+                $end = ($t == 'About') ? '<li><a href="'.get_home_url(null, '/directory/partners/').'" title="View our Partners">Partners</a></li>' : '';
                 $links .= $open.get_the_permalink($page->posts[0]).'" title="'.$t.$mid.$t.$close.$end;
             }
             wp_reset_postdata();
         }
 
         $out = '<li class="has-submenu">
-                <button class="toggle quick-help" type="button" title="Toggle Quick Help Menu" aria-expanded="false" aria-controls="quick-help" aria-label="Toggle Quick Help Menu">'.jvbIcon('help', ['title'=> 'Quick Help']).'</button>
+                <button class="toggle quick-help" type="button" title="Toggle Quick Help Menu" aria-expanded="false" aria-controls="quick-help" aria-label="Toggle Quick Help Menu">'.jvbIcon('question', ['title'=> 'Quick Help']).'</button>
                 <ul class="submenu">
                     '.$links.'
                 </ul>
@@ -185,9 +193,9 @@
     }
 
     if (is_user_logged_in()) {
-        $out .= '<li><a href="'.wp_logout_url(get_home_url()).'" title="Logout">'.jvbIcon('logout').'<span class="screen-reader-text">Logout</span></a></li>';
+        $out .= '<li><a href="'.wp_logout_url(get_home_url()).'" title="Logout">'.jvbIcon('sign-out').'<span class="screen-reader-text">Logout</span></a></li>';
     } else {
-        $out .= '<li><a href="'.wp_login_url(null, true).'" title="Login">'.jvbIcon('login').'<span class="screen-reader-text">Login</span></a></li>';
+        $out .= '<li><a href="'.wp_login_url(null, true).'" title="Login">'.jvbIcon('sign-in').'<span class="screen-reader-text">Login</span></a></li>';
     }
     return $out;
 }
@@ -208,7 +216,7 @@
     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('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>';
 }
 
@@ -217,8 +225,8 @@
 function jvbModalActions()
 {
     return '<div class="m-actions row">
-        <button type="button" class="cancel">'.jvbIcon('close').'<span class="screen-reader-text">Cancel</span></button>
-        <button type="submit" class="save">'.jvbIcon('save').'<span class="screen-reader-text">Save</span></button>
+        <button type="button" class="cancel">'.jvbIcon('x').'<span class="screen-reader-text">Cancel</span></button>
+        <button type="submit" class="save">'.jvbIcon('floppy-disk').'<span class="screen-reader-text">Save</span></button>
     </div>';
 }
 
@@ -240,19 +248,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>';
 }
 
 /**
@@ -260,8 +266,6 @@
  * @return void
  */
 add_action('wp_footer', 'jvbToastContainer');
-
-
 function jvbToastContainer():void
 {
     ?>
@@ -273,7 +277,7 @@
             <div class="toast-content row btw">
                 <p></p>
                 <button type="button" class="close-toast" aria-label="Close">
-                    <?= jvbIcon('close') ?>
+                    <?= jvbIcon('x') ?>
                 </button>
             </div>
         </div>
@@ -299,13 +303,13 @@
     <nav id="<?=$id?>" class="on-this-page index">
         <label>Jump to:
             <button type="button" aria-label="Show Index" title="Show Index" class="toggle" aria-expanded="false">
-                <?= jvbIcon('add') ?>
+                <?= jvbIcon('plus-square') ?>
             </button>
         </label>
         <ul>
             <li>
                 <a href="#top" title="Back to Top">
-                    <?= jvbIcon('up') ?>
+                    <?= jvbIcon('caret-circle-up') ?>
                 </a>
             </li>
             <?php
@@ -324,13 +328,15 @@
     return ob_get_clean();
 }
 
+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('tattoo')).'</div>
+				<div class="icon">'.jvbIcon($icon).'</div>
 				<h3>Loading</h3>
 				<p class="typeText">Please wait...</p>
 			</div>
@@ -364,7 +370,12 @@
 	$header = '<nav class="tabs row start" role="tablist">';
 	$content = '';
 	$i = 0;
+
 	foreach ($tabs as $slug => $config) {
+		if (!array_key_exists('content', $config) || empty($config['content'])) {
+			error_log('No content for tab: '.$slug);
+			continue;
+		}
 		//Header
 		$active = ($i === 0) ? ' active' : '';
 		$selected = ($i === 0) ? 'true' : 'false';
@@ -385,8 +396,18 @@
 		}
 		$content .= '>
 			<h2>'.$config['title'].'</h2>';
-			if ( $config['description']) {
-				$content .= apply_filters('the_content', $config['description']);
+			if ( array_key_exists('description', $config)) {
+				if (!is_array($config['description'])) {
+					$content .= apply_filters('the_content', $config['description']);
+				} else {
+//					foreach ($config['description'] as $desc) {
+//						$content .= apply_filters('the_content', $desc);
+//					}
+					$content .= implode('',array_map(function ($paragraph) {
+						return apply_filters('the_content', $paragraph);
+					}, $config['description']));
+				}
+
 			}
 
 		$content .= $config['content'].'
@@ -403,17 +424,41 @@
 	return $out;
 }
 
-function jvbRenderProgressBar(string $inside ='')
+function jvbRenderProgressBar(string $inside ='', $top = false)
 {
+	$top = $top ? ' abs top' : '';
 	?>
-	<div class="progress">
+	<div class="progress<?=$top?>">
 		<div class="bar">
 			<div class="fill"></div>
 		</div>
-		<div class="details row btw">
-			<?=$inside?>
+		<div class="row btw">
+			<i class="icon"></i>
+			<div class="details">
+				<?=$inside?>
+			</div>
 		</div>
 	</div>
 	<?php
 }
 
+function jvbFormStatus(string $message = '') {
+	return '<div class="restore-form col" hidden>
+			<h3>Looks like we left things hanging...</h3>
+			<p>We\'ve filled in the fields with what you put last time.</p>
+			<div class="actions">
+				<button type="button" data-action="clear-form">
+					'.jvbIcon('arrows-clockwise').'
+					<span>Start Over</span>
+				</button>
+				<button type="button" data-action="dismiss-restore">
+					'.jvbIcon('x').'
+					<span>Dismiss</span>
+				</button>
+			</div>
+		</div>
+		<div class="fstatus row" hidden>
+			<div class="spinner"></div>
+			<p class="message">'.$message.'</p>
+		</div>';
+}

--
Gitblit v1.10.0