ATuin

Ractive Example

Aug 4th, 2014
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Tutorial.Ractive.Demo 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.Demo.Tutorials
  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. --tutorials = [{"name": "tut1"},{"name": "tut2"}]
  37.  
  38. template :: String -> String -> URI -> URI -> TutorialConfig
  39. template element template baseUri dir = {contentTemplate: content, outputTemplate: output, element: element, template: template}
  40.   where
  41.     content = baseUri ++ "/" ++ dir ++ "/" ++ "content.html"
  42.     output  = baseUri ++ "/" ++ dir ++ "/" ++ "output.html"
  43.  
  44. templateTuto :: URI -> TutorialConfig
  45. templateTuto = template ractiveElement ractiveTemplate "http://localhost/templates"
  46.  
  47. templateTuto1 :: TutorialConfig
  48. templateTuto1 = templateTuto "tut1"
  49.  
  50. getFrom :: forall r. URI -> (RequestConfig r -> EffXHR r Unit)
  51. getFrom url = (flip $ flip get url) {}
  52.  
  53. getTemplate :: forall e a b. (String -> a -> b) -> URI -> a -> ContT Unit (Eff (xhr::XHR | e)) b
  54. getTemplate fun uri = \v ->
  55.   ContT \next -> do
  56.     getFrom uri $ defaultConfig {onLoadEnd = \response -> next $ fun (responseText response) v}
  57.  
  58. outputPartialTut :: forall e. URI -> Unit -> ContT Unit (Eff (xhr::XHR | e)) (String -> TutorialPartials)
  59. outputPartialTut = getTemplate \tmpl ->
  60.   \_ -> tutorialPartials tmpl
  61.  
  62. contentPartialTut :: forall e. URI -> (String -> TutorialPartials) -> ContT Unit (Eff (xhr::XHR | e)) TutorialPartials
  63. contentPartialTut = getTemplate \tmpl ->
  64.   \fun -> fun tmpl
  65.  
  66. ractiveTut :: forall e. TutorialConfig -> TutorialPartials -> ContT Unit (Eff (ractiveM::Ract.RactiveM | e)) Ract.Ractive
  67. ractiveTut config partials = ContT \next -> do
  68.   r <- Ract.ractiveFromData {template: config.template,
  69.     el: config.element,
  70.     partials: {outputP: partials.output, contentP: partials.content}}
  71.   next r
  72. --  ractive <- Ract.ractive config.template config.element {}
  73. --  Ract.setPartial "outputP" partials.output ractive
  74. --  Ract.setPartial "contentP" partials.content ractive
  75.  
  76. loadTutorial :: forall e. TutorialConfig -> Unit -> ContT Unit (Eff (ractiveM::Ract.RactiveM,xhr::XHR | e)) Ract.Ractive
  77. loadTutorial config = outputPartialTut
  78.   config.outputTemplate >=>
  79.   contentPartialTut config.contentTemplate >=>
  80.   ractiveTut config
  81.  
  82. launch :: forall e. Tutorial Unit e -> Eff (ractiveM::Ract.RactiveM,xhr::XHR,trace::Trace|e) Unit
  83. launch (Tutorial name tutorialF) = runContT executeTutorial $ \r ->
  84.   trace "DONE"
  85.   where
  86.     executeTutorial = loadTutorial (templateTuto name) >=> tutorialF
  87.  
  88. --runContT (loadTutorial tutorial unit) $ \r ->
  89. --  trace "DONE"
  90.  
  91. init = do
  92.   r <- Ract.ractive "#ractive-nav-template" "ractive-nav" {tutorials: tutorials}
  93.   flip (Ract.on "loadtutorial") r \r -> do
  94.     launch tutorial1
  95.     --launch templateTuto1
  96.     --trace "Cargado"
  97.   trace "Initialization done"
  98.  
  99.  
  100.  
  101. --- Another File
  102. module Tutorial.Ractive.Demo.Tutorials where
  103.  
  104. import Debug.Trace
  105. import Control.Monad.Cont.Trans
  106. import Control.Monad.Eff
  107. import Control.Monad.Eff.Ractive
  108.  
  109. data Tutorial a eff = Tutorial String (Ractive -> ContT Unit (Eff eff) a)
  110.  
  111. tutorials = [{"name": "tut1"},{"name": "tut2"}]
  112.  
  113. tutorial1 :: Tutorial Unit (trace :: Trace, ractiveM :: RactiveM)
  114. tutorial1 = Tutorial "tut1" tutorial1Fn
  115.  
  116. tutorial1Fn :: Ractive -> ContT Unit (Eff (trace :: Trace, ractiveM :: RactiveM)) Unit
  117. tutorial1Fn ractive = ContT \_ -> do
  118.   trace "Tutorial 1 starting"
  119.   set "d" "d" ractive
  120.   trace "Tutorial 1 Done"
Advertisement
Add Comment
Please, Sign In to add comment