diff --git a/Gruntfile.js b/Gruntfile.js index d3c9d8c..be89b7e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -9,7 +9,7 @@ module.exports = function(grunt) { }, main: { files: { - src: ["src/**/*.purs"] + src: ["src/**/*.purs", "bower_components/**/src/**/*.purs"] } }, }, diff --git a/README.md b/README.md index b90af05..4ce8f7f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ### Types - type Arc = { end :: Number, start :: Number, r :: Number, y :: Number, x :: Number } + type Arc = { end :: Number, start :: Number, r :: Number, y :: Number, x :: Number } data Canvas :: ! @@ -27,7 +27,7 @@ data Context2D :: * - type Dimensions = { height :: Number, width :: Number } + type Dimensions = { height :: Number, width :: Number } data ImageData :: * @@ -36,15 +36,15 @@ Square :: LineCap Butt :: LineCap - type Rectangle = { h :: Number, w :: Number, y :: Number, x :: Number } + type Rectangle = { h :: Number, w :: Number, y :: Number, x :: Number } - type ScaleTransform = { scaleY :: Number, scaleX :: Number } + type ScaleTransform = { scaleY :: Number, scaleX :: Number } - type TextMetrics = { width :: Number } + type TextMetrics = { width :: Number } - type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number } + type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number } - type TranslateTransform = { translateY :: Number, translateX :: Number } + type TranslateTransform = { translateY :: Number, translateX :: Number } ### Type Class Instances @@ -82,7 +82,9 @@ getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions - getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement + getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) (Maybe CanvasElement) + + getCanvasElementByIdImpl :: forall a eff. Fn3 String (a -> Maybe a) (Maybe a) (Eff (canvas :: Canvas | eff) (Maybe CanvasElement)) getCanvasHeight :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number diff --git a/bower.json b/bower.json index 5ab9937..b099a7e 100644 --- a/bower.json +++ b/bower.json @@ -14,5 +14,8 @@ "bower_components", "test", "tests" - ] + ], + "dependencies": { + "purescript-maybe": "~0.2.1" + } } diff --git a/src/Graphics/Canvas.purs b/src/Graphics/Canvas.purs index 421015e..52cedad 100644 --- a/src/Graphics/Canvas.purs +++ b/src/Graphics/Canvas.purs @@ -1,5 +1,7 @@ module Graphics.Canvas where +import Data.Function +import Data.Maybe import Control.Monad.Eff foreign import data Canvas :: ! @@ -12,12 +14,27 @@ foreign import data ImageData :: * foreign import data CanvasPixelArray :: * -foreign import getCanvasElementById - "function getCanvasElementById(id) {\ - \ return function() {\ - \ return document.getElementById(id);\ - \ };\ - \}" :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement +foreign import getCanvasElementByIdImpl + """function getCanvasElementByIdImpl(id, Just, Nothing) { + return function() { + var el = document.getElementById(id); + if (el && el instanceof HTMLCanvasElement) { + return Just(el); + } else { + return Nothing; + } + }; + }""" :: forall a eff. + Fn3 + String + (a -> Maybe a) + (Maybe a) + (Eff (canvas :: Canvas | eff) (Maybe CanvasElement)) + +getCanvasElementById :: forall eff. + String -> Eff (canvas :: Canvas | eff) (Maybe CanvasElement) +getCanvasElementById elId = + runFn3 getCanvasElementByIdImpl elId Just Nothing foreign import getContext2D "function getContext2D(c) {\