diff --git a/src/Puppeteer.Mouse.purs b/src/Puppeteer.Mouse.purs index 9491180..d6023f7 100644 --- a/src/Puppeteer.Mouse.purs +++ b/src/Puppeteer.Mouse.purs @@ -5,6 +5,8 @@ module Puppeteer.Mouse , up , moveTo , click + , mouseButtonToString + , mouseButtonFromString , MouseWheelOptions , MouseMoveOptions , MouseOptions @@ -15,6 +17,13 @@ import Prelude import Control.Promise (Promise) import Control.Promise as Promise +import Data.Bounded.Generic (genericBottom, genericTop) +import Data.Enum (class BoundedEnum, class Enum, upFrom) +import Data.Enum.Generic (genericCardinality, genericFromEnum, genericPred, genericSucc, genericToEnum) +import Data.Foldable (find) +import Data.Generic.Rep (class Generic) +import Data.Maybe (Maybe) +import Data.Show.Generic (genericShow) import Effect (Effect) import Effect.Aff (Aff) import Prim.Row (class Nub, class Union) @@ -30,6 +39,25 @@ data MouseButton | MouseBack | MouseForward +derive instance Generic MouseButton _ +derive instance Eq MouseButton +derive instance Ord MouseButton +instance Show MouseButton where + show = genericShow + +instance Enum MouseButton where + pred = genericPred + succ = genericSucc + +instance Bounded MouseButton where + top = genericTop + bottom = genericBottom + +instance BoundedEnum MouseButton where + cardinality = genericCardinality + toEnum = genericToEnum + fromEnum = genericFromEnum + mouseButtonToString :: MouseButton -> String mouseButtonToString MouseLeft = "left" mouseButtonToString MouseRight = "right" @@ -37,6 +65,9 @@ mouseButtonToString MouseMiddle = "middle" mouseButtonToString MouseBack = "back" mouseButtonToString MouseForward = "forward" +mouseButtonFromString :: String -> Maybe MouseButton +mouseButtonFromString s = find (eq s <<< mouseButtonToString) (upFrom bottom :: Array MouseButton) + type MouseWheelOptions r = (deltaX :: Number, deltaY :: Number | r) type MouseMoveOptions r = (steps :: Number | r) type MouseOptions r = (button :: MouseButton | r)