nur-sery/nur_src/v/js.php

113 lines
3.1 KiB
PHP
Raw Permalink Normal View History

2023-12-03 22:10:18 +04:00
<?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";
}
}