瀏覽代碼

Move event code to a Runtime module

jherve 1 年之前
父節點
當前提交
97c7dc4be2
共有 3 個文件被更改,包括 35 次插入18 次删除
  1. 2 18
      src/Background.purs
  2. 0 0
      src/Browser/Runtime.js
  3. 33 0
      src/Browser/Runtime.purs

+ 2 - 18
src/Background.purs

@@ -2,30 +2,14 @@ module ExampleWebExt.Background where
 
 import Prelude
 
+import Browser.Runtime (mkListener, onClickedAddListener, tabsSendMessage)
 import Effect (Effect)
 import Effect.Class.Console (log, logShow)
-import Effect.Uncurried (EffectFn1, EffectFn2, mkEffectFn1, runEffectFn1, runEffectFn2)
-import Promise (Promise)
-
-type Tab = { id :: Int, index :: Int }
-type TabId = Int
-type Message = String
-
-type Listener a = EffectFn1 a Unit
-
-foreign import onClickedAddListenerImpl :: EffectFn1 (Listener Tab) Unit
-foreign import tabsSendMessageImpl :: EffectFn2 TabId Message (Promise Message)
-
-onClickedAddListener ∷ Listener Tab → Effect Unit
-onClickedAddListener = runEffectFn1 onClickedAddListenerImpl
-
-tabsSendMessage ∷ TabId → Message → Effect (Promise Message)
-tabsSendMessage = runEffectFn2 tabsSendMessageImpl
 
 main :: Effect Unit
 main = do
   let
-    listenerEff = mkEffectFn1 $ \e -> do
+    listenerEff = mkListener $ \e -> do
       logShow e
       log "Executed listener mkEffectFn1"
       _ <- tabsSendMessage e.id "message from PS"

src/Background.js → src/Browser/Runtime.js


+ 33 - 0
src/Browser/Runtime.purs

@@ -0,0 +1,33 @@
+module Browser.Runtime (
+  Tab,
+  TabId,
+  Message,
+  Listener,
+  tabsSendMessage,
+  onClickedAddListener,
+  mkListener
+) where
+
+import Prelude
+
+import Effect (Effect)
+import Effect.Uncurried (EffectFn1, EffectFn2, mkEffectFn1, runEffectFn1, runEffectFn2)
+import Promise (Promise)
+
+type Tab = { id :: Int, index :: Int }
+type TabId = Int
+type Message = String
+
+type Listener a = EffectFn1 a Unit
+
+foreign import onClickedAddListenerImpl :: EffectFn1 (Listener Tab) Unit
+foreign import tabsSendMessageImpl :: EffectFn2 TabId Message (Promise Message)
+
+onClickedAddListener ∷ Listener Tab → Effect Unit
+onClickedAddListener = runEffectFn1 onClickedAddListenerImpl
+
+tabsSendMessage ∷ TabId → Message → Effect (Promise Message)
+tabsSendMessage = runEffectFn2 tabsSendMessageImpl
+
+mkListener :: forall a. (a -> Effect Unit) -> Listener a
+mkListener = mkEffectFn1