----------------------------------------------------------------------------- -- | -- Module : Miso.FFI.Storage -- Copyright : (C) 2016-2018 David M. Johnson -- License : BSD3-style (see the file LICENSE) -- Maintainer : David M. Johnson -- Stability : experimental -- Portability : non-portable ---------------------------------------------------------------------------- module Miso.FFI.Storage ( Storage , localStorage , sessionStorage , getItem , removeItem , setItem , length , clear ) where import GHCJS.Types import Prelude hiding (length) import Language.Javascript.JSaddle ((!), (#), JSM, fromJSValUnchecked, jsg) newtype Storage = Storage JSVal localStorage :: JSM Storage localStorage = Storage <$> (jsg "window" ! "localStorage") sessionStorage :: JSM Storage sessionStorage = Storage <$> (jsg "window" ! "sessionStorage") getItem :: Storage -> JSString -> JSM JSVal getItem (Storage s) key = s # "getItem" $ [key] removeItem :: Storage -> JSString -> JSM () removeItem (Storage s) key = do _ <- s # "removeItem" $ [key] pure () setItem :: Storage -> JSString -> JSString -> JSM () setItem (Storage s) key val = do _ <- s # "setItem" $ (key, val) pure () length :: Storage -> JSM Int length (Storage s) = fromJSValUnchecked =<< s ! "length" clear :: Storage -> JSM () clear (Storage s) = do _ <- s # "clear" $ () pure ()