Преглед на файлове

Make message an alias of JSON

jherve преди 1 година
родител
ревизия
9dadac7e85
променени са 3 файла, в които са добавени 19 реда и са изтрити 8 реда
  1. 4 3
      src/Background.purs
  2. 11 2
      src/Browser/WebExt/Message.purs
  3. 4 3
      src/Content.purs

+ 4 - 3
src/Background.purs

@@ -4,6 +4,7 @@ import Prelude
 
 import Browser.WebExt.BrowserAction (onClickedAddListener)
 import Browser.WebExt.Listener (mkListener)
+import Browser.WebExt.Message (Message, mkMessage, displayMessage)
 import Browser.WebExt.Runtime (onMessageAddListener)
 import Browser.WebExt.Tabs (Tab)
 import Browser.WebExt.Tabs as Tabs
@@ -20,8 +21,8 @@ main = do
 
 browserActionOnClickedHandler :: Tab -> Effect Unit
 browserActionOnClickedHandler tab = do
-  _ <- Tabs.sendMessage tab.id "Clicked browser action"
+  _ <- Tabs.sendMessage tab.id $ mkMessage { clicked: tab.id }
   pure unit
 
-contentScriptMessageHandler ∷ ∀ m (a ∷ Type). MonadEffect m ⇒ Show a ⇒ a → m Unit
-contentScriptMessageHandler m = log $ "[bg] received msg from content : " <> show m
+contentScriptMessageHandler ∷ ∀ m. MonadEffect m ⇒ Message → m Unit
+contentScriptMessageHandler m = log $ "[bg] received msg from content : " <> displayMessage m

+ 11 - 2
src/Browser/WebExt/Message.purs

@@ -1,3 +1,12 @@
-module Browser.WebExt.Message (Message) where
+module Browser.WebExt.Message (Message, mkMessage, displayMessage) where
 
-type Message = String
+import Data.Argonaut.Core (Json, stringifyWithIndent)
+import Data.Argonaut.Encode (class EncodeJson, encodeJson)
+
+type Message = Json
+
+mkMessage ∷ ∀ (@a ∷ Type). EncodeJson a ⇒ a → Json
+mkMessage = encodeJson
+
+displayMessage ∷ Message → String
+displayMessage = stringifyWithIndent 2

+ 4 - 3
src/Content.purs

@@ -4,6 +4,7 @@ import Prelude
 
 import Browser.DOM (getBrowserDom)
 import Browser.WebExt.Listener (mkListener)
+import Browser.WebExt.Message (Message, displayMessage, mkMessage)
 import Browser.WebExt.Runtime as Runtime
 import Effect (Effect)
 import Effect.Class.Console (logShow)
@@ -15,11 +16,11 @@ main = do
   log "[content] starting up"
 
   Runtime.onMessageAddListener $ mkListener messageListener
-  _ <- Runtime.sendMessage "message from content"
+  _ <- Runtime.sendMessage $ mkMessage { simpleMessage: "hello from content" }
 
   dom <- getBrowserDom
   getContext dom >>= logShow
   extractFromDocument dom >>= logShow
 
-messageListener ∷ ∀ a. Show a ⇒ a → Effect Unit
-messageListener m = log $ "[content] Received message " <> show m
+messageListener ∷ Message → Effect Unit
+messageListener m = log $ "[content] Received message " <> displayMessage m