diff --git a/src/Bonsai/DOM.purs b/src/Bonsai/DOM.purs index 504b050..b5ad265 100644 --- a/src/Bonsai/DOM.purs +++ b/src/Bonsai/DOM.purs @@ -34,6 +34,7 @@ module Bonsai.DOM , appendChild , addEventListener , clearElement + , defaultView , document , elementById , focusElement diff --git a/src/Bonsai/Storage.js b/src/Bonsai/Storage.js new file mode 100644 index 0000000..ae92795 --- /dev/null +++ b/src/Bonsai/Storage.js @@ -0,0 +1,7 @@ +"use strict"; + +exports.primitives = + { getItem: function (k, win) { return win.localStorage.getItem(k); } + , setItem: function (k, v, win) { win.localStorage.setItem(k, v); } + , removeItem: function (k, win) { win.localStorage.removeItem(k); } + }; diff --git a/src/Bonsai/Storage.purs b/src/Bonsai/Storage.purs new file mode 100644 index 0000000..a5a9ed3 --- /dev/null +++ b/src/Bonsai/Storage.purs @@ -0,0 +1,31 @@ +-- | Wrapper for window.localStorage +module Bonsai.Storage where + +import Prelude + +import Bonsai.DOM (Window(..)) +import Data.Function.Uncurried (Fn2, Fn3, runFn2, runFn3) +import Data.Maybe (Maybe(..), maybe) +import Foreign (F, Foreign, readNullOrUndefined, readString) + +foreign import primitives + :: { getItem :: Fn2 String Foreign Foreign + , setItem :: Fn3 String String Foreign Unit + , removeItem :: Fn2 String Foreign Unit} + +-- | Get a string value for the the key from storage. +getItem :: String -> Window -> F (Maybe String) +getItem key (Window win) = do + runFn2 primitives.getItem key win # + readNullOrUndefined >>= + maybe (pure Nothing) (map Just <<< readString) + +-- | Put the string value at key into the store +setItem :: String -> String -> Window -> F Unit +setItem key val (Window win) = + pure $ runFn3 primitives.setItem key val win + +-- | Remove the key from the store +removeItem :: String -> Window -> F Unit +removeItem key (Window win) = + pure $ runFn2 primitives.removeItem key win