Content.purs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. ctx <- getContext dom
  34. data_ <- extractFromDocument dom
  35. sendMessageToBackground RuntimeMessageContentInit
  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_'