xref: /webtrees/app/Html.php (revision 6c1eebec4aa5bd884cd4af58f83736c7af4d7509)
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 */
16namespace Fisharebest\Webtrees;
17
18/**
19 * Class Html - Add HTML markup to elements consistently.
20 */
21class Html
22{
23    /**
24     * Convert an array of HTML attributes to an HTML string.
25     *
26     * @param mixed[] $attributes
27     *
28     * @return string
29     */
30    public static function attributes(array $attributes): string
31    {
32        $html = [];
33        foreach ($attributes as $key => $value) {
34            if (is_string($value)) {
35                $html[] = e($key) . '="' . e($value) . '"';
36            } elseif (is_int($value)) {
37                $html[] = e($key) . '="' . (string) $value . '"';
38            } elseif ($value !== false) {
39                $html[] = e($key);
40            }
41        }
42
43        return implode(' ', $html);
44    }
45
46    /**
47     * Encode a URL.
48     *
49     * @param string $path
50     * @param array  $data
51     *
52     * @return string
53     */
54    public static function url($path, array $data): string
55    {
56        $path = strtr($path, ' ', '%20');
57
58        return $path . '?' . http_build_query($data, '', '&', PHP_QUERY_RFC3986);
59    }
60
61    /**
62     * Filenames are (almost?) always LTR, even on RTL systems.
63     *
64     * @param string $filename
65     *
66     * @return string
67     */
68    public static function filename($filename): string
69    {
70        return '<samp class="filename" dir="ltr">' . e($filename) . '</samp>';
71    }
72}
73