<?php
namespace nur\v;

use nur\A;

/**
 * Class html: des outils pour générer du HTML
 */
class html {
  /** quoter une valeur à mettre dans un attribut HTML */
  static function qa(?string $value): ?string {
    if ($value === null) return null;
    return htmlspecialchars($value);
  }

  /**
   * retourner un url modifié en lui rajoutant les paramètres spécifiés.
   *
   * les tableaux de $params sont applatis avant utilisation.
   */
  static function bu(string $url, ...$params): string {
    if (!$params) return $url;

    $parts = parse_url($url);
    if ($parts === false) {
      # url invalide... on laisse tomber
      return $url;
    }

    $url = "";
    $part = A::get($parts, "scheme", false);
    if ($part !== false) $url .= "$part:";
    $part = A::get($parts, "host", false);
    if ($part !== false) $url .= "//$part";
    $part = A::get($parts, "port", false);
    if ($part !== false) $url .= ":$part";
    $part = A::get($parts, "path", false);
    if ($part !== false) $url .= "$part";
    $part = A::get($parts, "query", "");
    A::flatten($params);
    $part2 = http_build_query($params);
    if ($part2) {
      if ($part != "") $part .= "&";
      $part .= $part2;
    }
    if ($part != "") $url .= "?$part";
    $part = A::get($parts, "fragment", false);
    if ($part !== false) $url .= "#$part";
    return $url;
  }

  /** retourner $value avec les espaces remplacés par &nbsp; */
  static function nbsp(?string $value): ?string {
    if ($value === null) return null;
    return preg_replace('/ +/', '&nbsp;', $value);
  }
}