parent
c3c1514160
commit
b657985cb4
@ -0,0 +1,246 @@ |
|||||||
|
module GenerateurJson exposing (..) |
||||||
|
|
||||||
|
import Browser exposing (Document) |
||||||
|
import Element exposing (..) |
||||||
|
import Element.Background as Background |
||||||
|
import Element.Border as Border |
||||||
|
import Element.Events exposing (..) |
||||||
|
import Element.Font as Font |
||||||
|
import Element.Input as Input |
||||||
|
import ElmCodeGenerator |
||||||
|
import File.Download |
||||||
|
import Html exposing (Attribute, Html, button, div, iframe, input, p, section, textarea) |
||||||
|
import Json.Decode |
||||||
|
import Json.Encode |
||||||
|
import List as L |
||||||
|
import Set |
||||||
|
import String as S |
||||||
|
import Style exposing (..) |
||||||
|
|
||||||
|
|
||||||
|
titre = |
||||||
|
"Générateur Json" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{- |
||||||
|
███ ███ ██████ ██████ ███████ ██ |
||||||
|
████ ████ ██ ██ ██ ██ ██ ██ |
||||||
|
██ ████ ██ ██ ██ ██ ██ █████ ██ |
||||||
|
██ ██ ██ ██ ██ ██ ██ ██ ██ |
||||||
|
██ ██ ██████ ██████ ███████ ███████ |
||||||
|
-} |
||||||
|
|
||||||
|
|
||||||
|
type alias Model = |
||||||
|
{ nomObjet : String |
||||||
|
, sourceJson : String |
||||||
|
, codeElmGenere : String |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
init : Model |
||||||
|
init = |
||||||
|
{ nomObjet = "" |
||||||
|
, sourceJson = "" |
||||||
|
, codeElmGenere = "" |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{- |
||||||
|
██ ██ ██████ ██████ █████ ████████ ███████ |
||||||
|
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ |
||||||
|
██ ██ ██████ ██ ██ ███████ ██ █████ |
||||||
|
██ ██ ██ ██ ██ ██ ██ ██ ██ |
||||||
|
██████ ██ ██████ ██ ██ ██ ███████ |
||||||
|
-} |
||||||
|
|
||||||
|
|
||||||
|
type Msg |
||||||
|
= NomObjet String |
||||||
|
| SourceJson String |
||||||
|
| GenererCodeElm |
||||||
|
| TelechargerCodeElm |
||||||
|
|
||||||
|
|
||||||
|
update : Msg -> Model -> ( Model, Cmd Msg ) |
||||||
|
update msg model = |
||||||
|
case msg of |
||||||
|
NomObjet nom -> |
||||||
|
( { model |
||||||
|
| nomObjet = nom |
||||||
|
, codeElmGenere = generateur model.nomObjet model.sourceJson |
||||||
|
} |
||||||
|
, Cmd.none |
||||||
|
) |
||||||
|
|
||||||
|
SourceJson source -> |
||||||
|
( { model |
||||||
|
| sourceJson = source |
||||||
|
, codeElmGenere = generateur model.nomObjet model.sourceJson |
||||||
|
} |
||||||
|
, Cmd.none |
||||||
|
) |
||||||
|
|
||||||
|
GenererCodeElm -> |
||||||
|
( { model | codeElmGenere = generateur model.nomObjet model.sourceJson } |
||||||
|
, Cmd.none |
||||||
|
) |
||||||
|
|
||||||
|
TelechargerCodeElm -> |
||||||
|
( model |
||||||
|
, File.Download.string (model.nomObjet ++ ".elm") "text/elm" model.codeElmGenere |
||||||
|
) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- SUBSCRIPTIONS |
||||||
|
|
||||||
|
|
||||||
|
subscriptions : Model -> Sub Msg |
||||||
|
subscriptions model = |
||||||
|
Sub.none |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{- |
||||||
|
|
||||||
|
██ ██ ██ ███████ ██ ██ |
||||||
|
██ ██ ██ ██ ██ ██ |
||||||
|
██ ██ ██ █████ ██ █ ██ |
||||||
|
██ ██ ██ ██ ██ ███ ██ |
||||||
|
████ ██ ███████ ███ ███ |
||||||
|
-} |
||||||
|
|
||||||
|
|
||||||
|
view : Model -> Element Msg |
||||||
|
view model = |
||||||
|
row |
||||||
|
[ spacing grandEspacement |
||||||
|
, padding tresGrandEspacement |
||||||
|
, height fill |
||||||
|
, width fill |
||||||
|
, scrollbars |
||||||
|
] |
||||||
|
[ column [ spacing petitEspacement, height fill, width fill, scrollbars ] |
||||||
|
[ Input.multiline |
||||||
|
[ height fill |
||||||
|
, width fill |
||||||
|
, clip |
||||||
|
, scrollbars |
||||||
|
, Background.color <| couleurUI <| couleurArrierePlan |
||||||
|
, Border.rounded 8 |
||||||
|
, Border.innerShadow |
||||||
|
{ blur = 10 |
||||||
|
, color = rgb255 10 10 10 |
||||||
|
, offset = ( 0.3, 0.4 ) |
||||||
|
, size = 2 |
||||||
|
} |
||||||
|
] |
||||||
|
{ onChange = NomObjet |
||||||
|
, label = Input.labelHidden "truc" |
||||||
|
, placeholder = |
||||||
|
Just <| |
||||||
|
Input.placeholder [] <| |
||||||
|
text "NomDeLobjet" |
||||||
|
, text = model.nomObjet |
||||||
|
, spellcheck = False |
||||||
|
} |
||||||
|
, Input.multiline |
||||||
|
[ height fill |
||||||
|
, width fill |
||||||
|
, clip |
||||||
|
, scrollbars |
||||||
|
, Background.color <| couleurUI <| couleurArrierePlan |
||||||
|
, Border.rounded 8 |
||||||
|
, Border.innerShadow |
||||||
|
{ blur = 10 |
||||||
|
, color = rgb255 10 10 10 |
||||||
|
, offset = ( 0.3, 0.4 ) |
||||||
|
, size = 2 |
||||||
|
} |
||||||
|
] |
||||||
|
{ onChange = SourceJson |
||||||
|
, label = Input.labelHidden "chose" |
||||||
|
, placeholder = |
||||||
|
Just <| |
||||||
|
Input.placeholder [] <| |
||||||
|
text "Code source Json à intégrer dans un projet Elm" |
||||||
|
, text = model.sourceJson |
||||||
|
, spellcheck = False |
||||||
|
} |
||||||
|
] |
||||||
|
, column [ spacing petitEspacement, height fill, width fill, scrollbars ] |
||||||
|
-- L'attibut scrollbars présent dans la liste ci-dessus ^^^^^^^^^^ |
||||||
|
-- est nécessaire pour que l'élément ci-dessous ne s'étende pas ! |
||||||
|
[ row |
||||||
|
[ width fill |
||||||
|
, padding petitEspacement |
||||||
|
, spacing tresGrandEspacement |
||||||
|
] |
||||||
|
[ bouton GenererCodeElm "Générer le code source Elm" |
||||||
|
, bouton TelechargerCodeElm "Télécharger" |
||||||
|
] |
||||||
|
, el |
||||||
|
--^^ Cet élément ci |
||||||
|
[ height fill |
||||||
|
, width fill |
||||||
|
, clip |
||||||
|
, scrollbars |
||||||
|
|
||||||
|
--^^^^^^^^^^ Cet attribut ne suffit pas |
||||||
|
, padding petitEspacement |
||||||
|
, Background.color <| couleurUI <| couleurArrierePlan |
||||||
|
, Border.rounded 8 |
||||||
|
, Border.innerShadow |
||||||
|
{ blur = 10 |
||||||
|
, color = rgb255 10 10 10 |
||||||
|
, offset = ( 0.3, 0.4 ) |
||||||
|
, size = 2 |
||||||
|
} |
||||||
|
] |
||||||
|
<| |
||||||
|
text model.codeElmGenere |
||||||
|
] |
||||||
|
] |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{- |
||||||
|
██████ ███████ ███ ██ ███████ ██████ █████ ████████ ███████ ██ ██ ██████ |
||||||
|
██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ |
||||||
|
██ ███ █████ ██ ██ ██ █████ ██████ ███████ ██ █████ ██ ██ ██████ |
||||||
|
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ |
||||||
|
██████ ███████ ██ ████ ███████ ██ ██ ██ ██ ██ ███████ ██████ ██ ██ |
||||||
|
-} |
||||||
|
|
||||||
|
|
||||||
|
generateur nomObjet sourceJson = |
||||||
|
case parser nomObjet sourceJson of |
||||||
|
Ok code -> |
||||||
|
S.join "\n" <| |
||||||
|
code.imports |
||||||
|
++ code.types |
||||||
|
++ code.decoders |
||||||
|
++ code.encoders |
||||||
|
|
||||||
|
Err erreurs -> |
||||||
|
erreurs |
||||||
|
|
||||||
|
|
||||||
|
parser nomObjet sourceJson = |
||||||
|
ElmCodeGenerator.fromJsonSample |
||||||
|
{ rootTypeName = nomObjet |
||||||
|
, decodeImport = |
||||||
|
{ importAlias = "Json.Decode" |
||||||
|
, exposingSpec = ElmCodeGenerator.ExposingNone |
||||||
|
} |
||||||
|
, encodeImport = |
||||||
|
{ importAlias = "Json.Encode" |
||||||
|
, exposingSpec = ElmCodeGenerator.ExposingNone |
||||||
|
} |
||||||
|
, decoderStyle = ElmCodeGenerator.PlainDecoders |
||||||
|
, namingStyle = ElmCodeGenerator.NounNaming |
||||||
|
} |
||||||
|
sourceJson |
||||||
Loading…
Reference in new issue