on master help sign in
javascript: added javascript lib package
9dea448raichoo
@@ -19,6 +19,7 @@ test:
19relib:
19relib:
20 make -C lib IDRIS=../dist/build/idris/idris RTS=../dist/build/rts/libidris_rts clean
20 make -C lib IDRIS=../dist/build/idris/idris RTS=../dist/build/rts/libidris_rts clean
21 make -C effects IDRIS=../dist/build/idris/idris RTS=../dist/build/rts/libidris_rts DIST=../dist/build clean
21 make -C effects IDRIS=../dist/build/idris/idris RTS=../dist/build/rts/libidris_rts DIST=../dist/build clean
22+ make -C javascript IDRIS=../dist/build/idris/idris RTS=../dist/build/rts/libidris_rts DIST=../dist/build clean
22 $(CABAL) install $(CABALFLAGS)
23 $(CABAL) install $(CABALFLAGS)
23
24
24linecount:
25linecount:
Setup.hs+10
@@ -38,6 +38,7 @@ rtsDir local = ".." </> buildDir local </> "rts" </> "libidris_rts"
38cleanStdLib verbosity
38cleanStdLib verbosity
39 = do make verbosity [ "-C", "lib", "clean", "IDRIS=idris" ]
39 = do make verbosity [ "-C", "lib", "clean", "IDRIS=idris" ]
40 make verbosity [ "-C", "effects", "clean", "IDRIS=idris" ]
40 make verbosity [ "-C", "effects", "clean", "IDRIS=idris" ]
41+ make verbosity [ "-C", "javascript", "clean", "IDRIS=idris" ]
41
42
42cleanJavaLib verbosity
43cleanJavaLib verbosity
43 = do dirty <- doesDirectoryExist ("java" </> "target")
44 = do dirty <- doesDirectoryExist ("java" </> "target")
@@ -63,6 +64,11 @@ installStdLib pkg local withoutEffects verbosity copy
63 , "TARGET=" ++ idir
64 , "TARGET=" ++ idir
64 , "IDRIS=" ++ icmd
65 , "IDRIS=" ++ icmd
65 ]
66 ]
67+ make verbosity
68+ [ "-C", "javascript", "install"
69+ , "TARGET=" ++ idir
70+ , "IDRIS=" ++ icmd
71+ ]
66 let idirRts = idir </> "rts"
72 let idirRts = idir </> "rts"
67 putStrLn $ "Installing run time system in " ++ idirRts
73 putStrLn $ "Installing run time system in " ++ idirRts
68 make verbosity
74 make verbosity
@@ -109,6 +115,10 @@ checkStdLib local withoutEffects verbosity
109 [ "-C", "effects", "check"
115 [ "-C", "effects", "check"
110 , "IDRIS=" ++ icmd
116 , "IDRIS=" ++ icmd
111 ]
117 ]
118+ make verbosity
119+ [ "-C", "javascript", "check"
120+ , "IDRIS=" ++ icmd
121+ ]
112 make verbosity
122 make verbosity
113 [ "-C", "rts", "check"
123 [ "-C", "rts", "check"
114 , "IDRIS=" ++ icmd
124 , "IDRIS=" ++ icmd
idris.cabal+3
@@ -64,6 +64,9 @@ Extra-source-files: lib/Makefile lib/*.idr lib/Prelude/*.idr
64 tutorial/examples/*.idr lib/base.ipkg
64 tutorial/examples/*.idr lib/base.ipkg
65 effects/Makefile effects/*.idr effects/Effect/*.idr
65 effects/Makefile effects/*.idr effects/Effect/*.idr
66 effects/effects.ipkg
66 effects/effects.ipkg
67+ javascript/Makefile
68+ javascript/*.idr
69+ javascript/javascript.ipkg
67 config.mk
70 config.mk
68 rts/*.c rts/*.h rts/Makefile
71 rts/*.c rts/*.h rts/Makefile
69 js/*.js
72 js/*.js
javascript/JavaScript.idrnew file+87
@@ -0,0 +1,87 @@
1+module JavaScript
2+
3+%access public
4+
5+--------------------------------------------------------------------------------
6+-- Elements
7+--------------------------------------------------------------------------------
8+abstract
9+data Element : Type where
10+ MkElem : Ptr -> Element
11+
12+setText : Element -> String -> IO ()
13+setText (MkElem p) s =
14+ mkForeign (FFun ".textContent=" [FPtr, FString] FUnit) p s
15+
16+
17+setOnClick : Element -> (Event -> IO Bool) -> IO ()
18+setOnClick (MkElem e) f =
19+ mkForeign (
20+ FFun "['onclick']=" [ FPtr
21+ , FFunction (FAny Event) (FAny (IO Bool))
22+ ] FUnit) e f
23+--------------------------------------------------------------------------------
24+-- Events
25+--------------------------------------------------------------------------------
26+abstract
27+data Event : Type where
28+ MkEvent : Ptr -> Event
29+
30+--------------------------------------------------------------------------------
31+-- Nodelists
32+--------------------------------------------------------------------------------
33+abstract
34+data NodeList : Type where
35+ MkNodeList : Ptr -> NodeList
36+
37+elemAt : NodeList -> Nat -> IO Element
38+elemAt (MkNodeList p) i = do
39+ i <- mkForeign (FFun ".item" [FPtr, FInt] FPtr) p (cast i)
40+ return (MkElem i)
41+--------------------------------------------------------------------------------
42+-- Intervals
43+--------------------------------------------------------------------------------
44+abstract
45+data Interval : Type where
46+ MkInterval : Ptr -> Interval
47+
48+setInterval : (() -> IO ()) -> Float -> IO Interval
49+setInterval f t = do
50+ e <- mkForeign (
51+ FFun "setInterval" [FFunction FUnit (FAny (IO ())), FFloat] FPtr) f t
52+ return (MkInterval e)
53+
54+clearInterval : Interval -> IO ()
55+clearInterval (MkInterval p) =
56+ mkForeign (FFun "clearInterval" [FPtr] FUnit) p
57+
58+--------------------------------------------------------------------------------
59+-- Timeouts
60+--------------------------------------------------------------------------------
61+data Timeout : Type where
62+ MkTimeout : Ptr -> Timeout
63+
64+setTimeout : (() -> IO ()) -> Float -> IO Timeout
65+setTimeout f t = do
66+ e <- mkForeign (
67+ FFun "setTimeout" [FFunction FUnit (FAny (IO ())), FFloat] FPtr) f t
68+ return (MkTimeout e)
69+
70+clearTimeout : Timeout -> IO ()
71+clearTimeout (MkTimeout p) =
72+ mkForeign (FFun "clearTimeout" [FPtr] FUnit) p
73+
74+--------------------------------------------------------------------------------
75+-- Basic IO
76+--------------------------------------------------------------------------------
77+alert : String -> IO ()
78+alert msg =
79+ mkForeign (FFun "alert" [FString] FUnit) msg
80+
81+--------------------------------------------------------------------------------
82+-- DOM
83+--------------------------------------------------------------------------------
84+query : String -> IO NodeList
85+query q = do
86+ e <- mkForeign (FFun "document.querySelectorAll" [FString] FPtr) q
87+ return (MkNodeList e)
javascript/Makefilenew file+13
@@ -0,0 +1,13 @@
1+
2+check: .PHONY
3+ $(IDRIS) --build javascript.ipkg
4+
5+recheck: clean check
6+
7+install:
8+ $(IDRIS) --install javascript.ipkg
9+
10+clean: .PHONY
11+ $(IDRIS) --clean javascript.ipkg
12+
13+.PHONY:
javascript/javascript.ipkgnew file+5
@@ -0,0 +1,5 @@
1+package javascript
2+
3+opts = "-i ../lib"
4+modules = JavaScript
5+