module Web.Skell.Saferoute where
import Control.Applicative
import qualified Data.ByteString.Lazy as B
import qualified Data.Map.Lazy as M
import Data.Monoid
import qualified Data.Text as S
import qualified Data.Text.Lazy as L
import Data.Monoid
import Network.Wai (Response)
import qualified Text.Blaze.Html5 as H
import qualified Web.Skell.MimeTypes as Mt
import Web.Skell.Responsible
type Route = S.Text
type RoutePart = S.Text
type RouteParts = [S.Text]
type ForeignResource = H.AttributeValue
class Eq r => Resource r where
getRoute :: r -> Route
resourceList :: [r]
resourceList = M.elems routeResourceMap
routeResourceMap :: M.Map Route r
routeResourceMap = M.fromList [(route, resource) | resource <- resourceList,
let route = getRoute resource ]
lookupRoute :: Route -> Maybe r
lookupRoute route = M.lookup route routeResourceMap
lookupRouteParts :: RouteParts -> Maybe r
lookupRouteParts = lookupRoute . slashPrependJoin
getUrl :: Resource r => r -> H.AttributeValue
getUrl = H.toValue . getRoute
slashPrependJoin :: RouteParts -> Route
slashPrependJoin parts = "/" <> S.intercalate "/" parts
data ErrorPage = Status403
| Status404
| Status405
bootstrapCss :: ForeignResource
bootstrapCss = "//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"
bootstrapJs :: ForeignResource
bootstrapJs = "//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"
jQueryJs :: ForeignResource
jQueryJs = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"