packages feed

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 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>