<?php namespace nur\v; use nur\A; /** * Class js: des outils pour générer des valeurs pour javascript */ class js { /** Quoter une partie de valeur chaine pour javascript. */ static function q($value): string { $value = strval($value); $value = preg_replace("/\"/", "\\\\\"", $value); $value = preg_replace("/\n/", "\\\\n", $value); return $value; } /** * Quoter une valeur chaine pour javascript avec des double-quotes. * * @param bool $qa la valeur doit-elle être utilisée dans un attribut HTML? */ static function qv($value, bool $qa=false): string { $value = strval($value); $value = preg_replace("/\"/", "\\\\\"", $value); $value = preg_replace("/\n/", "\\\\n", $value); $value = "\"$value\""; if ($qa) $value = htmlspecialchars($value); return $value; } /** méthode de convenance pour quoter un id "#id" */ static function qid(string $id): string { return self::qv("#$id"); } /** méthode de convenance pour quoter une classe ".class" */ static function qclass(string $class): string { return self::qv(".$class"); } /** * Quoter une valeur scalaire ou tableau pour javascript avec des double-quotes. * * @param bool $qa la valeur doit-elle être utilisée dans un attribut HTML? */ static function qvs($values, bool $qa=false): string { if (A::is_array($values)) { $values = A::with($values); $jvalues = []; foreach($values as $value) { $jvalues[] = self::qv($value, $qa); } return "[".implode(", ", $jvalues)."]"; } else { return self::qv($values, $qa); } } /** * Quoter une valeur chaine pour javascript avec des quotes simples "'". * * @param bool $qa la valeur doit-elle être utilisée dans un attribut HTML? */ static function sqv($value, bool $qa=false): string { $value = strval($value); $value = preg_replace("/\"/", "\\\\\"", $value); $value = preg_replace("/\n/", "\\\\n", $value); $value = "'$value'"; if ($qa) $value = htmlspecialchars($value); return $value; } /** * Quoter une valeur scalaire ou tableau pour javascript avec des quotes simples "'". * * @param bool $qa la valeur doit-elle être utilisée dans un attribut HTML? */ static function sqvs($values, bool $qa=false): string { if (A::is_array($values)) { $values = A::with($values); $jvalues = []; foreach($values as $value) { $jvalues[] = self::sqv($value, $qa); } return "[".implode(", ", $jvalues)."]"; } else { return self::sqv($values, $qa); } } /** sérialiser une valeur objet */ static function qo($values): string { $parts = []; if ($values !== null) { $first = true; foreach ($values as $key => $value) { if ($first) $first = false; else $parts[] = ","; $parts[] = self::qv($key); $parts[] = ":"; $parts[] = json_encode($value, JSON_THROW_ON_ERROR); } } return "{".implode("", $parts)."}"; } /** sérialiser une valeur booléenne */ static function qb($value): string { return $value? "true": "false"; } }