module Ondim.Targets.HTML.Expansions where import Ondim import Ondim.Extra.Expansions import Ondim.Extra.Standard (standardMap) import Ondim.Targets.HTML.Instances import Ondim.Targets.HTML.Parser (parseT) import Text.XML qualified as X import Ondim.Debug (throwTemplateError) defaultState :: OndimState s defaultState :: forall s. OndimState s defaultState = OndimState { expansions :: Namespace s expansions = Namespace s forall {m}. Namespace m exps } where exps :: Namespace m exps = NamespaceMap m -> Namespace m forall m. NamespaceMap m -> Namespace m mapToNamespace do NamespaceMap m forall s. NamespaceMap s standardMap Text "raw.html" Text -> Expansion m HtmlNode -> NamespaceMap m forall t m. (HasCallStack, Typeable t) => Text -> Expansion m t -> NamespaceMap m ## \(HtmlNode node :: HtmlNode) -> do t <- Text -> HtmlNode -> Ondim m Text forall t s. OndimNode t => Text -> t -> Ondim s Text lookupAttr' Text "text" HtmlNode node return [RawNode t] Text "expanded.html" Text -> Expansion m HtmlNode -> NamespaceMap m forall t m. (HasCallStack, Typeable t) => Text -> Expansion m t -> NamespaceMap m ## \(HtmlNode node :: HtmlNode) -> do t <- Text -> Document parseT (Text -> Document) -> Ondim m Text -> Ondim m Document forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Text -> HtmlNode -> Ondim m Text forall t s. OndimNode t => Text -> t -> Ondim s Text lookupAttr' Text "text" HtmlNode node result <- case toHtmlNodes $ X.elementNodes $ X.documentRoot t of Right [HtmlNode] nodes -> [HtmlNode] -> Ondim m [HtmlNode] forall a. a -> Ondim m a forall (m :: * -> *) a. Monad m => a -> m a return [HtmlNode] nodes Left String err -> Text -> Ondim m [HtmlNode] forall s a. HasCallStack => Text -> Ondim s a throwTemplateError (String -> Text forall a. ToText a => a -> Text toText String err) expandSubs result