{-# LANGUAGE OverloadedLists #-} {-# LANGUAGE QuasiQuotes #-} module Main where import App.Localization import Data.Map.Strict (Map) import Data.Text (Text) import Reflex.Dom import Reflex.Localize.Dom import Text.RawString.QQ main :: IO () main = mainWidgetWithCss css $ runLocalize English $ do languageDropdown pressE <- buttonClass "outline" ButtonLabel widgetHold_ (pure ()) $ localizedText PressedLabel <$ pressE where css = [r| select { background-color: white; color: black; font-size: 14pt; } .outline { border-width: 1px; border-radius: 10px; min-width: 100px; min-height: 50px; margin-right: 30px; color: black; background-color: white; border-color: black; font-size: 14pt; } |] buttonClass :: (DomBuilder t m, PostBuild t m, MonadLocalized t m, LocalizedPrint lbl) => Dynamic t Text -> lbl -> m (Event t ()) buttonClass classValD lbl = mkButton "button" [("onclick", "return false;")] classValD . dynText =<< localized lbl mkButton :: (DomBuilder t m, PostBuild t m) => Text -> Map Text Text -> Dynamic t Text -> m a -> m (Event t a) mkButton eltp attrs classValD ma = do let classesD = do classVal <- classValD pure $ attrs <> [("class", classVal)] (e, a) <- elDynAttr' eltp classesD ma return $ a <$ domEvent Click e