Content.purs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. module ExampleWebExt.Content where
  2. import Prelude
  3. import Browser.DOM (getBrowserDom)
  4. import Browser.WebExt.Runtime (MessageSender)
  5. import Data.Either (Either(..))
  6. import Effect (Effect)
  7. import Effect.Class.Console (logShow, warn)
  8. import Effect.Console (log)
  9. import ExampleWebExt.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToBackground)
  10. import LinkedIn (extractFromDocument, getContext)
  11. import LinkedIn.PageUrl (PageUrl(..))
  12. main :: Effect Unit
  13. main = do
  14. log "[content] starting up"
  15. dom <- getBrowserDom
  16. ctx <- getContext dom
  17. onRuntimeMessageAddListener backgroundMessageHandler
  18. _ <- sendMessageToBackground RuntimeMessageContentInit
  19. case ctx of
  20. Right (UrlJobOffer _) -> extractDataAndSendToBackground
  21. Right (UrlListRecommendedJobOffers) -> colorAlreadyVisitedOffers
  22. Right (UrlSearchJobOffers) -> colorAlreadyVisitedOffers
  23. _ -> log "[content] Nothing to do"
  24. -- TODO : Implement that function once local storage is updated by background
  25. colorAlreadyVisitedOffers ∷ Effect Unit
  26. colorAlreadyVisitedOffers = log "[content] Coloring of job offers is not implemented yet"
  27. backgroundMessageHandler ∷ RuntimeMessage -> MessageSender → Effect Unit
  28. backgroundMessageHandler m _ = case m of
  29. RuntimeMessageRequestPageContent -> extractDataAndSendToBackground
  30. m -> logShow m
  31. extractDataAndSendToBackground ∷ Effect Unit
  32. extractDataAndSendToBackground = do
  33. dom <- getBrowserDom
  34. ctx <- getContext dom
  35. data_ <- extractFromDocument dom
  36. case data_, ctx of
  37. Left err, _ -> warn $ "[content] " <> show err
  38. _, Left err -> warn $ "[content] " <> show err
  39. Right data_', Right ctx' -> sendMessageToBackground $ RuntimeMessagePageContent ctx' data_'