J'écris un programme Elm qui devrait formater sa sortie dans une liste HTML. La fonction que je veux prend,
inputs = ["first", "second", "third"]
et produit une sorte de Elm Element
qui est essentiellement,
<ul>
<li>first</li>
<li>second</li>
<li>third</li>
</ul>
Malheureusement, je ne trouve aucune fonction intégrée pour le faire. Peut-être que la syntaxe markdown
pourrait être étendue pour prendre des modèles de type Moustache,
[markdown|
{{#inputs}}
* {{text}}
{{/inputs}}
]
(désolé, je ne suis pas sûr de la syntaxe correcte de Moustache pour un tableau de chaînes, au lieu d'un tableau d'objets).
L'élément HTML brut émettant serait également Nice. Merci d'avance!
Voulez-vous rendre dans un élément (c'est-à-dire une toile) ou vraiment en HTML? Dans ce dernier cas, vous pouvez utiliser Elm-lang/html
et
renderList lst =
ul []
(List.map (\l -> li [] [ text l ]) lst)
ou en style de tuyauterie
renderList lst =
lst
|> List.map (\l -> li [] [ text l ])
|> ul []
Lorsque vous commencez à écrire une fonction, il est utile de définir sa signature _. La signature est écrite sur la ligne précédant la définition de la fonction. La signature que vous voulez, c'est:
toHtmlList : List String -> Html msg -- here's the signature
toHtmlList strings = -- here's the start of the function body
???
La sortie de cette fonction a le type Html msg
, fourni par le package Elm-html . Vous ajoutez ceci à votre projet en exécutant la commande $ Elm-package install Elm-lang/html
à partir de la racine de votre projet.
Une fois cela installé, ajoutez une instruction pour importer Html
dans votre fichier Elm et implémentez la fonction. Voici une implémentation qui fonctionne:
StringList.Elm
import Html exposing (..)
inputs = ["first", "second", "third"]
toHtmlList : List String -> Html msg
toHtmlList strings =
ul [] (List.map toLi strings)
toLi : String -> Html msg
toLi s =
li [] [ text s ]
Fait intéressant, je ne pense pas que Elm ait un Element
intégré pour les listes. Je ne suis pas sûr que ce soit intentionnel parce que vous pouvez créer votre propre fichier *, ou si c'est juste que personne n'a jamais eu besoin d'une liste non statique de choses auparavant. (Les listes HTML sont utilisées sur le site Web Elm-lang.org , mais ce sont des listes statiques que je pense sont définies dans MarkDown)
L'interpolation de démarquage avec la syntaxe moustache était implémenté mais je ne suis pas sûr de son statut. Et en tout cas, ce n'était pas aussi puissant que ce que vous décrivez.
L'émission de code HTML brut ne fait pas partie de la philosophie de l'API Graphics
d'Elm. L'idée est que la manière actuelle d'écrire des sites Web et des applications Web avec HTML/CSS/JavaScript est un véritable gâchis, même avec toutes les bibliothèques construites dessus. Elms a donc pour habitude de placer une couche d’abstraction afin que vous puissiez simplement parler de Element
name__s rectangulaire qui s’empilent naturellement horizontalement et verticalement (avec flow
name __ *), et de forme libre Form
nom____ qui peut être placé dans un collage
(qui est de nouveau un rectangle Element
name__).
* (Voir la réponse de Daniël pour un avec des balles, celui-ci est juste les os nus):
inputs = ["first", "second", "third"]
main = flow down <| map plainText inputs
Vous pouvez écrire une liste de puces dans Elm en utilisant un collage:
bullet : Element
bullet = collage 12 20 [circle 3 |> filled black]
render : [String] -> Element
render = flow down . map (beside bullet . plainText)
main : Element
main = render ["first", "second", "third"]
Exemple en direct: http://share-Elm.com/sprout/538e460fe4b07afa6f981ab6