module JSDOM.Custom.Window ( module Generated , openDatabase ) where import Prelude () import Prelude.Compat import Control.Monad.IO.Class (MonadIO(..)) import JSDOM.Types (withCallback, Callback(..), MonadDOM, ToJSString, Database, DatabaseCallback(..)) import JSDOM.Generated.Window as Generated hiding (openDatabase) import qualified JSDOM.Generated.Window as Generated (openDatabase) import Control.Concurrent.MVar (takeMVar, putMVar, newEmptyMVar) import JSDOM.Generated.DatabaseCallback (newDatabaseCallback) import Data.Maybe (fromJust) -- | openDatabase :: (MonadDOM m, ToJSString name, ToJSString version, ToJSString displayName) => Window -> name -> version -> displayName -> Word -> m Database openDatabase self name version displayName estimatedSize = do result <- liftIO newEmptyMVar withCallback (newDatabaseCallback (liftIO . putMVar result)) $ \creationCallback -> Generated.openDatabase self name version displayName estimatedSize (Just creationCallback) >>= maybe (liftIO (takeMVar result)) return