Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions JavaScript/JQuery.hs
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ import Data.JSString as S (pack)
import Data.JSString.Text as S (textToJSString)
import Data.Text as Text (Text)
import Data.Typeable
import System.IO (fixIO)

default (JSString)

Expand Down Expand Up @@ -445,19 +446,21 @@ on a et hs jq = do
cb <- if hsSynchronous hs
then Cb.syncCallback1 ContinueAsync (a . Event)
else Cb.asyncCallback1 (a . Event)
jq_on cb et' ds hd sp sip pd jq
return (jq_off cb et' ds jq >> Cb.releaseCallback cb)
cb' <- jq_on cb et' ds hd sp sip pd jq
return (jq_off cb' et' ds jq >> Cb.releaseCallback cb)
where
et' = textToJSString et
(pd, sp, sip, ds, hd) = convertHandlerSettings hs

one :: (Event -> IO ()) -> EventType -> HandlerSettings -> JQuery -> IO (IO ())
one a et hs jq = do
cb <- if hsSynchronous hs
then Cb.syncCallback1 ContinueAsync (a . Event)
else Cb.asyncCallback1 (a . Event)
jq_one cb et' ds hd sp sip pd jq
return (jq_off cb et' ds jq >> Cb.releaseCallback cb)
cb <- fixIO $ \cb ->
let a' = \e -> Cb.releaseCallback cb >> a e
in if hsSynchronous hs
then Cb.syncCallback1 ContinueAsync (a' . Event)
else Cb.asyncCallback1 (a' . Event)
cb' <- jq_one cb et' ds hd sp sip pd jq
return (jq_off cb' et' ds jq >> Cb.releaseCallback cb)
where
et' = textToJSString et
(pd, sp, sip, ds, hd) = convertHandlerSettings hs
Expand Down
4 changes: 2 additions & 2 deletions JavaScript/JQuery/Internal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ foreign import javascript unsafe "$8.on($2, $3, $4, h$jquery_makeListener($1, $5
-> Bool -- ^ stopImmediatePropagation
-> Bool -- ^ preventDefault
-> JQuery
-> IO ()
-> IO (Callback a)

foreign import javascript unsafe "$8.one($2, $3, $4, h$jquery_makeListener($1, $5, $6, $7))"
jq_one :: Callback a -- ^ callback
Expand All @@ -174,7 +174,7 @@ foreign import javascript unsafe "$8.one($2, $3, $4, h$jquery_makeListener($1, $
-> Bool -- ^ stopImmediatePropagation
-> Bool -- ^ preventDefault
-> JQuery
-> IO ()
-> IO (Callback a)

foreign import javascript unsafe "$4.off($2,$3,$1)"
jq_off :: Callback a -- ^ callback
Expand Down
10 changes: 5 additions & 5 deletions example/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ main = ready $ do
myCount <- select "<div>0</div>"
counter <- newIORef (0::Int)
let getCount = atomicModifyIORef counter (\c -> let c' = c+1 in (c', T.pack $ show c'))
click (\_ -> void $ getCount >>= flip (setText . textToJSString) myCount) def myClick
select "#counter-area" >>= appendJQuery myClick >>= appendJQuery myCount
_ <- click (\_ -> void $ getCount >>= flip (setText . textToJSString) myCount) def myClick
_ <- select "#counter-area" >>= appendJQuery myClick >>= appendJQuery myCount
theBtn <- select "#a-button"
theMsg <- select "#a-message"
click (\e -> do
_ <- click (\e -> do
preventDefault e
void $ do
setHtml "Clicked!" theMsg
removeClass "btn-primary" theBtn
_ <- setHtml "Clicked!" theMsg
_ <- removeClass "btn-primary" theBtn
addClass "btn-success" theBtn
) def theBtn
return ()