ATuin

Ractive Example

Aug 3rd, 2014
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Main where
  2.  
  3. import Control.Monad.Eff
  4. import qualified Control.Monad.Eff.Ractive as Ract
  5. import Debug.Trace
  6. import Control.Apply ((*>),(<*))
  7. import Control.Bind ((>=>))
  8. import Control.Monad.Trans
  9. import Control.Monad.Cont.Trans
  10. import Data.Maybe
  11. import Network.HTTP
  12. import Network.XHR
  13. import Tutorial.Ractive
  14.  
  15. type Template = String
  16.  
  17. type TutorialPartials = {
  18.   output  :: Template,
  19.   content :: Template}
  20.  
  21. tutorialPartials :: Template -> Template -> TutorialPartials
  22. tutorialPartials output content = {output: output, content: content}
  23.  
  24. type TutorialConfig = {
  25.   contentTemplate :: URI,
  26.   outputTemplate :: URI,
  27.   element :: String,
  28.   template :: String}
  29.  
  30. data Launcher = Launcher TutorialConfig
  31. type TutorialConfigEff = Eff(xhr::XHR,ractiveM::Ract.RactiveM,trace::Trace)
  32.  
  33. ractiveTemplate = "#ractive-template"
  34. ractiveElement = "ractive-element"
  35.  
  36. template :: String -> String -> URI -> URI -> TutorialConfig
  37. template element template baseUri dir = {contentTemplate: content, outputTemplate: output, element: element, template: template}
  38.   where
  39.     content = baseUri ++ "/" ++ dir ++ "/" ++ "content.html"
  40.     output  = baseUri ++ "/" ++ dir ++ "/" ++ "output.html"
  41.  
  42. templateTuto :: URI -> TutorialConfig
  43. templateTuto = template ractiveElement ractiveTemplate "http://localhost/templates"
  44.  
  45. templateTuto1 :: TutorialConfig
  46. templateTuto1 = templateTuto "tut1"
  47.  
  48. getFrom :: forall r. URI -> (RequestConfig r -> EffXHR r Unit)
  49. getFrom url = (flip $ flip get url) {}
  50.  
  51. getTemplate :: forall e a b. (String -> a -> b) -> URI -> a -> ContT Unit (Eff (xhr::XHR | e)) b
  52. getTemplate fun uri = \v -> ContT \next -> do
  53.   getFrom uri $ defaultConfig {onLoadEnd = \response -> next $ fun (responseText response) v}
  54.  
  55. outputPartialTut :: forall e. URI -> String -> ContT Unit (Eff (xhr::XHR | e)) (String -> TutorialPartials)
  56. outputPartialTut = getTemplate \tmpl -> \_ -> tutorialPartials tmpl
  57.  
  58. contentPartialTut :: forall e. URI -> (String -> TutorialPartials) -> ContT Unit (Eff (xhr::XHR | e)) TutorialPartials
  59. contentPartialTut = getTemplate \tmpl -> \fun -> fun tmpl
  60.  
  61. ractiveTut :: forall e. TutorialConfig -> TutorialPartials -> ContT Unit (Eff (ractiveM::Ract.RactiveM | e)) Ract.Ractive
  62. ractiveTut config partials = ContT \rest -> do
  63.   ractive <- Ract.ractive config.template config.element {}
  64.   Ract.setPartial "outputP" partials.output ractive
  65.   Ract.setPartial "contentP" partials.content ractive
  66.  
  67. loadTutorial :: forall e. TutorialConfig -> String -> ContT Unit (Eff (ractiveM::Ract.RactiveM,xhr::XHR | e)) Ract.Ractive
  68. loadTutorial config = outputPartialTut config.outputTemplate >=> contentPartialTut config.contentTemplate >=> ractiveTut config
  69.  
  70. launch :: forall e. Eff (trace :: Trace, ractiveM :: Ract.RactiveM, xhr :: XHR | e) Unit
  71. launch = runContT (loadTutorial templateTuto1 "DDD") $ \r ->
  72.   trace "DONE"
Advertisement
Add Comment
Please, Sign In to add comment