From 60fab19ef6086d196c35bb4d0ee296ae8f328285 Mon Sep 17 00:00:00 2001 From: Michael Snoyman Date: Fri, 24 Sep 2010 05:10:57 +0200 Subject: [PATCH] Using web-routes again (version 0.23) --- Yesod/WebRoutes.hs | 84 ++-------------------------------------------- yesod.cabal | 5 +-- 2 files changed, 5 insertions(+), 84 deletions(-) diff --git a/Yesod/WebRoutes.hs b/Yesod/WebRoutes.hs index 07d08288..dcf7855e 100644 --- a/Yesod/WebRoutes.hs +++ b/Yesod/WebRoutes.hs @@ -4,85 +4,5 @@ module Yesod.WebRoutes , Site (..) ) where -import Codec.Binary.UTF8.String (encodeString) -import Data.List (intercalate) -import Network.URI - -encodePathInfo :: [String] -> [(String, String)] -> String -encodePathInfo pieces qs = - let x = map encodeString `o` -- utf-8 encode the data characters in path components (we have not added any delimiters yet) - map (escapeURIString (\c -> isUnreserved c || c `elem` ":@&=+$,")) `o` -- percent encode the characters - map (\str -> case str of "." -> "%2E" ; ".." -> "%2E%2E" ; _ -> str) `o` -- encode . and .. - intercalate "/" -- add in the delimiters - y = showParams qs - in x pieces ++ y - where - -- reverse composition - o :: (a -> b) -> (b -> c) -> a -> c - o = flip (.) - -{-| - -A site groups together the three functions necesary to make an application: - -* A function to convert from the URL type to path segments. - -* A function to convert from path segments to the URL, if possible. - -* A function to return the application for a given URL. - -There are two type parameters for Site: the first is the URL datatype, the -second is the application datatype. The application datatype will depend upon -your server backend. --} -data Site url a - = Site { - {-| - Return the appropriate application for a given URL. - - The first argument is a function which will give an appropriate - URL (as a String) for a URL datatype. This is usually - constructed by a combination of 'formatPathSegments' and the - prepending of an absolute application root. - - Well behaving applications should use this function to - generating all internal URLs. - -} - handleSite :: (url -> [(String, String)] -> String) -> url -> a - -- | This function must be the inverse of 'parsePathSegments'. - , formatPathSegments :: url -> ([String], [(String, String)]) - -- | This function must be the inverse of 'formatPathSegments'. - , parsePathSegments :: [String] -> Either String url - } - -showParams :: [(String, String)] -> String -showParams [] = "" -showParams z = - '?' : intercalate "&" (map go z) - where - go (x, "") = go' x - go (x, y) = go' x ++ '=' : go' y - go' = concatMap encodeUrlChar - --- | Taken straight from web-encodings; reimplemented here to avoid extra --- dependencies. -encodeUrlChar :: Char -> String -encodeUrlChar c - -- List of unreserved characters per RFC 3986 - -- Gleaned from http://en.wikipedia.org/wiki/Percent-encoding - | 'A' <= c && c <= 'Z' = [c] - | 'a' <= c && c <= 'z' = [c] - | '0' <= c && c <= '9' = [c] -encodeUrlChar c@'-' = [c] -encodeUrlChar c@'_' = [c] -encodeUrlChar c@'.' = [c] -encodeUrlChar c@'~' = [c] -encodeUrlChar ' ' = "+" -encodeUrlChar y = - let (a, c) = fromEnum y `divMod` 16 - b = a `mod` 16 - showHex' x - | x < 10 = toEnum $ x + (fromEnum '0') - | x < 16 = toEnum $ x - 10 + (fromEnum 'A') - | otherwise = error $ "Invalid argument to showHex: " ++ show x - in ['%', showHex' b, showHex' c] +import Web.Routes.Base (encodePathInfo) +import Web.Routes.Site (Site (..)) diff --git a/yesod.cabal b/yesod.cabal index d93d159c..6c90ffc7 100644 --- a/yesod.cabal +++ b/yesod.cabal @@ -13,7 +13,7 @@ category: Web stability: Stable cabal-version: >= 1.6 build-type: Simple -homepage: http://docs.yesodweb.com/yesod/ +homepage: http://docs.yesodweb.com/ extra-source-files: scaffold/*.cg flag buildtests @@ -48,7 +48,8 @@ library data-object >= 0.3.1 && < 0.4, network >= 2.2.1.5 && < 2.3, email-validate >= 0.2.5 && < 0.3, - process >= 1.0.1 && < 1.1 + process >= 1.0.1 && < 1.1, + web-routes >= 0.23 && < 0.24 exposed-modules: Yesod Yesod.Content Yesod.Dispatch