From 2bbcef072a35f4b976a452faad38c0f18c789fde Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Mon, 12 Nov 2018 20:21:37 -0800 Subject: [PATCH] ui: Add greeting.html to Home --- pkg/webui/root_controller.go | 20 ++++++------------- pkg/webui/routes.go | 4 ++-- ui/greeting.html | 2 ++ ui/src/Main.elm | 13 ++++++++++--- ui/src/Page/Home.elm | 37 +++++++++++++++++++++++++++++------- ui/src/main.css | 14 +++++++++++--- 6 files changed, 61 insertions(+), 29 deletions(-) diff --git a/pkg/webui/root_controller.go b/pkg/webui/root_controller.go index 352d51b..e3448b0 100644 --- a/pkg/webui/root_controller.go +++ b/pkg/webui/root_controller.go @@ -2,7 +2,6 @@ package webui import ( "fmt" - "html/template" "io/ioutil" "net/http" @@ -10,23 +9,16 @@ import ( "github.com/jhillyerd/inbucket/pkg/server/web" ) -// RootIndex serves the Inbucket landing page -func RootIndex(w http.ResponseWriter, req *http.Request, ctx *web.Context) (err error) { +// RootGreeting serves the Inbucket greeting. +func RootGreeting(w http.ResponseWriter, req *http.Request, ctx *web.Context) (err error) { greeting, err := ioutil.ReadFile(ctx.RootConfig.Web.GreetingFile) if err != nil { return fmt.Errorf("Failed to load greeting: %v", err) } - // Get flash messages, save session - errorFlash := ctx.Session.Flashes("errors") - if err = ctx.Session.Save(req, w); err != nil { - return err - } - // Render template - return web.RenderTemplate("root/index.html", w, map[string]interface{}{ - "ctx": ctx, - "errorFlash": errorFlash, - "greeting": template.HTML(string(greeting)), - }) + + w.Header().Set("Content-Type", "text/html") + _, err = w.Write(greeting) + return err } // RootMonitor serves the Inbucket monitor page diff --git a/pkg/webui/routes.go b/pkg/webui/routes.go index 537abca..a480f7b 100644 --- a/pkg/webui/routes.go +++ b/pkg/webui/routes.go @@ -8,8 +8,8 @@ import ( // SetupRoutes populates routes for the webui into the provided Router. func SetupRoutes(r *mux.Router) { - r.Path("/").Handler( - web.Handler(RootIndex)).Name("RootIndex").Methods("GET") + r.Path("/greeting").Handler( + web.Handler(RootGreeting)).Name("RootGreeting").Methods("GET") r.Path("/monitor").Handler( web.Handler(RootMonitor)).Name("RootMonitor").Methods("GET") r.Path("/monitor/{name}").Handler( diff --git a/ui/greeting.html b/ui/greeting.html index e9340f9..3eed9b1 100644 --- a/ui/greeting.html +++ b/ui/greeting.html @@ -1,3 +1,5 @@ +

Welcome to Inbucket

+

Inbucket is an email testing service; it will accept email for any email address and make it available to view without a password.

diff --git a/ui/src/Main.elm b/ui/src/Main.elm index 79094c4..882d303 100644 --- a/ui/src/Main.elm +++ b/ui/src/Main.elm @@ -36,8 +36,11 @@ init sessionValue location = session = Session.init location (Session.decodeValueWithDefault sessionValue) + ( subModel, _ ) = + Home.init + model = - { page = Home Home.init + { page = Home subModel , session = session , mailboxName = "" } @@ -182,8 +185,12 @@ setRoute route model = ( model, Cmd.none, Session.SetFlash ("Unknown route requested: " ++ hash) ) Route.Home -> - ( { model | page = Home Home.init } - , Ports.windowTitle "Inbucket" + let + ( subModel, subCmd ) = + Home.init + in + ( { model | page = Home subModel } + , Cmd.map HomeMsg subCmd , Session.none ) diff --git a/ui/src/Page/Home.elm b/ui/src/Page/Home.elm index 5fb94fc..c08630e 100644 --- a/ui/src/Page/Home.elm +++ b/ui/src/Page/Home.elm @@ -3,18 +3,33 @@ module Page.Home exposing (Model, Msg, init, update, view) import Data.Session as Session exposing (Session) import Html exposing (..) import Html.Attributes exposing (..) +import Http +import HttpUtil +import Json.Encode as Encode +import Ports -- MODEL -- type alias Model = - {} + { greeting : String } -init : Model +init : ( Model, Cmd Msg ) init = - {} + ( Model "" + , Cmd.batch + [ Ports.windowTitle "Inbucket" + , cmdGreeting + ] + ) + + +cmdGreeting : Cmd Msg +cmdGreeting = + Http.send GreetingResult <| + Http.getString "/serve/greeting" @@ -22,12 +37,17 @@ init = type Msg - = Msg + = GreetingResult (Result Http.Error String) update : Session -> Msg -> Model -> ( Model, Cmd Msg, Session.Msg ) update session msg model = - ( model, Cmd.none, Session.none ) + case msg of + GreetingResult (Ok greeting) -> + ( Model greeting, Cmd.none, Session.none ) + + GreetingResult (Err err) -> + ( model, Cmd.none, Session.SetFlash (HttpUtil.errorString err) ) @@ -37,6 +57,9 @@ update session msg model = view : Session -> Model -> Html Msg view session model = div [ id "page" ] - [ h1 [] [ text "Inbucket" ] - , text "This is the home page" + [ div + [ class "greeting" + , property "innerHTML" (Encode.string model.greeting) + ] + [] ] diff --git a/ui/src/main.css b/ui/src/main.css index db92aa2..2492e83 100644 --- a/ui/src/main.css +++ b/ui/src/main.css @@ -30,6 +30,11 @@ time, mark, audio, video { vertical-align: baseline; } +::placeholder { + color: var(--placeholder-color); + opacity: 1; +} + a { color: #337ab7; text-decoration: none; @@ -46,9 +51,8 @@ body, input, table { color: var(--primary-color); } -::placeholder { - color: var(--placeholder-color); - opacity: 1; +h1, h2, h3, h4, h5, h6, p { + margin-bottom: 10px; } /** SHARED */ @@ -129,6 +133,10 @@ h1 { font-weight: 500; } +.greeting { + max-width: 1000px; +} + /** NAV BAR */ .navbar,