nur-ture/TODO.md

3.8 KiB

TODO

  • bbnurse -cmk supprime la classe dans nur\sery après l'avoir copié dans la destination

Vrac

  • classe de base profile_manager qui permet de gérer des profils

  • class Tool permettant d'appliquer un traitement à une valeur scalaire

    • ArrayTool permet d'appliquer les traitement à tous les éléments du tableau
    • les traitements sont une suite d'opérations à faire, ou de filtres à appliquer, qui ne sont appliqués que lors du parcours effectif de la liste
    • exemple
      $result = ArrayTool::with($source)
        ->filterKey("key")
        ->filter("value")
        ->add("value", "key")
        ->addAll($iterable)
        ->all();
      
      déterminer le genre de traitements que l'on peut offrir
  • syntaxe pour CTable: définition des en-têtes et des valeurs des colonnes dans la même expression

    new CTable($rows, [
      "contents" => [
        ## champ
        ["Nom", "nom"],
        ["Prénom", "prenom"],
        ## fonction
        ["Age", function(Cursor $cursor) {
          return (new Date())->diff($cursor->row["date_naissance"]);
        }],
        ## Pas de contenu
        ["Vide", null],
        ## Contenu dynamique
        ["Contenu", [
          "before",
          v::span("hello"),
          Cursor::dyn("name"),
          "after",
          Cursor::dyn(function(Cursor $cursor) {
            return $cursor["surname"];
          }),
        ]],
        ## colspan
        ["First",
          function() { return "sur deux colonnes"; },
      "colspan" => 2,
        ],
        ["Second", null],
        ## colspan dynamique
        # la valeur de Element n'est évaluée que si colspan==null
        ["Groupe", function(Cursor $row) {
          $break = $breaker->shouldBreakOn($row["code_groupe"]));
          if ($break) {
            $row->set("colspan", 2);
            return "{$row["code_groupe"]} {$row["libelle_groupe"]}";
          } else {
            $row->set("colspan", null);
            return null;
          }
        }, "colspan" => function(Cursor $row) {
          return $row->get("colspan");
        }],
        ["Element", function(Cursor $row) {
          return $row["libelle_element"];
        }]
      ],
    ]);
    

    bien entendu, bien que ce ne soit pas démontré ici, le premier argument (l'en-tête) est un contenu, pas seulement une chaine

    chaque élément de contenu défini header, body et footer

    $element = ["header" => [], "body" => [], "footer" => []];
    

    colspan peut être utilisé dans header, body ou footer. si spécifié dans $element, colspan s'applique à body

    # les deux suivants sont équivalents
    $element = ["myheader", "mybody", "colspan" => 2, "myfooter"];
    $element = [
      "header" => [
        "content" => "myheader",
      ],
      "body" => [
        "content" => "mybody",
        "colspan" => 2,
      ],
      "footer" => [
        "content" => "myfooter",
      ],
    ];
    

    si $element est une fonction, il retourne la valeur de l'élement

    $element = function() {
      return ["header", "body"];
    }
    

    clé "enabled" permet d'activer dynamiquement un élément

    $element = function() {
      return ["header", "body", "enabled" => $includeElement];
    }
    

    clé "func" pour spécifier la fonction dans un contexte statique

    $element = ["func" => [My::class, "get_element"]];
    

    func n'est considéré que si $element était un tableau à la base s'il y a d'autres clés, elles sont fusionnées avec le résultat de $func() (dont les clés sont prioritaires)

  • Cursor::dyn permet d'insérer une valeur qui sera évaluée plus tard lors de la résolution du contenu

  • pour Cursor, CTable, etc., un paramètre "params_func" permet de générer une partie des paramètres de façon dynamique. c'est juste du sucre, c'est strictement équivalent à construire le tableau des paramètres avant d'instancier l'objet.

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