{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.File
       (newFile, getName, getLastModified, File(..), gTypeFile) where
import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..))
import qualified Prelude (error)
import Data.Typeable (Typeable)
import Data.Traversable (mapM)
import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, asyncFunction, new, array, jsUndefined, (!), (!!))
import Data.Int (Int64)
import Data.Word (Word, Word64)
import JSDOM.Types
import Control.Applicative ((<$>))
import Control.Monad (void)
import Control.Lens.Operators ((^.))
import JSDOM.EventTargetClosures (EventName, unsafeEventName, unsafeEventNameAsync)
import JSDOM.Enums

-- | <https://developer.mozilla.org/en-US/docs/Web/API/File Mozilla File documentation> 
newFile ::
        (MonadDOM m, IsBlobPart fileBits, ToJSString fileName) =>
          [fileBits] -> fileName -> Maybe FilePropertyBag -> m File
newFile :: [fileBits] -> fileName -> Maybe FilePropertyBag -> m File
newFile [fileBits]
fileBits fileName
fileName Maybe FilePropertyBag
options
  = DOM File -> m File
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> File
File (JSVal -> File) -> JSM JSVal -> DOM File
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSM JSVal -> [JSM JSVal] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
new ([Char] -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg [Char]
"File")
           [JSM Object -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal ([fileBits] -> JSM Object
forall args. MakeArgs args => args -> JSM Object
array [fileBits]
fileBits), fileName -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal fileName
fileName, Maybe FilePropertyBag -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe FilePropertyBag
options])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/File.name Mozilla File.name documentation> 
getName :: (MonadDOM m, FromJSString result) => File -> m result
getName :: File -> m result
getName File
self = DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((File
self File -> Getting (JSM JSVal) File (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter File (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"name") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/File.lastModified Mozilla File.lastModified documentation> 
getLastModified :: (MonadDOM m) => File -> m Int64
getLastModified :: File -> m Int64
getLastModified File
self
  = DOM Int64 -> m Int64
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (Double -> Int64
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Int64) -> JSM Double -> DOM Int64
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((File
self File -> Getting (JSM JSVal) File (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter File (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"lastModified") JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))