]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Page.hs
started implementing trackback receiver
[Rakka.git] / Rakka / Page.hs
index 16835d5aafd79e247d227e557e93d77eb267e0ea..00406c26fed53d30433c2b2a6c23fecb5817d224 100644 (file)
@@ -20,6 +20,7 @@ module Rakka.Page
     , mkObjectURI
     , mkFragmentURI
     , mkAuxiliaryURI
+    , mkFeedURI
     , mkRakkaURI
 
     , xmlizePage
@@ -150,14 +151,14 @@ encodeFragment = escapeURIString isSafeChar . UTF8.encodeString
 mkPageURI :: URI -> PageName -> URI
 mkPageURI baseURI name
     = baseURI {
-        uriPath = foldl (</>) "/" [uriPath baseURI, encodePageName name ++ ".html"]
+        uriPath = "/" </> uriPath baseURI </> encodePageName name <.> "html"
       }
 
 
 mkPageFragmentURI :: URI -> PageName -> String -> URI
 mkPageFragmentURI baseURI name fragment
     = baseURI {
-        uriPath     = foldl (</>) "/" [uriPath baseURI, encodePageName name ++ ".html"]
+        uriPath     = "/" </> uriPath baseURI </> encodePageName name <.> "html"
       , uriFragment = ('#' : encodeFragment fragment)
       }
 
@@ -181,6 +182,13 @@ mkAuxiliaryURI baseURI basePath name
       }
 
 
+mkFeedURI :: URI -> PageName -> URI
+mkFeedURI baseURI name
+    = baseURI {
+        uriPath = "/" </> uriPath baseURI </> encodePageName name <.> "rdf"
+      }
+
+
 mkRakkaURI :: PageName -> URI
 mkRakkaURI name = URI {
                     uriScheme    = "rakka:"
@@ -240,6 +248,7 @@ xmlizePage
                   += ( eelem "page"
                        += sattr "name"     (redirName page)
                        += sattr "redirect" (redirDest page)
+                       += sattr "isLocked" (yesOrNo $ redirIsLocked page)
                        += sattr "revision" (show $ redirRevision page)
                        += sattr "lastModified" (formatW3CDateTime lastMod)
                      )) -<< ()
@@ -344,7 +353,7 @@ parseEntity
           let (isBinary, content)
                   = case (textData, binaryData) of
                       (Just text, Nothing    ) -> (False, L.pack $ UTF8.encode text )
-                      (Nothing  , Just binary) -> (True , L.pack $ B64.decode binary)
+                      (Nothing  , Just binary) -> (True , L.pack $ fromJust $ B64.decode $ dropWhitespace binary)
                       _                        -> error "one of textData or binaryData is required"
               mimeType
                   =  if isBinary then
@@ -370,6 +379,14 @@ parseEntity
                       , entityContent    = content
                       , entityUpdateInfo = updateInfo
                       }
+    where
+      dropWhitespace :: String -> String
+      dropWhitespace [] = []
+      dropWhitespace (x:xs)
+          | x == ' ' || x == '\t' || x == '\n'
+              = dropWhitespace xs
+          | otherwise
+              = x : dropWhitespace xs
 
 
 parseUpdateInfo :: (ArrowXml a, ArrowChoice a) => a XmlTree UpdateInfo