nur-sery/wip/web/content
Jephté Clain c63ec4e294 modifs.mineures sans commentaires 2024-08-17 15:58:21 +04:00
..
README.md modifs.mineures sans commentaires 2024-08-17 15:58:21 +04:00
Tag.php modifs.mineures sans commentaires 2024-08-17 15:58:21 +04:00
v.php modifs.mineures sans commentaires 2024-08-17 15:58:21 +04:00

README.md

nulib\web\content

un contenu de tag (ou "contag") est un type spécial de contenu permettant de gérer aussi les attributs du tag avec une syntaxe particulière.

les règles diffèrent légèrement d'un contenu classique:

  • Si le contenu n'est pas un tableau:
    • une chaine est quotée avec htmlspecialchars()
    • un scalaire ou une instance d'objet sont pris tels quels
  • Sinon, le contenu doit être un tableau, séquentiel ou associatif
    • les Closure sont appelés dès la résolution, et leur valeur de retour est inséré tel quel dans le flux
    • les éléments séquentiels scalaires ou instance d'objets sont pris tels quels
    • les éléments associatifs sont des attributs, et sont fusionnés le cas échéant
    • les éléments séquentiels de type tableau sont évalues récursivement avec les mêmes règles (sauf la partie chaine quotée avec htmlspecialchars())
    • il n'y a pas de syntaxe pour les éléments dynamiques comme les contenus classiques

Par exemple, les deux contenus web suivants sont équivalents:

# ce contenu:
$content1 = [
  "before",
  "class" => "first",
  ["class" => "second"],
  function() { return func($arg); },
  "attr" => [
    "static",
    "true" => true,
    "false" => false,
  ],
  "after",
];
# donne le même résultat que:
$content2 = [
  "class" => "first second",
  "attr" => "static true",
  "before",
  ...cl::with(func("arg")),
  "after",
];

lors de la définition d'attributs,

  • les valeurs séquentielles sont prises telles quelles
  • les valeurs associatives permettent de faire des définitions conditionnelles
  • les Closure sont appelés dès la résolution, et leur valeur de retour est inséré tel quel dans le flux

Par exemple, les deux contenus web suivants sont équivalents:

# ce contenu:
$content1 = [
  "class" => function() { return func($arg); },
];
# donne le même résultat que:
$content2 = [
  "class" => func($arg),
];

De même, les deux contenus web suivants sont équivalents:

# si $is_primary && !$is_danger
# alors ce contenu:
$content1 = [
  "class" => [
    "btn",
    "btn-primary" => $is_primary,
    "btn-danger" => $is_danger,
    "btn-default" => !$is_primary && !$is_danger,
  ],
];
# donne le même résultat que:
$content2 = [
  "class" => "btn btn-primary",
];

-- coding: utf-8 mode: markdown -- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary