X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FResource%2FPageEntity.hs;h=0b5459447419ffab669650e8f08f5bd1c6abe381;hb=b101c0a9aad609704eaa9157fe809be80d2aacf7;hp=1ad3ffaf5c782b6b543497ec3b682ba600c0a93f;hpb=044a917ed3908780479b759ac772e1545616c7fc;p=Rakka.git diff --git a/Rakka/Resource/PageEntity.hs b/Rakka/Resource/PageEntity.hs index 1ad3ffa..0b54594 100644 --- a/Rakka/Resource/PageEntity.hs +++ b/Rakka/Resource/PageEntity.hs @@ -18,6 +18,7 @@ import Rakka.Page import Rakka.Resource import Rakka.Storage import Rakka.SystemConfig +import Rakka.Utils import Rakka.Wiki.Engine import System.FilePath import Text.XML.HXT.Arrow.Namespace @@ -54,11 +55,16 @@ handleGet env name = runIdempotentA $ proc () -> do pageM <- getPageA (envStorage env) -< (name, Nothing) case pageM of - Nothing -> handlePageNotFound env -< name - Just page -> if isEntity page then - handleGetEntity env -< page - else - handleRedirect env -< page + Nothing + -> do items <- getDirContentsA (envStorage env) -< (name, Nothing) + case items of + [] -> handlePageNotFound env -< name + _ -> handleGetPageListing env -< (name, items) + Just page + -> if isEntity page then + handleGetEntity env -< page + else + handleRedirect env -< page {- @@ -116,8 +122,10 @@ entityToXHTML env -> do SiteName siteName <- getSysConfA (envSysConf env) -< () BaseURI baseURI <- getSysConfA (envSysConf env) -< () StyleSheet styleSheet <- getSysConfA (envSysConf env) -< () + GlobalLock isGLocked <- getSysConfA (envSysConf env) -< () - name <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page + name <- (getXPathTreesInDoc "/page/@name/text()" >>> getText) -< page + isLocked <- (getXPathTreesInDoc "/page/@isLocked/text()" >>> getText >>> parseYesOrNo) -< page let cssHref = [uriToString id (mkObjectURI baseURI styleSheet) ""] scriptSrc = [uriToString id (baseURI { uriPath = uriPath baseURI "js" }) ""] @@ -156,7 +164,9 @@ entityToXHTML env ) += ( eelem "script" += sattr "type" "text/javascript" - += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";") + += txt ("Rakka.baseURI=\"" ++ uriToString id baseURI "" ++ "\";") + += txt ("Rakka.isLocked=" ++ trueOrFalse isLocked ++ ";") + += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";") ) ) += ( eelem "body" @@ -208,6 +218,126 @@ readSubPage env returnA -< subXHTML +{- + + + + +-} +handleGetPageListing :: (ArrowXml a, ArrowChoice a, ArrowIO a) => Environment -> a (PageName, [PageName]) (Resource ()) +handleGetPageListing env + = proc (dir, items) + -> do tree <- ( eelem "/" + += ( eelem "pageListing" + += attr "path" (arr fst >>> mkText) + += ( arrL snd + >>> + ( eelem "page" + += attr "name" (arr id >>> mkText) + ) + ) + ) + ) -< (dir, items) + returnA -< outputXmlPage tree (pageListingToXHTML env) + + +pageListingToXHTML :: (ArrowXml a, ArrowChoice a, ArrowIO a) => Environment -> a XmlTree XmlTree +pageListingToXHTML env + = proc pageListing + -> do SiteName siteName <- getSysConfA (envSysConf env) -< () + BaseURI baseURI <- getSysConfA (envSysConf env) -< () + StyleSheet styleSheet <- getSysConfA (envSysConf env) -< () + GlobalLock isGLocked <- getSysConfA (envSysConf env) -< () + + name <- (getXPathTreesInDoc "/pageListing/@path/text()" >>> getText) -< pageListing + + let cssHref = [uriToString id (mkObjectURI baseURI styleSheet) ""] + scriptSrc = [uriToString id (baseURI { uriPath = uriPath baseURI "js" }) ""] + + pageTitle <- listA (readSubPage env) -< (name, Nothing, "PageTitle") + leftSideBar <- listA (readSubPage env) -< (name, Nothing, "SideBar/Left") + rightSideBar <- listA (readSubPage env) -< (name, Nothing, "SideBar/Right") + + ( eelem "/" + += ( eelem "html" + += sattr "xmlns" "http://www.w3.org/1999/xhtml" + += ( eelem "head" + += ( eelem "title" + += txt siteName + += txt " - " + += getXPathTreesInDoc "/pageListing/@path/text()" + ) + += ( constL cssHref + >>> + eelem "link" + += sattr "rel" "stylesheet" + += sattr "type" "text/css" + += attr "href" (arr id >>> mkText) + ) + += ( constL scriptSrc + >>> + eelem "script" + += sattr "type" "text/javascript" + += attr "src" (arr id >>> mkText) + ) + += ( eelem "script" + += sattr "type" "text/javascript" + += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";") + += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";") + ) + ) + += ( eelem "body" + += ( eelem "div" + += sattr "class" "header" + ) + += ( eelem "div" + += sattr "class" "center" + += ( eelem "div" + += sattr "class" "title" + += constL pageTitle + ) + += ( eelem "div" + += sattr "class" "body" + += ( eelem "ul" + += ( getXPathTreesInDoc "/pageListing/page/@name/text()" + >>> + eelem "li" + += ( eelem "a" + += attr "href" ( getText + >>> + arr (\ x -> uriToString id (mkPageURI baseURI x) "") + >>> + mkText + ) + += this + ) + ) + ) + ) + ) + += ( eelem "div" + += sattr "class" "footer" + ) + += ( eelem "div" + += sattr "class" "left sideBar" + += ( eelem "div" + += sattr "class" "content" + += constL leftSideBar + ) + ) + += ( eelem "div" + += sattr "class" "right sideBar" + += ( eelem "div" + += sattr "class" "content" + += constL rightSideBar + ) + ) + ) + >>> + uniqueNamespacesFromDeclAndQNames + ) ) -<< pageListing + + {- -} @@ -229,6 +359,7 @@ notFoundToXHTML env -> do SiteName siteName <- getSysConfA (envSysConf env) -< () BaseURI baseURI <- getSysConfA (envSysConf env) -< () StyleSheet styleSheet <- getSysConfA (envSysConf env) -< () + GlobalLock isGLocked <- getSysConfA (envSysConf env) -< () name <- (getXPathTreesInDoc "/pageNotFound/@name/text()" >>> getText) -< pageNotFound @@ -264,6 +395,7 @@ notFoundToXHTML env += ( eelem "script" += sattr "type" "text/javascript" += txt ("Rakka.baseURI = \"" ++ uriToString id baseURI "" ++ "\";") + += txt ("Rakka.isGlobalLocked=" ++ trueOrFalse isGLocked ++ ";") ) ) += ( eelem "body" @@ -306,13 +438,15 @@ notFoundToXHTML env handlePut :: Environment -> PageName -> Resource () handlePut env name - = runXmlA env "rakka-page-1.0.rng" $ proc tree - -> do page <- parseXmlizedPage -< (name, tree) - status <- putPageA (envStorage env) -< page - returnA -< setStatus status + = do userID <- getUserID env + runXmlA env "rakka-page-1.0.rng" $ proc tree + -> do page <- parseXmlizedPage -< (name, tree) + status <- putPageA (envStorage env) -< (userID, page) + returnA -< setStatus status handleDelete :: Environment -> PageName -> Resource () handleDelete env name - = do status <- deletePage (envStorage env) name + = do userID <- getUserID env + status <- deletePage (envStorage env) userID name setStatus status