{-# OPTIONS_GHC -F -pgmFtrhsx #-} -- | HTML.hs -- A module which contain static html. module HTML ( errorPageTemplate, fullPageTemplate, pagesTemplate, threadTemplate, omittedTemplate, opPostTemplate, replyTemplate ) where import Board import HSP -- RAGE!!! -- http://hackage.haskell.org/packages/archive/old-time/1.0.0.1/doc/html/src/System-Time.html#ClockTime -- > FIXME: This is arguably wrong, since we can't -- > get the current timezone without being in the IO monad. import System.IO.Unsafe import System.Time import Data.Time import System.Locale ( defaultTimeLocale ) import Data.List.Utils import Text.Regex.Posix -- Some vars. title = "Гнездовье Жабрача" errorPageTemplate :: String -> HSP XML errorPageTemplate err = <% err %>

<% err %>

fullPageTemplate :: Bool -> String -> [HSP XML] -> HSP XML fullPageTemplate isThread tagsStr xml = <% fullTitle %> <% boardsListTemplate False %>
<% xml %> <% boardsListTemplate isThread %> where fullTitle = "/" ++ tagsStr ++ "/ — " ++ title threadTemplate :: Bool -> String -> String -> [HSP XML] -> HSP XML threadTemplate True tag num xml =

Просмотр треда №<% num %>. [Назад]

<% xml %>
threadTemplate False tag _ xml =


<% tag %> <% xml %>
opPostTemplate :: Bool -> Post -> HSP XML opPostTemplate shortLinks post = <% postTemplate "post" shortLinks post %>
omittedTemplate :: Int -> HSP XML omittedTemplate omitted = if omitted == 0 then return $ pcdata "" else Пропущено: <% show omitted %>. replyTemplate :: Bool -> Post -> HSP XML replyTemplate shortLinks post = <% postTemplate "reply" shortLinks post %>
<% pcdata ">>" %>
pagesTemplate :: String -> (Int, Int) -> HSP XML pagesTemplate tag (page, pages) =


<% pagePrev %> <% pagesBefore %> <% pageCurrent %> <% pagesAfter %> <% pageNext %>

where pagePrev :: HSP XML pagePrev = if page > 0 then [<% pcdata "<<" %>] else return $ pcdata "" pagesBefore = generatePages [0..page-1] pageCurrent = [<% show page %>] pagesAfter = generatePages [page+1..pages] pageNext :: HSP XML pageNext = if page < pages then [<% pcdata ">>" %>] else return $ pcdata "" generatePages :: [Int] -> [HSP XML] generatePages ns = map (\n -> [<% show n %>]) ns link n = "/"++tag++"/"++show n --- boardsListTemplate :: Bool -> HSP XML boardsListTemplate needHr =
<% if needHr then
else (return $ pcdata "") %> [ /a/ /b/ /d/ /s/ /vg/ ] [ Главная ] [ Правила Спецификация Сорцы ]
postTemplate :: String -> Bool -> Post -> HSP XML postTemplate class' shortLinks post = <% cdata " " %> <% pcdata ">>" %><% num %>
<% img %>
<% reply %> <% cdata $ nl2br $ formating $ pbody post %>
where num = show $ pnumber post link = doLink shortLinks (pthread post, pnumber post) numReply = show $ preplyto post linkReply = doLink shortLinks (pthread post, preplyto post) date = formatCalendarTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" (unsafePerformIO $ toCalendarTime $ pdatetime post) img = maybe (return $ pcdata "") imgXML $ pimgurl post reply = if (preplyto post == 0) || (preplyto post == pthread post) then return $ pcdata "" else replyXML linkReply numReply imgXML :: String -> HSP XML imgXML url =
Нажмите на картинку для просмотра оригинальной версии.
<% img %>
where (width', thumb) = getThumb url img = if width' == 0 then else getThumb :: String -> (Int, String) getThumb url | url =~ "radikal\\.ru" = (0, (init $ reverse $ dropWhile (/='.') $ reverse url)++"t.jpg") getThumb url = (200, url) replyXML :: String -> String -> HSP XML replyXML link num = doLink :: Bool -> (Int, Int) -> String doLink isShort (thread, post) = let sPost = '#':(show post) in if isShort then sPost else "/"++(show thread)++sPost -- Add formatting to post. nl2br :: String -> String nl2br = concat . map (\c -> if c == '\n' then "
" else [c]) formating :: String -> String formating = replace "anonymous@" "radiochan@"