From d4f17eafe7b3bc1c33bfb698dfcc79fe3a649511 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Mon, 3 Feb 2025 11:25:53 -0600 Subject: [PATCH] add messaging system --- haxe_libraries/kiss.hxml | 6 +++--- haxe_libraries/tink_macro.hxml | 6 +++--- src/kiss_firefox/Message.hx | 6 ++++++ src/kiss_firefox/Util.kiss | 20 ++++++++++++++++++++ template/build.hxml | 6 ++++++ template/manifest.json | 8 +++++++- template/src/template/Background.hx | 7 +++++++ template/src/template/Background_.kiss | 3 +++ template/src/template/Main_.kiss | 6 ++++-- template/test.sh | 0 10 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 src/kiss_firefox/Message.hx create mode 100644 src/kiss_firefox/Util.kiss create mode 100644 template/src/template/Background.hx create mode 100644 template/src/template/Background_.kiss mode change 100644 => 100755 template/test.sh diff --git a/haxe_libraries/kiss.hxml b/haxe_libraries/kiss.hxml index e0c51f1..e0e3c6f 100644 --- a/haxe_libraries/kiss.hxml +++ b/haxe_libraries/kiss.hxml @@ -1,12 +1,12 @@ -# @install: lix --silent download "gh://github.com/kiss-lang/kiss#a949fa24f789ee46d23e8a09295be1a5dc20af14" into kiss/0.0.1/github/a949fa24f789ee46d23e8a09295be1a5dc20af14 -# @run: haxelib run-dir kiss "${HAXE_LIBCACHE}/kiss/0.0.1/github/a949fa24f789ee46d23e8a09295be1a5dc20af14" +# @install: lix --silent download "gh://github.com/kiss-lang/kiss#35b1dffc09c384da84e8839f82b4d04112e02580" into kiss/0.0.1/github/35b1dffc09c384da84e8839f82b4d04112e02580 +# @run: haxelib run-dir kiss "${HAXE_LIBCACHE}/kiss/0.0.1/github/35b1dffc09c384da84e8839f82b4d04112e02580" -lib haxe-strings -lib hscript -lib tink_json -lib tink_macro -lib tink_syntaxhub -lib uuid --cp ${HAXE_LIBCACHE}/kiss/0.0.1/github/a949fa24f789ee46d23e8a09295be1a5dc20af14/src +-cp ${HAXE_LIBCACHE}/kiss/0.0.1/github/35b1dffc09c384da84e8839f82b4d04112e02580/src -D kiss=0.0.1 -w -WUnusedPattern --macro kiss.KissFrontend.use() \ No newline at end of file diff --git a/haxe_libraries/tink_macro.hxml b/haxe_libraries/tink_macro.hxml index a9e19b1..1e712e7 100644 --- a/haxe_libraries/tink_macro.hxml +++ b/haxe_libraries/tink_macro.hxml @@ -1,4 +1,4 @@ -# @install: lix --silent download "haxelib:/tink_macro#1.0.1" into tink_macro/1.0.1/haxelib +# @install: lix --silent download "gh://github.com/kiss-lang/tink_macro#8b60a484b1141d1176b34ba3af9ac65b499079ff" into tink_macro/1.0.3/github/8b60a484b1141d1176b34ba3af9ac65b499079ff -lib tink_core --cp ${HAXE_LIBCACHE}/tink_macro/1.0.1/haxelib/src --D tink_macro=1.0.1 \ No newline at end of file +-cp ${HAXE_LIBCACHE}/tink_macro/1.0.3/github/8b60a484b1141d1176b34ba3af9ac65b499079ff/src +-D tink_macro=1.0.3 \ No newline at end of file diff --git a/src/kiss_firefox/Message.hx b/src/kiss_firefox/Message.hx new file mode 100644 index 0000000..5be9e23 --- /dev/null +++ b/src/kiss_firefox/Message.hx @@ -0,0 +1,6 @@ +package kiss_firefox; + +typedef Message = { + type:String, + data:Array +}; \ No newline at end of file diff --git a/src/kiss_firefox/Util.kiss b/src/kiss_firefox/Util.kiss new file mode 100644 index 0000000..c4d883c --- /dev/null +++ b/src/kiss_firefox/Util.kiss @@ -0,0 +1,20 @@ +(import haxe.Constraints) +(import kiss_firefox.Message) +(import kiss_firefox.API) + +(function sendMessage [:String type :Array data] + (API.browser.runtime.sendMessage (objectWith type data))) + +(collectBlocks onMessageCase) + +(defMacro onMessage [type dataList &body body] + `(onMessageCase (_ ,type [,@dataList] ,@body))) + +(defReaderMacro &eof "" [stream] + (let [onMessageCases (getCollectedExps "onMessageCase")] + `(API.browser.runtime.onMessage.addListener ->[:Message message sender :Function sendResponse] + (case ~message + ,@(for messageCase onMessageCases + `((object type ,(first (Prelude.callArgs messageCase)) data ,(second (Prelude.callArgs messageCase))) + ,@(.slice (Prelude.callArgs messageCase) 2))) + (never otherwise))))) \ No newline at end of file diff --git a/template/build.hxml b/template/build.hxml index 9daa8a7..4ca051e 100644 --- a/template/build.hxml +++ b/template/build.hxml @@ -3,6 +3,12 @@ -cp externs -cp src -dce full +--each + --main template.Main --js bin/main.js +--next + +--main template.Background +--js bin/background.js -cmd cp node_modules/webextension-polyfill/dist/browser-polyfill.js* bin/ && zip -r template.zip . -x *.git* -x *.hxml -x *.zip -x src/\* -x node_modules/\* -x libs/\* -x test.sh -x externs/\* \ No newline at end of file diff --git a/template/manifest.json b/template/manifest.json index d341033..4cabff1 100644 --- a/template/manifest.json +++ b/template/manifest.json @@ -15,5 +15,11 @@ "matches": [], "js": ["bin/browser-polyfill.js", "bin/main.js"] } - ] + ], + "background": { + "scripts": [ + "bin/browser-polyfill.js", + "bin/background.js" + ] + } } diff --git a/template/src/template/Background.hx b/template/src/template/Background.hx new file mode 100644 index 0000000..ad30664 --- /dev/null +++ b/template/src/template/Background.hx @@ -0,0 +1,7 @@ +package template; + +class Background { + static function main() { + Background_.main(); + } +} \ No newline at end of file diff --git a/template/src/template/Background_.kiss b/template/src/template/Background_.kiss new file mode 100644 index 0000000..83ceffe --- /dev/null +++ b/template/src/template/Background_.kiss @@ -0,0 +1,3 @@ +(loadFrom "kiss-firefox" "src/kiss_firefox/Util.kiss") + +(onMessage "exampleMessage" [data1 data2] ~data1 ~data2) \ No newline at end of file diff --git a/template/src/template/Main_.kiss b/template/src/template/Main_.kiss index e17e983..a1c85d6 100644 --- a/template/src/template/Main_.kiss +++ b/template/src/template/Main_.kiss @@ -1,2 +1,4 @@ -(import kiss_firefox.API) -(set js.Lib.global.document.body.style.border "5px solid red") \ No newline at end of file +(loadFrom "kiss-firefox" "src/kiss_firefox/Util.kiss") + +(set js.Lib.global.document.body.style.border "5px solid red") +(sendMessage "exampleMessage" [3 4]) \ No newline at end of file diff --git a/template/test.sh b/template/test.sh old mode 100644 new mode 100755