From aacf921be1d7b570cb9e6de8a2cc38fbf70db2e4 Mon Sep 17 00:00:00 2001 From: Amitai Burstein Date: Sat, 13 Jul 2024 19:00:36 +0200 Subject: [PATCH] Modernize repo, before converting to ihp-cms-starter (#42) --- .gitignore | 3 + Application/Helper/Controller.hs | 5 - Application/Helper/Icons.hs | 78 +++++ Application/Helper/View.hs | 8 +- Web/Controller/ParagraphCtas.hs | 9 - Web/Controller/ParagraphQuotes.hs | 16 +- Web/Controller/StyleGuide.hs | 9 + Web/Element/Button.hs | 41 +++ Web/Element/Cta.hs | 34 ++ Web/Element/ElementBuild.hs | 64 ---- Web/Element/ElementWrap.hs | 323 +++++++++++++++--- Web/Element/InnerElementLayout.hs | 1 + Web/Element/Link.hs | 47 +++ Web/Element/PageTitle.hs | 17 + Web/Element/Quote.hs | 48 +++ Web/Element/Types.hs | 68 +++- Web/FrontController.hs | 5 +- Web/Routes.hs | 3 + Web/Types.hs | 46 +-- Web/View/LandingPages/Edit.hs | 44 +-- Web/View/LandingPages/Index.hs | 53 ++- Web/View/LandingPages/Show.hs | 72 ++-- Web/View/Layout.hs | 70 +++- Web/View/ParagraphCtas/Edit.hs | 8 +- Web/View/ParagraphCtas/Index.hs | 39 --- Web/View/ParagraphCtas/New.hs | 8 +- Web/View/ParagraphCtas/Show.hs | 40 --- Web/View/ParagraphQuotes/Edit.hs | 3 +- Web/View/ParagraphQuotes/Index.hs | 39 --- Web/View/ParagraphQuotes/New.hs | 3 +- Web/View/ParagraphQuotes/Show.hs | 53 --- Web/View/Prelude.hs | 2 - Web/View/StyleGuide/Index.hs | 99 ++++++ flake.nix | 1 + static/styleGuide.js | 48 +++ .../8f8827de-e5d4-4ee7-b0a3-abae36274338 | Bin 0 -> 126254 bytes 36 files changed, 948 insertions(+), 459 deletions(-) create mode 100644 Application/Helper/Icons.hs create mode 100644 Web/Controller/StyleGuide.hs create mode 100644 Web/Element/Button.hs create mode 100644 Web/Element/Cta.hs delete mode 100644 Web/Element/ElementBuild.hs create mode 100644 Web/Element/Link.hs create mode 100644 Web/Element/PageTitle.hs create mode 100644 Web/Element/Quote.hs delete mode 100644 Web/View/ParagraphCtas/Index.hs delete mode 100644 Web/View/ParagraphCtas/Show.hs delete mode 100644 Web/View/ParagraphQuotes/Index.hs delete mode 100644 Web/View/ParagraphQuotes/Show.hs create mode 100644 Web/View/StyleGuide/Index.hs create mode 100644 static/styleGuide.js create mode 100644 static/styleGuideImages/8f8827de-e5d4-4ee7-b0a3-abae36274338 diff --git a/.gitignore b/.gitignore index 6e45465..c1b4e89 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,9 @@ static/app.css static/articles static/paragraph_quotes +# @todo: Fix the creation of duplicates +static/styleGuideImages/imageStyles + Application/Migration # JWT diff --git a/Application/Helper/Controller.hs b/Application/Helper/Controller.hs index fe005ca..15c8399 100644 --- a/Application/Helper/Controller.hs +++ b/Application/Helper/Controller.hs @@ -18,11 +18,6 @@ fetchLandingPageWithRecords landingPageId = do landingPage <- fetch landingPageId paragraphCtas <- fetch landingPage.paragraphCtasRefLandingPages - -- Landing pages referenced by ParagraphCta.refLandingPageId - paragraphCtaRefLandingPages <- query @LandingPage - |> filterWhereIn (#id, map (get #refLandingPageId) paragraphCtas) - |> fetch - paragraphQuotes <- fetch landingPage.paragraphQuotes return $ LandingPageWithRecords { .. } diff --git a/Application/Helper/Icons.hs b/Application/Helper/Icons.hs new file mode 100644 index 0000000..26a97a6 --- /dev/null +++ b/Application/Helper/Icons.hs @@ -0,0 +1,78 @@ +module Application.Helper.Icons where + +import IHP.ViewPrelude + +{-| Heroicons - Pencil +-} +edit :: Html +edit = [hsx| + + + +|] + +{-| Heroicons - Trash +-} +delete :: Html +delete = [hsx| + + + +|] + + +{-| Heroicons - Clock +-} +clock :: Html +clock = [hsx| + + + +|] + +{-| Heroicons - Plus Circle +-} +add :: Html +add = [hsx| + + + +|] + +{-| Heroicons - Bars-2 +-} +bars :: Html +bars = [hsx| + + + +|] + +{-| Heroicons - Eye +-} +view :: Html +view = [hsx| + + + + +|] + +{-| Heroicons - arrows-up-down +-} +arrowsUpDown :: Html +arrowsUpDown = [hsx| + + + +|] + +{-| https://iconmonstr.com/quote-3-svg/ +-} +quotationSign :: Html +quotationSign = [hsx| + + + + +|] \ No newline at end of file diff --git a/Application/Helper/View.hs b/Application/Helper/View.hs index 408133c..77d1eaf 100644 --- a/Application/Helper/View.hs +++ b/Application/Helper/View.hs @@ -5,6 +5,7 @@ import "cryptonite" Crypto.PubKey.RSA.PKCS15 as RSA import "cryptonite" Crypto.Hash.Algorithms as Hash.Algorithms import Data.ByteString.Base64 as Base64 import Application.Helper.Controller +import qualified Text.MMark as MMark -- Here you can add functions which are available in all your views @@ -14,4 +15,9 @@ signImageUrl imageUrl width height= case RSA.sign Nothing (Just Hash.Algorithms. Left msg -> error $ "Cannot sign image URL, private key is invalid:" <> show msg Right signature -> signature |> Base64.encode |> cs where - size = show width <> "x" <> show height \ No newline at end of file + size = show width <> "x" <> show height + +renderMarkdown text = case text |> MMark.parse "" of + -- On error, render the text as is. + Left error -> cs text + Right markdown -> MMark.render markdown |> tshow |> preEscapedToHtml \ No newline at end of file diff --git a/Web/Controller/ParagraphCtas.hs b/Web/Controller/ParagraphCtas.hs index eb128c7..a3406d7 100644 --- a/Web/Controller/ParagraphCtas.hs +++ b/Web/Controller/ParagraphCtas.hs @@ -1,15 +1,10 @@ module Web.Controller.ParagraphCtas where import Web.Controller.Prelude -import Web.View.ParagraphCtas.Index import Web.View.ParagraphCtas.New import Web.View.ParagraphCtas.Edit -import Web.View.ParagraphCtas.Show instance Controller ParagraphCtasController where - action ParagraphCtaAction = do - paragraphCtas <- query @ParagraphCta |> fetch - render IndexView { .. } action NewParagraphCtaAction { landingPageId } = do weight <- getParagraphsCount landingPageId @@ -23,10 +18,6 @@ instance Controller ParagraphCtasController where render NewView { .. } - action ShowParagraphCtaAction { paragraphCtaId } = do - paragraphCta <- fetch paragraphCtaId - render ShowView { .. } - action EditParagraphCtaAction { paragraphCtaId } = do paragraphCta <- fetch paragraphCtaId diff --git a/Web/Controller/ParagraphQuotes.hs b/Web/Controller/ParagraphQuotes.hs index 4a1e6cc..51291be 100644 --- a/Web/Controller/ParagraphQuotes.hs +++ b/Web/Controller/ParagraphQuotes.hs @@ -1,16 +1,10 @@ module Web.Controller.ParagraphQuotes where import Web.Controller.Prelude -import Web.View.ParagraphQuotes.Index import Web.View.ParagraphQuotes.New import Web.View.ParagraphQuotes.Edit -import Web.View.ParagraphQuotes.Show instance Controller ParagraphQuotesController where - action ParagraphQuotesAction = do - paragraphQuotes <- query @ParagraphQuote |> fetch - render IndexView { .. } - action NewParagraphQuoteAction { landingPageId } = do weight <- getParagraphsCount landingPageId let paragraphQuote = newRecord @@ -19,10 +13,6 @@ instance Controller ParagraphQuotesController where render NewView { .. } - action ShowParagraphQuoteAction { paragraphQuoteId } = do - paragraphQuote <- fetch paragraphQuoteId - render ShowView { .. } - action EditParagraphQuoteAction { paragraphQuoteId } = do paragraphQuote <- fetch paragraphQuoteId render EditView { .. } @@ -40,7 +30,7 @@ instance Controller ParagraphQuotesController where Left paragraphQuote -> render EditView { .. } Right paragraphQuote -> do paragraphQuote <- paragraphQuote |> updateRecord - setSuccessMessage "ParagraphQuote updated" + setSuccessMessage "Quote updated" redirectTo EditLandingPageAction { landingPageId = paragraphQuote.landingPageId } action CreateParagraphQuoteAction = do @@ -56,13 +46,13 @@ instance Controller ParagraphQuotesController where Left paragraphQuote -> render NewView { .. } Right paragraphQuote -> do paragraphQuote <- paragraphQuote |> createRecord - setSuccessMessage "ParagraphQuote created" + setSuccessMessage "Quote created" redirectTo EditLandingPageAction { landingPageId = paragraphQuote.landingPageId } action DeleteParagraphQuoteAction { paragraphQuoteId } = do paragraphQuote <- fetch paragraphQuoteId deleteRecord paragraphQuote - setSuccessMessage "ParagraphQuote deleted" + setSuccessMessage "Quote deleted" redirectTo EditLandingPageAction { landingPageId = paragraphQuote.landingPageId } buildParagraphQuote paragraphQuote = paragraphQuote diff --git a/Web/Controller/StyleGuide.hs b/Web/Controller/StyleGuide.hs new file mode 100644 index 0000000..480d728 --- /dev/null +++ b/Web/Controller/StyleGuide.hs @@ -0,0 +1,9 @@ +module Web.Controller.StyleGuide where + +import Web.Controller.Prelude +import Web.View.StyleGuide.Index + +instance Controller StyleGuideController where + action StyleGuideAction = do + render IndexView { .. } + diff --git a/Web/Element/Button.hs b/Web/Element/Button.hs new file mode 100644 index 0000000..ded0e3f --- /dev/null +++ b/Web/Element/Button.hs @@ -0,0 +1,41 @@ +module Web.Element.Button where + +import Web.Controller.Prelude +import Web.Element.Types +import Web.View.Prelude + +-- RenderButton + +render :: RenderButton -> Html +render record@RenderButton {text, url, isPrimary} = + renderButtonHelper url text isPrimary + + +-- Button to Action + +renderButtonAction :: (HasPath controller) => controller -> Text -> Html +renderButtonAction action text = + renderButtonHelper (pathTo action) text False + + +renderButtonPrimaryAction :: (HasPath controller) => controller -> Text -> Html +renderButtonPrimaryAction action text = + renderButtonHelper (pathTo action) text True + + +renderButtonHelper :: Text -> Text -> Bool -> Html +renderButtonHelper url text isPrimary = + [hsx| +
+ +
{text}
+
+
+ + |] + where classes' = classes + [ "flex flex-row items-center gap-x-4 rounded-lg px-6 py-3 text-xl border-2 border-blue-500 hover:bg-blue-600 w-fit" + , ("bg-blue-500 text-white", isPrimary) + , ("text-blue-900 bg-white hover:text-white", not isPrimary) + ] + diff --git a/Web/Element/Cta.hs b/Web/Element/Cta.hs new file mode 100644 index 0000000..8c41fc7 --- /dev/null +++ b/Web/Element/Cta.hs @@ -0,0 +1,34 @@ +module Web.Element.Cta where + +import Web.View.Prelude + +import Web.Element.Button +import Web.Element.ElementWrap +import Web.Element.Types + + +render :: RenderCta -> Html +render record@RenderCta {title, body, button} = + titleWrapped + ++ bodyWrapped + ++ Web.Element.Button.render button + |> wrapVerticalSpacing AlignCenter + |> \e -> [hsx|
{e}
|] + |> wrapContainerNarrow + where + classes' = classes + [ (getBackgroundColor Gray100, True) + , "relative rounded-lg border border-gray-300 w-full h-full overflow-hidden p-6 md:px-8" + ] + + titleWrapped = cs title + |> wrapTextResponsiveFontSize TextSize3xl + |> wrapTextCenter + |> wrapTextFontWeight FontWeightBold + + bodyWrapped = body + |> renderMarkdown + |> wrapProse + + + diff --git a/Web/Element/ElementBuild.hs b/Web/Element/ElementBuild.hs deleted file mode 100644 index 484f8fa..0000000 --- a/Web/Element/ElementBuild.hs +++ /dev/null @@ -1,64 +0,0 @@ -module Web.Element.ElementBuild where - -import Web.Controller.Prelude -import Web.View.Prelude - --- Button - -buildButton :: Text -> Text -> Html -buildButton url text = - buildButtonHelper url text False - - -buildButtonPrimary :: Text -> Text -> Html -buildButtonPrimary url text = - buildButtonHelper url text True - - -buildButtonHelper :: Text -> Text -> Bool -> Html -buildButtonHelper url text isPrimary = - [hsx| -
- -
{text}
-
-
- - |] - where classes' = classes - [ "flex flex-row items-center gap-x-4 rounded-lg px-6 py-3 text-xl border-2 border-blue-500 hover:bg-blue-600 w-fit" - , ("bg-blue-500 text-white", isPrimary) - , ("text-blue-900 bg-white hover:text-white", not isPrimary) - ] - - - --- Link - -{-| Build a link, by getting the action and text. --} -buildLink :: (HasPath controller) => controller -> Text -> Html -buildLink action text = - buildLinkHelper action text False - - -{-| Build a link for a delete action, by getting the action and text. --} -buildLinkDeleteAction :: (HasPath controller) => controller -> Html -buildLinkDeleteAction action = - buildLinkHelper action "Delete" True - - - -{-| Helper function to build a link. --} -buildLinkHelper :: (HasPath controller) => controller -> Text -> Bool -> Html -buildLinkHelper action text isDeleteAction = - [hsx| - {text} - |] - where - classes' = classes - [ "text-blue-500 text-sm hover:underline" - , ("js-delete ", isDeleteAction) - ] diff --git a/Web/Element/ElementWrap.hs b/Web/Element/ElementWrap.hs index a9cc7ff..7ac0c3b 100644 --- a/Web/Element/ElementWrap.hs +++ b/Web/Element/ElementWrap.hs @@ -1,77 +1,201 @@ module Web.Element.ElementWrap where -import Web.View.Prelude +import Application.Helper.Icons as Icons import Text.Blaze.Internal import Web.Element.Types +import Web.View.Prelude +-- Containers +wrapBackgroundColor :: Color -> BackgroundColorPadding -> Html -> Html +wrapBackgroundColor color paddingType element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + where + classes' = + classes + [ (className, True) + , ("py-3 px-5", paddingType == BackgroundColorPaddingCard) + , ("p-8", paddingType == BackgroundColorPaddingSection) + ] --- Containers + className = + case color of + ColorTransparent -> "bg-transparent" + Blue100 -> "bg-blue-100" + Gray300 -> "bg-gray-300" + Gray500 -> "bg-gray-500" + Gray900 -> "bg-gray-900" + Green600 -> "bg-green-600" + Red600 -> "bg-red-600" + Orange100 -> "bg-orange-100" + White -> "bg-white" + +wrapDetailsWithBackgroundColor :: Color -> Bool -> Html -> Html -> Html +wrapDetailsWithBackgroundColor color isOpen summary element = + case element of + Empty _ -> "" + _ -> [hsx| +
+ + {chevron} + {summary} + + + {- We can't use flex on the `details` tag, so we add padding here + -} +
{element}
+
+ |] + where + -- heroicons chevron-right. + chevron = [hsx| + + + + |] -wrapBackgroundColor :: Color -> Html -> Html -wrapBackgroundColor color element = - case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + chevronClasses = classes + [ ("icon-chevron w-4 h-4 transform", True) + , ("rotate-90", isOpen) + ] + classes' = + classes + -- Make the color darker based on the background color. + [ ("border rounded-lg py-3 px-5", True) + , ("bg-white border-pp-blue", color == White) + , ("bg-blue-100 border-pp-blue", color == Blue100) + , ("bg-orange-100 border-pp-orange", color == Orange100) + ] -{- Wrap an element with a wide container -} +{-| Similar theming of `wrapDetailsWithBackgroundColor`, but without the `details` tag. -} +wrapNoDetailsWithBackgroundColor :: Color -> Html -> Html +wrapNoDetailsWithBackgroundColor color element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + where + classes' = + classes + -- Make the color darker based on the background color. + [ ("border rounded-lg py-3 px-5", True) + , ("bg-white border-pp-blue", color == White) + , ("bg-blue-100 border-pp-blue", color == Blue100) + , ("bg-orange-100 border-pp-orange", color == Orange100) + ] + +-- | Wrap an element with a wide container. wrapContainerWide :: Html -> Html wrapContainerWide element = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] -{- Wrap an element with a narrow container -} +-- | Wrap an element with a narrow container. wrapContainerNarrow :: Html -> Html wrapContainerNarrow element = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] +-- | Wrap an element with a max width. +wrapContainerMaxWidth :: Width -> Html -> Html +wrapContainerMaxWidth width element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + where + classes' = + classes + [ ("max-w-lg", width == WidthLg) + , ("max-w-xl", width == WidthXl) + , ("max-w-2xl", width == Width2xl) + , ("max-w-3xl", width == Width3xl) + ] --- Spacing +-- | Wrap an element with rounded corners. +wrapRoundedCorners :: RoundedCorner -> Html -> Html +wrapRoundedCorners roundedCorner element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + where + classes' = + classes + [ "overflow-hidden" + , ("rounded-lg", roundedCorner == RoundedCornerLarge) + , ("rounded-full", roundedCorner == RoundedCornerFull) + ] -wrapVerticalSpacing :: Align -> Html -> Html -wrapVerticalSpacing align element = +wrapBorder :: RoundedCorner -> Html -> Html +wrapBorder roundedCorner element = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] where classes' = classes - [ "flex flex-col gap-y-5 md:gap-y-6" - , ("items-start", align == AlignStart) - , ("items-center", align == AlignCenter) - , ("items-end", align == AlignEnd) - , ("items-baseline", align == AlignBaseline) + [ "border border-gray-300 overflow-hidden" + , ("rounded-lg", roundedCorner == RoundedCornerLarge) + , ("rounded-full", roundedCorner == RoundedCornerFull) + , ("rounded-none", roundedCorner == RoundedCornerNone) ] +wrapBottomBorder :: Color -> Html -> Html +wrapBottomBorder color element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + where + classes' = + classes + [ "border-b" + , ("border-gray-500", color == Gray500) + ] + +-- Spacing + +wrapVerticalSpacing :: Align -> Html -> Html +wrapVerticalSpacing align element = + wrapVerticalSpacingHelper align element "gap-y-5 md:gap-y-6" +wrapVerticalSpacingBig :: Align -> Html -> Html +wrapVerticalSpacingBig align element = + wrapVerticalSpacingHelper align element "gap-y-8 md:gap-y-10" wrapVerticalSpacingTiny :: Align -> Html -> Html wrapVerticalSpacingTiny align element = + wrapVerticalSpacingHelper align element "gap-y-2" + +wrapVerticalSpacingNone :: Align -> Html -> Html +wrapVerticalSpacingNone align element = + wrapVerticalSpacingHelper align element "gap-y-0" + +wrapVerticalSpacingHelper :: Align -> Html -> Text -> Html +wrapVerticalSpacingHelper align element gapClasses = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] where classes' = classes - [ "flex flex-col gap-y-2" + [ "flex flex-col" + , (gapClasses, True) , ("items-start", align == AlignStart) , ("items-center", align == AlignCenter) , ("items-end", align == AlignEnd) , ("items-baseline", align == AlignBaseline) ] - wrapHorizontalSpacing :: Align -> Html -> Html wrapHorizontalSpacing align element = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] where classes' = classes @@ -85,8 +209,8 @@ wrapHorizontalSpacing align element = wrapHorizontalSpacingTiny :: Align -> Html -> Html wrapHorizontalSpacingTiny align element = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] where classes' = classes @@ -97,41 +221,86 @@ wrapHorizontalSpacingTiny align element = , ("items-baseline", align == AlignBaseline) ] -wrapHorizontalSpacingJustifyBetween :: Align -> Html -> Html -wrapHorizontalSpacingJustifyBetween align element = +wrapHorizontalSpacingJustify :: Justify -> Align -> Html -> Html +wrapHorizontalSpacingJustify justify align element = case element of - Empty _ -> mempty - _ -> [hsx|
{element}
|] + Empty _ -> "" + _ -> [hsx|
{element}
|] where classes' = classes - [ "flex flex-row justify-between" + [ "flex flex-row w-full" , ("items-start", align == AlignStart) , ("items-center", align == AlignCenter) , ("items-end", align == AlignEnd) + , ("items-baseline", align == AlignBaseline) + , ("justify-start", justify == JustifyStart) + , ("justify-end", justify == JustifyEnd) + , ("justify-between", justify == JustifyBetween) + , ("justify-center", justify == JustifyCenter) ] +wrapBottomPadding :: Html -> Html +wrapBottomPadding element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + + +wrapHorizontalPadding :: Html -> Html +wrapHorizontalPadding element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + +wrapInlineBlock :: Html -> Html +wrapInlineBlock element = + case element of + Empty _ -> "" + _ -> [hsx|
{element}
|] + + -- Lists (ul and ol) +wrapListLi :: Html -> Html +wrapListLi element = + case element of + Empty _ -> "" + _ -> [hsx|
  • {element}
  • |] + wrapListOl :: Html -> Html wrapListOl element = case element of - Empty _ -> mempty + Empty _ -> "" _ -> [hsx|
      {element}
    |] wrapListUl :: Html -> Html wrapListUl element = case element of - Empty _ -> mempty + Empty _ -> "" _ -> [hsx|
      {element}
    |] +wrapSortableList :: Html -> Html +wrapSortableList element = + case element of + Empty _ -> "" + _ -> [hsx|
      {element}
    |] + +wrapSortableListLi :: Html -> Html +wrapSortableListLi element = + case element of + Empty _ -> "" + _ -> [hsx|
  • + {Icons.bars} + {element} +
  • |] -- Text wrapProse :: Html -> Html wrapProse element = [hsx| -
    +
    {element}
    |] @@ -144,27 +313,73 @@ wrapTextResponsiveFontSize textSize element = where sizeClasses :: Text = case textSize of - TextSizeXs -> "text-xs" - TextSizeSm -> "text-xs md:text-sm" + TextSizeXs -> "text-xs" + TextSizeSm -> "text-xs md:text-sm" TextSizeBase -> "text-sm md:text-base" - TextSizeLg -> "md:text-lg" - TextSizeXl -> "text-lg md:text-xl" - TextSize2xl -> "text-xl md:text-2xl" - TextSize3xl -> "text-xl md:text-2xl lg:text-3xl" + TextSizeLg -> "md:text-lg" + TextSizeXl -> "text-lg md:text-xl" + TextSize2xl -> "text-xl md:text-2xl" + TextSize3xl -> "text-xl md:text-2xl lg:text-3xl" +wrapTextFontWeight :: FontWeight -> Html -> Html +wrapTextFontWeight fontweight element = + case element of + Empty _ -> "" + _ -> [hsx|
    {element}
    |] + where + weightClasses :: Text = + case fontweight of + FontWeightLight -> "font-light" + FontWeightNormal -> "font-normal" + FontWeightBold -> "font-bold" wrapHeaderTag :: Int -> Html -> Html wrapHeaderTag number element = - wrapProse html + case number of + 1 -> [hsx|

    {element}

    |] + 2 -> [hsx|

    {element}

    |] + 3 -> [hsx|

    {element}

    |] + 4 -> [hsx|

    {element}

    |] + 5 -> [hsx|
    {element}
    |] + 6 -> [hsx|
    {element}
    |] + _ -> mempty + + +wrapTextColor :: Color -> Html -> Html +wrapTextColor color element = + case element of + Empty _ -> "" + _ -> [hsx|
    {element}
    |] where - html = case number of - 1 -> [hsx|

    {element}

    |] - 2 -> [hsx|

    {element}

    |] - 3 -> [hsx|

    {element}

    |] - 4 -> [hsx|

    {element}

    |] - 5 -> [hsx|
    {element}
    |] - 6 -> [hsx|
    {element}
    |] - _ -> mempty + className :: Text = + case color of + ColorTransparent -> "text-transparent" + Blue100 -> "text-blue-200" + Gray300 -> "text-gray-300" + Gray500 -> "text-gray-500" + Gray900 -> "text-gray-900" + Green600 -> "text-green-600" + Red600 -> "text-red-600" + Orange100 -> "text-orange-100" + White -> "text-white" + +wrapTextItalic :: Html -> Html +wrapTextItalic element = + case element of + Empty _ -> "" + _ -> [hsx|
    {element}
    |] +wrapTextCenter :: Html -> Html +wrapTextCenter element = + case element of + Empty _ -> "" + _ -> [hsx|
    {element}
    |] +wrapAnchor :: Text -> Html -> Html +wrapAnchor id element = + case element of + Empty _ -> "" + _ -> [hsx|
    {element}
    |] +wrapCheckboxWrapper :: Html -> Html +wrapCheckboxWrapper element = [hsx|
    {element}
    |] diff --git a/Web/Element/InnerElementLayout.hs b/Web/Element/InnerElementLayout.hs index ac6648c..f226d2d 100644 --- a/Web/Element/InnerElementLayout.hs +++ b/Web/Element/InnerElementLayout.hs @@ -23,6 +23,7 @@ buildInnerElementLayout color element = ] +-- @todo: Remove buildElementLayoutSplitImageAndContent :: Text -> Html -> Html buildElementLayoutSplitImageAndContent imageUrl items = -- We use grid and row/col start to position both the image and the text on the same cell. diff --git a/Web/Element/Link.hs b/Web/Element/Link.hs new file mode 100644 index 0000000..c7dd2db --- /dev/null +++ b/Web/Element/Link.hs @@ -0,0 +1,47 @@ +module Web.Element.Link where + +import Web.Controller.Prelude +import Web.Element.Types +import Web.View.Prelude + +-- RenderLink + +render :: RenderLink -> Html +render record@RenderLink {text, url} = + [hsx| + {text} + |] + where + classes' = classes + [ "text-blue-500 text-sm hover:underline" + ] + + +-- Link to Action. + +{-| Build a link, by getting the action and text. +-} +renderLinkAction :: (HasPath controller) => controller -> Text -> Html +renderLinkAction action text = + renderLinkHelper action text False + + +{-| Build a link for a delete action, by getting the action and text. +-} +renderLinkDeleteAction :: (HasPath controller) => controller -> Html +renderLinkDeleteAction action = + renderLinkHelper action "Delete" True + + +{-| Helper function to build a link. +-} +renderLinkHelper :: (HasPath controller) => controller -> Text -> Bool -> Html +renderLinkHelper action text isDeleteAction = + [hsx| + {text} + |] + where + classes' = classes + [ "text-blue-500 text-sm hover:underline" + , ("js-delete ", isDeleteAction) + ] diff --git a/Web/Element/PageTitle.hs b/Web/Element/PageTitle.hs new file mode 100644 index 0000000..5b9bc99 --- /dev/null +++ b/Web/Element/PageTitle.hs @@ -0,0 +1,17 @@ +module Web.Element.PageTitle where + +import Web.View.Prelude + +import Application.Helper.Icons +import Web.Element.ElementWrap +import Web.Element.Types + + +render :: Text -> Html +render text = + text + |> cs + |> wrapHeaderTag 1 + |> wrapProse + + diff --git a/Web/Element/Quote.hs b/Web/Element/Quote.hs new file mode 100644 index 0000000..dc599d5 --- /dev/null +++ b/Web/Element/Quote.hs @@ -0,0 +1,48 @@ +module Web.Element.Quote where + +import Web.View.Prelude + +import Application.Helper.Icons +import Web.Element.ElementWrap +import Web.Element.Types + + +render :: RenderQuote -> Html +render record@RenderQuote {body, subtitle, imageUrl} = + quotationSign + ++ bodyWrapped + ++ titleWrapped + |> wrapVerticalSpacing AlignNone + |> renderImageAndContent (pathTo $ RenderImageStyleAction 400 200 imageUrl signed) + where + -- Sign the image URL to prevent tampering. + signed = signImageUrl imageUrl 400 200 + + bodyWrapped = body + |> preEscapedToHtml + |> wrapTextResponsiveFontSize TextSize2xl + + titleWrapped = cs subtitle + |> wrapTextResponsiveFontSize TextSizeSm + + +renderImageAndContent :: Text -> Html -> Html +renderImageAndContent imageUrl items = + -- We use grid and row/col start to position both the image and the text on the same cell. + [hsx| +
    + +
    +
    + {image} +
    +
    +
    + {items} +
    +
    + |] + where + image = [hsx||] + + diff --git a/Web/Element/Types.hs b/Web/Element/Types.hs index 455da34..77eb9e0 100644 --- a/Web/Element/Types.hs +++ b/Web/Element/Types.hs @@ -3,15 +3,75 @@ import Web.View.Prelude data Align = AlignNone | AlignStart | AlignCenter | AlignEnd | AlignBaseline deriving (Eq, Show) -data Color = ColorNone | Gray100 | Gray500 deriving (Eq, Show) +data Justify = JustifyStart | JustifyCenter | JustifyEnd | JustifyBetween deriving (Eq, Show) + +data FontWeight = FontWeightLight | FontWeightNormal | FontWeightBold deriving (Eq, Show) + +data Color + = ColorTransparent + | Blue100 + | Gray100 + | Gray300 + | Gray500 + | Gray900 + | Green600 + | Orange100 + | Red600 + | White + deriving (Eq, Show) data TextSize = TextSizeXs | TextSizeSm | TextSizeBase | TextSizeLg | TextSizeXl | TextSize2xl | TextSize3xl deriving (Eq, Show) +data LinkType = LinkTypeNoDelete | LinkTypeDeleteWithConfirmation | LinkTypeDeleteWithoutConfirmation deriving (Eq, Show) + +data RoundedCorner = RoundedCornerNone | RoundedCornerLarge | RoundedCornerFull deriving (Eq, Show) + +-- | The padding around the background color. +data BackgroundColorPadding + = BackgroundColorPaddingCard -- Used for example for comments. + | BackgroundColorPaddingSection -- Used for example for the footer. + deriving (Eq, Show) + +data Width = WidthLg | WidthXl | Width2xl | Width3xl deriving (Eq, Show) + + +-- Render types + +data RenderButton = RenderButton + { text :: Text + , url :: Text + , isPrimary :: Bool + } + +data RenderLink = RenderLink + { text :: Text + , url :: Text + } + +data RenderCta = RenderCta + { title :: Text + , body :: Text + , button :: RenderButton + } + +data RenderQuote = RenderQuote + { body :: Text + , subtitle :: Text + , imageUrl :: Text + } + -- @todo: Move to Utility.hs? getBackgroundColor :: Color -> Text getBackgroundColor color = case color of - ColorNone -> "bg-transparent" - Gray100 -> "bg-gray-100" - Gray500 -> "bg-gray-500" \ No newline at end of file + ColorTransparent -> "bg-transparent" + Blue100 -> "bg-blue-100" + Gray100 -> "bg-gray-100" + Gray300 -> "bg-gray-300" + Gray500 -> "bg-gray-500" + Gray900 -> "bg-gray-900" + Green600 -> "bg-green-600" + Orange100 -> "bg-orange-100" + Red600 -> "bg-red-600" + White -> "bg-white" diff --git a/Web/FrontController.hs b/Web/FrontController.hs index 7539ed4..41ec05f 100644 --- a/Web/FrontController.hs +++ b/Web/FrontController.hs @@ -6,6 +6,7 @@ import Web.View.Layout (defaultLayout) -- Controller Imports +import Web.Controller.StyleGuide import Web.Controller.Users import Web.Controller.ImageStyle import Web.Controller.LandingPages @@ -19,6 +20,7 @@ instance FrontController WebApplication where controllers = [ startPage LandingPagesAction -- Generator Marker + , parseRoute @StyleGuideController , parseRoute @UsersController , parseRoute @ImageStyleController , parseRoute @LandingPagesController @@ -29,6 +31,7 @@ instance FrontController WebApplication where instance InitControllerContext WebApplication where initContext = do - setLayout defaultLayout + currentTime <- getCurrentTime + setLayout (defaultLayout currentTime) initAutoRefresh initAuthentication @User diff --git a/Web/Routes.hs b/Web/Routes.hs index 080c5c5..0bd133d 100644 --- a/Web/Routes.hs +++ b/Web/Routes.hs @@ -20,3 +20,6 @@ instance AutoRoute SessionsController instance AutoRoute UsersController + +instance AutoRoute StyleGuideController + diff --git a/Web/Types.hs b/Web/Types.hs index 4d97b91..29fc2bc 100644 --- a/Web/Types.hs +++ b/Web/Types.hs @@ -4,6 +4,8 @@ import IHP.Prelude import IHP.ModelSupport import Generated.Types import IHP.LoginSupport.Types +import IHP.View.Form + -- Custom types @@ -15,41 +17,41 @@ data LandingPageWithRecords = LandingPageWithRecords { landingPage :: !LandingPage , paragraphCtas :: ![ParagraphCta] , paragraphQuotes :: ![ParagraphQuote] - , paragraphCtaRefLandingPages :: ![LandingPage] } deriving (Show) +instance CanSelect LandingPage where + type SelectValue LandingPage = Id LandingPage + selectValue landingPage = landingPage.id + selectLabel landingPage = landingPage.title + -- data WebApplication = WebApplication deriving (Eq, Show) -data ParagraphQuotesController - = ParagraphQuotesAction - | NewParagraphQuoteAction { landingPageId :: !(Id LandingPage) } - | ShowParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } - | CreateParagraphQuoteAction - | EditParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } - | UpdateParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } - | DeleteParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } +data LandingPagesController + = LandingPagesAction + | NewLandingPageAction + | ShowLandingPageAction { landingPageId :: !(Id LandingPage) } + | CreateLandingPageAction + | EditLandingPageAction { landingPageId :: !(Id LandingPage) } + | UpdateLandingPageAction { landingPageId :: !(Id LandingPage) } + | DeleteLandingPageAction { landingPageId :: !(Id LandingPage) } deriving (Eq, Show, Data) data ParagraphCtasController - = ParagraphCtaAction - | NewParagraphCtaAction { landingPageId :: !(Id LandingPage) } - | ShowParagraphCtaAction { paragraphCtaId :: !(Id ParagraphCta) } + = NewParagraphCtaAction { landingPageId :: !(Id LandingPage) } | CreateParagraphCtaAction | EditParagraphCtaAction { paragraphCtaId :: !(Id ParagraphCta) } | UpdateParagraphCtaAction { paragraphCtaId :: !(Id ParagraphCta) } | DeleteParagraphCtaAction { paragraphCtaId :: !(Id ParagraphCta) } deriving (Eq, Show, Data) -data LandingPagesController - = LandingPagesAction - | NewLandingPageAction - | ShowLandingPageAction { landingPageId :: !(Id LandingPage) } - | CreateLandingPageAction - | EditLandingPageAction { landingPageId :: !(Id LandingPage) } - | UpdateLandingPageAction { landingPageId :: !(Id LandingPage) } - | DeleteLandingPageAction { landingPageId :: !(Id LandingPage) } +data ParagraphQuotesController + = NewParagraphQuoteAction { landingPageId :: !(Id LandingPage) } + | CreateParagraphQuoteAction + | EditParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } + | UpdateParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } + | DeleteParagraphQuoteAction { paragraphQuoteId :: !(Id ParagraphQuote) } deriving (Eq, Show, Data) @@ -77,3 +79,7 @@ data UsersController | UpdateUserAction { userId :: !(Id User) } | DeleteUserAction { userId :: !(Id User) } deriving (Eq, Show, Data) + +data StyleGuideController + = StyleGuideAction + deriving (Eq, Show, Data) diff --git a/Web/View/LandingPages/Edit.hs b/Web/View/LandingPages/Edit.hs index e7c5a70..7912980 100644 --- a/Web/View/LandingPages/Edit.hs +++ b/Web/View/LandingPages/Edit.hs @@ -1,9 +1,10 @@ module Web.View.LandingPages.Edit where -import Web.View.Prelude import Web.Controller.Prelude -import Web.Element.Types -import Web.Element.ElementBuild +import Web.Element.Button import Web.Element.ElementWrap +import Web.Element.Link +import Web.Element.Types +import Web.View.Prelude data EditView = EditView { landingPageWithRecords :: LandingPageWithRecords } @@ -12,11 +13,11 @@ instance View EditView where {body} |] where - body = [hsx| - {header} - - {renderForm landingPage paragraphCtas paragraphQuotes} - |] + body = + [ header + , renderForm landingPage paragraphCtas paragraphQuotes + ] + |> mconcat |> wrapVerticalSpacing AlignNone |> wrapContainerWide @@ -29,19 +30,20 @@ instance View EditView where , breadcrumbText "Edit LandingPage" ] - header = [hsx| - {breadcrumb} - {titleAndEdit} - |] - |> wrapVerticalSpacing AlignNone + header = + [ breadcrumb + , titleAndEdit + ] + |> mconcat + |> wrapVerticalSpacing AlignNone titleAndEdit = [ [hsx|Edit {landingPage.title}|] |> wrapHeaderTag 1 - , buildLink (ShowLandingPageAction landingPage.id) "Show" + , renderLinkAction (ShowLandingPageAction landingPage.id) "Show" ] - |> mconcat - |> wrapHorizontalSpacingTiny AlignBaseline + |> mconcat + |> wrapHorizontalSpacingTiny AlignBaseline renderForm :: LandingPage -> [ParagraphCta] -> [ParagraphQuote] -> Html renderForm landingPage paragraphCtas paragraphQuotes = formFor landingPage [hsx| @@ -81,8 +83,8 @@ renderForm landingPage paragraphCtas paragraphQuotes = formFor landingPage [hsx| |> wrapVerticalSpacing AlignNone paragraphButtons = - [ buildButton (pathTo $ NewParagraphCtaAction landingPage.id) "New CTA" - , buildButton (pathTo $ NewParagraphQuoteAction landingPage.id) "New Quote" + [ renderButtonAction (NewParagraphCtaAction landingPage.id) "New CTA" + , renderButtonAction (NewParagraphQuoteAction landingPage.id) "New Quote" ] |> mconcat |> wrapHorizontalSpacing AlignCenter @@ -123,8 +125,8 @@ orderAndRenderParagraphs paragraphCtas paragraphQuotes = |> wrapHorizontalSpacingTiny AlignCenter operations = - [ buildLink (editAction id) "Edit" - , buildLinkDeleteAction (deleteAction id) + [ renderLinkAction (editAction id) "Edit" + , renderLinkDeleteAction (deleteAction id) ] |> mconcat |> wrapHorizontalSpacingTiny AlignNone @@ -145,4 +147,4 @@ orderAndRenderParagraphs paragraphCtas paragraphQuotes =
    |] else - mempty \ No newline at end of file + mempty diff --git a/Web/View/LandingPages/Index.hs b/Web/View/LandingPages/Index.hs index 315a9eb..cd4c2b4 100644 --- a/Web/View/LandingPages/Index.hs +++ b/Web/View/LandingPages/Index.hs @@ -1,28 +1,28 @@ module Web.View.LandingPages.Index where -import Web.View.Prelude -import Web.Element.Types -import Web.Element.ElementBuild +import Web.Element.Button import Web.Element.ElementWrap +import Web.Element.Link +import Web.Element.Types +import Web.View.Prelude data IndexView = IndexView { landingPages :: [LandingPage] } instance View IndexView where - html IndexView { .. } = [hsx| - {breadcrumb} - - {header} - {body} - - |] + html IndexView { .. } = + [ breadcrumb + , header + , body + ] + |> mconcat |> wrapVerticalSpacing AlignNone |> wrapContainerWide where header = - [ [hsx|Landing pages Index|] |> wrapHeaderTag 1 - , buildButton (pathTo NewLandingPageAction) "New Landing page" + [ [hsx|"Landing pages Index"|] |> wrapHeaderTag 1 + , renderButtonAction (NewLandingPageAction) "New Landing page" ] - |> mconcat - |> wrapHorizontalSpacing AlignNone + |> mconcat + |> wrapHorizontalSpacing AlignNone body = forEach landingPages renderLandingPage |> wrapListOl @@ -31,20 +31,17 @@ instance View IndexView where ] renderLandingPage :: LandingPage -> Html -renderLandingPage landingPage = [hsx| - {body} -|] +renderLandingPage landingPage = + [ cs landingPage.title + , operations + ] + |> mconcat + |> wrapHorizontalSpacingTiny AlignBaseline where - body = - [ cs landingPage.title - , operations - ] - |> mconcat - |> wrapHorizontalSpacingTiny AlignBaseline operations = - [ buildLink (ShowLandingPageAction landingPage.id) "Show" - , buildLink (EditLandingPageAction landingPage.id) "Edit" - , buildLinkDeleteAction (DeleteLandingPageAction landingPage.id) + [ renderLinkAction (ShowLandingPageAction landingPage.id) "Show" + , renderLinkAction (EditLandingPageAction landingPage.id) "Edit" + , renderLinkDeleteAction (DeleteLandingPageAction landingPage.id) ] - |> mconcat - |> wrapHorizontalSpacingTiny AlignCenter \ No newline at end of file + |> mconcat + |> wrapHorizontalSpacingTiny AlignCenter diff --git a/Web/View/LandingPages/Show.hs b/Web/View/LandingPages/Show.hs index fef1b5d..249688b 100644 --- a/Web/View/LandingPages/Show.hs +++ b/Web/View/LandingPages/Show.hs @@ -1,11 +1,12 @@ module Web.View.LandingPages.Show where -import Web.View.Prelude -import qualified Web.View.ParagraphCtas.Show as ParagraphCtas -import qualified Web.View.ParagraphQuotes.Show as ParagraphQuotes -import Web.Types -import Web.Element.Types -import Web.Element.ElementBuild + +import Web.Element.Cta import Web.Element.ElementWrap +import Web.Element.Link +import Web.Element.Types +import Web.Element.Quote +import Web.Types +import Web.View.Prelude data ShowView = ShowView { landingPageWithRecords :: LandingPageWithRecords } @@ -34,7 +35,7 @@ instance View ShowView where titleAndEdit = [ cs landingPage.title |> wrapHeaderTag 1 - , buildLink (EditLandingPageAction landingPage.id) "Edit" + , renderLinkAction (EditLandingPageAction landingPage.id) "Edit" ] |> mconcat |> wrapHorizontalSpacingTiny AlignBaseline @@ -43,39 +44,44 @@ instance View ShowView where orderAndRenderParagraphs :: (?context::ControllerContext) => LandingPageWithRecords -> Html orderAndRenderParagraphs landingPageWithRecords = ctas ++ quotes - |> sortOn fst - |> fmap snd - |> mconcat + -- Order by weight. + |> sortOn fst + |> fmap snd + |> mconcat where - paragraphCtas = landingPageWithRecords.paragraphCtas - paragraphQuotes = landingPageWithRecords.paragraphQuotes - paragraphCtaRefLandingPages = landingPageWithRecords.paragraphCtaRefLandingPages - ctas = paragraphCtas + ctas = landingPageWithRecords.paragraphCtas |> fmap (\paragraph -> - let - -- Get the referenced Landing page out of the ParagraphCTA, through the `ParagraphCtaRefLandingPageId` - -- property. - refLandingPageButton = - paragraphCtaRefLandingPages - -- Get the referenced Landing page - |> filter (\paragraphCtaRefLandingPage -> paragraphCtaRefLandingPage.id == paragraph.refLandingPageId) - |> head - -- Get the button from the referenced Landing page. - |> maybe "" (\landingPage -> buildButtonPrimary (pathTo $ ShowLandingPageAction landingPage.id) landingPage.title) - - in ( paragraph.weight - , ParagraphCtas.renderParagraph paragraph.title paragraph.body refLandingPageButton + , renderParagraphCta paragraph ) - ) - quotes = paragraphQuotes + quotes = landingPageWithRecords.paragraphQuotes |> fmap (\paragraph -> ( paragraph.weight - , case paragraph.imageUrl of - Just imageUrl -> ParagraphQuotes.renderParagraph paragraph.body paragraph.subtitle imageUrl - Nothing -> "" - )) + , renderParagraphQuote paragraph + ) + ) + +renderParagraphCta :: ParagraphCta -> Html +renderParagraphCta paragraphCta = + RenderCta + { title = paragraphCta.title + , body = paragraphCta.body + , button = RenderButton + { text = "Read More" + , url = pathTo $ ShowLandingPageAction paragraphCta.landingPageId + , isPrimary = False + } + } + |> Web.Element.Cta.render +renderParagraphQuote :: ParagraphQuote -> Html +renderParagraphQuote paragraphQuote = + RenderQuote + { body = paragraphQuote.body + , subtitle = paragraphQuote.subtitle + , imageUrl = paragraphQuote.imageUrl |> fromMaybe "" + } + |> Web.Element.Quote.render \ No newline at end of file diff --git a/Web/View/Layout.hs b/Web/View/Layout.hs index c4ff733..d460e89 100644 --- a/Web/View/Layout.hs +++ b/Web/View/Layout.hs @@ -9,23 +9,33 @@ import IHP.Controller.RequestContext import Web.Types import Web.Routes import Application.Helper.View +import Web.Element.ElementWrap +import Web.Element.Types -defaultLayout :: Html -> Html -defaultLayout inner = H.docTypeHtml ! A.lang "en" $ [hsx| - - {metaTags} +defaultLayout :: UTCTime -> Html -> Html +defaultLayout currentTime inner = [hsx| + + + + {metaTags} - {stylesheets} - {scripts} + {stylesheets} + {scripts} - {pageTitleOrDefault "App"} - - -
    - {renderFlashMessages} - {inner} -
    - + {pageTitleOrDefault "App"} + + +
    +
    +
    + {renderFlashMessages} + {inner} +
    +
    + {footer currentTime} +
    + + |] -- The 'assetPath' function used below appends a `?v=SOME_VERSION` to the static assets in production @@ -41,7 +51,7 @@ stylesheets = [hsx| scripts :: Html scripts = [hsx| {when isDevelopment devScripts} - + @@ -70,3 +80,33 @@ metaTags = [hsx| {autoRefreshMeta} |] + +footer :: UTCTime -> Html +footer currentTime = + [hsx| + {icons} + © {currentYear} Company, All rights reserved. +|] + |> wrapVerticalSpacing AlignCenter + |> wrapBackgroundColor Gray300 BackgroundColorPaddingSection + |> \element -> [hsx|
    {element}
    |] + where + icons = + [hsx| + {- Facebook -} + + + + + + + {- Instagram -} + + + + + + |] + |> wrapHorizontalSpacing AlignCenter + + currentYear = formatTime defaultTimeLocale "%Y" currentTime \ No newline at end of file diff --git a/Web/View/ParagraphCtas/Edit.hs b/Web/View/ParagraphCtas/Edit.hs index 2a05bcb..89b65f2 100644 --- a/Web/View/ParagraphCtas/Edit.hs +++ b/Web/View/ParagraphCtas/Edit.hs @@ -17,8 +17,7 @@ instance View EditView where |] where breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphCta" ParagraphCtaAction - , breadcrumbText "Edit ParagraphCta" + [ breadcrumbText "Edit Cta" ] renderForm :: ParagraphCta -> [LandingPage] -> Html @@ -38,8 +37,3 @@ renderForm paragraphCta landingPages = formFor paragraphCta [hsx| |] |> wrapVerticalSpacing AlignNone |> wrapContainerWide - -instance CanSelect LandingPage where - type SelectValue LandingPage = Id LandingPage - selectValue landingPage = landingPage.id - selectLabel landingPage = landingPage.title \ No newline at end of file diff --git a/Web/View/ParagraphCtas/Index.hs b/Web/View/ParagraphCtas/Index.hs deleted file mode 100644 index 723053b..0000000 --- a/Web/View/ParagraphCtas/Index.hs +++ /dev/null @@ -1,39 +0,0 @@ -module Web.View.ParagraphCtas.Index where -import Web.View.Prelude - -data IndexView = IndexView { paragraphCtas :: [ParagraphCta] } - -instance View IndexView where - html IndexView { .. } = [hsx| - {breadcrumb} - -

    Index

    -
    - - - - - - - - - - {forEach paragraphCtas renderParagraphCta} -
    ParagraphCta
    - -
    - |] - where - breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphCta" ParagraphCtaAction - ] - -renderParagraphCta :: ParagraphCta -> Html -renderParagraphCta paragraphCta = [hsx| - - {paragraphCta.title} - Show - Edit - Delete - -|] \ No newline at end of file diff --git a/Web/View/ParagraphCtas/New.hs b/Web/View/ParagraphCtas/New.hs index 265380b..af7059b 100644 --- a/Web/View/ParagraphCtas/New.hs +++ b/Web/View/ParagraphCtas/New.hs @@ -16,8 +16,7 @@ instance View NewView where |] where breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphCta" ParagraphCtaAction - , breadcrumbText "New ParagraphCta" + [ breadcrumbText "New Cta" ] renderForm :: ParagraphCta -> [LandingPage] -> Html @@ -37,8 +36,3 @@ renderForm paragraphCta landingPages = formFor paragraphCta [hsx| |] |> wrapVerticalSpacing AlignNone |> wrapContainerWide - -instance CanSelect LandingPage where - type SelectValue LandingPage = Id LandingPage - selectValue landingPage = landingPage.id - selectLabel landingPage = landingPage.title \ No newline at end of file diff --git a/Web/View/ParagraphCtas/Show.hs b/Web/View/ParagraphCtas/Show.hs deleted file mode 100644 index 9431821..0000000 --- a/Web/View/ParagraphCtas/Show.hs +++ /dev/null @@ -1,40 +0,0 @@ -module Web.View.ParagraphCtas.Show where -import Web.View.Prelude - -import Web.Element.Types -import Web.Element.ElementWrap -import Web.Element.InnerElementLayout -import Web.Element.ElementBuild (buildButtonPrimary) - -data ShowView = ShowView { paragraphCta :: ParagraphCta } - -instance View ShowView where - html ShowView { .. } = [hsx| - {breadcrumb} -

    Show ParagraphCta

    -

    {paragraphCta}

    - - |] - where - breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphCta" ParagraphCtaAction - , breadcrumbText "Show ParagraphCta" - ] - - - -renderParagraph :: Text -> Text -> Html -> Html -renderParagraph title body button = - titleWrapped - ++ bodyWrapped - ++ button - |> wrapVerticalSpacing AlignCenter - |> buildInnerElementLayout Gray100 - |> wrapContainerNarrow - where - titleWrapped = cs title - |> wrapHeaderTag 1 - - bodyWrapped = body - |> preEscapedToHtml - |> wrapProse \ No newline at end of file diff --git a/Web/View/ParagraphQuotes/Edit.hs b/Web/View/ParagraphQuotes/Edit.hs index 5fc2064..0e79457 100644 --- a/Web/View/ParagraphQuotes/Edit.hs +++ b/Web/View/ParagraphQuotes/Edit.hs @@ -12,6 +12,5 @@ instance View EditView where |] where breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphQuotes" ParagraphQuotesAction - , breadcrumbText "Edit ParagraphQuote" + [ breadcrumbText "Edit Quote" ] diff --git a/Web/View/ParagraphQuotes/Index.hs b/Web/View/ParagraphQuotes/Index.hs deleted file mode 100644 index 852a462..0000000 --- a/Web/View/ParagraphQuotes/Index.hs +++ /dev/null @@ -1,39 +0,0 @@ -module Web.View.ParagraphQuotes.Index where -import Web.View.Prelude - -data IndexView = IndexView { paragraphQuotes :: [ParagraphQuote] } - -instance View IndexView where - html IndexView { .. } = [hsx| - {breadcrumb} - -

    Index

    -
    - - - - - - - - - - {forEach paragraphQuotes renderParagraphQuote} -
    ParagraphQuote
    - -
    - |] - where - breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphQuotes" ParagraphQuotesAction - ] - -renderParagraphQuote :: ParagraphQuote -> Html -renderParagraphQuote paragraphQuote = [hsx| - - {paragraphQuote.subtitle} - Show - Edit - Delete - -|] \ No newline at end of file diff --git a/Web/View/ParagraphQuotes/New.hs b/Web/View/ParagraphQuotes/New.hs index e52652a..aa10b02 100644 --- a/Web/View/ParagraphQuotes/New.hs +++ b/Web/View/ParagraphQuotes/New.hs @@ -13,7 +13,6 @@ instance View NewView where |] where breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphQuotes" ParagraphQuotesAction - , breadcrumbText "New ParagraphQuote" + [ breadcrumbText "New Quote" ] diff --git a/Web/View/ParagraphQuotes/Show.hs b/Web/View/ParagraphQuotes/Show.hs deleted file mode 100644 index e3ad0c8..0000000 --- a/Web/View/ParagraphQuotes/Show.hs +++ /dev/null @@ -1,53 +0,0 @@ -module Web.View.ParagraphQuotes.Show where -import Web.View.Prelude -import Web.Element.Types -import Web.Element.ElementWrap -import Web.Element.InnerElementLayout -import "cryptonite" Crypto.PubKey.RSA.PKCS15 as RSA -import "cryptonite" Crypto.Hash.Algorithms as Hash.Algorithms -import qualified Config -import IHP.ControllerSupport -import Data.ByteString.Base64 as Base64 -import Application.Helper.Controller - -data ShowView = ShowView { paragraphQuote :: ParagraphQuote } - -instance View ShowView where - html ShowView { .. } = [hsx| - {breadcrumb} -

    Show ParagraphQuote

    -

    {paragraphQuote}

    - - |] - where - breadcrumb = renderBreadcrumb - [ breadcrumbLink "ParagraphQuotes" ParagraphQuotesAction - , breadcrumbText "Show ParagraphQuote" - ] - -renderParagraph :: Text -> Text -> Text -> Html -renderParagraph body subtitle imageUrl = - quotationSign - ++ bodyWrapped - ++ titleWrapped - |> wrapVerticalSpacing AlignNone - |> buildElementLayoutSplitImageAndContent (pathTo $ RenderImageStyleAction 400 200 imageUrl signed) - where - - -- Sign the image URL to prevent tampering. - signed = signImageUrl imageUrl 400 200 - - -- https://iconmonstr.com/quote-3-svg/ - quotationSign = [hsx| - - - - - |] - bodyWrapped = body - |> preEscapedToHtml - |> wrapTextResponsiveFontSize TextSize2xl - - titleWrapped = cs subtitle - |> wrapTextResponsiveFontSize TextSizeSm - diff --git a/Web/View/Prelude.hs b/Web/View/Prelude.hs index f4d104b..e583fd1 100644 --- a/Web/View/Prelude.hs +++ b/Web/View/Prelude.hs @@ -1,13 +1,11 @@ module Web.View.Prelude ( module IHP.ViewPrelude -, module Web.View.Layout , module Generated.Types , module Web.Types , module Application.Helper.View ) where import IHP.ViewPrelude -import Web.View.Layout import Generated.Types import Web.Types import Web.Routes () diff --git a/Web/View/StyleGuide/Index.hs b/Web/View/StyleGuide/Index.hs new file mode 100644 index 0000000..51576c7 --- /dev/null +++ b/Web/View/StyleGuide/Index.hs @@ -0,0 +1,99 @@ +module Web.View.StyleGuide.Index where +import Data.Text +import Web.Element.Types +import Web.View.Prelude + +import Web.Element.Cta +import Web.Element.PageTitle +import Web.Element.Quote + +data IndexView = IndexView { } + +instance View IndexView where + html IndexView { .. } = + [ breadcrumb + , elementsAccordion + + -- Include the JavaScript for the accordion. + , jsScript + ] + |> mconcat + where + breadcrumb = renderBreadcrumb + [ breadcrumbLink "Style Guide" StyleGuideAction + ] + + elementsAccordion = [hsx| +
    + { elements } +
    + |] + + jsScript = [hsx| + + |] + + -- All the elements to be displayed in the Style Guide. + elements = + [ renderTitleAndElementWideContainer "Page Title" pageTitle + , renderTitleAndElementNoContainer "CTA" cta + , renderTitleAndElementNoContainer "Quote" quote + ] + |> mconcat + + pageTitle = "The source has extended, but not everyone fears it" + |> Web.Element.PageTitle.render + + cta = RenderCta + { title = "Hello, World!" + , body = "This is a test of the __emergency__ broadcast system." + , button = RenderButton + { text = "Click me!" + , url = "/" + , isPrimary = False + } + } + |> Web.Element.Cta.render + + quote = RenderQuote + { body = "The quick brown fox jumps over the lazy dog" + , subtitle = "An old proverb" + , imageUrl = "/styleGuideImages/8f8827de-e5d4-4ee7-b0a3-abae36274338" + } + |> Web.Element.Quote.render + +renderTitleAndElementNoContainer :: Text -> Html -> Html +renderTitleAndElementNoContainer title element = + renderTitleAndElementHelper title Nothing element Nothing + +renderTitleAndElementWideContainer :: Text -> Html -> Html +renderTitleAndElementWideContainer title element = + renderTitleAndElementHelper title Nothing element (Just "container-wide") + +renderTitleAndElementHelper :: Text -> Maybe Text -> Html -> Maybe Text -> Html +renderTitleAndElementHelper title maybeUrl element maybeContainerClass = [hsx| + { header } +
    + { element } +
    + |] + + + where + uniqueId = title |> toLower |> Data.Text.replace " " "-" + + header = [hsx| +
    + { title } + + { maybeLink } +
    + |] + + maybeLink = case maybeUrl of + Just url -> [hsx| +
    + See design +
    + |] + Nothing -> "" diff --git a/flake.nix b/flake.nix index 8a2646b..c1a43ee 100644 --- a/flake.nix +++ b/flake.nix @@ -43,6 +43,7 @@ text hlint jwt + mmark ]; }; diff --git a/static/styleGuide.js b/static/styleGuide.js new file mode 100644 index 0000000..912b0e0 --- /dev/null +++ b/static/styleGuide.js @@ -0,0 +1,48 @@ +$(document).on('ihp:unload', () => { + document.initStyleGuide = false; +}); + +$(document).on('ihp:load', () => { + initStyleGuide(); +}); + +const initStyleGuide = function () { + if (Boolean(document.initStyleGuide) === true) { + // Already binded. + return; + } + document.initStyleGuide = true; + + // Hide all panels on load. + $('.accordion > dd').hide(); + + $('.accordion a.title-wrapper').click(function (event) { + event.preventDefault(); + const $this = $(this); + // Update the URL hash. + window.location.hash = $this.attr('href'); + $this.parent().next().slideToggle(400, function () { + if (typeof $.fn.slick != 'function') { + // No slick installed. + return; + } + // Re-position any slick sliders in this panel. + const $slick = $(this).find('.slick-initialized'); + if (!$slick.length) { + // No slick sliders. + return; + } + $slick.slick('setPosition'); + }); + }); + + // Check if hash exist, and if so try to open its pane. + if (window.location.hash) { + // Puts hash in variable, and removes the # character. + const hash = window.location.hash.substring(1); + $('.accordion #' + hash).click(); + + } +}; + + diff --git a/static/styleGuideImages/8f8827de-e5d4-4ee7-b0a3-abae36274338 b/static/styleGuideImages/8f8827de-e5d4-4ee7-b0a3-abae36274338 new file mode 100644 index 0000000000000000000000000000000000000000..654b4d53656d19909531c316f6c2f8f1123c79d1 GIT binary patch literal 126254 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 literal 0 HcmV?d00001