mirror of
https://gitlab.com/upRootNutrition/website.git
synced 2025-06-16 04:25:11 -05:00
440 lines
11 KiB
Elm
Executable file
440 lines
11 KiB
Elm
Executable file
module Donate.Helpers exposing (..)
|
|
|
|
import Config.CardFormat exposing (..)
|
|
import Config.Colour exposing (..)
|
|
import Config.Format exposing (..)
|
|
import Config.StrengthBar exposing (..)
|
|
import Config.ToolTip exposing (..)
|
|
import Donate.Methods.Cardano exposing (donateCardano)
|
|
import Donate.Methods.KoFi exposing (donateKoFi)
|
|
import Donate.Methods.LiberaPay exposing (donateLiberaPay)
|
|
import Donate.Methods.Merch exposing (donateMerch)
|
|
import Donate.Methods.Patreon exposing (donatePatreon)
|
|
import Donate.Methods.PayPal exposing (donatePayPal)
|
|
import Donate.Methods.YouTube exposing (donateYouTube)
|
|
import Donate.Types exposing (..)
|
|
import Effect exposing (Effect)
|
|
import Element as E exposing (..)
|
|
import Element.Background as B exposing (..)
|
|
import Element.Border as D
|
|
import Element.Font as F
|
|
import Html.Attributes as H exposing (style)
|
|
import Layouts
|
|
import Page exposing (Page)
|
|
import Route exposing (Route)
|
|
import Shared
|
|
import View exposing (View)
|
|
|
|
|
|
donateMaker : Donate -> Element msg
|
|
donateMaker donate =
|
|
row
|
|
topLevelBox
|
|
[ cardImageMaker (donateImage donate) (donateLink donate)
|
|
, cardMaker
|
|
[ cardTitleMaker (donateTitle donate)
|
|
, cardFormatter
|
|
[ cardContentSpacing
|
|
[ column
|
|
fieldSpacer
|
|
[ feeMaker donate
|
|
, preferenceMaker donate
|
|
, tableMaker donate
|
|
, proTitleMaker donate
|
|
, proMaker donate
|
|
, conTitleMaker donate
|
|
, conMaker donate
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
|
|
|
|
donateMakerMobile : Donate -> Element msg
|
|
donateMakerMobile donate =
|
|
row
|
|
topLevelBox
|
|
[ column [] []
|
|
, cardMaker
|
|
[ cardTitleMaker (donateTitle donate)
|
|
, cardFormatter
|
|
[ cardContentSpacing
|
|
[ column
|
|
fieldSpacer
|
|
[ cardImageMakerMobile (donateImage donate)
|
|
(donateLink donate)
|
|
, feeMaker donate
|
|
, preferenceMaker donate
|
|
, tableMakerMobile donate
|
|
, proTitleMaker donate
|
|
, proMaker donate
|
|
, conTitleMaker donate
|
|
, conMaker donate
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
|
|
|
|
donateImage :
|
|
Donate
|
|
->
|
|
{ src : String
|
|
, description : String
|
|
}
|
|
donateImage donate =
|
|
{ src = "donate/" ++ donate.donateImage ++ ".png"
|
|
, description = donate.donateName
|
|
}
|
|
|
|
|
|
donateTitle : Donate -> String
|
|
donateTitle donate =
|
|
donate.donateName
|
|
|
|
|
|
donateLink : Donate -> String
|
|
donateLink donate =
|
|
donate.donateLink
|
|
|
|
|
|
donateWidth =
|
|
width <| px 45
|
|
|
|
|
|
feeMaker : Donate -> Element msg
|
|
feeMaker donate =
|
|
row
|
|
(paragraphBoldFormat
|
|
++ [ F.size 18
|
|
, E.width fill
|
|
]
|
|
)
|
|
[ column
|
|
[ alignTop
|
|
, donateWidth
|
|
]
|
|
[ text "Fees:"
|
|
]
|
|
, column
|
|
[ E.width fill
|
|
, alignLeft
|
|
]
|
|
[ paragraph [ F.regular ]
|
|
[ el [ F.color colourTheme.textLightOrange ] <|
|
|
text donate.donateFees
|
|
]
|
|
]
|
|
]
|
|
|
|
|
|
proTitleMaker : Donate -> Element msg
|
|
proTitleMaker donate =
|
|
row paragraphBoldFormat
|
|
[ column
|
|
[ alignTop
|
|
, width <| px 80
|
|
]
|
|
[ text "Pros:"
|
|
]
|
|
]
|
|
|
|
|
|
conTitleMaker : Donate -> Element msg
|
|
conTitleMaker donate =
|
|
row paragraphBoldFormat
|
|
[ column
|
|
[ alignTop
|
|
, width <| px 80
|
|
]
|
|
[ text "Cons:"
|
|
]
|
|
]
|
|
|
|
|
|
proMaker : Donate -> Element msg
|
|
proMaker donate =
|
|
column
|
|
[ spacing 8
|
|
, width fill
|
|
, paddingEach
|
|
{ top = 0
|
|
, right = 0
|
|
, bottom = 0
|
|
, left = 35
|
|
}
|
|
]
|
|
<|
|
|
List.map2 (\x y -> makePro x)
|
|
donate.donatePros
|
|
(List.range 1 (List.length donate.donatePros))
|
|
|
|
|
|
makePro : Pros -> Element msg
|
|
makePro pro =
|
|
column
|
|
(paragraphAlignLeft
|
|
++ [ spacing 8
|
|
, width fill
|
|
]
|
|
)
|
|
[ paragraph [ F.regular ]
|
|
[ text ("‣ " ++ pro.pro) ]
|
|
]
|
|
|
|
|
|
conMaker : Donate -> Element msg
|
|
conMaker donate =
|
|
column
|
|
[ spacing 8
|
|
, width fill
|
|
, paddingEach
|
|
{ top = 0
|
|
, right = 0
|
|
, bottom = 0
|
|
, left = 35
|
|
}
|
|
]
|
|
<|
|
|
List.map2 (\x y -> makeCon x)
|
|
donate.donateCons
|
|
(List.range 1 (List.length donate.donateCons))
|
|
|
|
|
|
makeCon : Cons -> Element msg
|
|
makeCon con =
|
|
column
|
|
(paragraphAlignLeft
|
|
++ [ spacing 8
|
|
, width fill
|
|
]
|
|
)
|
|
[ paragraph [ F.regular ]
|
|
[ text ("‣ " ++ con.con) ]
|
|
]
|
|
|
|
|
|
preferenceMaker : Donate -> Element msg
|
|
preferenceMaker donate =
|
|
row
|
|
[ width fill
|
|
, height fill
|
|
]
|
|
[ column
|
|
[ E.alignTop
|
|
, E.alignLeft
|
|
]
|
|
[ paragraph
|
|
(paragraphBoldFormat
|
|
++ [ F.size 18
|
|
, alignLeft
|
|
, E.width fill
|
|
]
|
|
)
|
|
[ el
|
|
[ tooltip
|
|
"This represents how strongly I prefer a given platform relative to other platforms."
|
|
]
|
|
(el
|
|
[ paddingEach
|
|
{ top = 0
|
|
, right = 10
|
|
, bottom = 0
|
|
, left = 0
|
|
}
|
|
]
|
|
<|
|
|
text "Preference:"
|
|
)
|
|
]
|
|
]
|
|
, barPadding
|
|
[ barMaker getPreferenceTooltip donate.donatePreference ]
|
|
]
|
|
|
|
|
|
getPreferenceTooltip : Int -> String
|
|
getPreferenceTooltip num =
|
|
case num of
|
|
0 ->
|
|
"Disdain this platform."
|
|
|
|
1 ->
|
|
"Very negative towards this platform."
|
|
|
|
2 ->
|
|
"Strongly dislike this platform."
|
|
|
|
3 ->
|
|
"Dislike this platform."
|
|
|
|
4 ->
|
|
"Somewhat dislike this platform."
|
|
|
|
5 ->
|
|
"Neutral, no strong feelings."
|
|
|
|
6 ->
|
|
"Somewhat like this platform."
|
|
|
|
7 ->
|
|
"Like this platform."
|
|
|
|
8 ->
|
|
"Strongly like this platform."
|
|
|
|
9 ->
|
|
"Very positive towards this platform."
|
|
|
|
10 ->
|
|
"Absolutely love this platform!"
|
|
|
|
_ ->
|
|
"Preference is out of bounds."
|
|
|
|
|
|
tableMaker : Donate -> Element msg
|
|
tableMaker donate =
|
|
column
|
|
[ centerX
|
|
, E.width fill
|
|
]
|
|
[ wrappedRow
|
|
(paragraphBoldFormat
|
|
++ [ E.alignLeft
|
|
, E.width fill
|
|
, htmlAttribute <| H.style "position" "relative"
|
|
]
|
|
)
|
|
[ E.table
|
|
[ spacing 0
|
|
, D.rounded 10
|
|
, D.width 2
|
|
, D.color colourTheme.textDarkGrey
|
|
, clip
|
|
]
|
|
{ data = donate.donateFeatures
|
|
, columns =
|
|
List.map createColumn
|
|
[ { label = "Zero Fees"
|
|
, getter = .free
|
|
}
|
|
, { label = "Subscriptions"
|
|
, getter = .subscriptions
|
|
}
|
|
, { label = "User Friendly"
|
|
, getter = .userFriendly
|
|
}
|
|
, { label = "Anonymous"
|
|
, getter = .anonymous
|
|
}
|
|
, { label = "Rewards"
|
|
, getter = .rewardTiers
|
|
}
|
|
]
|
|
}
|
|
]
|
|
]
|
|
|
|
|
|
tableMakerMobile : Donate -> Element msg
|
|
tableMakerMobile donate =
|
|
column
|
|
[ centerX
|
|
, E.width fill
|
|
]
|
|
[ wrappedRow
|
|
(paragraphBoldFormat
|
|
++ [ E.alignLeft
|
|
, E.width fill
|
|
, htmlAttribute <| H.style "position" "relative"
|
|
]
|
|
)
|
|
[ E.table
|
|
[ spacing 0
|
|
, D.rounded 10
|
|
, D.width 2
|
|
, D.color colourTheme.textDarkGrey
|
|
, clip
|
|
]
|
|
{ data = donate.donateFeatures
|
|
, columns =
|
|
List.map createColumn
|
|
[ { label = "Free"
|
|
, getter = .free
|
|
}
|
|
, { label = "Subs"
|
|
, getter = .subscriptions
|
|
}
|
|
, { label = "Easy"
|
|
, getter = .userFriendly
|
|
}
|
|
, { label = "Safe"
|
|
, getter = .anonymous
|
|
}
|
|
]
|
|
}
|
|
]
|
|
]
|
|
|
|
|
|
createColumn : { label : String, getter : Features -> Maybe Bool } -> Column Features msg
|
|
createColumn { label, getter } =
|
|
{ header =
|
|
el
|
|
[ F.bold
|
|
, D.widthEach
|
|
{ bottom = 1
|
|
, top = 1
|
|
, left = 1
|
|
, right = 1
|
|
}
|
|
, D.color colourTheme.textDarkGrey
|
|
, padding 8
|
|
, E.width fill
|
|
, F.center
|
|
]
|
|
(text label)
|
|
|> el [ F.color colourTheme.textLightOrange ]
|
|
, width = fill
|
|
, view =
|
|
\feature ->
|
|
row
|
|
[ F.color colourTheme.textLightOrange
|
|
, F.bold
|
|
, D.widthEach
|
|
{ bottom = 1
|
|
, top = 0
|
|
, left = 1
|
|
, right = 1
|
|
}
|
|
, D.color colourTheme.textDarkGrey
|
|
, padding 8
|
|
, E.height fill
|
|
]
|
|
[ row [ centerX ]
|
|
[ paragraph []
|
|
[ E.image
|
|
[ E.width <| px 30
|
|
, E.height <| px 30
|
|
]
|
|
(featureToString (getter feature))
|
|
]
|
|
]
|
|
]
|
|
}
|
|
|
|
|
|
featureToString : Maybe Bool -> { src : String, description : String }
|
|
featureToString maybeBool =
|
|
case maybeBool of
|
|
Just True ->
|
|
{ src = "donate/checkmark.png", description = "" }
|
|
|
|
Just False ->
|
|
{ src = "donate/ex.png", description = "" }
|
|
|
|
Nothing ->
|
|
{ src = "donate/question.png", description = "" }
|