-
Notifications
You must be signed in to change notification settings - Fork 76
/
History.purs
32 lines (27 loc) · 1.07 KB
/
History.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
module Pux.DOM.History (sampleURL) where
import Control.Applicative (pure)
import Control.Bind (bind)
import Control.Monad.Eff (Eff)
import DOM (DOM)
import DOM.Event.EventTarget (addEventListener, eventListener)
import DOM.Event.Types (EventType(..))
import DOM.HTML.Location (pathname, search)
import DOM.HTML.Types (HISTORY, Window, windowToEventTarget)
import DOM.HTML.Window (location)
import Data.Semigroup ((<>))
import Prelude (discard)
import Signal (Signal)
import Signal.Channel (CHANNEL, channel, send, subscribe)
-- | Returns a signal containing the current window.location pathname and search query,
-- | which is updated on every "popstate" event.
sampleURL :: ∀ eff. Window -> Eff (channel :: CHANNEL, history :: HISTORY, dom :: DOM | eff) (Signal String)
sampleURL win = do
loc <- location win
path <- pathname loc
search <- search loc
chan <- channel (path <> search)
let listener = eventListener \ev -> do
url <- pathname loc
send chan url
addEventListener (EventType "popstate") listener false (windowToEventTarget win)
pure (subscribe chan)