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 qualified Text.Email.Validate as Email
import Data.Char (isSpace)
import Yesod.Urls
-- | A form can produce three different results: there was no data available,
-- 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$
|]
, fpWidget = \name -> do
addScriptRemote urlJqueryJs
addScriptRemote urlJqueryUiJs
addStylesheetRemote urlJqueryUiCss
getSetting urlJqueryJs >>= addScriptRemote
getSetting urlJqueryUiJs >>= addScriptRemote
getSetting urlJqueryUiCss >>= addStylesheetRemote
addJavaScript [$hamlet|
$$(function(){$$("#$name$").datepicker({dateFormat:'yy-mm-dd'})});
|]
@ -460,10 +461,6 @@ parseUTCTime s =
Right date -> ifRight (parseTime timeS)
(\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 l t = requiredFieldHelper jqueryDayTimeFieldProfile
{ fpLabel = l , fpTooltip = t }
@ -485,23 +482,23 @@ jqueryDayTimeUTCTime (UTCTime day utcTime) =
jqueryDayTimeFieldProfile :: FieldProfile sub y UTCTime
jqueryDayTimeFieldProfile = FieldProfile
{ fpParse = parseUTCTime
{ fpParse = parseUTCTime
, fpRender = jqueryDayTimeUTCTime
, fpHamlet = \name val isReq -> [$hamlet|
%input#$name$!name=$name$!type=date!:isReq:required!value=$val$
|]
, fpWidget = \name -> do
addScriptRemote urlJqueryJs
addScriptRemote urlJqueryUiJs
addScriptRemote jqueryUiDateTimePicker -- needs slashes, dashes are broken
addStylesheetRemote urlJqueryUiCss
getSetting urlJqueryJs >>= addScriptRemote
getSetting urlJqueryUiJs >>= addScriptRemote
getSetting urlJqueryUiDateTimePicker >>= addScriptRemote -- needs slashes, dashes are broken
getSetting urlJqueryUiCss >>= addStylesheetRemote
addJavaScript [$hamlet|
$$(function(){$$("#$name$").datetimepicker({dateFormat : "yyyy/mm/dd h:MM TT"})});
|]
, fpName = Nothing
, fpLabel = mempty
, fpTooltip = mempty
}
}
parseTime :: String -> Either String TimeOfDay
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$
|]
, fpWidget = \name -> do
addScriptRemote urlJqueryJs
addScriptRemote urlJqueryUiJs
addStylesheetRemote urlJqueryUiCss
getSetting urlJqueryJs >>= addScriptRemote
getSetting urlJqueryUiJs >>= addScriptRemote
getSetting urlJqueryUiCss >>= addStylesheetRemote
addJavaScript [$hamlet|
$$(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
, wrapWidget
, extractBody
-- * Default library URLs
, urlJqueryJs
, urlJqueryUiJs
, urlJqueryUiCss
) where
import Data.List (nub)
@ -204,18 +200,3 @@ extractBody (GWidget w) =
GWidget $ mapWriterT (fmap go) w
where
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.Internal
Yesod.Json
Yesod.Urls
Yesod.Request
Yesod.Widget
Yesod.Yesod