Elm:
Escrevendo um arquivo de texto
How to:
Elm é uma linguagem para criar aplicativos web e, por si só, não tem capacidade para escrever arquivos diretamente devido a restrições do navegador. No entanto, podemos gerar arquivos pra download. Veja como criar um arquivo de texto e disponibilizar pra download:
module Main exposing (..)
import Browser
import Html exposing (Html, button, div, text)
import Html.Attributes exposing (href, download)
import Html.Events exposing (onClick)
import Json.Encode exposing (string)
main =
Browser.sandbox { init = init, update = update, view = view }
type alias Model =
{ content : String
, uri : String
}
init : Model
init =
{ content = "Texto de exemplo pra salvar no arquivo."
, uri = ""
}
type Msg
= GenerateFile
update : Msg -> Model -> Model
update msg model =
case msg of
GenerateFile ->
let
encoded = string model.content
uri = "data:text/plain;charset=utf-8," ++ encoded
in
{ model | uri = uri }
view : Model -> Html Msg
view model =
div []
[ button [ onClick GenerateFile ] [ text "Gerar arquivo de texto" ]
, if model.uri == "" then
text ""
else
a [ href model.uri, download "arquivo.txt" ] [ text "Baixar arquivo" ]
]
Após clicar no botão “Gerar arquivo de texto”, um link de download é criado, permitindo que o usuário baixe o arquivo “arquivo.txt” com o conteúdo especificado.
Deep Dive
Historicamente, Elm foca na criação de aplicativos seguros do lado do cliente, onde as operações de sistema de arquivos são limitadas por questões de segurança. Alternativas para trabalhar com arquivos envolvem o uso de Elm com JavaScript através de Ports, que pode ser usado para lidar com funcionalidades do sistema de arquivos do lado do servidor em Node.js, por exemplo. Detalhes de implementação levam em conta a codificação de URI e manipulação de dados para simular o processo de escrita de arquivo num ambiente de navegador.