]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource/PageEntity.hs
implemented page deleting
[Rakka.git] / Rakka / Resource / PageEntity.hs
index d84ddc7b6af0024b9792aafff1d1c835fb29ead6..1ad3ffaf5c782b6b543497ec3b682ba600c0a93f 100644 (file)
@@ -20,6 +20,7 @@ import           Rakka.Storage
 import           Rakka.SystemConfig
 import           Rakka.Wiki.Engine
 import           System.FilePath
+import           Text.XML.HXT.Arrow.Namespace
 import           Text.XML.HXT.Arrow.WriteDocument
 import           Text.XML.HXT.Arrow.XmlArrow
 import           Text.XML.HXT.Arrow.XmlIOStateArrow
@@ -37,11 +38,11 @@ fallbackPageEntity env path
         = return $ Just $ ResourceDef {
             resUsesNativeThread = False
           , resIsGreedy         = True
-          , resGet              = Just $ handleGet env (toPageName path)
+          , resGet              = Just $ handleGet    env (toPageName path)
           , resHead             = Nothing
           , resPost             = Nothing
-          , resPut              = Just $ handlePut env (toPageName path)
-          , resDelete           = Nothing
+          , resPut              = Just $ handlePut    env (toPageName path)
+          , resDelete           = Just $ handleDelete env (toPageName path)
           }
     where
       toPageName :: [String] -> PageName
@@ -53,14 +54,12 @@ handleGet env name
     = runIdempotentA $ proc ()
     -> do pageM <- getPageA (envStorage env) -< (name, Nothing)
           case pageM of
-            Nothing
-                -> handlePageNotFound env -< name
+            Nothing   -> handlePageNotFound env -< name
+            Just page -> if isEntity page then
+                             handleGetEntity env -< page
+                         else
+                             handleRedirect env -< page
 
-            Just redir@(Redirection _ _ _ _ _)
-                -> handleRedirect env -< redir
-
-            Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)
-                -> handleGetEntity env -< entity
 
 {-
   HTTP/1.1 302 Found
@@ -155,6 +154,10 @@ entityToXHTML env
                            += sattr "type" "text/javascript"
                            += attr "src" (arr id >>> mkText)
                          )
+                      += ( eelem "script"
+                           += sattr "type" "text/javascript"
+                           += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";")
+                         )
                     )
                  += ( eelem "body"
                       += ( eelem "div"
@@ -189,6 +192,8 @@ entityToXHTML env
                               )
                          )
                     )
+                 >>>
+                 uniqueNamespacesFromDeclAndQNames
                ) ) -<< page
 
 
@@ -256,6 +261,10 @@ notFoundToXHTML env
                            += sattr "type" "text/javascript"
                            += attr "src" (arr id >>> mkText)
                          )
+                      += ( eelem "script"
+                           += sattr "type" "text/javascript"
+                           += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";")
+                         )
                     )
                  += ( eelem "body"
                       += ( eelem "div"
@@ -290,6 +299,8 @@ notFoundToXHTML env
                               )
                          )
                     )
+                 >>>
+                 uniqueNamespacesFromDeclAndQNames
                ) ) -<< pageNotFound
 
 
@@ -299,3 +310,9 @@ handlePut env name
     -> do page   <- parseXmlizedPage -< (name, tree)
           status <- putPageA (envStorage env) -< page
           returnA  -< setStatus status
+
+
+handleDelete :: Environment -> PageName -> Resource ()
+handleDelete env name
+    = do status <- deletePage (envStorage env) name
+         setStatus status