cdp-0.0.1.0: src/CDP/Domains/DOMSnapshot.hs
{-# LANGUAGE OverloadedStrings, RecordWildCards, TupleSections #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{- |
= DOMSnapshot
This domain facilitates obtaining document snapshots with DOM, layout, and style information.
-}
module CDP.Domains.DOMSnapshot (module CDP.Domains.DOMSnapshot) where
import Control.Applicative ((<$>))
import Control.Monad
import Control.Monad.Loops
import Control.Monad.Trans (liftIO)
import qualified Data.Map as M
import Data.Maybe
import Data.Functor.Identity
import Data.String
import qualified Data.Text as T
import qualified Data.List as List
import qualified Data.Text.IO as TI
import qualified Data.Vector as V
import Data.Aeson.Types (Parser(..))
import Data.Aeson (FromJSON (..), ToJSON (..), (.:), (.:?), (.=), (.!=), (.:!))
import qualified Data.Aeson as A
import qualified Network.HTTP.Simple as Http
import qualified Network.URI as Uri
import qualified Network.WebSockets as WS
import Control.Concurrent
import qualified Data.ByteString.Lazy as BS
import qualified Data.Map as Map
import Data.Proxy
import System.Random
import GHC.Generics
import Data.Char
import Data.Default
import CDP.Internal.Utils
import CDP.Domains.DOMDebugger as DOMDebugger
import CDP.Domains.DOMPageNetworkEmulationSecurity as DOMPageNetworkEmulationSecurity
-- | Type 'DOMSnapshot.DOMNode'.
-- A Node in the DOM tree.
data DOMSnapshotDOMNode = DOMSnapshotDOMNode
{
-- | `Node`'s nodeType.
dOMSnapshotDOMNodeNodeType :: Int,
-- | `Node`'s nodeName.
dOMSnapshotDOMNodeNodeName :: T.Text,
-- | `Node`'s nodeValue.
dOMSnapshotDOMNodeNodeValue :: T.Text,
-- | Only set for textarea elements, contains the text value.
dOMSnapshotDOMNodeTextValue :: Maybe T.Text,
-- | Only set for input elements, contains the input's associated text value.
dOMSnapshotDOMNodeInputValue :: Maybe T.Text,
-- | Only set for radio and checkbox input elements, indicates if the element has been checked
dOMSnapshotDOMNodeInputChecked :: Maybe Bool,
-- | Only set for option elements, indicates if the element has been selected
dOMSnapshotDOMNodeOptionSelected :: Maybe Bool,
-- | `Node`'s id, corresponds to DOM.Node.backendNodeId.
dOMSnapshotDOMNodeBackendNodeId :: DOMPageNetworkEmulationSecurity.DOMBackendNodeId,
-- | The indexes of the node's child nodes in the `domNodes` array returned by `getSnapshot`, if
-- any.
dOMSnapshotDOMNodeChildNodeIndexes :: Maybe [Int],
-- | Attributes of an `Element` node.
dOMSnapshotDOMNodeAttributes :: Maybe [DOMSnapshotNameValue],
-- | Indexes of pseudo elements associated with this node in the `domNodes` array returned by
-- `getSnapshot`, if any.
dOMSnapshotDOMNodePseudoElementIndexes :: Maybe [Int],
-- | The index of the node's related layout tree node in the `layoutTreeNodes` array returned by
-- `getSnapshot`, if any.
dOMSnapshotDOMNodeLayoutNodeIndex :: Maybe Int,
-- | Document URL that `Document` or `FrameOwner` node points to.
dOMSnapshotDOMNodeDocumentURL :: Maybe T.Text,
-- | Base URL that `Document` or `FrameOwner` node uses for URL completion.
dOMSnapshotDOMNodeBaseURL :: Maybe T.Text,
-- | Only set for documents, contains the document's content language.
dOMSnapshotDOMNodeContentLanguage :: Maybe T.Text,
-- | Only set for documents, contains the document's character set encoding.
dOMSnapshotDOMNodeDocumentEncoding :: Maybe T.Text,
-- | `DocumentType` node's publicId.
dOMSnapshotDOMNodePublicId :: Maybe T.Text,
-- | `DocumentType` node's systemId.
dOMSnapshotDOMNodeSystemId :: Maybe T.Text,
-- | Frame ID for frame owner elements and also for the document node.
dOMSnapshotDOMNodeFrameId :: Maybe DOMPageNetworkEmulationSecurity.PageFrameId,
-- | The index of a frame owner element's content document in the `domNodes` array returned by
-- `getSnapshot`, if any.
dOMSnapshotDOMNodeContentDocumentIndex :: Maybe Int,
-- | Type of a pseudo element node.
dOMSnapshotDOMNodePseudoType :: Maybe DOMPageNetworkEmulationSecurity.DOMPseudoType,
-- | Shadow root type.
dOMSnapshotDOMNodeShadowRootType :: Maybe DOMPageNetworkEmulationSecurity.DOMShadowRootType,
-- | Whether this DOM node responds to mouse clicks. This includes nodes that have had click
-- event listeners attached via JavaScript as well as anchor tags that naturally navigate when
-- clicked.
dOMSnapshotDOMNodeIsClickable :: Maybe Bool,
-- | Details of the node's event listeners, if any.
dOMSnapshotDOMNodeEventListeners :: Maybe [DOMDebugger.DOMDebuggerEventListener],
-- | The selected url for nodes with a srcset attribute.
dOMSnapshotDOMNodeCurrentSourceURL :: Maybe T.Text,
-- | The url of the script (if any) that generates this node.
dOMSnapshotDOMNodeOriginURL :: Maybe T.Text,
-- | Scroll offsets, set when this node is a Document.
dOMSnapshotDOMNodeScrollOffsetX :: Maybe Double,
dOMSnapshotDOMNodeScrollOffsetY :: Maybe Double
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotDOMNode where
parseJSON = A.withObject "DOMSnapshotDOMNode" $ \o -> DOMSnapshotDOMNode
<$> o A..: "nodeType"
<*> o A..: "nodeName"
<*> o A..: "nodeValue"
<*> o A..:? "textValue"
<*> o A..:? "inputValue"
<*> o A..:? "inputChecked"
<*> o A..:? "optionSelected"
<*> o A..: "backendNodeId"
<*> o A..:? "childNodeIndexes"
<*> o A..:? "attributes"
<*> o A..:? "pseudoElementIndexes"
<*> o A..:? "layoutNodeIndex"
<*> o A..:? "documentURL"
<*> o A..:? "baseURL"
<*> o A..:? "contentLanguage"
<*> o A..:? "documentEncoding"
<*> o A..:? "publicId"
<*> o A..:? "systemId"
<*> o A..:? "frameId"
<*> o A..:? "contentDocumentIndex"
<*> o A..:? "pseudoType"
<*> o A..:? "shadowRootType"
<*> o A..:? "isClickable"
<*> o A..:? "eventListeners"
<*> o A..:? "currentSourceURL"
<*> o A..:? "originURL"
<*> o A..:? "scrollOffsetX"
<*> o A..:? "scrollOffsetY"
instance ToJSON DOMSnapshotDOMNode where
toJSON p = A.object $ catMaybes [
("nodeType" A..=) <$> Just (dOMSnapshotDOMNodeNodeType p),
("nodeName" A..=) <$> Just (dOMSnapshotDOMNodeNodeName p),
("nodeValue" A..=) <$> Just (dOMSnapshotDOMNodeNodeValue p),
("textValue" A..=) <$> (dOMSnapshotDOMNodeTextValue p),
("inputValue" A..=) <$> (dOMSnapshotDOMNodeInputValue p),
("inputChecked" A..=) <$> (dOMSnapshotDOMNodeInputChecked p),
("optionSelected" A..=) <$> (dOMSnapshotDOMNodeOptionSelected p),
("backendNodeId" A..=) <$> Just (dOMSnapshotDOMNodeBackendNodeId p),
("childNodeIndexes" A..=) <$> (dOMSnapshotDOMNodeChildNodeIndexes p),
("attributes" A..=) <$> (dOMSnapshotDOMNodeAttributes p),
("pseudoElementIndexes" A..=) <$> (dOMSnapshotDOMNodePseudoElementIndexes p),
("layoutNodeIndex" A..=) <$> (dOMSnapshotDOMNodeLayoutNodeIndex p),
("documentURL" A..=) <$> (dOMSnapshotDOMNodeDocumentURL p),
("baseURL" A..=) <$> (dOMSnapshotDOMNodeBaseURL p),
("contentLanguage" A..=) <$> (dOMSnapshotDOMNodeContentLanguage p),
("documentEncoding" A..=) <$> (dOMSnapshotDOMNodeDocumentEncoding p),
("publicId" A..=) <$> (dOMSnapshotDOMNodePublicId p),
("systemId" A..=) <$> (dOMSnapshotDOMNodeSystemId p),
("frameId" A..=) <$> (dOMSnapshotDOMNodeFrameId p),
("contentDocumentIndex" A..=) <$> (dOMSnapshotDOMNodeContentDocumentIndex p),
("pseudoType" A..=) <$> (dOMSnapshotDOMNodePseudoType p),
("shadowRootType" A..=) <$> (dOMSnapshotDOMNodeShadowRootType p),
("isClickable" A..=) <$> (dOMSnapshotDOMNodeIsClickable p),
("eventListeners" A..=) <$> (dOMSnapshotDOMNodeEventListeners p),
("currentSourceURL" A..=) <$> (dOMSnapshotDOMNodeCurrentSourceURL p),
("originURL" A..=) <$> (dOMSnapshotDOMNodeOriginURL p),
("scrollOffsetX" A..=) <$> (dOMSnapshotDOMNodeScrollOffsetX p),
("scrollOffsetY" A..=) <$> (dOMSnapshotDOMNodeScrollOffsetY p)
]
-- | Type 'DOMSnapshot.InlineTextBox'.
-- Details of post layout rendered text positions. The exact layout should not be regarded as
-- stable and may change between versions.
data DOMSnapshotInlineTextBox = DOMSnapshotInlineTextBox
{
-- | The bounding box in document coordinates. Note that scroll offset of the document is ignored.
dOMSnapshotInlineTextBoxBoundingBox :: DOMPageNetworkEmulationSecurity.DOMRect,
-- | The starting index in characters, for this post layout textbox substring. Characters that
-- would be represented as a surrogate pair in UTF-16 have length 2.
dOMSnapshotInlineTextBoxStartCharacterIndex :: Int,
-- | The number of characters in this post layout textbox substring. Characters that would be
-- represented as a surrogate pair in UTF-16 have length 2.
dOMSnapshotInlineTextBoxNumCharacters :: Int
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotInlineTextBox where
parseJSON = A.withObject "DOMSnapshotInlineTextBox" $ \o -> DOMSnapshotInlineTextBox
<$> o A..: "boundingBox"
<*> o A..: "startCharacterIndex"
<*> o A..: "numCharacters"
instance ToJSON DOMSnapshotInlineTextBox where
toJSON p = A.object $ catMaybes [
("boundingBox" A..=) <$> Just (dOMSnapshotInlineTextBoxBoundingBox p),
("startCharacterIndex" A..=) <$> Just (dOMSnapshotInlineTextBoxStartCharacterIndex p),
("numCharacters" A..=) <$> Just (dOMSnapshotInlineTextBoxNumCharacters p)
]
-- | Type 'DOMSnapshot.LayoutTreeNode'.
-- Details of an element in the DOM tree with a LayoutObject.
data DOMSnapshotLayoutTreeNode = DOMSnapshotLayoutTreeNode
{
-- | The index of the related DOM node in the `domNodes` array returned by `getSnapshot`.
dOMSnapshotLayoutTreeNodeDomNodeIndex :: Int,
-- | The bounding box in document coordinates. Note that scroll offset of the document is ignored.
dOMSnapshotLayoutTreeNodeBoundingBox :: DOMPageNetworkEmulationSecurity.DOMRect,
-- | Contents of the LayoutText, if any.
dOMSnapshotLayoutTreeNodeLayoutText :: Maybe T.Text,
-- | The post-layout inline text nodes, if any.
dOMSnapshotLayoutTreeNodeInlineTextNodes :: Maybe [DOMSnapshotInlineTextBox],
-- | Index into the `computedStyles` array returned by `getSnapshot`.
dOMSnapshotLayoutTreeNodeStyleIndex :: Maybe Int,
-- | Global paint order index, which is determined by the stacking order of the nodes. Nodes
-- that are painted together will have the same index. Only provided if includePaintOrder in
-- getSnapshot was true.
dOMSnapshotLayoutTreeNodePaintOrder :: Maybe Int,
-- | Set to true to indicate the element begins a new stacking context.
dOMSnapshotLayoutTreeNodeIsStackingContext :: Maybe Bool
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotLayoutTreeNode where
parseJSON = A.withObject "DOMSnapshotLayoutTreeNode" $ \o -> DOMSnapshotLayoutTreeNode
<$> o A..: "domNodeIndex"
<*> o A..: "boundingBox"
<*> o A..:? "layoutText"
<*> o A..:? "inlineTextNodes"
<*> o A..:? "styleIndex"
<*> o A..:? "paintOrder"
<*> o A..:? "isStackingContext"
instance ToJSON DOMSnapshotLayoutTreeNode where
toJSON p = A.object $ catMaybes [
("domNodeIndex" A..=) <$> Just (dOMSnapshotLayoutTreeNodeDomNodeIndex p),
("boundingBox" A..=) <$> Just (dOMSnapshotLayoutTreeNodeBoundingBox p),
("layoutText" A..=) <$> (dOMSnapshotLayoutTreeNodeLayoutText p),
("inlineTextNodes" A..=) <$> (dOMSnapshotLayoutTreeNodeInlineTextNodes p),
("styleIndex" A..=) <$> (dOMSnapshotLayoutTreeNodeStyleIndex p),
("paintOrder" A..=) <$> (dOMSnapshotLayoutTreeNodePaintOrder p),
("isStackingContext" A..=) <$> (dOMSnapshotLayoutTreeNodeIsStackingContext p)
]
-- | Type 'DOMSnapshot.ComputedStyle'.
-- A subset of the full ComputedStyle as defined by the request whitelist.
data DOMSnapshotComputedStyle = DOMSnapshotComputedStyle
{
-- | Name/value pairs of computed style properties.
dOMSnapshotComputedStyleProperties :: [DOMSnapshotNameValue]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotComputedStyle where
parseJSON = A.withObject "DOMSnapshotComputedStyle" $ \o -> DOMSnapshotComputedStyle
<$> o A..: "properties"
instance ToJSON DOMSnapshotComputedStyle where
toJSON p = A.object $ catMaybes [
("properties" A..=) <$> Just (dOMSnapshotComputedStyleProperties p)
]
-- | Type 'DOMSnapshot.NameValue'.
-- A name/value pair.
data DOMSnapshotNameValue = DOMSnapshotNameValue
{
-- | Attribute/property name.
dOMSnapshotNameValueName :: T.Text,
-- | Attribute/property value.
dOMSnapshotNameValueValue :: T.Text
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotNameValue where
parseJSON = A.withObject "DOMSnapshotNameValue" $ \o -> DOMSnapshotNameValue
<$> o A..: "name"
<*> o A..: "value"
instance ToJSON DOMSnapshotNameValue where
toJSON p = A.object $ catMaybes [
("name" A..=) <$> Just (dOMSnapshotNameValueName p),
("value" A..=) <$> Just (dOMSnapshotNameValueValue p)
]
-- | Type 'DOMSnapshot.StringIndex'.
-- Index of the string in the strings table.
type DOMSnapshotStringIndex = Int
-- | Type 'DOMSnapshot.ArrayOfStrings'.
-- Index of the string in the strings table.
type DOMSnapshotArrayOfStrings = [DOMSnapshotStringIndex]
-- | Type 'DOMSnapshot.RareStringData'.
-- Data that is only present on rare nodes.
data DOMSnapshotRareStringData = DOMSnapshotRareStringData
{
dOMSnapshotRareStringDataIndex :: [Int],
dOMSnapshotRareStringDataValue :: [DOMSnapshotStringIndex]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotRareStringData where
parseJSON = A.withObject "DOMSnapshotRareStringData" $ \o -> DOMSnapshotRareStringData
<$> o A..: "index"
<*> o A..: "value"
instance ToJSON DOMSnapshotRareStringData where
toJSON p = A.object $ catMaybes [
("index" A..=) <$> Just (dOMSnapshotRareStringDataIndex p),
("value" A..=) <$> Just (dOMSnapshotRareStringDataValue p)
]
-- | Type 'DOMSnapshot.RareBooleanData'.
data DOMSnapshotRareBooleanData = DOMSnapshotRareBooleanData
{
dOMSnapshotRareBooleanDataIndex :: [Int]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotRareBooleanData where
parseJSON = A.withObject "DOMSnapshotRareBooleanData" $ \o -> DOMSnapshotRareBooleanData
<$> o A..: "index"
instance ToJSON DOMSnapshotRareBooleanData where
toJSON p = A.object $ catMaybes [
("index" A..=) <$> Just (dOMSnapshotRareBooleanDataIndex p)
]
-- | Type 'DOMSnapshot.RareIntegerData'.
data DOMSnapshotRareIntegerData = DOMSnapshotRareIntegerData
{
dOMSnapshotRareIntegerDataIndex :: [Int],
dOMSnapshotRareIntegerDataValue :: [Int]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotRareIntegerData where
parseJSON = A.withObject "DOMSnapshotRareIntegerData" $ \o -> DOMSnapshotRareIntegerData
<$> o A..: "index"
<*> o A..: "value"
instance ToJSON DOMSnapshotRareIntegerData where
toJSON p = A.object $ catMaybes [
("index" A..=) <$> Just (dOMSnapshotRareIntegerDataIndex p),
("value" A..=) <$> Just (dOMSnapshotRareIntegerDataValue p)
]
-- | Type 'DOMSnapshot.Rectangle'.
type DOMSnapshotRectangle = [Double]
-- | Type 'DOMSnapshot.DocumentSnapshot'.
-- Document snapshot.
data DOMSnapshotDocumentSnapshot = DOMSnapshotDocumentSnapshot
{
-- | Document URL that `Document` or `FrameOwner` node points to.
dOMSnapshotDocumentSnapshotDocumentURL :: DOMSnapshotStringIndex,
-- | Document title.
dOMSnapshotDocumentSnapshotTitle :: DOMSnapshotStringIndex,
-- | Base URL that `Document` or `FrameOwner` node uses for URL completion.
dOMSnapshotDocumentSnapshotBaseURL :: DOMSnapshotStringIndex,
-- | Contains the document's content language.
dOMSnapshotDocumentSnapshotContentLanguage :: DOMSnapshotStringIndex,
-- | Contains the document's character set encoding.
dOMSnapshotDocumentSnapshotEncodingName :: DOMSnapshotStringIndex,
-- | `DocumentType` node's publicId.
dOMSnapshotDocumentSnapshotPublicId :: DOMSnapshotStringIndex,
-- | `DocumentType` node's systemId.
dOMSnapshotDocumentSnapshotSystemId :: DOMSnapshotStringIndex,
-- | Frame ID for frame owner elements and also for the document node.
dOMSnapshotDocumentSnapshotFrameId :: DOMSnapshotStringIndex,
-- | A table with dom nodes.
dOMSnapshotDocumentSnapshotNodes :: DOMSnapshotNodeTreeSnapshot,
-- | The nodes in the layout tree.
dOMSnapshotDocumentSnapshotLayout :: DOMSnapshotLayoutTreeSnapshot,
-- | The post-layout inline text nodes.
dOMSnapshotDocumentSnapshotTextBoxes :: DOMSnapshotTextBoxSnapshot,
-- | Horizontal scroll offset.
dOMSnapshotDocumentSnapshotScrollOffsetX :: Maybe Double,
-- | Vertical scroll offset.
dOMSnapshotDocumentSnapshotScrollOffsetY :: Maybe Double,
-- | Document content width.
dOMSnapshotDocumentSnapshotContentWidth :: Maybe Double,
-- | Document content height.
dOMSnapshotDocumentSnapshotContentHeight :: Maybe Double
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotDocumentSnapshot where
parseJSON = A.withObject "DOMSnapshotDocumentSnapshot" $ \o -> DOMSnapshotDocumentSnapshot
<$> o A..: "documentURL"
<*> o A..: "title"
<*> o A..: "baseURL"
<*> o A..: "contentLanguage"
<*> o A..: "encodingName"
<*> o A..: "publicId"
<*> o A..: "systemId"
<*> o A..: "frameId"
<*> o A..: "nodes"
<*> o A..: "layout"
<*> o A..: "textBoxes"
<*> o A..:? "scrollOffsetX"
<*> o A..:? "scrollOffsetY"
<*> o A..:? "contentWidth"
<*> o A..:? "contentHeight"
instance ToJSON DOMSnapshotDocumentSnapshot where
toJSON p = A.object $ catMaybes [
("documentURL" A..=) <$> Just (dOMSnapshotDocumentSnapshotDocumentURL p),
("title" A..=) <$> Just (dOMSnapshotDocumentSnapshotTitle p),
("baseURL" A..=) <$> Just (dOMSnapshotDocumentSnapshotBaseURL p),
("contentLanguage" A..=) <$> Just (dOMSnapshotDocumentSnapshotContentLanguage p),
("encodingName" A..=) <$> Just (dOMSnapshotDocumentSnapshotEncodingName p),
("publicId" A..=) <$> Just (dOMSnapshotDocumentSnapshotPublicId p),
("systemId" A..=) <$> Just (dOMSnapshotDocumentSnapshotSystemId p),
("frameId" A..=) <$> Just (dOMSnapshotDocumentSnapshotFrameId p),
("nodes" A..=) <$> Just (dOMSnapshotDocumentSnapshotNodes p),
("layout" A..=) <$> Just (dOMSnapshotDocumentSnapshotLayout p),
("textBoxes" A..=) <$> Just (dOMSnapshotDocumentSnapshotTextBoxes p),
("scrollOffsetX" A..=) <$> (dOMSnapshotDocumentSnapshotScrollOffsetX p),
("scrollOffsetY" A..=) <$> (dOMSnapshotDocumentSnapshotScrollOffsetY p),
("contentWidth" A..=) <$> (dOMSnapshotDocumentSnapshotContentWidth p),
("contentHeight" A..=) <$> (dOMSnapshotDocumentSnapshotContentHeight p)
]
-- | Type 'DOMSnapshot.NodeTreeSnapshot'.
-- Table containing nodes.
data DOMSnapshotNodeTreeSnapshot = DOMSnapshotNodeTreeSnapshot
{
-- | Parent node index.
dOMSnapshotNodeTreeSnapshotParentIndex :: Maybe [Int],
-- | `Node`'s nodeType.
dOMSnapshotNodeTreeSnapshotNodeType :: Maybe [Int],
-- | Type of the shadow root the `Node` is in. String values are equal to the `ShadowRootType` enum.
dOMSnapshotNodeTreeSnapshotShadowRootType :: Maybe DOMSnapshotRareStringData,
-- | `Node`'s nodeName.
dOMSnapshotNodeTreeSnapshotNodeName :: Maybe [DOMSnapshotStringIndex],
-- | `Node`'s nodeValue.
dOMSnapshotNodeTreeSnapshotNodeValue :: Maybe [DOMSnapshotStringIndex],
-- | `Node`'s id, corresponds to DOM.Node.backendNodeId.
dOMSnapshotNodeTreeSnapshotBackendNodeId :: Maybe [DOMPageNetworkEmulationSecurity.DOMBackendNodeId],
-- | Attributes of an `Element` node. Flatten name, value pairs.
dOMSnapshotNodeTreeSnapshotAttributes :: Maybe [DOMSnapshotArrayOfStrings],
-- | Only set for textarea elements, contains the text value.
dOMSnapshotNodeTreeSnapshotTextValue :: Maybe DOMSnapshotRareStringData,
-- | Only set for input elements, contains the input's associated text value.
dOMSnapshotNodeTreeSnapshotInputValue :: Maybe DOMSnapshotRareStringData,
-- | Only set for radio and checkbox input elements, indicates if the element has been checked
dOMSnapshotNodeTreeSnapshotInputChecked :: Maybe DOMSnapshotRareBooleanData,
-- | Only set for option elements, indicates if the element has been selected
dOMSnapshotNodeTreeSnapshotOptionSelected :: Maybe DOMSnapshotRareBooleanData,
-- | The index of the document in the list of the snapshot documents.
dOMSnapshotNodeTreeSnapshotContentDocumentIndex :: Maybe DOMSnapshotRareIntegerData,
-- | Type of a pseudo element node.
dOMSnapshotNodeTreeSnapshotPseudoType :: Maybe DOMSnapshotRareStringData,
-- | Pseudo element identifier for this node. Only present if there is a
-- valid pseudoType.
dOMSnapshotNodeTreeSnapshotPseudoIdentifier :: Maybe DOMSnapshotRareStringData,
-- | Whether this DOM node responds to mouse clicks. This includes nodes that have had click
-- event listeners attached via JavaScript as well as anchor tags that naturally navigate when
-- clicked.
dOMSnapshotNodeTreeSnapshotIsClickable :: Maybe DOMSnapshotRareBooleanData,
-- | The selected url for nodes with a srcset attribute.
dOMSnapshotNodeTreeSnapshotCurrentSourceURL :: Maybe DOMSnapshotRareStringData,
-- | The url of the script (if any) that generates this node.
dOMSnapshotNodeTreeSnapshotOriginURL :: Maybe DOMSnapshotRareStringData
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotNodeTreeSnapshot where
parseJSON = A.withObject "DOMSnapshotNodeTreeSnapshot" $ \o -> DOMSnapshotNodeTreeSnapshot
<$> o A..:? "parentIndex"
<*> o A..:? "nodeType"
<*> o A..:? "shadowRootType"
<*> o A..:? "nodeName"
<*> o A..:? "nodeValue"
<*> o A..:? "backendNodeId"
<*> o A..:? "attributes"
<*> o A..:? "textValue"
<*> o A..:? "inputValue"
<*> o A..:? "inputChecked"
<*> o A..:? "optionSelected"
<*> o A..:? "contentDocumentIndex"
<*> o A..:? "pseudoType"
<*> o A..:? "pseudoIdentifier"
<*> o A..:? "isClickable"
<*> o A..:? "currentSourceURL"
<*> o A..:? "originURL"
instance ToJSON DOMSnapshotNodeTreeSnapshot where
toJSON p = A.object $ catMaybes [
("parentIndex" A..=) <$> (dOMSnapshotNodeTreeSnapshotParentIndex p),
("nodeType" A..=) <$> (dOMSnapshotNodeTreeSnapshotNodeType p),
("shadowRootType" A..=) <$> (dOMSnapshotNodeTreeSnapshotShadowRootType p),
("nodeName" A..=) <$> (dOMSnapshotNodeTreeSnapshotNodeName p),
("nodeValue" A..=) <$> (dOMSnapshotNodeTreeSnapshotNodeValue p),
("backendNodeId" A..=) <$> (dOMSnapshotNodeTreeSnapshotBackendNodeId p),
("attributes" A..=) <$> (dOMSnapshotNodeTreeSnapshotAttributes p),
("textValue" A..=) <$> (dOMSnapshotNodeTreeSnapshotTextValue p),
("inputValue" A..=) <$> (dOMSnapshotNodeTreeSnapshotInputValue p),
("inputChecked" A..=) <$> (dOMSnapshotNodeTreeSnapshotInputChecked p),
("optionSelected" A..=) <$> (dOMSnapshotNodeTreeSnapshotOptionSelected p),
("contentDocumentIndex" A..=) <$> (dOMSnapshotNodeTreeSnapshotContentDocumentIndex p),
("pseudoType" A..=) <$> (dOMSnapshotNodeTreeSnapshotPseudoType p),
("pseudoIdentifier" A..=) <$> (dOMSnapshotNodeTreeSnapshotPseudoIdentifier p),
("isClickable" A..=) <$> (dOMSnapshotNodeTreeSnapshotIsClickable p),
("currentSourceURL" A..=) <$> (dOMSnapshotNodeTreeSnapshotCurrentSourceURL p),
("originURL" A..=) <$> (dOMSnapshotNodeTreeSnapshotOriginURL p)
]
-- | Type 'DOMSnapshot.LayoutTreeSnapshot'.
-- Table of details of an element in the DOM tree with a LayoutObject.
data DOMSnapshotLayoutTreeSnapshot = DOMSnapshotLayoutTreeSnapshot
{
-- | Index of the corresponding node in the `NodeTreeSnapshot` array returned by `captureSnapshot`.
dOMSnapshotLayoutTreeSnapshotNodeIndex :: [Int],
-- | Array of indexes specifying computed style strings, filtered according to the `computedStyles` parameter passed to `captureSnapshot`.
dOMSnapshotLayoutTreeSnapshotStyles :: [DOMSnapshotArrayOfStrings],
-- | The absolute position bounding box.
dOMSnapshotLayoutTreeSnapshotBounds :: [DOMSnapshotRectangle],
-- | Contents of the LayoutText, if any.
dOMSnapshotLayoutTreeSnapshotText :: [DOMSnapshotStringIndex],
-- | Stacking context information.
dOMSnapshotLayoutTreeSnapshotStackingContexts :: DOMSnapshotRareBooleanData,
-- | Global paint order index, which is determined by the stacking order of the nodes. Nodes
-- that are painted together will have the same index. Only provided if includePaintOrder in
-- captureSnapshot was true.
dOMSnapshotLayoutTreeSnapshotPaintOrders :: Maybe [Int],
-- | The offset rect of nodes. Only available when includeDOMRects is set to true
dOMSnapshotLayoutTreeSnapshotOffsetRects :: Maybe [DOMSnapshotRectangle],
-- | The scroll rect of nodes. Only available when includeDOMRects is set to true
dOMSnapshotLayoutTreeSnapshotScrollRects :: Maybe [DOMSnapshotRectangle],
-- | The client rect of nodes. Only available when includeDOMRects is set to true
dOMSnapshotLayoutTreeSnapshotClientRects :: Maybe [DOMSnapshotRectangle],
-- | The list of background colors that are blended with colors of overlapping elements.
dOMSnapshotLayoutTreeSnapshotBlendedBackgroundColors :: Maybe [DOMSnapshotStringIndex],
-- | The list of computed text opacities.
dOMSnapshotLayoutTreeSnapshotTextColorOpacities :: Maybe [Double]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotLayoutTreeSnapshot where
parseJSON = A.withObject "DOMSnapshotLayoutTreeSnapshot" $ \o -> DOMSnapshotLayoutTreeSnapshot
<$> o A..: "nodeIndex"
<*> o A..: "styles"
<*> o A..: "bounds"
<*> o A..: "text"
<*> o A..: "stackingContexts"
<*> o A..:? "paintOrders"
<*> o A..:? "offsetRects"
<*> o A..:? "scrollRects"
<*> o A..:? "clientRects"
<*> o A..:? "blendedBackgroundColors"
<*> o A..:? "textColorOpacities"
instance ToJSON DOMSnapshotLayoutTreeSnapshot where
toJSON p = A.object $ catMaybes [
("nodeIndex" A..=) <$> Just (dOMSnapshotLayoutTreeSnapshotNodeIndex p),
("styles" A..=) <$> Just (dOMSnapshotLayoutTreeSnapshotStyles p),
("bounds" A..=) <$> Just (dOMSnapshotLayoutTreeSnapshotBounds p),
("text" A..=) <$> Just (dOMSnapshotLayoutTreeSnapshotText p),
("stackingContexts" A..=) <$> Just (dOMSnapshotLayoutTreeSnapshotStackingContexts p),
("paintOrders" A..=) <$> (dOMSnapshotLayoutTreeSnapshotPaintOrders p),
("offsetRects" A..=) <$> (dOMSnapshotLayoutTreeSnapshotOffsetRects p),
("scrollRects" A..=) <$> (dOMSnapshotLayoutTreeSnapshotScrollRects p),
("clientRects" A..=) <$> (dOMSnapshotLayoutTreeSnapshotClientRects p),
("blendedBackgroundColors" A..=) <$> (dOMSnapshotLayoutTreeSnapshotBlendedBackgroundColors p),
("textColorOpacities" A..=) <$> (dOMSnapshotLayoutTreeSnapshotTextColorOpacities p)
]
-- | Type 'DOMSnapshot.TextBoxSnapshot'.
-- Table of details of the post layout rendered text positions. The exact layout should not be regarded as
-- stable and may change between versions.
data DOMSnapshotTextBoxSnapshot = DOMSnapshotTextBoxSnapshot
{
-- | Index of the layout tree node that owns this box collection.
dOMSnapshotTextBoxSnapshotLayoutIndex :: [Int],
-- | The absolute position bounding box.
dOMSnapshotTextBoxSnapshotBounds :: [DOMSnapshotRectangle],
-- | The starting index in characters, for this post layout textbox substring. Characters that
-- would be represented as a surrogate pair in UTF-16 have length 2.
dOMSnapshotTextBoxSnapshotStart :: [Int],
-- | The number of characters in this post layout textbox substring. Characters that would be
-- represented as a surrogate pair in UTF-16 have length 2.
dOMSnapshotTextBoxSnapshotLength :: [Int]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotTextBoxSnapshot where
parseJSON = A.withObject "DOMSnapshotTextBoxSnapshot" $ \o -> DOMSnapshotTextBoxSnapshot
<$> o A..: "layoutIndex"
<*> o A..: "bounds"
<*> o A..: "start"
<*> o A..: "length"
instance ToJSON DOMSnapshotTextBoxSnapshot where
toJSON p = A.object $ catMaybes [
("layoutIndex" A..=) <$> Just (dOMSnapshotTextBoxSnapshotLayoutIndex p),
("bounds" A..=) <$> Just (dOMSnapshotTextBoxSnapshotBounds p),
("start" A..=) <$> Just (dOMSnapshotTextBoxSnapshotStart p),
("length" A..=) <$> Just (dOMSnapshotTextBoxSnapshotLength p)
]
-- | Disables DOM snapshot agent for the given page.
-- | Parameters of the 'DOMSnapshot.disable' command.
data PDOMSnapshotDisable = PDOMSnapshotDisable
deriving (Eq, Show)
pDOMSnapshotDisable
:: PDOMSnapshotDisable
pDOMSnapshotDisable
= PDOMSnapshotDisable
instance ToJSON PDOMSnapshotDisable where
toJSON _ = A.Null
instance Command PDOMSnapshotDisable where
type CommandResponse PDOMSnapshotDisable = ()
commandName _ = "DOMSnapshot.disable"
fromJSON = const . A.Success . const ()
-- | Enables DOM snapshot agent for the given page.
-- | Parameters of the 'DOMSnapshot.enable' command.
data PDOMSnapshotEnable = PDOMSnapshotEnable
deriving (Eq, Show)
pDOMSnapshotEnable
:: PDOMSnapshotEnable
pDOMSnapshotEnable
= PDOMSnapshotEnable
instance ToJSON PDOMSnapshotEnable where
toJSON _ = A.Null
instance Command PDOMSnapshotEnable where
type CommandResponse PDOMSnapshotEnable = ()
commandName _ = "DOMSnapshot.enable"
fromJSON = const . A.Success . const ()
-- | Returns a document snapshot, including the full DOM tree of the root node (including iframes,
-- template contents, and imported documents) in a flattened array, as well as layout and
-- white-listed computed style information for the nodes. Shadow DOM in the returned DOM tree is
-- flattened.
-- | Parameters of the 'DOMSnapshot.captureSnapshot' command.
data PDOMSnapshotCaptureSnapshot = PDOMSnapshotCaptureSnapshot
{
-- | Whitelist of computed styles to return.
pDOMSnapshotCaptureSnapshotComputedStyles :: [T.Text],
-- | Whether to include layout object paint orders into the snapshot.
pDOMSnapshotCaptureSnapshotIncludePaintOrder :: Maybe Bool,
-- | Whether to include DOM rectangles (offsetRects, clientRects, scrollRects) into the snapshot
pDOMSnapshotCaptureSnapshotIncludeDOMRects :: Maybe Bool,
-- | Whether to include blended background colors in the snapshot (default: false).
-- Blended background color is achieved by blending background colors of all elements
-- that overlap with the current element.
pDOMSnapshotCaptureSnapshotIncludeBlendedBackgroundColors :: Maybe Bool,
-- | Whether to include text color opacity in the snapshot (default: false).
-- An element might have the opacity property set that affects the text color of the element.
-- The final text color opacity is computed based on the opacity of all overlapping elements.
pDOMSnapshotCaptureSnapshotIncludeTextColorOpacities :: Maybe Bool
}
deriving (Eq, Show)
pDOMSnapshotCaptureSnapshot
{-
-- | Whitelist of computed styles to return.
-}
:: [T.Text]
-> PDOMSnapshotCaptureSnapshot
pDOMSnapshotCaptureSnapshot
arg_pDOMSnapshotCaptureSnapshotComputedStyles
= PDOMSnapshotCaptureSnapshot
arg_pDOMSnapshotCaptureSnapshotComputedStyles
Nothing
Nothing
Nothing
Nothing
instance ToJSON PDOMSnapshotCaptureSnapshot where
toJSON p = A.object $ catMaybes [
("computedStyles" A..=) <$> Just (pDOMSnapshotCaptureSnapshotComputedStyles p),
("includePaintOrder" A..=) <$> (pDOMSnapshotCaptureSnapshotIncludePaintOrder p),
("includeDOMRects" A..=) <$> (pDOMSnapshotCaptureSnapshotIncludeDOMRects p),
("includeBlendedBackgroundColors" A..=) <$> (pDOMSnapshotCaptureSnapshotIncludeBlendedBackgroundColors p),
("includeTextColorOpacities" A..=) <$> (pDOMSnapshotCaptureSnapshotIncludeTextColorOpacities p)
]
data DOMSnapshotCaptureSnapshot = DOMSnapshotCaptureSnapshot
{
-- | The nodes in the DOM tree. The DOMNode at index 0 corresponds to the root document.
dOMSnapshotCaptureSnapshotDocuments :: [DOMSnapshotDocumentSnapshot],
-- | Shared string table that all string properties refer to with indexes.
dOMSnapshotCaptureSnapshotStrings :: [T.Text]
}
deriving (Eq, Show)
instance FromJSON DOMSnapshotCaptureSnapshot where
parseJSON = A.withObject "DOMSnapshotCaptureSnapshot" $ \o -> DOMSnapshotCaptureSnapshot
<$> o A..: "documents"
<*> o A..: "strings"
instance Command PDOMSnapshotCaptureSnapshot where
type CommandResponse PDOMSnapshotCaptureSnapshot = DOMSnapshotCaptureSnapshot
commandName _ = "DOMSnapshot.captureSnapshot"