]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki/Interpreter/Base.hs
Wrote many
[Rakka.git] / Rakka / Wiki / Interpreter / Base.hs
index d36b80df34c4250c31ca69e1314b1a704836bab7..38578c0e590b53d4deb396a7a5da66476dbc84ef 100644 (file)
@@ -6,6 +6,7 @@ module Rakka.Wiki.Interpreter.Base
 import           Data.Map (Map)
 import qualified Data.Map as M
 import           Data.Maybe
+import           Network.URI
 import           Rakka.Page
 import           Rakka.SystemConfig
 import           Rakka.Wiki
@@ -18,6 +19,7 @@ interpreters = [ lineBreakInterp
                , divInterp
                , pageNameInterp
                , otherLangsInterp
+               , editPageInterp
                ]
 
 
@@ -41,7 +43,8 @@ divInterp :: Interpreter
 divInterp = BlockCommandInterpreter {
               bciName      = "div"
             , bciInterpret
-                = \ _ (BlockCommand _ attrs contents) -> return $ Div attrs contents
+                = \ _ (BlockCommand _ attrs contents)
+                -> return $ Div attrs (map Block contents)
             }
 
 
@@ -66,7 +69,7 @@ otherLangsInterp
               Just linkTable
                   -> do Languages langTable <- getSysConf (ctxSysConf ctx)
                         let merged = mergeTables langTable (M.toList linkTable)
-                        return $ List $ mkLangList merged
+                        return $ mkLangList merged
       }
     where
       mergeTables :: Map LanguageTag LanguageName
@@ -78,9 +81,34 @@ otherLangsInterp
                              in
                                (langName, pageName) : mergeTables m xs
 
-      mkLangList :: [(LanguageName, PageName)] -> ListElement
-      mkLangList xs = ListElement Bullet (map mkLangLink xs)
+      mkLangList :: [(LanguageName, PageName)] -> BlockElement
+      mkLangList xs = List Bullet (map mkLangLink xs)
 
       mkLangLink :: (LanguageName, PageName) -> ListItem
       mkLangLink (langName, pageName)
-          = [Right (PageLink (Just pageName) Nothing (Just langName))]
\ No newline at end of file
+          = [Inline (PageLink (Just pageName) Nothing (Just langName))]
+
+
+-- <input type="button"
+--        value="Edit"
+--        onclick="Rakka.editPage(\"http://example.org/\", \"Foo\")"
+--        class="editButton" />
+editPageInterp :: Interpreter
+editPageInterp 
+    = InlineCommandInterpreter {
+        iciName      = "editPage"
+      , iciInterpret
+          = \ ctx (InlineCommand _ args _) ->
+            do BaseURI baseURI <- getSysConf (ctxSysConf ctx)
+
+               let pageName = fromMaybe (ctxPageName ctx) (lookup "page" args)
+                   label    = fromMaybe "Edit this page" (lookup "label" args)
+                   uri      = uriToString id baseURI ""
+                   attrs    = [ ("type"   , "button")
+                              , ("value"  , label)
+                              , ("onclick", "Rakka.editPage(\"" ++ uri ++ "\", \"" ++ pageName ++ "\")")
+                              , ("class"  , "editButton")
+                              ]
+
+               return (Input attrs)
+      }