-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathjs.lisp
49 lines (37 loc) · 1.06 KB
/
js.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(defpackage #:js
(:use #:cl #:ps)
(:export #:define-ps-macro
#:define-jsfun
;; dom
#:->
#:by-id
#:by-tagname
#:create-element
#:create-text-node))
(in-package #:js)
(defmacro define-ps-macro (name arg &body body)
`(progn
(defmacro ,name ,arg
,@body)
(import-macros-from-lisp ',name)
(export ',name)))
(defmacro define-jsfun (name args &body body)
(let ((table-name (intern "*JS-TABLE*" *package*)))
`(progn
(defvar ,table-name nil)
(setf (getf ,table-name ',name)
(quote (setf ,name (lambda ,args ,@body))))
',name)))
(defpsmacro define-jsfun (name args &body body)
`(progn (setf ,name (lambda ,args ,@body))
"undefined"))
(defpsmacro -> (&body chain)
`(chain ,@chain))
(defpsmacro by-id (id)
`(-> document (get-element-by-id ,id)))
(defpsmacro by-tagname (tagname)
`(-> document (get-elements-by-tag-name ,tagname)))
(defpsmacro create-element (tagname)
`(-> document (create-element ,tagname)))
(defpsmacro create-text-node (text)
`(-> document (create-text-node ,text)))