Jake Vanderwerf
2026-01-07 bad59c66549eb601fed963ed013f9b79305ca003
inc/helpers/ui.php
@@ -17,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" hidden>
        <div class="status-actions row start nowrap">
         <div class="refresh row btw">
                <span class="countdown row" title="Will refresh again...">5</span>
@@ -54,9 +54,9 @@
            ?>
         </nav>
      </div>
      <div class="qitems col a-start">
      <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>
@@ -152,6 +152,9 @@
 */
function jvbHelpMenu():string
{
   if (!Features::forSite()->has('helpMenu')) {
      return '';
   }
    $out = get_option(BASE.'help_menu');
    if ($out === false) {
@@ -202,19 +205,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')
   );
}
@@ -251,6 +261,13 @@
    return $image->formatImage($imgID, $start, $end, $addLink, $postSlug);
}
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>';
}
/**
 * Outputs the notification container in the footer
 * @return void
@@ -386,7 +403,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 {
@@ -422,8 +439,11 @@
      <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