module Reflex.Localize.Dom(
localizedText
, localizedTextWith
, localizedTextLower
, localizedTextUpper
, languageDropdown
, module Reflex.Localize
) where
import Control.Monad.Fix
import Data.Text (Text)
import Reflex.Dom
import Reflex.Localize
import Reflex.Localize.Language
import Reflex.Localize.Trans
import qualified Data.Text as T
import qualified Data.Map.Strict as M
languageDropdown :: (MonadLocalized t m, MonadFix m, PostBuild t m, MonadHold t m, DomBuilder t m, LocalizedPrint Language, Eq Language, Enum Language, Ord Language, Bounded Language) => m ()
languageDropdown = do
langD <- getLanguage
initKey <- sample . current $ langD
let listLangsD = ffor langD $ \l -> M.fromList $ fmap (\v -> (v, localizedShow l v)) [minBound .. maxBound]
ddnCfg = DropdownConfig {
_dropdownConfig_setValue = updated langD
, _dropdownConfig_attributes = constDyn ("class" =: "select-lang")
}
dp <- dropdown initKey listLangsD ddnCfg
let selD = _dropdown_value dp
selE <- fmap updated $ holdUniqDyn selD
widgetHold_ (pure ()) $ setLanguage <$> selE
localizedText :: (MonadLocalized t m, LocalizedPrint a, PostBuild t m, DomBuilder t m) => a -> m ()
localizedText val = dynText =<< localized val
localizedTextWith :: (MonadLocalized t m, LocalizedPrint a, PostBuild t m, DomBuilder t m) => (Text -> Text) -> a -> m ()
localizedTextWith f val = dynText =<< ((fmap . fmap) f $ localized val)
localizedTextLower :: (MonadLocalized t m, LocalizedPrint a, PostBuild t m, DomBuilder t m) => a -> m ()
localizedTextLower = localizedTextWith T.toLower
localizedTextUpper :: (MonadLocalized t m, LocalizedPrint a, PostBuild t m, DomBuilder t m) => a -> m ()
localizedTextUpper = localizedTextWith T.toUpper
deriving instance DomBuilder t m => DomBuilder t (LocalizeT t m)