Content.purs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. module ExampleWebExt.Content where
  2. import Prelude
  3. import Browser.DOM (getBrowserDom)
  4. import Data.Either (Either(..))
  5. import Data.Maybe (Maybe(..))
  6. import Data.Traversable (class Traversable, traverse)
  7. import Effect (Effect)
  8. import Effect.Class.Console (logShow)
  9. import Effect.Console (log)
  10. import LinkedIn.DetachedNode (DetachedNode, toDetached)
  11. import LinkedIn.Page.JobOffer as PageJ
  12. import LinkedIn.Page.Projects as PageP
  13. import LinkedIn.Page.Skills as PageS
  14. import LinkedIn.Page.WorkExperiences as PageWE
  15. import LinkedIn.Profile.Utils (fromDetachedToUI, fromNodeToDetached)
  16. import LinkedIn.QueryRunner (QueryRunner', runQuery)
  17. import LinkedIn.UIElements.Types (UIElement)
  18. import Web.DOM (Document, Node)
  19. main :: Effect Unit
  20. main = do
  21. log "[content] starting up"
  22. dom <- getBrowserDom
  23. runQueryAndExtract PageWE.query PageWE.extract dom
  24. runQueryAndExtract PageP.query PageP.extract dom
  25. runQueryAndExtract PageS.query PageS.extract dom
  26. runQueryAndExtract PageJ.query PageJ.extract dom
  27. runQueryAndDetach PageJ.query dom >>= logShow
  28. extractData ∷ ∀ t a. Traversable t ⇒ (t UIElement → Either String a) → t Node → Effect (Either String a)
  29. extractData parsePageUI n = do
  30. d <- fromNodeToDetached n
  31. pure $ case fromDetachedToUI d of
  32. Left l -> Left l
  33. Right ui -> parsePageUI ui
  34. runQueryAndExtract ∷
  35. ∀ t a.
  36. Traversable t
  37. => Show a
  38. ⇒ QueryRunner' Document (t Node)
  39. → (t UIElement → Either String a)
  40. → Document
  41. → Effect Unit
  42. runQueryAndExtract query extract dom = do
  43. n <- runQuery $ query dom
  44. case n of
  45. Left l' -> logShow l'
  46. Right q -> do
  47. extracted <- (extractData extract) q
  48. logShow extracted
  49. runQueryAndDetach ∷
  50. ∀ f1.
  51. Traversable f1
  52. ⇒ QueryRunner' Document (f1 Node)
  53. → Document
  54. → Effect (Maybe (f1 DetachedNode))
  55. runQueryAndDetach query dom = do
  56. n <- runQuery $ query dom
  57. case n of
  58. Left _ -> pure Nothing
  59. Right q -> do
  60. d <- traverse toDetached q
  61. pure $ Just d