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 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
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
|
||||
, 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"
|
||||
|
||||
@ -53,6 +53,7 @@ library
|
||||
Yesod.Handler
|
||||
Yesod.Internal
|
||||
Yesod.Json
|
||||
Yesod.Urls
|
||||
Yesod.Request
|
||||
Yesod.Widget
|
||||
Yesod.Yesod
|
||||
|
||||
Loading…
Reference in New Issue
Block a user