Content.purs 1.6 KB

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