From 6867defd0ab5d6ed8b91437e875c7dfbf8101fd0 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 9 Dec 2024 03:06:20 -0600 Subject: [PATCH] feat: added glow --- frontend/src/Config/CardFormat.elm | 56 +++++++++++------- frontend/src/Config/Colour.elm | 6 +- frontend/src/Config/Format.elm | 10 ++++ frontend/src/Debate/Arguments/Helpers.elm | 7 ++- frontend/src/Debate/Cuckery/Helpers.elm | 9 ++- frontend/src/Debate/Gibberish/Helpers.elm | 19 ++++-- frontend/src/Donate/Helpers.elm | 8 ++- frontend/src/Donate/Methods/KoFi.elm | 2 +- frontend/src/Donate/Methods/Patreon.elm | 4 +- frontend/src/Donate/Methods/Stripe.elm | 46 ++++++++++++++ frontend/src/Donate/Methods/YouTube.elm | 2 +- frontend/src/Headers/Helpers.elm | 1 + frontend/src/Home/Helpers.elm | 1 + frontend/src/Interviews/Helpers.elm | 9 ++- frontend/src/Layouts/Navbar.elm | 3 +- frontend/src/Pages/Donate.elm | 3 +- frontend/src/Services/Helpers.elm | 21 ++++--- .../static/assets/qr_aEUaFT3Vd9ta1oI144.png | Bin 0 -> 25146 bytes frontend/static/donate/stripe.png | Bin 0 -> 4769 bytes 19 files changed, 156 insertions(+), 51 deletions(-) create mode 100644 frontend/src/Donate/Methods/Stripe.elm create mode 100644 frontend/static/assets/qr_aEUaFT3Vd9ta1oI144.png create mode 100644 frontend/static/donate/stripe.png diff --git a/frontend/src/Config/CardFormat.elm b/frontend/src/Config/CardFormat.elm index 01b1456..d4b50b3 100755 --- a/frontend/src/Config/CardFormat.elm +++ b/frontend/src/Config/CardFormat.elm @@ -38,6 +38,7 @@ cardMaker = , centerX , D.color colourTheme.backgroundDarkGrey , D.rounded 32 + , glow ] @@ -89,8 +90,8 @@ cardContentSpacing = ] -cardImageMaker : { src : String, description : String } -> Element msg -cardImageMaker image = +cardImageMaker : { src : String, description : String } -> String -> Element msg +cardImageMaker image url = column [ E.width <| px 115 , E.height <| px 115 @@ -100,26 +101,31 @@ cardImageMaker image = [ column [ D.rounded 100 , D.width 5 + , glow , D.color colourTheme.backgroundDarkGrey , B.color colourTheme.backgroundDarkGrey - , mouseOver [ D.color colourTheme.textDarkOrange ] - , htmlAttribute <| style "transition" "all 0.1s ease-in-out" + , mouseOver [ D.color colourTheme.textDarkOrange, glowHighlight ] + , htmlAttribute <| style "transition" "all 0.3s ease-in-out" ] - [ E.image - [ alignRight - , alignTop - , D.rounded 100 - , clip - , E.width <| px 90 - , E.height <| px 90 - ] - image + [ newTabLink [] + { url = url + , label = + E.image + [ alignRight + , alignTop + , D.rounded 100 + , clip + , E.width <| px 90 + , E.height <| px 90 + ] + image + } ] ] -cardImageMakerMobile : { src : String, description : String } -> Element msg -cardImageMakerMobile image = +cardImageMakerMobile : { src : String, description : String } -> String -> Element msg +cardImageMakerMobile image url = column [ alignTop , centerX @@ -141,14 +147,18 @@ cardImageMakerMobile image = , mouseOver [ D.color colourTheme.textDarkOrange ] , htmlAttribute <| style "transition" "all 0.1s ease-in-out" ] - [ E.image - [ D.rounded 100 - , clip - , centerX - , E.width <| px 45 - , E.height <| px 45 - ] - image + [ newTabLink [] + { url = url + , label = + E.image + [ D.rounded 100 + , clip + , centerX + , E.width <| px 45 + , E.height <| px 45 + ] + image + } ] ] diff --git a/frontend/src/Config/Colour.elm b/frontend/src/Config/Colour.elm index 0885cb3..ad3e34c 100755 --- a/frontend/src/Config/Colour.elm +++ b/frontend/src/Config/Colour.elm @@ -13,10 +13,11 @@ type alias Theme = , textDarkOrange : Color , textDeepDarkOrange : Color , backgroundLightGrey : Color - , debugColour : Color , backgroundDarkGrey : Color + , backgroundDeepDarkGrey : Color , barGreen : Color , barRed : Color + , debugColour : Color , transparent : Color } @@ -29,9 +30,10 @@ colourTheme = , textDarkOrange = rgb255 120 60 0 , textDeepDarkOrange = rgb255 60 30 0 , backgroundLightGrey = rgb255 40 40 40 - , debugColour = rgb255 227 28 121 , backgroundDarkGrey = rgb255 30 30 30 + , backgroundDeepDarkGrey = rgb255 20 20 20 , barGreen = rgb255 0 102 0 , barRed = rgb255 102 0 0 + , debugColour = rgb255 227 28 121 , transparent = rgba 1 1 1 0 } diff --git a/frontend/src/Config/Format.elm b/frontend/src/Config/Format.elm index a1eae4c..6befbed 100755 --- a/frontend/src/Config/Format.elm +++ b/frontend/src/Config/Format.elm @@ -169,3 +169,13 @@ formatName name = |> String.replace "'" "" |> String.replace "." "" |> String.replace "-" "" + + +glow : Attr decorative msg +glow = + D.glow colourTheme.backgroundDeepDarkGrey 8 + + +glowHighlight : Attr decorative msg +glowHighlight = + D.glow colourTheme.textDeepDarkOrange 5 diff --git a/frontend/src/Debate/Arguments/Helpers.elm b/frontend/src/Debate/Arguments/Helpers.elm index fee9a2b..1edfb10 100755 --- a/frontend/src/Debate/Arguments/Helpers.elm +++ b/frontend/src/Debate/Arguments/Helpers.elm @@ -76,7 +76,7 @@ argumentMaker : Argument -> Element msg argumentMaker argument = row topLevelBox - [ cardImageMaker (argumentImage argument) + [ cardImageMaker (argumentImage argument) "" , cardMaker [ cardTitleMaker argument.argumentTitle , cardFormatter @@ -108,7 +108,7 @@ argumentMakerMobile argument = [ cardContentSpacing [ column fieldSpacer - [ cardImageMakerMobile (argumentImage argument) + [ cardImageMakerMobile (argumentImage argument) "" , propositionMakerMobile argument , reductioMakerMobile argument , summaryMakerMobile argument @@ -611,7 +611,7 @@ mobileFormalizationMaker argument = (paragraphFormat ++ [ spacing 3 , centerX - , E.width fill + , E.width fill , paddingXY 0 3 ] ) @@ -706,6 +706,7 @@ proofTreeMaker argument = , F.center , E.alignRight , transitionStyle + , O.glow , mouseOver [ B.color colourTheme.textDeepDarkOrange , F.color colourTheme.textDarkGrey diff --git a/frontend/src/Debate/Cuckery/Helpers.elm b/frontend/src/Debate/Cuckery/Helpers.elm index a0d1b87..4904d34 100755 --- a/frontend/src/Debate/Cuckery/Helpers.elm +++ b/frontend/src/Debate/Cuckery/Helpers.elm @@ -87,7 +87,7 @@ cuckMaker : Cuck -> Element msg cuckMaker cuck = row topLevelBox - [ cardImageMaker (cuckImage cuck) + [ cardImageMaker (cuckImage cuck) (cuckSocial cuck) , cardMaker [ cardTitleMaker (cuckTitle cuck) , cardFormatter @@ -121,7 +121,7 @@ cuckMakerMobile cuck = , alignLeft , spacing 3 ] - [ cardImageMakerMobile (cuckImage cuck) + [ cardImageMakerMobile (cuckImage cuck) (cuckSocial cuck) , socialMaker cuck , dodgeTitle cuck , dodgeMaker cuck @@ -150,6 +150,11 @@ cuckTitle cuck = cuck.cuckName +cuckSocial : Cuck -> String +cuckSocial cuck = + cuck.cuckSocial + + dodgeMaker : Cuck -> Element msg dodgeMaker cuck = column diff --git a/frontend/src/Debate/Gibberish/Helpers.elm b/frontend/src/Debate/Gibberish/Helpers.elm index e0a972e..d96516c 100755 --- a/frontend/src/Debate/Gibberish/Helpers.elm +++ b/frontend/src/Debate/Gibberish/Helpers.elm @@ -35,7 +35,7 @@ gibberishMaker : Gibberish -> Element msg gibberishMaker gibberish = row topLevelBox - [ cardImageMaker (gibberishImage gibberish) + [ cardImageMaker (gibberishImage gibberish) "" , cardMaker [ cardTitleMaker (gibberishTitle gibberish) , cardFormatter @@ -72,7 +72,7 @@ gibberishMakerMobile gibberish = , F.center ] ) - [ cardImageMakerMobile (gibberishImage gibberish) + [ cardImageMakerMobile (gibberishImage gibberish) "" , mobileDomainList gibberish ] ] @@ -82,6 +82,7 @@ gibberishMakerMobile gibberish = ] + gibberishImage : Gibberish -> { src : String, description : String } gibberishImage gibberish = { src = "gibberish/" ++ gibberish.gibberishImage ++ ".png" @@ -140,7 +141,7 @@ desktopMakeTerms terms index = ] [ paragraph [] - [ text (String.fromInt index ++ ". ") ] + [ text <| String.fromInt index ++ ". " ] ] , column [ E.width fill @@ -154,7 +155,12 @@ desktopMakeTerms terms index = [ paragraph [] [ el [ F.color colourTheme.textLightOrange ] <| - text terms.term + text <| + String.toLower + ("\"" + ++ terms.term + ++ "\"" + ) ] , desktopBar terms , paragraph @@ -213,7 +219,10 @@ mobileMakeTerms terms index = [ paragraph [] [ el [ F.color colourTheme.textLightOrange ] <| - text terms.term + text <| + String.toLower "\"" + ++ terms.term + ++ "\"" ] , mobileBar terms , paragraph diff --git a/frontend/src/Donate/Helpers.elm b/frontend/src/Donate/Helpers.elm index cd697f7..4f32b68 100755 --- a/frontend/src/Donate/Helpers.elm +++ b/frontend/src/Donate/Helpers.elm @@ -30,7 +30,7 @@ donateMaker : Donate -> Element msg donateMaker donate = row topLevelBox - [ cardImageMaker (donateImage donate) + [ cardImageMaker (donateImage donate) (donateLink donate) , cardMaker [ cardTitleMaker (donateTitle donate) , cardFormatter @@ -63,6 +63,7 @@ donateMakerMobile donate = [ column fieldSpacer [ cardImageMakerMobile (donateImage donate) + (donateLink donate) , feeMaker donate , preferenceMaker donate , tableMakerMobile donate @@ -94,6 +95,11 @@ donateTitle donate = donate.donateName +donateLink : Donate -> String +donateLink donate = + donate.donateLink + + donateWidth = width <| px 45 diff --git a/frontend/src/Donate/Methods/KoFi.elm b/frontend/src/Donate/Methods/KoFi.elm index d05131b..aadd927 100755 --- a/frontend/src/Donate/Methods/KoFi.elm +++ b/frontend/src/Donate/Methods/KoFi.elm @@ -11,7 +11,7 @@ donateKoFi = "Ko-Fi" in { donateImage = formatName name - , donateLink = "https://ko-fi.com/thenutrivore" + , donateLink = "https://ko-fi.com/uprootnutrition" , donateName = name , donateFees = "5%" , donatePreference = 5 diff --git a/frontend/src/Donate/Methods/Patreon.elm b/frontend/src/Donate/Methods/Patreon.elm index 134a8eb..e9b2a2f 100755 --- a/frontend/src/Donate/Methods/Patreon.elm +++ b/frontend/src/Donate/Methods/Patreon.elm @@ -11,9 +11,9 @@ donatePatreon = "Patreon" in { donateImage = formatName name - , donateLink = "https://www.patreon.com/thenutrivore" + , donateLink = "https://www.patreon.com/c/upRootNutrition" , donateName = name - , donateFees = "5%" + , donateFees = "8%" , donatePreference = 6 , donateFeatures = [ { free = Just False diff --git a/frontend/src/Donate/Methods/Stripe.elm b/frontend/src/Donate/Methods/Stripe.elm new file mode 100644 index 0000000..078ad4a --- /dev/null +++ b/frontend/src/Donate/Methods/Stripe.elm @@ -0,0 +1,46 @@ +module Donate.Methods.Stripe exposing (..) + +import Donate.Types exposing (..) + + +donateStripe : Donate +donateStripe = + let + name : String + name = + "Stripe" + in + { donateImage = formatName name + , donateLink = "https://donate.stripe.com/aEUaFT3Vd9ta1oI144" + , donateName = name + , donateFees = "3%" + , donatePreference = 8 + , donateFeatures = + [ { free = Just False + , subscriptions = Just True + , openSource = Just False + , fastPayments = Just True + , userFriendly = Just True + , anonymous = Just True + , rewardTiers = Just False + } + ] + , donatePros = + [ { pro = "Widely used and recognized globally." + } + , { pro = "Lower 3% transaction fee." + } + , { pro = "Offers buyer and seller protections." + } + , { pro = "Easy to use for one-time donations." + } + , { pro = "Familiar to most internet users." + } + ] + , donateCons = + [ { con = "Can have complicated international transaction rules." + } + , { con = "Potential account limitations or freezes." + } + ] + } diff --git a/frontend/src/Donate/Methods/YouTube.elm b/frontend/src/Donate/Methods/YouTube.elm index a9760e7..eb5034f 100755 --- a/frontend/src/Donate/Methods/YouTube.elm +++ b/frontend/src/Donate/Methods/YouTube.elm @@ -11,7 +11,7 @@ donateYouTube = "YouTube" in { donateImage = formatName name - , donateLink = "https://www.youtube.com/@TheNutrivore/membership" + , donateLink = "https://www.youtube.com/@upRootNutrition/membership" , donateName = name , donateFees = "45%" , donatePreference = 3 diff --git a/frontend/src/Headers/Helpers.elm b/frontend/src/Headers/Helpers.elm index d2b162a..60c3027 100755 --- a/frontend/src/Headers/Helpers.elm +++ b/frontend/src/Headers/Helpers.elm @@ -36,6 +36,7 @@ headerMaker header = , bottomRight = 32 , bottomLeft = 32 } + , glow ] [ paragraph (nonHighlightedTitleFormat diff --git a/frontend/src/Home/Helpers.elm b/frontend/src/Home/Helpers.elm index fad596e..8b08fc1 100755 --- a/frontend/src/Home/Helpers.elm +++ b/frontend/src/Home/Helpers.elm @@ -38,6 +38,7 @@ homePage image = , left = 20 , right = 20 } + , O.glow , B.color colourTheme.backgroundDarkGrey , rounded 10 , E.width fill diff --git a/frontend/src/Interviews/Helpers.elm b/frontend/src/Interviews/Helpers.elm index 644119d..6d494b9 100755 --- a/frontend/src/Interviews/Helpers.elm +++ b/frontend/src/Interviews/Helpers.elm @@ -23,7 +23,7 @@ interviewMaker : Interview -> Element msg interviewMaker interview = row topLevelBox - [ cardImageMaker (interviewImage interview) + [ cardImageMaker (interviewImage interview) (interviewSocial interview) , cardMaker [ cardTitleMaker (interviewTitle interview) , cardFormatter @@ -51,7 +51,7 @@ interviewMakerMobile interview = [ cardContentSpacing [ column fieldSpacer - [ cardImageMakerMobile (interviewImage interview) + [ cardImageMakerMobile (interviewImage interview) (interviewSocial interview) , socialMaker interview , appearanceTitle interview , appearanceMaker interview @@ -74,6 +74,11 @@ interviewTitle interview = interview.interviewName +interviewSocial : Interview -> String +interviewSocial interview = + interview.interviewSocial + + socialMaker : Interview -> Element msg socialMaker interview = paragraph diff --git a/frontend/src/Layouts/Navbar.elm b/frontend/src/Layouts/Navbar.elm index 6b99af9..fbb4e0a 100755 --- a/frontend/src/Layouts/Navbar.elm +++ b/frontend/src/Layouts/Navbar.elm @@ -115,6 +115,7 @@ navbarContainer device content = , D.widthEach { top = 0, bottom = 0, left = 0, right = 3 } , D.color colourTheme.textDarkOrange , B.color colourTheme.backgroundDarkGrey + , O.glow ] (case ( device.class, device.orientation ) of ( Phone, Portrait ) -> @@ -353,7 +354,7 @@ desktopButtonMaker name icon = , column [ mouseOver [ F.color colourTheme.textLightOrange ] , F.color colourTheme.textLightGrey - , htmlAttribute <| style "transition" "all 0.1s ease-in-out" + , htmlAttribute <| style "transition" "all 0.2s ease-in-out" , alignBottom ] [ text (String.toUpper name) diff --git a/frontend/src/Pages/Donate.elm b/frontend/src/Pages/Donate.elm index f721d21..c5f6bfb 100755 --- a/frontend/src/Pages/Donate.elm +++ b/frontend/src/Pages/Donate.elm @@ -13,6 +13,7 @@ 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.Stripe exposing (donateStripe) import Donate.Methods.YouTube exposing (donateYouTube) import Donate.Types exposing (..) import Effect exposing (Effect) @@ -129,7 +130,7 @@ donateList device = List.map donateMaker ) [ donateLiberaPay - , donatePayPal + , donateStripe , donatePatreon , donateCardano , donateKoFi diff --git a/frontend/src/Services/Helpers.elm b/frontend/src/Services/Helpers.elm index 1bf69a0..73ca4e1 100755 --- a/frontend/src/Services/Helpers.elm +++ b/frontend/src/Services/Helpers.elm @@ -1,5 +1,6 @@ module Services.Helpers exposing (..) +import Browser import Config.CardFormat exposing (..) import Config.Colour exposing (..) import Config.Format exposing (..) @@ -8,7 +9,8 @@ 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 Html exposing (Html, a, text) +import Html.Attributes as H exposing (href, style) import Layouts import Page exposing (Page) import Route exposing (Route) @@ -21,7 +23,7 @@ serviceMaker : Service -> Element msg serviceMaker service = row topLevelBox - [ cardImageMaker (serviceImage service) + [ cardImageMaker (serviceImage service) "" , cardMaker [ cardTitleMaker (serviceTitle service) , cardFormatter @@ -49,7 +51,7 @@ serviceMakerMobile service = [ cardContentSpacing [ column fieldSpacer - [ cardImageMakerMobile (serviceImage service) + [ cardImageMakerMobile (serviceImage service) "" , rateMaker service , descriptionMaker service , offeringMaker service @@ -60,6 +62,11 @@ serviceMakerMobile service = ] +emailLink : List (Html msg) -> Html msg +emailLink = + a [ href "mailto:nick@upRootNutrition.com?subject=Hello&body=%20" ] + + serviceImage : Service -> { src : String, description : String } serviceImage service = { src = "services/" ++ service.serviceImage ++ ".png" @@ -88,7 +95,7 @@ rateMaker service = [ alignTop , serviceWidth ] - [ text "Rate:" + [ E.text "Rate:" ] , column [ E.width fill @@ -96,7 +103,7 @@ rateMaker service = ] [ paragraph [ F.regular ] [ el [ F.color colourTheme.textLightOrange ] <| - text service.serviceRate + E.text service.serviceRate ] ] ] @@ -109,7 +116,7 @@ descriptionMaker service = [ alignTop , width <| px 80 ] - [ text "Offerings:" + [ E.text "Offerings:" ] ] @@ -141,5 +148,5 @@ makeDescription description = ] ) [ paragraph [ F.regular ] - [ text ("‣ " ++ description.point) ] + [ E.text ("‣ " ++ description.point) ] ] diff --git a/frontend/static/assets/qr_aEUaFT3Vd9ta1oI144.png b/frontend/static/assets/qr_aEUaFT3Vd9ta1oI144.png new file mode 100644 index 0000000000000000000000000000000000000000..559a0b60c78ccde27df969dc5b51027eb9aedb4a GIT binary patch literal 25146 zcmeAS@N?(olHy`uVBq!ia0y~yU@l-_V3FrwV_;wide420fkA=6)5S5QBJS;-jlL5S zC0Z|DxS`2y(cal9DlK3o#BQ)~(WWc2WOG#g9FHx9VSH3-S^>p?5 z@5M#sb>Dyee!qIV|9ZK+eX%z8>i&LydbfT5^6%Hv?e*{f|MBO;$FuAG|J}LYU-RSp z!~g96?O(C~ees;xUjFCL3+Io&Yo5Np-%qB1FNA#;^WDaG4&@81FUY>&D*!PzQ>bWs$l4`t5vNeu_>^^)cm;c9(-mD4NEmFi2-7%v0oO%SqRa(}=f)2Lj)(sw`*!8w=zvhwHsOU@CT+KH-bTBdFg z3OnQ#!TI{X${JLKD7yL>gdCVW7&sLeRT@|(FbEx}*KEM29N9*&LFtMcC&;8I7UJ;F z9OieEJ_yAzH#Qz{NKh~kkl^59+1q%)ykKABXWlva4{Dg7OIzGO@RRKvL`X(~frXus z2|ZX4q4Y;c*#C}A;pZb~h0T!|RsMIr?Ee@4%^o9Mz^(*`*yaO~52kU?sW~~lMlkM> zcLis@e+4IIK*BXBDyp=!Ob`%qa`LEhTJ-!~p-}V2e|Ec3qE@r`fr>JqV{?AGJpd_jP@GYl4o;0isPm&y-{vM-A z9=RZdCrN?PB#)M$N0U6HV8K#G!As%MQXajG9WCXN3wD$&HCoE!ZaBdj9zsr|4I8v9 zHQKO2$wkPV(S{9jTLz^kFxs#|>gS>s$)gRM(T0r$(`fe#wU5jhZP*|cyvV)90+!K+ z&1l00RK|`DQi4JOrSS&i4D&(C_lG;(U~2)8^TKGm9+m)5OH5EY8Ew~tLIG>|jJE4X z+x4IfGde~O3I(hknb9%&(J}hI1EXEp(XK3LLS}SY3KR;+-F5g9w$W*+(P^pCX(^oT zh|$rT(S^j2I&^gO24{bCn2+9!j@YzJ7+pILDFtBTF{4Qy=MW5dy8U z*x+nwjgHuij@XQj*dVtx&`Q|R#RpgiFhC{j=;8xVD8R>bkU67^4{&Cw(b-p6YZkLo z9-V!~+1sUX_SN3j=PPV2!00w`MCKeFqaPikmuVbr!Za*4Kn{Eu%IIMqXl3l^HgK#-2GlDU9k2w2!srsS(IcI3R63(e z%upxBkh05YTOO^RK@8}Q4p?Gs+JZ&{Mh7fGp@6j=H#%U6vz=lwI$()4$$*L+3I{Al z2PqL5a&(Y#bdYj%kP>$(JbJzj&Qf@E8#t&gLh2qM4RDS&Y;b3((S{AqEH&D&!I`B- z&$q!kW(OLp7(^pB>R0DKVqjpr3%VnqQMq7rj2>rt9-51atve3bGUu+7h}CzobYNg$ OVDNPHb6Mw<&;$TKt7Itv literal 0 HcmV?d00001 diff --git a/frontend/static/donate/stripe.png b/frontend/static/donate/stripe.png new file mode 100644 index 0000000000000000000000000000000000000000..5faf7a625ff1eaed72e7cd0ba164f6067991b25e GIT binary patch literal 4769 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