Skip to content

Commit caf36f9

Browse files
committed
make getCanvasElementById safe, fixes #2
1 parent 73d1c43 commit caf36f9

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed

Gruntfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ module.exports = function(grunt) {
99
},
1010
main: {
1111
files: {
12-
src: ["src/**/*.purs"]
12+
src: ["src/**/*.purs", "bower_components/**/src/**/*.purs"]
1313
}
1414
},
1515
},

README.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### Types
66

7-
type Arc = { end :: Number, start :: Number, r :: Number, y :: Number, x :: Number }
7+
type Arc = { end :: Number, start :: Number, r :: Number, y :: Number, x :: Number }
88

99
data Canvas :: !
1010

@@ -27,7 +27,7 @@
2727

2828
data Context2D :: *
2929

30-
type Dimensions = { height :: Number, width :: Number }
30+
type Dimensions = { height :: Number, width :: Number }
3131

3232
data ImageData :: *
3333

@@ -36,15 +36,15 @@
3636
Square :: LineCap
3737
Butt :: LineCap
3838

39-
type Rectangle = { h :: Number, w :: Number, y :: Number, x :: Number }
39+
type Rectangle = { h :: Number, w :: Number, y :: Number, x :: Number }
4040

41-
type ScaleTransform = { scaleY :: Number, scaleX :: Number }
41+
type ScaleTransform = { scaleY :: Number, scaleX :: Number }
4242

43-
type TextMetrics = { width :: Number }
43+
type TextMetrics = { width :: Number }
4444

45-
type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number }
45+
type Transform = { m32 :: Number, m31 :: Number, m22 :: Number, m21 :: Number, m12 :: Number, m11 :: Number }
4646

47-
type TranslateTransform = { translateY :: Number, translateX :: Number }
47+
type TranslateTransform = { translateY :: Number, translateX :: Number }
4848

4949

5050
### Type Class Instances
@@ -82,7 +82,9 @@
8282

8383
getCanvasDimensions :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Dimensions
8484

85-
getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement
85+
getCanvasElementById :: forall eff. String -> Eff (canvas :: Canvas | eff) (Maybe CanvasElement)
86+
87+
getCanvasElementByIdImpl :: forall a eff. Fn3 String (a -> Maybe a) (Maybe a) (Eff (canvas :: Canvas | eff) (Maybe CanvasElement))
8688

8789
getCanvasHeight :: forall eff. CanvasElement -> Eff (canvas :: Canvas | eff) Number
8890

bower.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,8 @@
1414
"bower_components",
1515
"test",
1616
"tests"
17-
]
17+
],
18+
"dependencies": {
19+
"purescript-maybe": "~0.2.1"
20+
}
1821
}

src/Graphics/Canvas.purs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module Graphics.Canvas where
22

3+
import Data.Function
4+
import Data.Maybe
35
import Control.Monad.Eff
46

57
foreign import data Canvas :: !
@@ -12,12 +14,27 @@ foreign import data ImageData :: *
1214

1315
foreign import data CanvasPixelArray :: *
1416

15-
foreign import getCanvasElementById
16-
"function getCanvasElementById(id) {\
17-
\ return function() {\
18-
\ return document.getElementById(id);\
19-
\ };\
20-
\}" :: forall eff. String -> Eff (canvas :: Canvas | eff) CanvasElement
17+
foreign import getCanvasElementByIdImpl
18+
"""function getCanvasElementByIdImpl(id, Just, Nothing) {
19+
return function() {
20+
var el = document.getElementById(id);
21+
if (el && el instanceof HTMLCanvasElement) {
22+
return Just(el);
23+
} else {
24+
return Nothing;
25+
}
26+
};
27+
}""" :: forall a eff.
28+
Fn3
29+
String
30+
(a -> Maybe a)
31+
(Maybe a)
32+
(Eff (canvas :: Canvas | eff) (Maybe CanvasElement))
33+
34+
getCanvasElementById :: forall eff.
35+
String -> Eff (canvas :: Canvas | eff) (Maybe CanvasElement)
36+
getCanvasElementById elId =
37+
runFn3 getCanvasElementByIdImpl elId Just Nothing
2138

2239
foreign import getContext2D
2340
"function getContext2D(c) {\

0 commit comments

Comments
 (0)