JqueryDaySettings
This commit is contained in:
parent
eaffbb93ff
commit
27a63b1b75
@ -9,6 +9,7 @@ module Yesod.Form.Jquery
|
|||||||
, maybeJqueryAutocompleteField
|
, maybeJqueryAutocompleteField
|
||||||
, jqueryDayFieldProfile
|
, jqueryDayFieldProfile
|
||||||
, googleHostedJqueryUiCss
|
, googleHostedJqueryUiCss
|
||||||
|
, JqueryDaySettings (..)
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Yesod.Handler
|
import Yesod.Handler
|
||||||
@ -19,6 +20,7 @@ import Data.Time (UTCTime (..), Day, TimeOfDay (..), timeOfDayToTime,
|
|||||||
timeToTimeOfDay)
|
timeToTimeOfDay)
|
||||||
import Yesod.Hamlet
|
import Yesod.Hamlet
|
||||||
import Data.Char (isSpace)
|
import Data.Char (isSpace)
|
||||||
|
import Data.Default
|
||||||
|
|
||||||
-- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.
|
-- | Gets the Google hosted jQuery UI 1.8 CSS file with the given theme.
|
||||||
googleHostedJqueryUiCss :: String -> String
|
googleHostedJqueryUiCss :: String -> String
|
||||||
@ -45,14 +47,21 @@ class YesodJquery a where
|
|||||||
urlJqueryUiDateTimePicker :: a -> Either (Route a) String
|
urlJqueryUiDateTimePicker :: a -> Either (Route a) String
|
||||||
urlJqueryUiDateTimePicker _ = Right "http://github.com/gregwebs/jquery.ui.datetimepicker/raw/master/jquery.ui.datetimepicker.js"
|
urlJqueryUiDateTimePicker _ = Right "http://github.com/gregwebs/jquery.ui.datetimepicker/raw/master/jquery.ui.datetimepicker.js"
|
||||||
|
|
||||||
jqueryDayField :: YesodJquery y => FormFieldSettings -> FormletField sub y Day
|
jqueryDayField :: YesodJquery y
|
||||||
jqueryDayField = requiredFieldHelper jqueryDayFieldProfile
|
=> JqueryDaySettings
|
||||||
|
-> FormFieldSettings
|
||||||
|
-> FormletField sub y Day
|
||||||
|
jqueryDayField = requiredFieldHelper . jqueryDayFieldProfile
|
||||||
|
|
||||||
maybeJqueryDayField :: YesodJquery y => FormFieldSettings -> FormletField sub y (Maybe Day)
|
maybeJqueryDayField :: YesodJquery y
|
||||||
maybeJqueryDayField = optionalFieldHelper jqueryDayFieldProfile
|
=> JqueryDaySettings
|
||||||
|
-> FormFieldSettings
|
||||||
|
-> FormletField sub y (Maybe Day)
|
||||||
|
maybeJqueryDayField = optionalFieldHelper . jqueryDayFieldProfile
|
||||||
|
|
||||||
jqueryDayFieldProfile :: YesodJquery y => FieldProfile sub y Day
|
jqueryDayFieldProfile :: YesodJquery y
|
||||||
jqueryDayFieldProfile = FieldProfile
|
=> JqueryDaySettings -> FieldProfile sub y Day
|
||||||
|
jqueryDayFieldProfile jds = FieldProfile
|
||||||
{ fpParse = maybe
|
{ fpParse = maybe
|
||||||
(Left "Invalid day, must be in YYYY-MM-DD format")
|
(Left "Invalid day, must be in YYYY-MM-DD format")
|
||||||
Right
|
Right
|
||||||
@ -66,9 +75,26 @@ jqueryDayFieldProfile = FieldProfile
|
|||||||
addScript' urlJqueryUiJs
|
addScript' urlJqueryUiJs
|
||||||
addStylesheet' urlJqueryUiCss
|
addStylesheet' urlJqueryUiCss
|
||||||
addJavascript [$julius|
|
addJavascript [$julius|
|
||||||
$(function(){$("#%theId%").datepicker({dateFormat:'yy-mm-dd'})});
|
$(function(){$("#%theId%").datepicker({
|
||||||
|
dateFormat:'yy-mm-dd',
|
||||||
|
changeMonth:%jsBool.jdsChangeMonth.jds%,
|
||||||
|
changeYear:%jsBool.jdsChangeYear.jds%,
|
||||||
|
numberOfMonths:%mos.jdsNumberOfMonths.jds%,
|
||||||
|
yearRange:"%jdsYearRange.jds%"
|
||||||
|
})});
|
||||||
|]
|
|]
|
||||||
}
|
}
|
||||||
|
where
|
||||||
|
jsBool True = "true"
|
||||||
|
jsBool False = "false"
|
||||||
|
mos (Left i) = show i
|
||||||
|
mos (Right (x, y)) = concat
|
||||||
|
[ "["
|
||||||
|
, show x
|
||||||
|
, ","
|
||||||
|
, show y
|
||||||
|
, "]"
|
||||||
|
]
|
||||||
|
|
||||||
ifRight :: Either a b -> (b -> c) -> Either a c
|
ifRight :: Either a b -> (b -> c) -> Either a c
|
||||||
ifRight e f = case e of
|
ifRight e f = case e of
|
||||||
@ -162,3 +188,18 @@ readMay s = case reads s of
|
|||||||
-- from http://hackage.haskell.org/packages/archive/cgi/3001.1.7.1/doc/html/src/Network-CGI-Protocol.html#replace
|
-- from http://hackage.haskell.org/packages/archive/cgi/3001.1.7.1/doc/html/src/Network-CGI-Protocol.html#replace
|
||||||
replace :: Eq a => a -> a -> [a] -> [a]
|
replace :: Eq a => a -> a -> [a] -> [a]
|
||||||
replace x y = map (\z -> if z == x then y else z)
|
replace x y = map (\z -> if z == x then y else z)
|
||||||
|
|
||||||
|
data JqueryDaySettings = JqueryDaySettings
|
||||||
|
{ jdsChangeMonth :: Bool
|
||||||
|
, jdsChangeYear :: Bool
|
||||||
|
, jdsYearRange :: String
|
||||||
|
, jdsNumberOfMonths :: Either Int (Int, Int)
|
||||||
|
}
|
||||||
|
|
||||||
|
instance Default JqueryDaySettings where
|
||||||
|
def = JqueryDaySettings
|
||||||
|
{ jdsChangeMonth = False
|
||||||
|
, jdsChangeYear = False
|
||||||
|
, jdsYearRange = "c-10:c+10"
|
||||||
|
, jdsNumberOfMonths = Left 1
|
||||||
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import Control.Applicative
|
|||||||
import qualified Data.ByteString.Lazy as L
|
import qualified Data.ByteString.Lazy as L
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import Control.Monad.Trans.Class
|
import Control.Monad.Trans.Class
|
||||||
|
import Data.Default
|
||||||
|
|
||||||
data HW = HW { hwStatic :: Static }
|
data HW = HW { hwStatic :: Static }
|
||||||
mkYesod "HW" [$parseRoutes|
|
mkYesod "HW" [$parseRoutes|
|
||||||
@ -64,7 +65,12 @@ handleFormR = do
|
|||||||
<$> stringField (FormFieldSettings "My Field" "Some tooltip info" Nothing Nothing) Nothing
|
<$> stringField (FormFieldSettings "My Field" "Some tooltip info" Nothing Nothing) Nothing
|
||||||
<*> stringField ("Another field") (Just "some default text")
|
<*> stringField ("Another field") (Just "some default text")
|
||||||
<*> intField (FormFieldSettings "A number field" "some nums" Nothing Nothing) (Just 5)
|
<*> intField (FormFieldSettings "A number field" "some nums" Nothing Nothing) (Just 5)
|
||||||
<*> jqueryDayField ("A day field") Nothing
|
<*> jqueryDayField def
|
||||||
|
{ jdsChangeMonth = True
|
||||||
|
, jdsChangeYear = True
|
||||||
|
, jdsYearRange = "1900:c+10"
|
||||||
|
, jdsNumberOfMonths = Right (2, 3)
|
||||||
|
} ("A day field") Nothing
|
||||||
<*> timeField ("A time field") Nothing
|
<*> timeField ("A time field") Nothing
|
||||||
<*> jqueryDayTimeField ("A day/time field") Nothing
|
<*> jqueryDayTimeField ("A day/time field") Nothing
|
||||||
<*> boolField FormFieldSettings
|
<*> boolField FormFieldSettings
|
||||||
|
|||||||
@ -51,6 +51,7 @@ library
|
|||||||
, process >= 1.0.1 && < 1.1
|
, process >= 1.0.1 && < 1.1
|
||||||
, web-routes >= 0.23 && < 0.24
|
, web-routes >= 0.23 && < 0.24
|
||||||
, xss-sanitize >= 0.2 && < 0.3
|
, xss-sanitize >= 0.2 && < 0.3
|
||||||
|
, data-default >= 0.2 && < 0.3
|
||||||
exposed-modules: Yesod
|
exposed-modules: Yesod
|
||||||
Yesod.Content
|
Yesod.Content
|
||||||
Yesod.Dispatch
|
Yesod.Dispatch
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user