xref: /webtrees/app/Html.php (revision 362be83a34a1d0ba0292c4387f55a3b0ea10cb2f)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2018 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16declare(strict_types=1);
17
18namespace Fisharebest\Webtrees;
19
20/**
21 * Class Html - Add HTML markup to elements consistently.
22 */
23class Html
24{
25    /**
26     * Convert an array of HTML attributes to an HTML string.
27     *
28     * @param mixed[] $attributes
29     *
30     * @return string
31     */
32    public static function attributes(array $attributes): string
33    {
34        $html = [];
35        foreach ($attributes as $key => $value) {
36            if (is_string($value)) {
37                $html[] = e($key) . '="' . e($value) . '"';
38            } elseif (is_int($value)) {
39                $html[] = e($key) . '="' . (string) $value . '"';
40            } elseif ($value !== false) {
41                $html[] = e($key);
42            }
43        }
44
45        return implode(' ', $html);
46    }
47
48    /**
49     * Encode a URL.
50     *
51     * @param string $path
52     * @param array  $data
53     *
54     * @return string
55     */
56    public static function url($path, array $data): string
57    {
58        $path = strtr($path, ' ', '%20');
59
60        return $path . '?' . http_build_query($data, '', '&', PHP_QUERY_RFC3986);
61    }
62
63    /**
64     * Filenames are (almost?) always LTR, even on RTL systems.
65     *
66     * @param string $filename
67     *
68     * @return string
69     */
70    public static function filename($filename): string
71    {
72        return '<samp class="filename" dir="ltr">' . e($filename) . '</samp>';
73    }
74}
75