yesod-paginator 0.4.0 → 0.4.1
raw patch · 3 files changed
+20/−25 lines, 3 files
Files
- Yesod/Paginator.hs +14/−18
- Yesod/Paginator/Widget.hs +5/−6
- yesod-paginator.cabal +1/−1
Yesod/Paginator.hs view
@@ -56,14 +56,13 @@ , module Yesod.Paginator.Widget ) where -import Control.Monad.Trans.Resource import Yesod import Yesod.Paginator.Widget -paginate :: (MonadIO m, MonadUnsafeIO m, MonadThrow m, MonadBaseControl IO m) => Int -> [a] -> HandlerT s m ([a], WidgetT s m ())+paginate :: Yesod m => Int -> [a] -> HandlerT m IO ([a], WidgetT m IO ()) paginate = paginateWith defaultWidget -paginateWith :: (MonadIO m, MonadBaseControl IO m, MonadUnsafeIO m,MonadThrow m) => (Int -> Int -> Int -> t) -> Int -> [a] -> HandlerT s m ([a], t)+paginateWith :: Yesod m => (Int -> Int -> Int -> t) -> Int -> [a] -> HandlerT m IO ([a], t) paginateWith widget per items = do p <- getCurrentPage @@ -73,33 +72,30 @@ return (xs, widget p per tot) selectPaginated :: ( PersistEntity val- , PersistQuery (HandlerT s m)- , PersistEntityBackend val ~ PersistMonadBackend (HandlerT s m)- , MonadThrow m- , MonadBaseControl IO m- , MonadHandler m+ , (PersistQuery (YesodPersistBackend m (HandlerT m IO)))+ , (PersistMonadBackend (YesodPersistBackend m (HandlerT m IO)) ~ PersistEntityBackend val)+ , (MonadTrans (YesodPersistBackend m))+ , Yesod m ) => Int -> [Filter val] -> [SelectOpt val]- -> HandlerT s m ([Entity val], WidgetT s m ())+ -> YesodDB m ([Entity val], WidgetT m IO ()) selectPaginated = selectPaginatedWith defaultWidget selectPaginatedWith :: ( PersistEntity val- , PersistQuery (HandlerT s m)- , PersistEntityBackend val ~ PersistMonadBackend (HandlerT s m)- , MonadThrow m- , MonadUnsafeIO m- , MonadBaseControl IO m- , MonadHandler m+ , (PersistQuery (YesodPersistBackend m (HandlerT m IO)))+ , (PersistMonadBackend (YesodPersistBackend m (HandlerT m IO)) ~ PersistEntityBackend val)+ , (MonadTrans (YesodPersistBackend m))+ , Yesod m )- => PageWidget s m+ => PageWidget m -> Int -> [Filter val] -> [SelectOpt val]- -> HandlerT s m ([Entity val], WidgetT s m ())+ -> YesodDB m ([Entity val], WidgetT m IO ()) selectPaginatedWith widget per filters selectOpts = do- p <- getCurrentPage+ p <- lift getCurrentPage tot <- count filters xs <- selectList filters (selectOpts ++ [OffsetBy ((p-1)*per), LimitTo per])
Yesod/Paginator/Widget.hs view
@@ -12,13 +12,12 @@ import Yesod import Control.Monad (when, liftM)-import Control.Monad.Trans.Resource import Data.Maybe (fromMaybe) import Data.Text (Text) import qualified Data.Text as T -type PageWidget s m = Int -> Int -> Int -> WidgetT s m ()+type PageWidget m = Int -> Int -> Int -> WidgetT m IO () data PageWidgetConfig = PageWidgetConfig { prevText :: Text -- ^ The text for the 'previous page' link.@@ -35,7 +34,7 @@ | Disabled Text Text -- ^ content, class -- | Correctly show one of the constructed links-showLink :: (MonadIO m, MonadThrow m, MonadUnsafeIO m, MonadBaseControl IO m) => [(Text, Text)] -> PageLink -> WidgetT s m ()+showLink :: [(Text, Text)] -> PageLink -> WidgetT m IO () showLink params (Enabled pg cnt cls) = do let param = ("p", showT pg) @@ -56,7 +55,7 @@ <a>#{cnt} |] -defaultWidget :: (MonadIO m, MonadUnsafeIO m, MonadThrow m, MonadBaseControl IO m) => PageWidget s m+defaultWidget :: Yesod m => PageWidget m defaultWidget = paginationWidget $ PageWidgetConfig { prevText = "«" , nextText = "»" , pageCount = 9@@ -66,7 +65,7 @@ -- | A widget showing pagination links. Follows bootstrap principles. -- Utilizes a \"p\" GET param but leaves all other GET params intact.-paginationWidget :: (MonadIO m, MonadUnsafeIO m, MonadThrow m, MonadBaseControl IO m) => PageWidgetConfig -> Int -> Int -> Int -> WidgetT site m ()+paginationWidget :: Yesod m => PageWidgetConfig -> Int -> Int -> Int -> WidgetT m IO () paginationWidget (PageWidgetConfig {..}) page per tot = do -- total / per + 1 for any remainder let pages = (\(n, r) -> n + (min r 1)) $ tot `divMod` per@@ -123,7 +122,7 @@ -- | looks up the \"p\" GET param and converts it to an Int. returns a -- default of 1 when conversion fails.-getCurrentPage :: (MonadThrow m, MonadIO m, MonadUnsafeIO m, MonadBaseControl IO m) => HandlerT s m Int+getCurrentPage :: Yesod m => HandlerT m IO Int getCurrentPage = liftM (fromMaybe 1 . go) $ lookupGetParam "p" where
yesod-paginator.cabal view
@@ -1,5 +1,5 @@ name: yesod-paginator-version: 0.4.0+version: 0.4.1 synopsis: A pagination approach for yesod description: Paginate a list showing a per-item widget and links to other pages homepage: http://github.com/pbrisbin/yesod-paginator