yesod-tableview 0.1.0 → 0.2.1
raw patch · 4 files changed
+62/−20 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Yesod.TableView: makeTableView :: [Filter val] -> [Order val] -> Int -> Int -> (Int -> Int -> Route (TableSite val)) -> TableView val
+ Yesod.TableView.Widget: type GTableHandler val = GGHandler (TableSubsite val) (TableSite val)
+ Yesod.TableView.Widget: type GTableWidget val = GGWidget (TableSubsite val) (TableSite val)
+ Yesod.TableView.Widget: type TableHandler val = GHandler (TableSubsite val) (TableSite val)
+ Yesod.TableView.Widget: type TableWidget val = GWidget (TableSubsite val) (TableSite val)
- Yesod.TableView: TableView :: [Filter val] -> String -> [Order val] -> (Int -> Int -> Route s) -> Bool -> Bool -> Int -> Int -> String -> [Int] -> Maybe Int -> Maybe Int -> TableView s val
+ Yesod.TableView: TableView :: [Filter val] -> Maybe String -> [Order val] -> (Int -> Int -> Route (TableSite val)) -> Bool -> Bool -> Int -> Int -> String -> [Int] -> Maybe Int -> Maybe Int -> TableView val
- Yesod.TableView: data TableView s val
+ Yesod.TableView: data TableView val
- Yesod.TableView: defTableView :: TableView s val
+ Yesod.TableView: defTableView :: TableView val
- Yesod.TableView: tableCurrentLimit :: TableView s val -> Int
+ Yesod.TableView: tableCurrentLimit :: TableView val -> Int
- Yesod.TableView: tableCurrentOffset :: TableView s val -> Int
+ Yesod.TableView: tableCurrentOffset :: TableView val -> Int
- Yesod.TableView: tableFilter :: TableView s val -> [Filter val]
+ Yesod.TableView: tableFilter :: TableView val -> [Filter val]
- Yesod.TableView: tableId :: TableView s val -> String
+ Yesod.TableView: tableId :: TableView val -> Maybe String
- Yesod.TableView: tableLimitPrompt :: TableView s val -> String
+ Yesod.TableView: tableLimitPrompt :: TableView val -> String
- Yesod.TableView: tableLimits :: TableView s val -> [Int]
+ Yesod.TableView: tableLimits :: TableView val -> [Int]
- Yesod.TableView: tableMaxLimit :: TableView s val -> Maybe Int
+ Yesod.TableView: tableMaxLimit :: TableView val -> Maybe Int
- Yesod.TableView: tableMinLimit :: TableView s val -> Maybe Int
+ Yesod.TableView: tableMinLimit :: TableView val -> Maybe Int
- Yesod.TableView: tableOrder :: TableView s val -> [Order val]
+ Yesod.TableView: tableOrder :: TableView val -> [Order val]
- Yesod.TableView: tableRoute :: TableView s val -> Int -> Int -> Route s
+ Yesod.TableView: tableRoute :: TableView val -> Int -> Int -> Route (TableSite val)
- Yesod.TableView: tableShowHead :: TableView s val -> Bool
+ Yesod.TableView: tableShowHead :: TableView val -> Bool
- Yesod.TableView: tableStyled :: TableView s val -> Bool
+ Yesod.TableView: tableStyled :: TableView val -> Bool
- Yesod.TableView: tableView :: (PersistBackend (YesodDB s (GGHandler sub s IO)), PersistEntity val, TableViewWidget val, YesodPersist s) => TableView s val -> GHandler sub s (GWidget sub s ())
+ Yesod.TableView: tableView :: (PersistBackend (YesodDB (TableSite val) (GTableHandler val IO)), PersistEntity val, TableViewWidget val, YesodPersist (TableSite val)) => TableView val -> TableHandler val (TableWidget val ())
- Yesod.TableView.Widget: class TableViewWidget val
+ Yesod.TableView.Widget: class TableViewWidget val where { type family TableSite val; type family TableSubsite val; }
- Yesod.TableView.Widget: tableHeader :: TableViewWidget val => val -> GWidget sub s ()
+ Yesod.TableView.Widget: tableHeader :: TableViewWidget val => val -> TableWidget val ()
- Yesod.TableView.Widget: tableRecord :: TableViewWidget val => Int -> Key val -> val -> GWidget sub s ()
+ Yesod.TableView.Widget: tableRecord :: TableViewWidget val => Int -> Key val -> val -> TableWidget val ()
Files
- Yesod/TableView.hs +36/−14
- Yesod/TableView/Widget.hs +24/−4
- templates/tableview.hamlet +1/−1
- yesod-tableview.cabal +1/−1
Yesod/TableView.hs view
@@ -13,9 +13,10 @@ TemplateHaskell #-} module Yesod.TableView- ( -- Table view+ ( -- * Table view TableView(..), defTableView,+ makeTableView, tableView, -- * Reexports@@ -33,13 +34,14 @@ -- | Table view settings. Defaults are given in parentheses. -data TableView s val =+data TableView val = TableView { -- Filter to use (@[]@). tableFilter :: [Filter val], -- ^ Table filter.- tableId :: String, -- ^ HTML table id.+ tableId :: Maybe String, -- ^ HTML table id. tableOrder :: [Order val], -- ^ Table sorting order.- tableRoute :: Int -> Int -> Route s, -- ^ Table route.+ tableRoute :: Int -> Int ->+ Route (TableSite val), -- ^ Table route. tableShowHead :: Bool, -- ^ Show table header? tableStyled :: Bool, -- ^ Add CSS styles? @@ -53,14 +55,20 @@ } +-- | Clamp to the given bounds.++clamp :: Ord a => Maybe a -> Maybe a -> a -> a+clamp mMin mMax = maybe id max mMin . maybe id min mMax++ -- | Default values for most fields. The following fields will be left--- undefined: 'tableId', 'tableRoute', 'tableCurrentLimit' and+-- undefined: 'tableRoute', 'tableCurrentLimit' and -- 'tableCurrentOffset'. -defTableView :: TableView s val+defTableView :: TableView val defTableView = TableView { tableFilter = [],- tableId = undefined,+ tableId = Nothing, tableOrder = [], tableRoute = undefined, tableShowHead = True,@@ -74,18 +82,30 @@ tableMaxLimit = Just 100 } -clamp :: Ord a => Maybe a -> Maybe a -> a -> a-clamp mMin mMax = maybe id max mMin . maybe id min mMax+-- | Simple smart constructor for common table view configurations. +makeTableView :: [Filter val] -> [Order val] -> Int -> Int ->+ (Int -> Int -> Route (TableSite val)) ->+ TableView val+makeTableView filters orders limit offset route =+ defTableView { tableFilter = filters,+ tableOrder = orders,+ tableRoute = route,+ tableCurrentLimit = limit,+ tableCurrentOffset = offset } -tableView :: forall s sub val.- ( PersistBackend (YesodDB s (GGHandler sub s IO)),++-- | Generate a table view widget from the given configuration.++tableView :: forall val.+ ( PersistBackend (YesodDB (TableSite val) (GTableHandler val IO)), PersistEntity val, TableViewWidget val,- YesodPersist s) =>- TableView s val -> GHandler sub s (GWidget sub s ())+ YesodPersist (TableSite val)) =>+ TableView val -> TableHandler val (TableWidget val ()) tableView cfg'@(TableView { tableFilter = filters,+ tableId = mTableId, tableOrder = orders, tableLimitPrompt = limitPrompt, tableLimits = limitOpts,@@ -115,6 +135,8 @@ let lastOffset = (numEntries - 1) `div` limit * limit + tableId <- maybe newIdent return mTableId+ return $ do let entryRows = mapM_ row (zip [0..] entries) firstRoute = guard (offset > 0) >> Just (thisRoute limit 0)@@ -129,7 +151,7 @@ addWidget $(hamletFile "templates/tableview.hamlet") where- row :: (Int, (Key val, val)) -> GWidget sub s ()+ row :: (Int, (Key val, val)) -> TableWidget val () row (ix, (entryId, entry)) = let rowClass = if even ix then "even-row" else "odd-row" entryWidget = tableRecord ix entryId entry
Yesod/TableView/Widget.hs view
@@ -7,9 +7,17 @@ -- -- Class for datatypes displayable in a table view as widgets. +{-# LANGUAGE TypeFamilies #-}+ module Yesod.TableView.Widget- ( -- Table view widgets.- TableViewWidget(..)+ ( -- * Table view widgets.+ TableViewWidget(..),++ -- * Convenient type aliases+ GTableHandler,+ GTableWidget,+ TableHandler,+ TableWidget ) where @@ -19,11 +27,23 @@ -- | This class defines how types will be rendered in the table view. class TableViewWidget val where+ -- | Site associated with this table view widget.+ type TableSite val++ -- | Subsite associated with this table view widget.+ type TableSubsite val+ -- | Table header (wrapped in a @thead@ element). This function -- will be called once per table.- tableHeader :: val -> GWidget sub s ()+ tableHeader :: val -> TableWidget val () -- | Table row. This function will be called once for each entry in -- the table. All rows will be rendered inside of a @tbody@ -- element.- tableRecord :: Int -> Key val -> val -> GWidget sub s ()+ tableRecord :: Int -> Key val -> val -> TableWidget val ()+++type GTableHandler val = GGHandler (TableSubsite val) (TableSite val)+type GTableWidget val = GGWidget (TableSubsite val) (TableSite val)+type TableHandler val = GHandler (TableSubsite val) (TableSite val)+type TableWidget val = GWidget (TableSubsite val) (TableSite val)
templates/tableview.hamlet view
@@ -1,6 +1,6 @@ ^{numEntriesWidget} -<table .tableview>+<table .tableview ##{tableId}> $maybe header <- mHeader <thead> <tr>
yesod-tableview.cabal view
@@ -1,5 +1,5 @@ Name: yesod-tableview-Version: 0.1.0+Version: 0.2.1 Category: Yesod Synopsis: Table view for Yesod applications Maintainer: Ertugrul Söylemez <es@ertes.de>