Minor bug fixes
This commit is contained in:
parent
67f98de1c9
commit
d55c78dc19
90
ChangeLog.md
Normal file
90
ChangeLog.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
### Yesod 0.5.0 (August 29, 2010)
|
||||||
|
|
||||||
|
* Forms no longer have special types for special views; instead, there is a
|
||||||
|
toFormField attribute when declaring entities to specify a form rendering
|
||||||
|
function.
|
||||||
|
|
||||||
|
* URL settings for jQuery and Nic are now in their own typeclasses. This will
|
||||||
|
be the approach used in the future when adding more widgets and forms that
|
||||||
|
require Javascript libraries.
|
||||||
|
|
||||||
|
* You can explicitly specify the id and name attributes to be used in forms if
|
||||||
|
you like. When omitted, a unique name is automatically generated.
|
||||||
|
|
||||||
|
* The isAuthorized function now takes a function specifying whether the
|
||||||
|
request is a write request. This should make it simpler to develop read/write
|
||||||
|
authorization systems. Bonus points: if you use HTTP request methods properly,
|
||||||
|
the isWriteRequest function will automatically determine whether a request is
|
||||||
|
a read or write request.
|
||||||
|
|
||||||
|
* You can now specify splitPath and joinPath functions yourself. Previously,
|
||||||
|
the built-in versions had very specific URL rules, such as enforcing a
|
||||||
|
trailing slash. If you want something more flexible, you can override these
|
||||||
|
functions.
|
||||||
|
|
||||||
|
* addStaticContent is used to serve CSS and Javascript code from widgets from
|
||||||
|
external files. This allows caching to take place as you'd normally like.
|
||||||
|
|
||||||
|
* Static files served from the static subsite can have a hash string added to
|
||||||
|
the query string; this is done automatically when using the getStaticFiles
|
||||||
|
function. This allows you to set your expires headers far in the future.
|
||||||
|
|
||||||
|
* A new Yesod.Mail module provides datatypes and functions for creating
|
||||||
|
multipart MIME email messages and sending them via the sendmail executable.
|
||||||
|
Since these functions generate lazy bytestrings, you can use any delivery
|
||||||
|
mechanism you want.
|
||||||
|
|
||||||
|
* Change the type of defaultLayout to use Widgets instead of PageContent. This
|
||||||
|
makes it easier to avoid double-including scripts and stylesheets.
|
||||||
|
|
||||||
|
* Major reworking of the Auth subsite to make it easier to use.
|
||||||
|
|
||||||
|
* Update of the site scaffolder to include much more functionality. Also
|
||||||
|
removed the Handler type alias from the library, as the scaffolder now
|
||||||
|
provides that.
|
||||||
|
|
||||||
|
### New in Yesod 0.4.0
|
||||||
|
|
||||||
|
A big thanks on this release to Simon Michael, who pointed out a number of
|
||||||
|
places where the docs were unclear, the API was unintuitive, or the names were
|
||||||
|
inconsistent.
|
||||||
|
|
||||||
|
* Widgets. These allow you to create composable pieces of a webpage that
|
||||||
|
keep track of their own Javascript and CSS. It includes a function for
|
||||||
|
obtaining unique identifiers to avoid name collisions, and does automatic
|
||||||
|
dependency combining; in other words, if you have two widgets that depend on
|
||||||
|
jQuery, the combined widget will only include it once.
|
||||||
|
|
||||||
|
* Combined the Yesod.Form and Yesod.Formable module into a single, consistent,
|
||||||
|
widget-based API. It includes basic input functions as well as fancier
|
||||||
|
Javascript-driven functions; for example, there is a plain day entry field,
|
||||||
|
and a day entry field which automatically loads the jQuery UI date picker.
|
||||||
|
|
||||||
|
* Added the yesod executable which performs basic scaffolding.
|
||||||
|
|
||||||
|
* Cleaned up a bunch of API function names for consistency. For example,
|
||||||
|
Yesod.Request now has a logical lookupGetName, lookupPostName, etc naming
|
||||||
|
scheme.
|
||||||
|
|
||||||
|
* Changed the type of basicHandler to require less typing, and added
|
||||||
|
basicHandler' which allows you to modify the line output to STDOUT (or skip it
|
||||||
|
altogether).
|
||||||
|
|
||||||
|
* Switched the Handler monad from ContT to MEitherT (provided by the neither
|
||||||
|
package). ContT does not have a valid MonadCatchIO instance, which is used for
|
||||||
|
the sqlite persitent backend.
|
||||||
|
|
||||||
|
* Facebook support in the Auth helper.
|
||||||
|
|
||||||
|
* Ensure that HTTP request methods are given in ALL CAPS.
|
||||||
|
|
||||||
|
* Cleaned up signatures of many methods in the Yesod typeclass. In particular,
|
||||||
|
due to changes in web-routes-quasi, many of those functions can now live in
|
||||||
|
the Handler monad, making it easier to use standard functions on them.
|
||||||
|
|
||||||
|
* The static file helper now has extensible file-extension-to-mimetype
|
||||||
|
mappings.
|
||||||
|
|
||||||
|
* Added the sendResponse function for handler short-circuiting.
|
||||||
|
|
||||||
|
* Renamed Routes to Route.
|
||||||
@ -95,6 +95,8 @@ boolField ffs orig = GForm $ do
|
|||||||
then (FormMissing, fromMaybe False orig)
|
then (FormMissing, fromMaybe False orig)
|
||||||
else case lookup name env of
|
else case lookup name env of
|
||||||
Nothing -> (FormSuccess False, False)
|
Nothing -> (FormSuccess False, False)
|
||||||
|
Just "" -> (FormSuccess False, False)
|
||||||
|
Just "false" -> (FormSuccess False, False)
|
||||||
Just _ -> (FormSuccess True, True)
|
Just _ -> (FormSuccess True, True)
|
||||||
let fi = FieldInfo
|
let fi = FieldInfo
|
||||||
{ fiLabel = label
|
{ fiLabel = label
|
||||||
@ -214,7 +216,11 @@ maybeStringInput n =
|
|||||||
boolInput :: String -> FormInput sub master Bool
|
boolInput :: String -> FormInput sub master Bool
|
||||||
boolInput n = GForm $ do
|
boolInput n = GForm $ do
|
||||||
env <- askParams
|
env <- askParams
|
||||||
let res = FormSuccess $ fromMaybe "" (lookup n env) /= ""
|
let res = case lookup n env of
|
||||||
|
Nothing -> FormSuccess False
|
||||||
|
Just "" -> FormSuccess False
|
||||||
|
Just "false" -> FormSuccess False
|
||||||
|
Just _ -> FormSuccess True
|
||||||
let xml = addBody [$hamlet|
|
let xml = addBody [$hamlet|
|
||||||
%input#$n$!type=checkbox!name=$n$
|
%input#$n$!type=checkbox!name=$n$
|
||||||
|]
|
|]
|
||||||
|
|||||||
11
scaffold.hs
11
scaffold.hs
@ -120,7 +120,7 @@ executable simple-server
|
|||||||
directory,
|
directory,
|
||||||
bytestring,
|
bytestring,
|
||||||
persistent,
|
persistent,
|
||||||
persistent-sqlite,
|
persistent-~lower~,
|
||||||
template-haskell,
|
template-haskell,
|
||||||
hamlet
|
hamlet
|
||||||
ghc-options: -Wall
|
ghc-options: -Wall
|
||||||
@ -313,7 +313,6 @@ sendVerifyEmail' email _ verurl =
|
|||||||
|
|
||||||
writeFile' "Controller.hs" [$codegen|
|
writeFile' "Controller.hs" [$codegen|
|
||||||
{-# LANGUAGE TemplateHaskell #-}
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
{-# LANGUAGE PackageImports #-}
|
|
||||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||||
module Controller
|
module Controller
|
||||||
( with~sitearg~
|
( with~sitearg~
|
||||||
@ -401,7 +400,7 @@ import qualified Text.Hamlet as H
|
|||||||
import qualified Text.Cassius as H
|
import qualified Text.Cassius as H
|
||||||
import qualified Text.Julius as H
|
import qualified Text.Julius as H
|
||||||
import Language.Haskell.TH.Syntax
|
import Language.Haskell.TH.Syntax
|
||||||
import Database.Persist.Sqlite
|
import Database.Persist.~upper~
|
||||||
import Yesod (MonadCatchIO)
|
import Yesod (MonadCatchIO)
|
||||||
|
|
||||||
hamletFile :: FilePath -> Q Exp
|
hamletFile :: FilePath -> Q Exp
|
||||||
@ -427,16 +426,16 @@ juliusFile x = H.juliusFileDebug $ "julius/" ++ x ++ ".julius"
|
|||||||
|
|
||||||
connStr :: String
|
connStr :: String
|
||||||
#ifdef PRODUCTION
|
#ifdef PRODUCTION
|
||||||
connStr = "production.db3"
|
connStr = "~connstr2~"
|
||||||
#else
|
#else
|
||||||
connStr = "debug.db3"
|
connStr = "~connstr1~"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
connectionCount :: Int
|
connectionCount :: Int
|
||||||
connectionCount = 10
|
connectionCount = 10
|
||||||
|
|
||||||
withConnectionPool :: MonadCatchIO m => (ConnectionPool -> m a) -> m a
|
withConnectionPool :: MonadCatchIO m => (ConnectionPool -> m a) -> m a
|
||||||
withConnectionPool = withSqlitePool connStr connectionCount
|
withConnectionPool = with~upper~Pool connStr connectionCount
|
||||||
|
|
||||||
runConnectionPool :: MonadCatchIO m => SqlPersist m a -> ConnectionPool -> m a
|
runConnectionPool :: MonadCatchIO m => SqlPersist m a -> ConnectionPool -> m a
|
||||||
runConnectionPool = runSqlPool
|
runConnectionPool = runSqlPool
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
name: yesod
|
name: yesod
|
||||||
version: 0.5.0.2
|
version: 0.5.0.3
|
||||||
license: BSD3
|
license: BSD3
|
||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Michael Snoyman <michael@snoyman.com>
|
author: Michael Snoyman <michael@snoyman.com>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user