WebOrbiton
v1.0.0.0

StocketBase

70 lines · 1.9 KB
  1. <?php
  2. ​
  3. declare(strict_types=1);
  4. ​
  5. final class Icons
  6. {
  7. private static ?string $spriteMarkup = null;
  8. ​
  9. public static function sprite(): string
  10. {
  11. if (self::$spriteMarkup !== null) {
  12. return self::$spriteMarkup;
  13. }
  14. ​
  15. $path = __DIR__ . '/../assets/icons.svg';
  16. self::$spriteMarkup = is_file($path) ? (string) file_get_contents($path) : '';
  17. ​
  18. return self::$spriteMarkup;
  19. }
  20. ​
  21. public static function icon(string $name, string $class = 'icon'): string
  22. {
  23. $safeName = preg_replace('/[^a-z0-9-]/', '', $name);
  24. $safeClass = htmlspecialchars($class, ENT_QUOTES);
  25. ​
  26. return '<svg class="' . $safeClass . '" aria-hidden="true"><use href="#icon-' . $safeName . '"></use></svg>';
  27. }
  28. ​
  29. public static function navIconKeys(): array
  30. {
  31. return [
  32. 'home' => 'Home',
  33. 'star' => 'Star',
  34. 'bell' => 'Bell',
  35. 'mail' => 'Mail',
  36. 'phone' => 'Phone',
  37. 'globe' => 'Globe',
  38. 'bookmark' => 'Bookmark',
  39. 'info' => 'Info',
  40. 'help' => 'Help',
  41. 'grid' => 'Grid',
  42. 'search' => 'Search',
  43. 'user' => 'User',
  44. 'flag' => 'Flag',
  45. 'hash' => 'Hash / tag',
  46. 'external' => 'External link',
  47. 'list' => 'List',
  48. 'image' => 'Image',
  49. 'video' => 'Video',
  50. 'calendar' => 'Calendar',
  51. 'clock' => 'Clock',
  52. 'map-pin' => 'Map pin',
  53. 'briefcase' => 'Briefcase',
  54. 'camera' => 'Camera',
  55. 'gift' => 'Gift',
  56. 'heart' => 'Heart',
  57. 'message' => 'Message',
  58. 'megaphone' => 'Megaphone',
  59. 'shield' => 'Shield',
  60. 'cart' => 'Cart',
  61. 'rss' => 'RSS',
  62. ];
  63. }
  64. ​
  65. public static function isNavIcon(string $key): bool
  66. {
  67. return array_key_exists($key, self::navIconKeys());
  68. }
  69. }
  70. ​