URLs are modifiable via IORefs

This commit is contained in:
Michael Snoyman 2010-07-21 08:18:34 +03:00
parent 83057e1a5f
commit 2391995622
4 changed files with 57 additions and 35 deletions

View File

@ -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
View 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"

View File

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

View File

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