Content.purs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. module ExampleWebExt.Content where
  2. import Prelude
  3. import Browser.DOM (getBrowserDom)
  4. import Data.Either (Either(..), hush)
  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 >>= logShow
  24. runQueryAndExtract PageP.query PageP.extract dom >>= logShow
  25. runQueryAndExtract PageS.query PageS.extract dom >>= logShow
  26. runQueryAndExtract PageJ.query PageJ.extract dom >>= logShow
  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 (Maybe a)
  42. runQueryAndExtract query extract dom = do
  43. n <- runQuery $ query dom
  44. case n of
  45. Left _ -> pure Nothing
  46. Right q -> do
  47. extracted <- (extractData extract) q
  48. pure $ hush 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