URLs are modifiable via IORefs
This commit is contained in:
parent
83057e1a5f
commit
2391995622
@ -101,6 +101,7 @@ import Yesod.Widget
|
|||||||
import Control.Arrow ((&&&))
|
import Control.Arrow ((&&&))
|
||||||
import qualified Text.Email.Validate as Email
|
import qualified Text.Email.Validate as Email
|
||||||
import Data.Char (isSpace)
|
import Data.Char (isSpace)
|
||||||
|
import Yesod.Urls
|
||||||
|
|
||||||
-- | A form can produce three different results: there was no data available,
|
-- | A form can produce three different results: there was no data available,
|
||||||
-- the data was invalid, or there was a successful parse.
|
-- the data was invalid, or there was a successful parse.
|
||||||
@ -427,9 +428,9 @@ jqueryDayFieldProfile = FieldProfile
|
|||||||
%input#$name$!name=$name$!type=date!:isReq:required!value=$val$
|
%input#$name$!name=$name$!type=date!:isReq:required!value=$val$
|
||||||
|]
|
|]
|
||||||
, fpWidget = \name -> do
|
, fpWidget = \name -> do
|
||||||
addScriptRemote urlJqueryJs
|
getSetting urlJqueryJs >>= addScriptRemote
|
||||||
addScriptRemote urlJqueryUiJs
|
getSetting urlJqueryUiJs >>= addScriptRemote
|
||||||
addStylesheetRemote urlJqueryUiCss
|
getSetting urlJqueryUiCss >>= addStylesheetRemote
|
||||||
addJavaScript [$hamlet|
|
addJavaScript [$hamlet|
|
||||||
$$(function(){$$("#$name$").datepicker({dateFormat:'yy-mm-dd'})});
|
$$(function(){$$("#$name$").datepicker({dateFormat:'yy-mm-dd'})});
|
||||||
|]
|
|]
|
||||||
@ -460,10 +461,6 @@ parseUTCTime s =
|
|||||||
Right date -> ifRight (parseTime timeS)
|
Right date -> ifRight (parseTime timeS)
|
||||||
(\time -> UTCTime date (timeOfDayToTime time))
|
(\time -> UTCTime date (timeOfDayToTime time))
|
||||||
|
|
||||||
-- TODO - integrate with static helpers
|
|
||||||
jqueryUiDateTimePicker :: String
|
|
||||||
jqueryUiDateTimePicker = "http://www.projectcodegen.com/jquery.ui.datetimepicker.js.txt"
|
|
||||||
|
|
||||||
jqueryDayTimeField :: Html () -> Html () -> FormletField sub y UTCTime
|
jqueryDayTimeField :: Html () -> Html () -> FormletField sub y UTCTime
|
||||||
jqueryDayTimeField l t = requiredFieldHelper jqueryDayTimeFieldProfile
|
jqueryDayTimeField l t = requiredFieldHelper jqueryDayTimeFieldProfile
|
||||||
{ fpLabel = l , fpTooltip = t }
|
{ fpLabel = l , fpTooltip = t }
|
||||||
@ -485,23 +482,23 @@ jqueryDayTimeUTCTime (UTCTime day utcTime) =
|
|||||||
|
|
||||||
jqueryDayTimeFieldProfile :: FieldProfile sub y UTCTime
|
jqueryDayTimeFieldProfile :: FieldProfile sub y UTCTime
|
||||||
jqueryDayTimeFieldProfile = FieldProfile
|
jqueryDayTimeFieldProfile = FieldProfile
|
||||||
{ fpParse = parseUTCTime
|
{ fpParse = parseUTCTime
|
||||||
, fpRender = jqueryDayTimeUTCTime
|
, fpRender = jqueryDayTimeUTCTime
|
||||||
, fpHamlet = \name val isReq -> [$hamlet|
|
, fpHamlet = \name val isReq -> [$hamlet|
|
||||||
%input#$name$!name=$name$!type=date!:isReq:required!value=$val$
|
%input#$name$!name=$name$!type=date!:isReq:required!value=$val$
|
||||||
|]
|
|]
|
||||||
, fpWidget = \name -> do
|
, fpWidget = \name -> do
|
||||||
addScriptRemote urlJqueryJs
|
getSetting urlJqueryJs >>= addScriptRemote
|
||||||
addScriptRemote urlJqueryUiJs
|
getSetting urlJqueryUiJs >>= addScriptRemote
|
||||||
addScriptRemote jqueryUiDateTimePicker -- needs slashes, dashes are broken
|
getSetting urlJqueryUiDateTimePicker >>= addScriptRemote -- needs slashes, dashes are broken
|
||||||
addStylesheetRemote urlJqueryUiCss
|
getSetting urlJqueryUiCss >>= addStylesheetRemote
|
||||||
addJavaScript [$hamlet|
|
addJavaScript [$hamlet|
|
||||||
$$(function(){$$("#$name$").datetimepicker({dateFormat : "yyyy/mm/dd h:MM TT"})});
|
$$(function(){$$("#$name$").datetimepicker({dateFormat : "yyyy/mm/dd h:MM TT"})});
|
||||||
|]
|
|]
|
||||||
, fpName = Nothing
|
, fpName = Nothing
|
||||||
, fpLabel = mempty
|
, fpLabel = mempty
|
||||||
, fpTooltip = mempty
|
, fpTooltip = mempty
|
||||||
}
|
}
|
||||||
|
|
||||||
parseTime :: String -> Either String TimeOfDay
|
parseTime :: String -> Either String TimeOfDay
|
||||||
parseTime (h2:':':m1:m2:[]) = parseTimeHelper ('0', h2, m1, m2, '0', '0')
|
parseTime (h2:':':m1:m2:[]) = parseTimeHelper ('0', h2, m1, m2, '0', '0')
|
||||||
@ -893,9 +890,9 @@ jqueryAutocompleteFieldProfile src = FieldProfile
|
|||||||
%input.autocomplete#$name$!name=$name$!type=text!:isReq:required!value=$val$
|
%input.autocomplete#$name$!name=$name$!type=text!:isReq:required!value=$val$
|
||||||
|]
|
|]
|
||||||
, fpWidget = \name -> do
|
, fpWidget = \name -> do
|
||||||
addScriptRemote urlJqueryJs
|
getSetting urlJqueryJs >>= addScriptRemote
|
||||||
addScriptRemote urlJqueryUiJs
|
getSetting urlJqueryUiJs >>= addScriptRemote
|
||||||
addStylesheetRemote urlJqueryUiCss
|
getSetting urlJqueryUiCss >>= addStylesheetRemote
|
||||||
addJavaScript [$hamlet|
|
addJavaScript [$hamlet|
|
||||||
$$(function(){$$("#$name$").autocomplete({source:"@src@",minLength:2})});
|
$$(function(){$$("#$name$").autocomplete({source:"@src@",minLength:2})});
|
||||||
|]
|
|]
|
||||||
|
|||||||
43
Yesod/Urls.hs
Normal file
43
Yesod/Urls.hs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
module Yesod.Urls
|
||||||
|
( newSetting
|
||||||
|
, changeSetting
|
||||||
|
, getSetting
|
||||||
|
-- * Default library URLs
|
||||||
|
, urlJqueryJs
|
||||||
|
, urlJqueryUiJs
|
||||||
|
, urlJqueryUiCss
|
||||||
|
, urlJqueryUiDateTimePicker
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.IORef (IORef, newIORef, writeIORef, readIORef)
|
||||||
|
import System.IO.Unsafe (unsafePerformIO)
|
||||||
|
import Control.Monad.IO.Class
|
||||||
|
|
||||||
|
newSetting :: a -> IORef a
|
||||||
|
newSetting = unsafePerformIO . newIORef
|
||||||
|
|
||||||
|
changeSetting :: MonadIO m => IORef a -> a -> m ()
|
||||||
|
changeSetting x = liftIO . writeIORef x
|
||||||
|
|
||||||
|
getSetting :: MonadIO m => IORef a -> m a
|
||||||
|
getSetting = liftIO . readIORef
|
||||||
|
|
||||||
|
-- | The Google-hosted jQuery 1.4.2 file.
|
||||||
|
urlJqueryJs :: IORef String
|
||||||
|
urlJqueryJs = newSetting
|
||||||
|
"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
|
||||||
|
|
||||||
|
-- | The Google-hosted jQuery UI 1.8.1 javascript file.
|
||||||
|
urlJqueryUiJs :: IORef String
|
||||||
|
urlJqueryUiJs = newSetting
|
||||||
|
"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"
|
||||||
|
|
||||||
|
-- | The Google-hosted jQuery UI 1.8.1 CSS file with cupertino theme.
|
||||||
|
urlJqueryUiCss :: IORef String
|
||||||
|
urlJqueryUiCss = newSetting
|
||||||
|
"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/cupertino/jquery-ui.css"
|
||||||
|
|
||||||
|
-- TODO - integrate with static helpers
|
||||||
|
urlJqueryUiDateTimePicker :: IORef String
|
||||||
|
urlJqueryUiDateTimePicker = newSetting
|
||||||
|
"http://www.projectcodegen.com/jquery.ui.datetimepicker.js.txt"
|
||||||
@ -27,10 +27,6 @@ module Yesod.Widget
|
|||||||
-- * Manipulating
|
-- * Manipulating
|
||||||
, wrapWidget
|
, wrapWidget
|
||||||
, extractBody
|
, extractBody
|
||||||
-- * Default library URLs
|
|
||||||
, urlJqueryJs
|
|
||||||
, urlJqueryUiJs
|
|
||||||
, urlJqueryUiCss
|
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.List (nub)
|
import Data.List (nub)
|
||||||
@ -204,18 +200,3 @@ extractBody (GWidget w) =
|
|||||||
GWidget $ mapWriterT (fmap go) w
|
GWidget $ mapWriterT (fmap go) w
|
||||||
where
|
where
|
||||||
go ((), Body h) = (h, Body mempty)
|
go ((), Body h) = (h, Body mempty)
|
||||||
|
|
||||||
-- | The Google-hosted jQuery 1.4.2 file.
|
|
||||||
urlJqueryJs :: String
|
|
||||||
urlJqueryJs =
|
|
||||||
"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
|
|
||||||
|
|
||||||
-- | The Google-hosted jQuery UI 1.8.1 javascript file.
|
|
||||||
urlJqueryUiJs :: String
|
|
||||||
urlJqueryUiJs =
|
|
||||||
"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"
|
|
||||||
|
|
||||||
-- | The Google-hosted jQuery UI 1.8.1 CSS file with cupertino theme.
|
|
||||||
urlJqueryUiCss :: String
|
|
||||||
urlJqueryUiCss =
|
|
||||||
"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/themes/cupertino/jquery-ui.css"
|
|
||||||
|
|||||||
@ -53,6 +53,7 @@ library
|
|||||||
Yesod.Handler
|
Yesod.Handler
|
||||||
Yesod.Internal
|
Yesod.Internal
|
||||||
Yesod.Json
|
Yesod.Json
|
||||||
|
Yesod.Urls
|
||||||
Yesod.Request
|
Yesod.Request
|
||||||
Yesod.Widget
|
Yesod.Widget
|
||||||
Yesod.Yesod
|
Yesod.Yesod
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user