Create Tailwind module
Moving the UI.tw function into Tailwind.use. Creating and consuming some functions like Tailwind.if_ and Tailwind.when to make it easier to conditionally style some of my components.
This commit is contained in:
		
							parent
							
								
									7b2163d804
								
							
						
					
					
						commit
						f92fe97aff
					
				
					 5 changed files with 49 additions and 27 deletions
				
			
		|  | @ -5,6 +5,7 @@ import Html.Attributes exposing (..) | ||||||
| import Html.Events exposing (..) | import Html.Events exposing (..) | ||||||
| import Responsive | import Responsive | ||||||
| import State | import State | ||||||
|  | import Tailwind | ||||||
| import UI | import UI | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -16,7 +17,7 @@ header1 copy = | ||||||
|           , "pb-12" |           , "pb-12" | ||||||
|           , Responsive.h1 |           , Responsive.h1 | ||||||
|           ] |           ] | ||||||
|             |> UI.tw |             |> Tailwind.use | ||||||
|             |> class |             |> class | ||||||
|         ] |         ] | ||||||
|         [ text copy ] |         [ text copy ] | ||||||
|  | @ -29,7 +30,7 @@ header2 copy = | ||||||
|           , "pb-10" |           , "pb-10" | ||||||
|           , Responsive.h2 |           , Responsive.h2 | ||||||
|           ] |           ] | ||||||
|             |> UI.tw |             |> Tailwind.use | ||||||
|             |> class |             |> class | ||||||
|         ] |         ] | ||||||
|         [ text copy ] |         [ text copy ] | ||||||
|  | @ -41,7 +42,7 @@ paragraph copy = | ||||||
|         [ [ "pb-10" |         [ [ "pb-10" | ||||||
|           , Responsive.h3 |           , Responsive.h3 | ||||||
|           ] |           ] | ||||||
|             |> UI.tw |             |> Tailwind.use | ||||||
|             |> class |             |> class | ||||||
|         ] |         ] | ||||||
|         [ text copy ] |         [ text copy ] | ||||||
|  | @ -59,15 +60,15 @@ numberedList items = | ||||||
|           , "list-decimal" |           , "list-decimal" | ||||||
|           , Responsive.h3 |           , Responsive.h3 | ||||||
|           ] |           ] | ||||||
|             |> UI.tw |             |> Tailwind.use | ||||||
|             |> class |             |> class | ||||||
|         ] |         ] | ||||||
|         (items |> List.map (\x -> li [ [ "pb-10" ] |> UI.tw |> class ] [ text x ])) |         (items |> List.map (\x -> li [ [ "pb-10" ] |> Tailwind.use |> class ] [ text x ])) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| render : State.Model -> Html State.Msg | render : State.Model -> Html State.Msg | ||||||
| render model = | render model = | ||||||
|     div [ [ "container", "mx-auto" ] |> UI.tw |> class ] |     div [ [ "container", "mx-auto" ] |> Tailwind.use |> class ] | ||||||
|         [ header1 "Welcome to LearnPianoChords.app!" |         [ header1 "Welcome to LearnPianoChords.app!" | ||||||
|         , paragraph """ |         , paragraph """ | ||||||
|                      Learn Piano Chords helps piano players master chords. |                      Learn Piano Chords helps piano players master chords. | ||||||
|  | @ -110,7 +111,7 @@ render model = | ||||||
|                    """ |                    """ | ||||||
|                 ] |                 ] | ||||||
|             ] |             ] | ||||||
|         , div [ [ "text-center", "py-20" ] |> UI.tw |> class ] |         , div [ [ "text-center", "py-20" ] |> Tailwind.use |> class ] | ||||||
|             [ UI.simpleButton |             [ UI.simpleButton | ||||||
|                 { label = "Let's get started" |                 { label = "Let's get started" | ||||||
|                 , handleClick = State.SetView State.Preferences |                 , handleClick = State.SetView State.Preferences | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ import Html.Events exposing (..) | ||||||
| import Icon | import Icon | ||||||
| import Responsive | import Responsive | ||||||
| import State | import State | ||||||
|  | import Tailwind | ||||||
| import Tempo | import Tempo | ||||||
| import Theory | import Theory | ||||||
| import UI | import UI | ||||||
|  | @ -105,7 +106,7 @@ keyCheckboxes model = | ||||||
|               , "pt-10" |               , "pt-10" | ||||||
|               , Responsive.h2 |               , Responsive.h2 | ||||||
|               ] |               ] | ||||||
|                 |> UI.tw |                 |> Tailwind.use | ||||||
|                 |> class |                 |> class | ||||||
|             ] |             ] | ||||||
|             [ text "Select keys" ] |             [ text "Select keys" ] | ||||||
|  | @ -134,7 +135,7 @@ closePreferences = | ||||||
|           , "top-0" |           , "top-0" | ||||||
|           , "z-10" |           , "z-10" | ||||||
|           ] |           ] | ||||||
|             |> UI.tw |             |> Tailwind.use | ||||||
|             |> class |             |> class | ||||||
|         , onClick (State.SetView State.Practice) |         , onClick (State.SetView State.Practice) | ||||||
|         ] |         ] | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								website/sandbox/learnpianochords/src/Tailwind.elm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								website/sandbox/learnpianochords/src/Tailwind.elm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | ||||||
|  | module Tailwind exposing (..) | ||||||
|  | 
 | ||||||
|  | {-| Functions to make Tailwind development in Elm even more pleasant. | ||||||
|  | -} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | {-| Conditionally use `class` selection when `condition` is true. | ||||||
|  | -} | ||||||
|  | when : Bool -> String -> String | ||||||
|  | when condition class = | ||||||
|  |     if condition then | ||||||
|  |         class | ||||||
|  | 
 | ||||||
|  |     else | ||||||
|  |         "" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if_ : Bool -> String -> String -> String | ||||||
|  | if_ condition whenTrue whenFalse = | ||||||
|  |     if condition then | ||||||
|  |         whenTrue | ||||||
|  | 
 | ||||||
|  |     else | ||||||
|  |         whenFalse | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | use : List String -> String | ||||||
|  | use styles = | ||||||
|  |     String.join " " styles | ||||||
|  | @ -4,6 +4,7 @@ import Html exposing (..) | ||||||
| import Html.Attributes exposing (..) | import Html.Attributes exposing (..) | ||||||
| import Html.Events exposing (..) | import Html.Events exposing (..) | ||||||
| import Responsive | import Responsive | ||||||
|  | import Tailwind | ||||||
| import UI | import UI | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -20,7 +21,7 @@ render { tempo, handleInput } = | ||||||
|             [ [ "py-10" |             [ [ "py-10" | ||||||
|               , Responsive.h2 |               , Responsive.h2 | ||||||
|               ] |               ] | ||||||
|                 |> UI.tw |                 |> Tailwind.use | ||||||
|                 |> class |                 |> class | ||||||
|             ] |             ] | ||||||
|             [ text (String.fromInt tempo ++ " BPM") ] |             [ text (String.fromInt tempo ++ " BPM") ] | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ import Html exposing (..) | ||||||
| import Html.Attributes exposing (..) | import Html.Attributes exposing (..) | ||||||
| import Html.Events exposing (..) | import Html.Events exposing (..) | ||||||
| import Responsive | import Responsive | ||||||
|  | import Tailwind | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| type Color | type Color | ||||||
|  | @ -31,11 +32,6 @@ textForColor color = | ||||||
|             "text-black" |             "text-black" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| tw : List String -> String |  | ||||||
| tw styles = |  | ||||||
|     String.join " " styles |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| simpleButton : | simpleButton : | ||||||
|     { label : String |     { label : String | ||||||
|     , handleClick : msg |     , handleClick : msg | ||||||
|  | @ -57,7 +53,7 @@ simpleButton { label, handleClick, color, classes } = | ||||||
|             ] |             ] | ||||||
|     in |     in | ||||||
|     button |     button | ||||||
|         [ class (tw <| List.concat [ buttonClasses, classes ]) |         [ class (Tailwind.use <| List.concat [ buttonClasses, classes ]) | ||||||
|         , onClick handleClick |         , onClick handleClick | ||||||
|         ] |         ] | ||||||
|         [ text label ] |         [ text label ] | ||||||
|  | @ -90,7 +86,7 @@ textToggleButton { label, toggled, handleClick, classes } = | ||||||
|             ] |             ] | ||||||
|     in |     in | ||||||
|     button |     button | ||||||
|         [ class (tw <| List.concat [ buttonClasses, classes ]) |         [ class (Tailwind.use <| List.concat [ buttonClasses, classes ]) | ||||||
|         , onClick handleClick |         , onClick handleClick | ||||||
|         ] |         ] | ||||||
|         [ text label ] |         [ text label ] | ||||||
|  | @ -116,7 +112,7 @@ textField { placeholderText, handleInput, classes } = | ||||||
|             ] |             ] | ||||||
|     in |     in | ||||||
|     input |     input | ||||||
|         [ class (tw <| List.concat [ inputClasses, classes ]) |         [ class (Tailwind.use <| List.concat [ inputClasses, classes ]) | ||||||
|         , onInput handleInput |         , onInput handleInput | ||||||
|         , placeholder placeholderText |         , placeholder placeholderText | ||||||
|         ] |         ] | ||||||
|  | @ -139,17 +135,11 @@ overlayButton { label, handleClick, isVisible } = | ||||||
|             , "z-30" |             , "z-30" | ||||||
|             , "w-screen" |             , "w-screen" | ||||||
|             , "h-screen" |             , "h-screen" | ||||||
|  |             , Tailwind.if_ isVisible "opacity-100" "opacity-0" | ||||||
|             ] |             ] | ||||||
| 
 |  | ||||||
|         extraClasses = |  | ||||||
|             if isVisible then |  | ||||||
|                 [ "opacity-100" ] |  | ||||||
| 
 |  | ||||||
|             else |  | ||||||
|                 [ "opacity-0" ] |  | ||||||
|     in |     in | ||||||
|     button |     button | ||||||
|         [ List.concat [ classes, extraClasses ] |> tw |> class |         [ classes |> Tailwind.use |> class | ||||||
|         , style "background-color" "rgba(0,0,0,0.30)" |         , style "background-color" "rgba(0,0,0,0.30)" | ||||||
|         , onClick handleClick |         , onClick handleClick | ||||||
|         ] |         ] | ||||||
|  | @ -157,7 +147,7 @@ overlayButton { label, handleClick, isVisible } = | ||||||
|             [ style "-webkit-text-stroke-width" "2px" |             [ style "-webkit-text-stroke-width" "2px" | ||||||
|             , style "-webkit-text-stroke-color" "black" |             , style "-webkit-text-stroke-color" "black" | ||||||
|             , class <| |             , class <| | ||||||
|                 tw |                 Tailwind.use | ||||||
|                     [ "transform" |                     [ "transform" | ||||||
|                     , "-rotate-90" |                     , "-rotate-90" | ||||||
|                     , "text-white" |                     , "text-white" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue