| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- module JobSearchExtension.Content where
- import Prelude
- import Browser.DOM (getBrowserDom)
- import Browser.WebExt.Runtime (MessageSender)
- import Data.Either (Either(..))
- import Effect (Effect)
- import Effect.Aff (Aff, launchAff_)
- import Effect.Class (liftEffect)
- import Effect.Class.Console (logShow)
- import Effect.Console (log)
- import JobSearchExtension.RuntimeMessage (RuntimeMessage(..), onRuntimeMessageAddListener, sendMessageToBackground)
- import LinkedIn (extractFromDocument, getContext)
- import LinkedIn.Loadable (waitFor)
- import LinkedIn.PageUrl (PageUrl(..))
- -- TODO: This function should be implemented in PS as well
- foreign import colorVisitedJobsLoopImpl :: Effect Unit
- main :: Effect Unit
- main = do
- log "[content] starting up"
- dom <- getBrowserDom
- ctx <- getContext dom
- onRuntimeMessageAddListener backgroundMessageHandler
- _ <- sendMessageToBackground RuntimeMessageContentInit
- case ctx of
- Right (UrlJobOffer _) -> launchAff_ waitForDataAndSend
- Right (UrlListRecommendedJobOffers) -> colorVisitedJobsLoopImpl
- Right (UrlSearchJobOffers) -> colorVisitedJobsLoopImpl
- _ -> log "[content] Nothing to do"
- backgroundMessageHandler ∷ RuntimeMessage -> MessageSender → Effect Unit
- backgroundMessageHandler msg _ = case msg of
- RuntimeMessageRequestPageContent -> launchAff_ waitForDataAndSend
- m -> logShow m
- waitForDataAndSend ∷ Aff Unit
- waitForDataAndSend = do
- dom <- liftEffect getBrowserDom
- -- If we are here we know that we are looking for a job offer.
- -- TODO: Remove this dirty hack once "Loadable" typeclass is integrated
- _ <- waitFor 200 50 ".job-details-jobs-unified-top-card__job-insight span[aria-hidden]" dom
- liftEffect extractDataAndSendToBackground
- extractDataAndSendToBackground ∷ Effect Unit
- extractDataAndSendToBackground = do
- dom <- getBrowserDom
- ctx <- getContext dom
- data_ <- extractFromDocument dom
- let
- msg = case data_, ctx of
- Left err, _ -> RuntimeMessageError err
- _, Left err -> RuntimeMessageError err
- Right data_', Right ctx' -> RuntimeMessagePageContent ctx' data_'
- sendMessageToBackground msg
|