noredink-ui/styleguide-app/CommonControls.elm

222 lines
6.3 KiB
Elm
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module CommonControls exposing
( css, mobileCss, quizEngineMobileCss, notMobileCss
, choice
, icon, uiIcon
, disabledListItem, exampleHtml, httpError, premiumLevel, quickBrownFox, romeoAndJulietQuotation
)
{-|
@docs css, mobileCss, quizEngineMobileCss, notMobileCss
@docs choice
@docs icon, uiIcon
-}
import Css
import Debug.Control as Control exposing (Control)
import Debug.Control.Extra as ControlExtra
import Html.Styled as Html exposing (Html)
import Html.Styled.Attributes as Attributes
import Http
import Nri.Ui.Colors.V1 as Colors
import Nri.Ui.Data.PremiumLevel exposing (PremiumLevel(..))
import Nri.Ui.Svg.V1 exposing (Svg)
import Nri.Ui.UiIcon.V1 as UiIcon
premiumLevel : Control ( String, PremiumLevel )
premiumLevel =
choice "PremiumLevel"
[ ( "Free", Free )
, ( "PremiumWithWriting", PremiumWithWriting )
]
httpError : Control Http.Error
httpError =
Control.choice
[ ( "Bad Url", Control.value (Http.BadUrl "/request-url") )
, ( "Timeout", Control.value Http.Timeout )
, ( "Network Error", Control.value Http.NetworkError )
, ( "Bad Status: 401", Control.value (Http.BadStatus 401) )
, ( "Bad Status: 404", Control.value (Http.BadStatus 404) )
, ( "Bad Status: ???", Control.value (Http.BadStatus 500) )
, ( "Bad Body (often, a JSON decoding problem)"
, Control.value
(Http.BadBody
"""
The Json.Decode.oneOf at json.draft failed in the following 2 ways:
(1) Problem with the given value:
null
Expecting an OBJECT with a field named `content`
(2) Problem with the given value:
null
Expecting an OBJECT with a field named `code`
"""
)
)
]
quickBrownFox : String
quickBrownFox =
"The quick brown fox jumps over the lazy dog."
romeoAndJulietQuotation : String
romeoAndJulietQuotation =
"""
Two households, both alike in dignity,
In fair Verona, where we lay our scene,
From ancient grudge break to new mutiny,
Where civil blood makes civil hands unclean.
From forth the fatal loins of these two foes
A pair of star-crossd lovers take their life;
Whose misadventured piteous overthrows
Do with their death bury their parents strife.
The fearful passage of their death-markd love,
And the continuance of their parents rage,
Which, but their childrens end, nought could remove,
Is now the two hours traffic of our stage;
The which if you with patient ears attend,
What here shall miss, our toil shall strive to mend.
"""
exampleHtml : List (Html msg)
exampleHtml =
[ Html.text "This is a "
, Html.strong [] [ Html.text "bolded phrase" ]
, Html.text ". "
, Html.a
[ Attributes.href "http://www.noredink.com"
, Attributes.target "_blank"
]
[ Html.text quickBrownFox ]
, Html.text " When I stepped out, into the bright sunlight from the darkness of the movie house, I had only two things on my mind: Paul Newman, and a ride home."
]
icon :
String
-> (Svg -> value)
-> Control (List ( String, value ))
-> Control (List ( String, value ))
icon moduleName f =
ControlExtra.optionalListItemDefaultChecked "icon"
(Control.map
(\( iconName, iconValue ) ->
( moduleName ++ ".icon " ++ iconName, f iconValue )
)
uiIcon
)
uiIcon : Control ( String, Svg )
uiIcon =
[ ( "arrowLeft", UiIcon.arrowLeft )
, ( "unarchive", UiIcon.unarchive )
, ( "share", UiIcon.share )
, ( "preview", UiIcon.preview )
, ( "skip", UiIcon.skip )
, ( "copyToClipboard", UiIcon.copyToClipboard )
, ( "gift", UiIcon.gift )
, ( "home", UiIcon.home )
, ( "library", UiIcon.library )
, ( "searchInCicle", UiIcon.searchInCicle )
]
|> choice "UiIcon"
choice : String -> List ( String, value ) -> Control ( String, value )
choice moduleName options =
options
|> List.map
(\( name, value ) ->
( name, Control.value ( moduleName ++ "." ++ name, value ) )
)
|> Control.choice
disabledListItem : String -> (Bool -> b) -> Control (List ( String, b )) -> Control (List ( String, b ))
disabledListItem moduleName f =
ControlExtra.optionalBoolListItem "disabled"
(\bool ->
( moduleName ++ ".disabled True"
, f bool
)
)
css :
{ moduleName : String, use : List Css.Style -> b }
-> Control (List ( String, b ))
-> Control (List ( String, b ))
css =
css_ "css"
( "[ Css.border3 (Css.px 4) Css.dashed Colors.red ]"
, [ Css.border3 (Css.px 4) Css.dashed Colors.red ]
)
mobileCss :
{ moduleName : String, use : List Css.Style -> b }
-> Control (List ( String, b ))
-> Control (List ( String, b ))
mobileCss =
css_ "mobileCss"
( "[ Css.border3 (Css.px 4) Css.dotted Colors.orange ]"
, [ Css.border3 (Css.px 4) Css.dotted Colors.orange ]
)
quizEngineMobileCss :
{ moduleName : String, use : List Css.Style -> b }
-> Control (List ( String, b ))
-> Control (List ( String, b ))
quizEngineMobileCss =
css_ "quizEngineMobileCss"
( "[ Css.border3 (Css.px 4) Css.solid Colors.aqua |> Css.important ]"
, [ Css.border3 (Css.px 4) Css.solid Colors.aqua |> Css.important ]
)
notMobileCss :
{ moduleName : String, use : List Css.Style -> b }
-> Control (List ( String, b ))
-> Control (List ( String, b ))
notMobileCss =
css_ "notMobileCss"
( "[ Css.backgroundColor Colors.purple ]"
, [ Css.backgroundColor Colors.purple ]
)
css_ :
String
-> ( String, List Css.Style )
->
{ moduleName : String
, use : List Css.Style -> b
}
-> Control (List ( String, b ))
-> Control (List ( String, b ))
css_ helperName ( styles, default ) { moduleName, use } =
ControlExtra.optionalListItem helperName
(Control.value
( moduleName ++ "." ++ helperName ++ " " ++ styles
, use default
)
)