feat: added contacts
|
@ -84,6 +84,8 @@ cardImageMaker image =
|
||||||
, D.width 5
|
, D.width 5
|
||||||
, D.color colourTheme.backgroundDarkGrey
|
, D.color colourTheme.backgroundDarkGrey
|
||||||
, B.color colourTheme.backgroundDarkGrey
|
, B.color colourTheme.backgroundDarkGrey
|
||||||
|
, mouseOver [ D.color colourTheme.textDarkOrange]
|
||||||
|
, htmlAttribute <| style "transition" "all 0.1s ease-in-out"
|
||||||
]
|
]
|
||||||
[ E.image
|
[ E.image
|
||||||
[ alignRight
|
[ alignRight
|
||||||
|
|
|
@ -22,7 +22,7 @@ pageList : List (Attribute msg)
|
||||||
pageList =
|
pageList =
|
||||||
[ spacing 30
|
[ spacing 30
|
||||||
, centerX
|
, centerX
|
||||||
, centerY
|
, alignTop
|
||||||
, paddingEach { top = 30, bottom = 30, left = 30, right = 30 }
|
, paddingEach { top = 30, bottom = 30, left = 30, right = 30 }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,6 @@ type alias PageInput =
|
||||||
, pageHyperBlog : String
|
, pageHyperBlog : String
|
||||||
, pageInterviews : String
|
, pageInterviews : String
|
||||||
, pageNutriDex : String
|
, pageNutriDex : String
|
||||||
, pagePlatforms : String
|
|
||||||
, pageServices : String
|
, pageServices : String
|
||||||
, pageDonate : String
|
, pageDonate : String
|
||||||
}
|
}
|
||||||
|
@ -20,7 +19,6 @@ pageNames : PageInput
|
||||||
pageNames =
|
pageNames =
|
||||||
{ pageRoot = "home"
|
{ pageRoot = "home"
|
||||||
, pageHome = "upRootNutrition"
|
, pageHome = "upRootNutrition"
|
||||||
, pagePlatforms = "platforms"
|
|
||||||
, pageServices = "services"
|
, pageServices = "services"
|
||||||
, pageDodgers = "cuckList"
|
, pageDodgers = "cuckList"
|
||||||
, pageDebate = "arguments"
|
, pageDebate = "arguments"
|
||||||
|
@ -77,11 +75,6 @@ nutriDexName =
|
||||||
createPageName pageNames.pageNutriDex
|
createPageName pageNames.pageNutriDex
|
||||||
|
|
||||||
|
|
||||||
platformsName : String
|
|
||||||
platformsName =
|
|
||||||
createPageName pageNames.pagePlatforms
|
|
||||||
|
|
||||||
|
|
||||||
servicesName : String
|
servicesName : String
|
||||||
servicesName =
|
servicesName =
|
||||||
createPageName pageNames.pageServices
|
createPageName pageNames.pageServices
|
||||||
|
|
14
frontend/src/Config/Viewport.elm
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
module Config.Viewport exposing (..)
|
||||||
|
|
||||||
|
import Browser.Dom as Dom
|
||||||
|
import Effect exposing (..)
|
||||||
|
import Task
|
||||||
|
|
||||||
|
|
||||||
|
type Msg
|
||||||
|
= NoOp
|
||||||
|
|
||||||
|
|
||||||
|
resetViewport : Cmd Msg
|
||||||
|
resetViewport =
|
||||||
|
Task.perform (\_ -> NoOp) (Dom.setViewport 0 0)
|
|
@ -1,3 +1,425 @@
|
||||||
module Contact.Helpers exposing (..)
|
module Contact.Helpers exposing (..)
|
||||||
|
|
||||||
|
import Config.CardFormat exposing (..)
|
||||||
|
import Config.Colour exposing (..)
|
||||||
|
import Config.Format exposing (..)
|
||||||
|
import Config.StrengthBar exposing (..)
|
||||||
|
import Config.ToolTip exposing (..)
|
||||||
|
import Contact.Methods.Discord exposing (contactDiscord)
|
||||||
import Contact.Types exposing (..)
|
import Contact.Types exposing (..)
|
||||||
|
import Effect exposing (Effect)
|
||||||
|
import Element as E exposing (..)
|
||||||
|
import Element.Background as B exposing (..)
|
||||||
|
import Element.Border as D
|
||||||
|
import Element.Events exposing (onClick)
|
||||||
|
import Element.Font as F
|
||||||
|
import Headers.Types exposing (..)
|
||||||
|
import Html.Attributes as H exposing (style)
|
||||||
|
import Html.Events exposing (onMouseOver)
|
||||||
|
import Interviews.Types exposing (..)
|
||||||
|
import Layouts
|
||||||
|
import Page exposing (Page)
|
||||||
|
import Products.Types exposing (..)
|
||||||
|
import Route exposing (Route)
|
||||||
|
import Shared
|
||||||
|
import View exposing (View)
|
||||||
|
|
||||||
|
|
||||||
|
contactMaker : Contact -> Element msg
|
||||||
|
contactMaker contact =
|
||||||
|
row
|
||||||
|
topLevelBox
|
||||||
|
[ cardImageMaker (contactImage contact)
|
||||||
|
, cardMaker
|
||||||
|
[ cardTitleMaker (contactTitle contact)
|
||||||
|
, cardFormatter
|
||||||
|
[ cardContentSpacing
|
||||||
|
[ column
|
||||||
|
fieldSpacer
|
||||||
|
[ linkMaker contact
|
||||||
|
, descriptionMaker contact
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
contactImage :
|
||||||
|
Contact
|
||||||
|
->
|
||||||
|
{ src : String
|
||||||
|
, description : String
|
||||||
|
}
|
||||||
|
contactImage contact =
|
||||||
|
{ src = "contact/" ++ contact.contactImage ++ ".png"
|
||||||
|
, description = contact.contactName
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
contactTitle : Contact -> String
|
||||||
|
contactTitle contact =
|
||||||
|
contact.contactName
|
||||||
|
|
||||||
|
|
||||||
|
descriptionMaker : Contact -> Element msg
|
||||||
|
descriptionMaker contact =
|
||||||
|
column
|
||||||
|
[ width fill
|
||||||
|
, height fill
|
||||||
|
]
|
||||||
|
[ column [ width fill, F.size 15, spacing 10 ] <|
|
||||||
|
List.map makeDescription
|
||||||
|
contact.contactEntry
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
makeDescription : Method -> Element msg
|
||||||
|
makeDescription method =
|
||||||
|
paragraph
|
||||||
|
[ F.regular
|
||||||
|
, F.alignLeft
|
||||||
|
]
|
||||||
|
[ row []
|
||||||
|
[ paragraph
|
||||||
|
[ F.color colourTheme.textLightGrey
|
||||||
|
]
|
||||||
|
[ text method.contactInstructions
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
linkMaker : Contact -> Element msg
|
||||||
|
linkMaker contact =
|
||||||
|
row
|
||||||
|
(paragraphBoldFormat
|
||||||
|
++ [ F.size 18
|
||||||
|
, spacing 8
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ paragraphLinkFormat
|
||||||
|
{ url = contact.contactLink
|
||||||
|
, label = transitionHighlightedLinkHover <| text contact.contactLinkLabel
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
instructionMaker : Element msg
|
||||||
|
instructionMaker =
|
||||||
|
row
|
||||||
|
topLevelBox
|
||||||
|
[ column
|
||||||
|
[ E.width <| px 785
|
||||||
|
, D.width 5
|
||||||
|
, D.color colourTheme.backgroundDarkGrey
|
||||||
|
, D.roundEach
|
||||||
|
{ topLeft = 32
|
||||||
|
, topRight = 32
|
||||||
|
, bottomRight = 32
|
||||||
|
, bottomLeft = 32
|
||||||
|
}
|
||||||
|
]
|
||||||
|
[ paragraph
|
||||||
|
(nonHighlightedTitleFormat
|
||||||
|
++ [ F.size 20
|
||||||
|
, B.color colourTheme.textDarkOrange
|
||||||
|
, paddingEach
|
||||||
|
{ top = 6
|
||||||
|
, bottom = 3
|
||||||
|
, left = 25
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
|
, alignBottom
|
||||||
|
, width fill
|
||||||
|
, F.center
|
||||||
|
, D.roundEach
|
||||||
|
{ topLeft = 26
|
||||||
|
, topRight = 26
|
||||||
|
, bottomRight = 0
|
||||||
|
, bottomLeft = 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "CONTACT" ]
|
||||||
|
, cardFormatter
|
||||||
|
[ cardContentSpacing
|
||||||
|
[ column
|
||||||
|
fieldSpacer
|
||||||
|
[ paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.size 18
|
||||||
|
, F.center
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ instructionBody ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
instructionBody : Element msg
|
||||||
|
instructionBody =
|
||||||
|
column [ spacing 10 ]
|
||||||
|
[ paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "The following terms may seem unreasonable to some, but after years on a large platform, I've learned the importance of filtering the criticisms I receive. Most feedback I receive is just vague gesturing and lacks substance, making some sort of quality filter essential. Thank you for your patience and understanding." ]
|
||||||
|
, paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "Please keep in mind that any failure to comply with the following terms and conditions will forfeit your access to my time and attention. I ask that you respect my time and read these terms carefully. You are the one requesting an audience with me, and my time is mine to donate as I see fit. If you wish to submit your criticisms, you must do so on my terms, following the rules and conditions that streamline the process for me." ]
|
||||||
|
, paragraph
|
||||||
|
(paragraphBoldFormat
|
||||||
|
++ [ F.center
|
||||||
|
, width fill
|
||||||
|
, paddingEach
|
||||||
|
{ top = 10
|
||||||
|
, bottom = 10
|
||||||
|
, left = 0
|
||||||
|
, right = 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ el
|
||||||
|
(orangeFormat ++ [ F.size 18 ])
|
||||||
|
<|
|
||||||
|
text "Terms and Conditions"
|
||||||
|
]
|
||||||
|
, column [ spacing 10 ] <|
|
||||||
|
List.indexedMap
|
||||||
|
(\index term ->
|
||||||
|
row
|
||||||
|
[ spacing 10
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
[ column
|
||||||
|
[ width <| px 15
|
||||||
|
, alignTop
|
||||||
|
, alignRight
|
||||||
|
]
|
||||||
|
[ el [] <| text (String.fromInt (index + 1) ++ ". ") ]
|
||||||
|
, column
|
||||||
|
[ spacing 10
|
||||||
|
, width fill
|
||||||
|
, alignRight
|
||||||
|
]
|
||||||
|
[ paragraph
|
||||||
|
[ width fill
|
||||||
|
, F.size 16
|
||||||
|
]
|
||||||
|
term
|
||||||
|
]
|
||||||
|
]
|
||||||
|
)
|
||||||
|
termsAndConditions
|
||||||
|
, paragraph
|
||||||
|
(paragraphBoldFormat
|
||||||
|
++ [ F.center
|
||||||
|
, width fill
|
||||||
|
, paddingEach
|
||||||
|
{ top = 10
|
||||||
|
, bottom = 10
|
||||||
|
, left = 0
|
||||||
|
, right = 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ el (orangeFormat ++ [ F.size 18 ]) <| text "Additional Clarifications" ]
|
||||||
|
, paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "• "
|
||||||
|
, text "You are only allowed to post one criticism at a time in the "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = "https://discord.com/channels/692563032546476062/1301247050796634182"
|
||||||
|
, label = el orangeFormat <| text "🔎┃criticism"
|
||||||
|
}
|
||||||
|
, text " channel. You may post an additional criticism only after the previous one has been addressed and resolved to my satisfaction. This policy aims to reduce spamming, rambling, and Gish galloping, and to encourage linear discourse."
|
||||||
|
]
|
||||||
|
, paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "• ", text "You may or may not be asked to voice chat about your criticism. While your willingness to engage in voice chat is a necessary condition for submitting your criticism, it does not guarantee that a voice chat will be requested. If your initial criticism is clear and I agree with it, then no voice chat will be required." ]
|
||||||
|
, paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "• ", text "You may or may not be asked to have your criticism formalized. While your willingness to have your criticism formalized is a necessary condition for submitting your criticism, it does not guarantee that a formalization will be requested. If your initial criticism is clear and I agree with it, then no formalization will be required." ]
|
||||||
|
, paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "• "
|
||||||
|
, text "If I find it necessary to access a text-based channel (for simple clarifying questions, for example), then either I or a moderator will open a new thread in the "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = "https://discord.com/channels/692563032546476062/1301247050796634182"
|
||||||
|
, label = el orangeFormat <| text "🔎┃criticism"
|
||||||
|
}
|
||||||
|
, text " channel. There we can then engage in a text-based discussion and/or ping other users if needed."
|
||||||
|
]
|
||||||
|
, paragraph
|
||||||
|
(paragraphFormat
|
||||||
|
++ [ F.alignLeft
|
||||||
|
, width fill
|
||||||
|
]
|
||||||
|
)
|
||||||
|
[ text "• ", text "I will only request that your criticism be formalized if I do not understand it and we have exhausted all other reasonable means of clarification. If formalization is requested, you will not need to do it yourself, as I recognize that not everyone understands formal logic. If formalization is requested and I am unavailable to assist you, you may ping the @Logic role, and another user may help you." ]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
darkFormat : Attr decorative msg
|
||||||
|
darkFormat =
|
||||||
|
F.color colourTheme.textDarkGrey
|
||||||
|
|
||||||
|
|
||||||
|
orangeFormat : List (Attr () msg)
|
||||||
|
orangeFormat =
|
||||||
|
[ F.color colourTheme.textLightOrange
|
||||||
|
, mouseOver [ F.color colourTheme.textDarkOrange ]
|
||||||
|
, htmlAttribute <| style "transition" "all 0.1s ease-in-out"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
termsAndConditions : List (List (Element msg))
|
||||||
|
termsAndConditions =
|
||||||
|
[ [ row [ alignLeft ]
|
||||||
|
[ text "You will register an account with "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = "https://discord.com/login"
|
||||||
|
, label = el orangeFormat <| text "Discord"
|
||||||
|
}
|
||||||
|
, text " (if you haven't already)."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ row [ alignLeft ]
|
||||||
|
[ text "You will join the "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = ""
|
||||||
|
, label = el orangeFormat <| text "upRootNutrition Discord Server"
|
||||||
|
}
|
||||||
|
, text " (if you haven't already)."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ el [ alignLeft ] <| text "You will click the \"😃\" emoji to enter the server (if you haven't already)." ]
|
||||||
|
, [ row [ alignLeft ]
|
||||||
|
[ text "You will locate the "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = ""
|
||||||
|
, label = el orangeFormat <| text "💻┃general"
|
||||||
|
}
|
||||||
|
, text " channel in General category."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ column [ alignLeft, width fill, spacing 10 ]
|
||||||
|
[ row [ alignLeft ] [ paragraph [] [ text "You will post exactly this in the 💻┃general channel:" ] ]
|
||||||
|
, row [ alignLeft ]
|
||||||
|
[ paragraph
|
||||||
|
[ paddingEach
|
||||||
|
{ top = 0
|
||||||
|
, bottom = 0
|
||||||
|
, left = 20
|
||||||
|
, right = 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
[ text "• "
|
||||||
|
, text "\"@Moderators I have a criticism for Nick.\""
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ el [ alignLeft ] <| text "You will then receive the @Critic role." ]
|
||||||
|
, [ row [ alignLeft ]
|
||||||
|
[ text "You will locate the "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = ""
|
||||||
|
, label = el orangeFormat <| text "🔎┃criticism"
|
||||||
|
}
|
||||||
|
, text " channel in the General category."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ row [ alignLeft ]
|
||||||
|
[ text "You will post your criticism in the "
|
||||||
|
, newTabLink []
|
||||||
|
{ url = ""
|
||||||
|
, label = el orangeFormat <| text "🔎┃criticism"
|
||||||
|
}
|
||||||
|
, text " channel with this exact format:"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ column
|
||||||
|
[ paddingEach
|
||||||
|
{ top = 15
|
||||||
|
, bottom = 15
|
||||||
|
, left = 20
|
||||||
|
, right = 15
|
||||||
|
}
|
||||||
|
, B.color colourTheme.backgroundLightGrey
|
||||||
|
, D.rounded 30
|
||||||
|
, width fill
|
||||||
|
, spacing 8
|
||||||
|
]
|
||||||
|
[ text "Hello, <@191027366640877568>, I have a criticism for you."
|
||||||
|
, row [ alignLeft ]
|
||||||
|
[ paragraph []
|
||||||
|
[ text "Proposition: "
|
||||||
|
, el [ darkFormat ] <| text "specify the exact proposition you are addressing."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, row [ alignLeft ]
|
||||||
|
[ paragraph []
|
||||||
|
[ text "Link: "
|
||||||
|
, el [ darkFormat ] <| text "provide a url to the claim, with a timestamp if applicable."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, row [ alignLeft ]
|
||||||
|
[ paragraph []
|
||||||
|
[ text "Reason for Error: "
|
||||||
|
, el [ darkFormat ] <| text "explain exactly why you believe this claim is in error."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, row [ alignLeft ]
|
||||||
|
[ paragraph []
|
||||||
|
[ text "Suggested Correction (if any): "
|
||||||
|
, el [ darkFormat ] <| text "provide the corrected information or perspective."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, row [ alignLeft ]
|
||||||
|
[ paragraph []
|
||||||
|
[ text "Additional Comments: "
|
||||||
|
, el [ darkFormat ] <| text "any other relevant thoughts or context."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ el [ alignLeft ] <| text "You will not post additional criticisms until the last one has been resolved." ]
|
||||||
|
, [ row [ alignLeft ]
|
||||||
|
[ text "You will not post anything other than criticisms in the "
|
||||||
|
, newTabLink [ alignLeft ]
|
||||||
|
{ url = ""
|
||||||
|
, label = el orangeFormat <| text "🔎┃criticism"
|
||||||
|
}
|
||||||
|
, text " channel."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, [ el [ alignLeft ] <| text "You must be willing to converse over voice chat." ]
|
||||||
|
, [ el [ alignLeft ] <| text "You must be willing to have your criticism formalized." ]
|
||||||
|
]
|
||||||
|
|
|
@ -1,3 +1,22 @@
|
||||||
module Contact.Methods.Discord exposing (..)
|
module Contact.Methods.Discord exposing (..)
|
||||||
|
|
||||||
import Contact.Types exposing (..)
|
import Contact.Types exposing (..)
|
||||||
|
import Element exposing (paragraph, text)
|
||||||
|
|
||||||
|
|
||||||
|
contactDiscord : Contact
|
||||||
|
contactDiscord =
|
||||||
|
let
|
||||||
|
name =
|
||||||
|
"Discord"
|
||||||
|
in
|
||||||
|
{ contactName = name
|
||||||
|
, contactImage = formatName name
|
||||||
|
, contactLink = "https://discord.com/invite/YrcEvgRTqy"
|
||||||
|
, contactLinkLabel = "upRootNutrition Server"
|
||||||
|
, contactEntry =
|
||||||
|
[ { contactInstructions =
|
||||||
|
""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
27
frontend/src/Contact/Methods/Email.elm
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
module Contact.Methods.Email exposing (..)
|
||||||
|
|
||||||
|
import Config.Colour exposing (colourTheme)
|
||||||
|
import Contact.Types exposing (..)
|
||||||
|
import Element exposing (paragraph, text)
|
||||||
|
import Element.Font as F
|
||||||
|
|
||||||
|
|
||||||
|
contactEmail : Contact
|
||||||
|
contactEmail =
|
||||||
|
let
|
||||||
|
name =
|
||||||
|
"Email"
|
||||||
|
|
||||||
|
contact =
|
||||||
|
"nick@uprootnutrition.com"
|
||||||
|
in
|
||||||
|
{ contactName = name
|
||||||
|
, contactImage = formatName name
|
||||||
|
, contactLink = contact
|
||||||
|
, contactLinkLabel = contact
|
||||||
|
, contactEntry =
|
||||||
|
[ { contactInstructions =
|
||||||
|
""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,2 +1,26 @@
|
||||||
module Contact.Types exposing (..)
|
module Contact.Types exposing (..)
|
||||||
|
|
||||||
|
|
||||||
|
type alias Contact =
|
||||||
|
{ contactName : String
|
||||||
|
, contactImage : String
|
||||||
|
, contactLink : String
|
||||||
|
, contactLinkLabel : String
|
||||||
|
, contactEntry : List Method
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias Method =
|
||||||
|
{ contactInstructions : String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias FormattedName =
|
||||||
|
String
|
||||||
|
|
||||||
|
|
||||||
|
formatName : String -> FormattedName
|
||||||
|
formatName name =
|
||||||
|
name
|
||||||
|
|> String.toLower
|
||||||
|
|> String.replace " " ""
|
||||||
|
|
|
@ -125,7 +125,7 @@ reductioMaker argument =
|
||||||
, column [ E.width fill, E.alignLeft ]
|
, column [ E.width fill, E.alignLeft ]
|
||||||
[ paragraph
|
[ paragraph
|
||||||
(paragraphFormat
|
(paragraphFormat
|
||||||
++ [ F.size 18
|
++ [ F.size 16
|
||||||
, spacing 3
|
, spacing 3
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,6 +3,7 @@ module Pages.Arguments exposing (Model, Msg, page)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Debate.Arguments.Abortion exposing (..)
|
import Debate.Arguments.Abortion exposing (..)
|
||||||
import Debate.Arguments.Agnosticism exposing (..)
|
import Debate.Arguments.Agnosticism exposing (..)
|
||||||
import Debate.Arguments.AgriculturalPredation exposing (..)
|
import Debate.Arguments.AgriculturalPredation exposing (..)
|
||||||
|
@ -100,7 +101,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,15 @@ module Pages.Contact exposing (Model, Msg, page)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
|
import Contact.Helpers exposing (..)
|
||||||
|
import Contact.Methods.Discord exposing (contactDiscord)
|
||||||
|
import Contact.Methods.Email exposing (contactEmail)
|
||||||
import Effect exposing (Effect)
|
import Effect exposing (Effect)
|
||||||
import Element exposing (..)
|
import Element exposing (..)
|
||||||
import Element.Font as F
|
import Element.Font as F
|
||||||
|
import Headers.Helpers exposing (..)
|
||||||
|
import Headers.Pages.Contact exposing (contactHeader)
|
||||||
import Html
|
import Html
|
||||||
import Html.Attributes as H exposing (style)
|
import Html.Attributes as H exposing (style)
|
||||||
import Layouts
|
import Layouts
|
||||||
|
@ -42,7 +48,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,13 +99,7 @@ contactContainer =
|
||||||
|
|
||||||
contactList : Element msg
|
contactList : Element msg
|
||||||
contactList =
|
contactList =
|
||||||
none
|
column pageList <|
|
||||||
|
List.concat
|
||||||
|
[ [ instructionMaker ]
|
||||||
|
]
|
||||||
-- column
|
|
||||||
-- pageList
|
|
||||||
-- <|
|
|
||||||
-- List.map contactMaker
|
|
||||||
-- [
|
|
||||||
-- ]
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ module Pages.Cucklist exposing (Model, Msg, page)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Cuckery.CuckList.AdamSinger.AdamSinger exposing (cuckAdamSinger)
|
import Cuckery.CuckList.AdamSinger.AdamSinger exposing (cuckAdamSinger)
|
||||||
import Cuckery.CuckList.AmberOHearn.AmberOHearn exposing (cuckAmberOHearn)
|
import Cuckery.CuckList.AmberOHearn.AmberOHearn exposing (cuckAmberOHearn)
|
||||||
import Cuckery.CuckList.AnnChilders.AnnChilders exposing (cuckAnnChilders)
|
import Cuckery.CuckList.AnnChilders.AnnChilders exposing (cuckAnnChilders)
|
||||||
|
@ -111,7 +112,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
module Pages.Donate exposing (Model, Msg, page)
|
module Pages.Donate exposing (Model, Msg, page)
|
||||||
|
|
||||||
|
import Browser.Dom as Dom
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Donate.Helpers exposing (..)
|
import Donate.Helpers exposing (..)
|
||||||
import Donate.Methods.Cardano exposing (donateCardano)
|
import Donate.Methods.Cardano exposing (donateCardano)
|
||||||
import Donate.Methods.KoFi exposing (donateKoFi)
|
import Donate.Methods.KoFi exposing (donateKoFi)
|
||||||
|
@ -24,6 +26,7 @@ import Layouts
|
||||||
import Page exposing (Page)
|
import Page exposing (Page)
|
||||||
import Route exposing (Route)
|
import Route exposing (Route)
|
||||||
import Shared exposing (..)
|
import Shared exposing (..)
|
||||||
|
import Task
|
||||||
import View exposing (View)
|
import View exposing (View)
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +57,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import Blog.Helpers exposing (..)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Effect exposing (Effect)
|
import Effect exposing (Effect)
|
||||||
import Element exposing (..)
|
import Element exposing (..)
|
||||||
import Element.Font as F
|
import Element.Font as F
|
||||||
|
@ -42,7 +43,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ import Page exposing (Page)
|
||||||
import Route exposing (Route)
|
import Route exposing (Route)
|
||||||
import Shared exposing (..)
|
import Shared exposing (..)
|
||||||
import View exposing (View)
|
import View exposing (View)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
|
|
||||||
page : Shared.Model -> Route () -> Page Model Msg
|
page : Shared.Model -> Route () -> Page Model Msg
|
||||||
page shared route =
|
page shared route =
|
||||||
|
@ -44,7 +44,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ module Pages.Interviews exposing (Model, Msg, page)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Effect exposing (Effect)
|
import Effect exposing (Effect)
|
||||||
import Element exposing (..)
|
import Element exposing (..)
|
||||||
import Element.Border as D
|
import Element.Border as D
|
||||||
|
@ -56,7 +57,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ module Pages.Nutridex exposing (Model, Msg, page)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Donate.Types exposing (..)
|
import Donate.Types exposing (..)
|
||||||
import Effect exposing (Effect)
|
import Effect exposing (Effect)
|
||||||
import Element as E exposing (..)
|
import Element as E exposing (..)
|
||||||
|
@ -51,11 +52,12 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- UPDATE
|
-- UPDATE
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,247 +0,0 @@
|
||||||
module Pages.Platforms exposing (Model, Msg, page)
|
|
||||||
|
|
||||||
import Config.Colour as T exposing (..)
|
|
||||||
import Config.Format as O exposing (..)
|
|
||||||
import Config.Identity as I exposing (..)
|
|
||||||
import Effect exposing (Effect)
|
|
||||||
import Element exposing (..)
|
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
page : Shared.Model -> Route () -> Page Model Msg
|
|
||||||
page shared route =
|
|
||||||
Page.new
|
|
||||||
{ init = init
|
|
||||||
, update = update
|
|
||||||
, subscriptions = subscriptions
|
|
||||||
, view = view
|
|
||||||
}
|
|
||||||
|> Page.withLayout toLayout
|
|
||||||
|
|
||||||
|
|
||||||
toLayout : Model -> Layouts.Layout Msg
|
|
||||||
toLayout model =
|
|
||||||
Layouts.Navbar {}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- INIT
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
init : () -> ( Model, Effect Msg )
|
|
||||||
init () =
|
|
||||||
( {}
|
|
||||||
, Effect.none
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- UPDATE
|
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
|
||||||
= NoOp
|
|
||||||
|
|
||||||
|
|
||||||
update : Msg -> Model -> ( Model, Effect Msg )
|
|
||||||
update msg model =
|
|
||||||
case msg of
|
|
||||||
NoOp ->
|
|
||||||
( model
|
|
||||||
, Effect.none
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- SUBSCRIPTIONS
|
|
||||||
|
|
||||||
|
|
||||||
subscriptions : Model -> Sub Msg
|
|
||||||
subscriptions model =
|
|
||||||
Sub.none
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- VIEW
|
|
||||||
|
|
||||||
|
|
||||||
view : Model -> View Msg
|
|
||||||
view model =
|
|
||||||
{ title = platformsName
|
|
||||||
, attributes = []
|
|
||||||
, element = platformsContainer
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
platformsContainer : Element msg
|
|
||||||
platformsContainer =
|
|
||||||
topLevelContainer platformsList
|
|
||||||
|
|
||||||
|
|
||||||
platformsList : Element msg
|
|
||||||
platformsList =
|
|
||||||
column
|
|
||||||
pageList
|
|
||||||
platforms
|
|
||||||
|
|
||||||
|
|
||||||
type alias MakeRowInput msg =
|
|
||||||
{ logoImage : String
|
|
||||||
, logoDescription : String
|
|
||||||
, platformsLink : String
|
|
||||||
, platformsTitle : String
|
|
||||||
, platformsParagraph1 : List (Element msg)
|
|
||||||
, platformsParagraph2 : List (Element msg)
|
|
||||||
, platformsRecommendedClients : List ClientEntry
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
type alias ClientEntry =
|
|
||||||
{ clientLink : String
|
|
||||||
, clientLabel : String
|
|
||||||
, clientText : String
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
type alias ClientType =
|
|
||||||
{ android : String
|
|
||||||
, ios : String
|
|
||||||
, desktop : String
|
|
||||||
, multiPlatform : String
|
|
||||||
, browser : String
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
makeRow : MakeRowInput msg -> Element msg
|
|
||||||
makeRow makeRowInput =
|
|
||||||
let
|
|
||||||
recommendedClients : Element msg
|
|
||||||
recommendedClients =
|
|
||||||
el [ F.bold ] (text "Recommended Clients: ")
|
|
||||||
|
|
||||||
platformImageFormat : List (Attribute msg)
|
|
||||||
platformImageFormat =
|
|
||||||
[ width <| px 150
|
|
||||||
, alignTop
|
|
||||||
]
|
|
||||||
|
|
||||||
clientRows : List (Element msg)
|
|
||||||
clientRows =
|
|
||||||
if List.isEmpty makeRowInput.platformsRecommendedClients then
|
|
||||||
[ text "No recommended clients available. Please use your browser." ]
|
|
||||||
|
|
||||||
else
|
|
||||||
List.map
|
|
||||||
(\client ->
|
|
||||||
row []
|
|
||||||
[ paragraphLinkFormat
|
|
||||||
{ url = client.clientLink
|
|
||||||
, label = transitionHighlightedLinkHover <| text client.clientLabel
|
|
||||||
}
|
|
||||||
, text client.clientText
|
|
||||||
]
|
|
||||||
)
|
|
||||||
makeRowInput.platformsRecommendedClients
|
|
||||||
in
|
|
||||||
row [ spacing 20 ]
|
|
||||||
[ image platformImageFormat
|
|
||||||
{ src = makeRowInput.logoImage
|
|
||||||
, description = makeRowInput.logoDescription
|
|
||||||
}
|
|
||||||
, column [ width <| px 500, spacing 10 ]
|
|
||||||
[ column []
|
|
||||||
[ newTabLink highlightedTitleFormat
|
|
||||||
{ url = makeRowInput.platformsLink
|
|
||||||
, label = text makeRowInput.platformsTitle
|
|
||||||
}
|
|
||||||
]
|
|
||||||
, column [ spacing 20 ]
|
|
||||||
[ paragraph paragraphFormat makeRowInput.platformsParagraph1
|
|
||||||
, paragraph paragraphFormat makeRowInput.platformsParagraph2
|
|
||||||
, paragraph paragraphFormat
|
|
||||||
(recommendedClients :: clientRows)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
platforms : List (Element msg)
|
|
||||||
platforms =
|
|
||||||
let
|
|
||||||
clientType : ClientType
|
|
||||||
clientType =
|
|
||||||
{ android = " (android) "
|
|
||||||
, ios = " (iOS)"
|
|
||||||
, desktop = " (desktop) "
|
|
||||||
, multiPlatform = " (multi-platform)"
|
|
||||||
, browser = " (browser only)"
|
|
||||||
}
|
|
||||||
in
|
|
||||||
List.map makeRow
|
|
||||||
[ { logoImage = "platforms/mastodon.png"
|
|
||||||
, logoDescription = "mastodon logo"
|
|
||||||
, platformsLink = "https://the-nutrivore.social/"
|
|
||||||
, platformsTitle = "MASTODON"
|
|
||||||
, platformsParagraph1 = [ text "Microblogging will now be posted to my own self-hosted Mastodon instance. I've kinda grown tired of microblogging on X, where political correctness and unclear ban policies force me to constantly self-censor. I considered and ultimately rejected several alternative platforms. Eventually, I realized the solution to this problem is to simply self-host my own space―somewhere where I can be myself and speak as I please. And I recently obtained the necessary infrastructure to do this." ]
|
|
||||||
, platformsParagraph2 =
|
|
||||||
[ text "This instance is 100% mine, and I can't be censored or fucked with there. I invite everyone who values my content and interactions to follow me on this new platform (whether you agree with my views or not). My instance is a \"single-user\" instances, meaning I'm the only user. But you can still follow me! Just make an account on another instance, like "
|
|
||||||
, paragraphLinkFormat { url = "https://mastodon.social", label = text "Mastodon.social" }
|
|
||||||
, text " (alternatively, you can select whatever instance you wish from the "
|
|
||||||
, paragraphLinkFormat { url = "https://instances.social/", label = text "official index" }
|
|
||||||
, text "), follow me, and turn on notifications."
|
|
||||||
]
|
|
||||||
, platformsRecommendedClients =
|
|
||||||
[ { clientLink = "https://github.com/LucasGGamerM/moshidon"
|
|
||||||
, clientLabel = "Moshidon"
|
|
||||||
, clientText = clientType.android
|
|
||||||
}
|
|
||||||
, { clientLink = "https://github.com/mastodon/mastodon-android"
|
|
||||||
, clientLabel = "Official"
|
|
||||||
, clientText = clientType.android
|
|
||||||
}
|
|
||||||
, { clientLink = "https://github.com/tuskyapp/Tusky"
|
|
||||||
, clientLabel = "Tusky"
|
|
||||||
, clientText = clientType.android
|
|
||||||
}
|
|
||||||
, { clientLink = "https://apps.apple.com/us/app/mastodon/id1571998974"
|
|
||||||
, clientLabel = "Official"
|
|
||||||
, clientText = clientType.ios
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
, { logoImage = "platforms/peertube.png"
|
|
||||||
, logoDescription = "peertube logo"
|
|
||||||
, platformsLink = "https://video.the-nutrivore.social/"
|
|
||||||
, platformsTitle = "PEERTUBE"
|
|
||||||
, platformsParagraph1 = [ text "I'm transitioning my video content from YouTube to my self-hosted PeerTube instance, because I strongly believe in freedom of speech, copyleft, and digital autonomy. YouTube has proven unreliable due to both censorship and copyright strikes levied against my channel. This shift allows me to better control my content and avoid these silly pitfalls." ]
|
|
||||||
, platformsParagraph2 = [ text "Full-length videos are now exclusively available on PeerTube, while YouTube will only host clips. By registering on PeerTube and subscribing to my channels, you'll have access to all content. Just be sure to enable email notifications to be alerted of new uploads. I believe that those who are truly fans of my work and want the best experience possible will see this as a positive change." ]
|
|
||||||
, platformsRecommendedClients = []
|
|
||||||
}
|
|
||||||
, { logoImage = "platforms/discord.png"
|
|
||||||
, logoDescription = "discord logo"
|
|
||||||
, platformsLink = "https://discord.gg/eeYQ2wJknS"
|
|
||||||
, platformsTitle = "DISCORD"
|
|
||||||
, platformsParagraph1 = [ text "The Nutrivore Discord server is an evidence-based community dedicated to debunking pseudoscience, especially in the fields of nutrition, health and fitness. Casual discourse is welcome, and includes topics such as cooking, gaming, technology, and more. Current members span many disciplines and include both students and professionals, all levels of interest and expertise are welcome." ]
|
|
||||||
, platformsParagraph2 = [ text "The Discord server is not explicitly a debate server. However, we strongly encourage that disagreements be resolved using debate (preferably verbal), as long as it is conducted respectfully and in good faith. Though we also firmly believe that shaming sophistry and bad faith behaviour is a net good overall. The Discord server is planned to be replaced with a Matrix server in future." ]
|
|
||||||
, platformsRecommendedClients =
|
|
||||||
[ { clientLink = "https://github.com/Vendicated/Vencord"
|
|
||||||
, clientLabel = "Vencord"
|
|
||||||
, clientText = clientType.desktop
|
|
||||||
}
|
|
||||||
, { clientLink = "https://discord.com/download"
|
|
||||||
, clientLabel = "Official"
|
|
||||||
, clientText = clientType.multiPlatform
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
|
@ -3,6 +3,7 @@ module Pages.Services exposing (Model, Msg, page)
|
||||||
import Config.Colour as T exposing (..)
|
import Config.Colour as T exposing (..)
|
||||||
import Config.Format as O exposing (..)
|
import Config.Format as O exposing (..)
|
||||||
import Config.Identity as I exposing (..)
|
import Config.Identity as I exposing (..)
|
||||||
|
import Config.Viewport exposing (..)
|
||||||
import Effect exposing (Effect)
|
import Effect exposing (Effect)
|
||||||
import Element exposing (..)
|
import Element exposing (..)
|
||||||
import Element.Font as F
|
import Element.Font as F
|
||||||
|
@ -49,7 +50,9 @@ type alias Model =
|
||||||
init : () -> ( Model, Effect Msg )
|
init : () -> ( Model, Effect Msg )
|
||||||
init () =
|
init () =
|
||||||
( {}
|
( {}
|
||||||
, Effect.none
|
, Effect.map
|
||||||
|
(\_ -> NoOp)
|
||||||
|
(Effect.sendCmd resetViewport)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ nutriDexMaker nutridex =
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
[ text nutridex.nutriDexTitle ]
|
[ text (String.toUpper nutridex.nutriDexTitle) ]
|
||||||
, cardFormatter
|
, cardFormatter
|
||||||
[ cardContentSpacing
|
[ cardContentSpacing
|
||||||
[ column
|
[ column
|
||||||
|
|
BIN
frontend/static/arguments/immortality.png
Executable file
After Width: | Height: | Size: 564 KiB |
BIN
frontend/static/arguments/mda.png
Executable file
After Width: | Height: | Size: 144 KiB |
BIN
frontend/static/contact/discord.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
frontend/static/contact/email.png
Normal file
After Width: | Height: | Size: 32 KiB |
0
frontend/static/navbar/cucklist.png
Normal file → Executable file
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
0
frontend/static/navbar/cucklist2.png
Normal file → Executable file
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |