element * @param string * @param string * @return string */ function script($source, $trailing = "\n") { return "$source$trailing"; } /** Return \n"; } /** Get a nonce="" attribute with CSP nonce * @return string */ function nonce() { return ' nonce="' . get_nonce() . '"'; } /** Get * @param string * @param string|int * @return string HTML */ function input_hidden($name, $value = "") { return "\n"; } /** Get * @param string token to use instead of global $token * @return string HTML */ function input_token($special = "") { global $token; return input_hidden("token", ($special ?: $token)); } /** Get a target="_blank" attribute * @return string */ function target_blank() { return ' target="_blank" rel="noreferrer noopener"'; } /** Escape for HTML * @param string * @return string */ function h($string) { return str_replace("\0", "�", htmlspecialchars($string, ENT_QUOTES, 'utf-8')); } /** Convert \n to
* @param string * @return string */ function nl_br($string) { return str_replace("\n", "
", $string); // nl2br() uses XHTML before PHP 5.3 } /** Generate HTML checkbox * @param string * @param string|int * @param bool * @param string * @param string * @param string * @param string * @return string */ function checkbox($name, $value, $checked, $label = "", $onclick = "", $class = "", $labelled_by = "") { $return = "" . ($onclick ? script("qsl('input').onclick = function () { $onclick };", "") : "") ; return ($label != "" || $class ? "$return" . h($label) . "" : $return); } /** Generate list of HTML options * @param string[]|string[][] array of strings or arrays (creates optgroup) * @param mixed * @param bool always use array keys for value="", otherwise only string keys are used * @return string */ function optionlist($options, $selected = null, $use_keys = false) { $return = ""; foreach ($options as $k => $v) { $opts = array($k => $v); if (is_array($v)) { $return .= ''; $opts = $v; } foreach ($opts as $key => $val) { $return .= '' . h($val) ; } if (is_array($v)) { $return .= ''; } } return $return; } /** Generate HTML " . optionlist($options, $value) . "" . ($onchange ? script("qsl('select').onchange = function () { $onchange };", "") : "") ; } /** Generate HTML radio list * @param string * @param string[] * @param string * @return string */ function html_radios($name, $options, $value = "") { $return = ""; foreach ($options as $key => $val) { $return .= ""; } return $return; } /** Get onclick confirmation * @param string * @param string * @return string */ function confirm($message = "", $selector = "qsl('input')") { return script("$selector.onclick = () => confirm('" . ($message ? js_escape($message) : lang('Are you sure?')) . "');", ""); } /** Print header for hidden fieldset (close by ) * @param string * @param string * @param bool * @return void */ function print_fieldset($id, $legend, $visible = false) { echo "
"; echo "$legend"; echo script("qsl('a').onclick = partial(toggle, 'fieldset-$id');", ""); echo ""; echo "