Code source du site TeacherCorner.lamdera.app, contenant une suite d'outils permettant d'automatiser la production de documents pédagogiques.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
TeacherCorner/src/Prof.elm

255 lines
6.7 KiB

module Prof exposing (main)
import Browser
import Browser.Navigation as Nav
import CalculateurDeNotes
import Echologo exposing (..)
import Element exposing (..)
import Element.Background as Background
import Element.Border as Border
import Element.Events exposing (..)
import Element.Font as Font
import GenerateurDeProblemes
import Html exposing (Html)
import Html.Attributes
import Style exposing (..)
import Url
{-
-}
main : Program Flags Model Msg
main =
Browser.application
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
, onUrlChange = UrlChanged
, onUrlRequest = LinkClicked
}
-- MODEL
type alias Model =
{ key : Nav.Key
, url : Url.Url
, page : Page
, largeur : Int
, hauteur : Int
, modeleGenerateurDeProblemes : GenerateurDeProblemes.Model
, modeleCalculateurDeNotes : CalculateurDeNotes.Model
}
type Page
= GenerateurDeProblemes
| CalculateurDeNotes
type alias Flags =
{ l : Int
, h : Int
}
init : Flags -> Url.Url -> Nav.Key -> ( Model, Cmd Msg )
init flags url key =
case url.fragment of
Just "CalculateurDeNotes" ->
( Model key
url
CalculateurDeNotes
flags.l
flags.h
GenerateurDeProblemes.init
CalculateurDeNotes.init
, Cmd.none
)
Just "GenerateurDeProblemes" ->
( Model key
url
GenerateurDeProblemes
flags.l
flags.h
GenerateurDeProblemes.init
CalculateurDeNotes.init
, Cmd.none
)
_ ->
( Model key
{ url | fragment = Just "GenerateurDeProblemes" }
GenerateurDeProblemes
flags.l
flags.h
GenerateurDeProblemes.init
CalculateurDeNotes.init
, Nav.pushUrl key (Url.toString { url | fragment = Just "GenerateurDeProblemes" })
)
-- UPDATE
type Msg
= LinkClicked Browser.UrlRequest
| UrlChanged Url.Url
| CalculateurDeNotesMsg CalculateurDeNotes.Msg
| GenerateurDeProblemesMsg GenerateurDeProblemes.Msg
update : Msg -> Model -> ( Model, Cmd Msg )
update msg model =
case ( msg, model.page ) of
( LinkClicked urlRequest, _ ) ->
case urlRequest of
Browser.Internal url ->
( model, Nav.pushUrl model.key (Url.toString url) )
Browser.External href ->
( model, Nav.load href )
( UrlChanged url, _ ) ->
case url.fragment of
Just "CalculateurDeNotes" ->
( { model
| url = url
, page = CalculateurDeNotes
}
, Cmd.none
)
Just "GenerateurDeProblemes" ->
( { model
| url = url
, page = GenerateurDeProblemes
}
, Cmd.none
)
_ ->
( { model
| url = { url | fragment = Just "GenerateurDeProblemes" }
, page = GenerateurDeProblemes
}
, Nav.pushUrl model.key (Url.toString { url | fragment = Just "GenerateurDeProblemes" })
)
( GenerateurDeProblemesMsg message, GenerateurDeProblemes ) ->
let
( nouveauModele, commande ) =
GenerateurDeProblemes.update message
model.modeleGenerateurDeProblemes
in
( { model
| modeleGenerateurDeProblemes = nouveauModele
}
, Cmd.map GenerateurDeProblemesMsg commande
)
( CalculateurDeNotesMsg message, CalculateurDeNotes ) ->
let
( nouveauModele, commande ) =
CalculateurDeNotes.update message model.modeleCalculateurDeNotes
in
( { model
| modeleCalculateurDeNotes = nouveauModele
}
, Cmd.map CalculateurDeNotesMsg commande
)
_ ->
( model, Cmd.none )
-- SUBSCRIPTIONS
subscriptions : Model -> Sub Msg
subscriptions _ =
Sub.none
-- VIEW
view : Model -> Browser.Document Msg
view model =
case model.page of
CalculateurDeNotes ->
{ title = CalculateurDeNotes.titre
, body =
[ CalculateurDeNotes.view model.modeleCalculateurDeNotes
|> Element.map CalculateurDeNotesMsg
|> designGeneral
(model.largeur - 2 * (petitEspacement + grandEspacement))
CalculateurDeNotes.titre
]
}
GenerateurDeProblemes ->
{ title = GenerateurDeProblemes.titre
, body =
[ GenerateurDeProblemes.view model.modeleGenerateurDeProblemes
|> Element.map GenerateurDeProblemesMsg
|> designGeneral
(model.largeur - 2 * (petitEspacement + grandEspacement))
GenerateurDeProblemes.titre
]
}
designGeneral largeur titre elmt =
layout
[ height fill
, width fill
, padding tresGrandEspacement
, Background.color <| vert 0.2
]
<|
column
[ height fill
, width fill
, Background.color <| vert 0
, Border.rounded 13
]
[ row []
[ entete 135 largeur titre
{-
, el
[ Font.size 120
, Font.color <| vert 0.2
, Font.shadow
{ offset = ( 2, 2 )
, blur = 3
, color = vert 1
}
]
<|
text titre
-}
]
, elmt
]
viewLink : String -> Html msg
viewLink path =
Html.li [] [ Html.a [ Html.Attributes.href path ] [ Html.text path ] ]