packages feed

iptadmin-1.2.0: src/IptAdmin/Static.hs

{-# LANGUAGE TemplateHaskell #-}

module IptAdmin.Static where

import Control.Monad.Error hiding (lift)
import qualified Data.ByteString as B
import Data.FileEmbed
import Happstack.Server.FileServe.BuildingBlocks
import Happstack.Server.Types
import Happstack.Server.SimpleHTTP
import IptAdmin.Types
import Language.Haskell.TH.Syntax
import System.IO.Unsafe (unsafePerformIO)
import System.Time

pageHandlers :: IptAdminAuth Response
pageHandlers = msum [ dirs "css/iptadmin.css" $ returnCss $ $(embedFile "static/css/iptadmin.css")
                    , dirs "js/showpage.js" $ returnJs $ $(embedFile "static/js/showpage.js")
                    , dirs "js/jquery-1.6.2.min.js" $ returnJs jquery162minjs
                    , dirs "js/jquery-ui-1.8.16.custom.min.js" $ returnJs jqueryUi1816customMinJs
                    , dirs "css/iptadmin-theme/jquery-ui-1.8.16.custom.css" $ returnCss jqueryUi1816customCss
                    , dirs "css/iptadmin-theme/images/ui-bg_flat_0_aaaaaa_40x100.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_flat_0_aaaaaa_40x100.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_flat_75_ffffff_40x100.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_flat_75_ffffff_40x100.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_glass_55_fbf9ee_1x400.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_glass_55_fbf9ee_1x400.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_glass_65_ffffff_1x400.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_glass_65_ffffff_1x400.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_glass_75_f0f0f0_1x400.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_glass_75_f0f0f0_1x400.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_glass_75_fafafa_1x400.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_glass_75_fafafa_1x400.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_glass_95_fef1ec_1x400.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_glass_95_fef1ec_1x400.png")
                    , dirs "css/iptadmin-theme/images/ui-bg_highlight-hard_75_d7d7d7_1x100.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-bg_highlight-hard_75_d7d7d7_1x100.png")
                    , dirs "css/iptadmin-theme/images/ui-icons_000000_256x240.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-icons_000000_256x240.png")
                    , dirs "css/iptadmin-theme/images/ui-icons_222222_256x240.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-icons_222222_256x240.png")
                    , dirs "css/iptadmin-theme/images/ui-icons_2e83ff_256x240.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-icons_2e83ff_256x240.png")
                    , dirs "css/iptadmin-theme/images/ui-icons_5b5b5b_256x240.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-icons_5b5b5b_256x240.png")
                    , dirs "css/iptadmin-theme/images/ui-icons_cd0a0a_256x240.png" $ returnPng $
                        $(embedFile "static/css/iptadmin-theme/images/ui-icons_cd0a0a_256x240.png")
                    ]

returnJs :: B.ByteString -> IptAdminAuth Response
returnJs file = do
    request <- askRq
    return $ strictByteStringResponse "text/javascript; charset=utf8"
                                      file
                                      (Just (updateTime, request))
                                      0
                                      (toInteger $ B.length file)

returnCss :: B.ByteString -> IptAdminAuth Response
returnCss file = do
    request <- askRq
    return $ strictByteStringResponse "text/css; charset=utf8"
                                      file
                                      (Just (updateTime, request))
                                      0
                                      (toInteger $ B.length file)

returnPng :: B.ByteString -> IptAdminAuth Response
returnPng file = do
    request <- askRq
    return $ strictByteStringResponse "image/png"
                                      file
                                      (Just (updateTime, request))
                                      0
                                      (toInteger $ B.length file)

-- | Get date and time of compilation
updateClockTime1 = $(lift $ let TOD a _ = unsafePerformIO getClockTime in a)
updateClockTime2 = $(lift $ let TOD _ b = unsafePerformIO getClockTime in b)

updateTime :: CalendarTime
updateTime = unsafePerformIO $ toCalendarTime $ TOD updateClockTime1 updateClockTime2

{-
updateTime :: CalendarTime
updateTime = CalendarTime 2011
                          September
                          13
                          0
                          0
                          0
                          0
                          Tuesday
                          250
                          "GMT"
                          0
                          False
                          -}

jquery162minjs :: B.ByteString
jquery162minjs = $(embedFile "static/js/jquery-1.6.2.min.js")

jqueryUi1816customMinJs :: B.ByteString
jqueryUi1816customMinJs = $(embedFile "static/js/jquery-ui-1.8.16.custom.min.js")

jqueryUi1816customCss :: B.ByteString
jqueryUi1816customCss = $(embedFile "static/css/iptadmin-theme/jquery-ui-1.8.16.custom.css")