Content.purs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. module ExampleWebExt.Content where
  2. import Prelude
  3. import Browser.DOM (getBrowserDom)
  4. import Data.Either (Either(..))
  5. import Data.List.NonEmpty (NonEmptyList)
  6. import Data.List.NonEmpty as NEL
  7. import Data.Maybe (Maybe(..))
  8. import Data.Traversable (traverse)
  9. import Effect (Effect)
  10. import Effect.Class.Console (logShow)
  11. import Effect.Console (log)
  12. import LinkedIn.ArtDecoCard (queryArtDecoCard)
  13. import LinkedIn.ArtDecoTab (queryArtDecoTab)
  14. import LinkedIn.DetachedNode (toDetached)
  15. import LinkedIn.JobsUnifiedTopCard (queryJobsUnifiedTopCardElement)
  16. import LinkedIn (LinkedInUIElement(..), asPrunedTrees, asTree, getArtDecoCards, getArtDecoTabs, getJobsUnifiedTopCard)
  17. import LinkedIn.Profile.Project as PP
  18. import LinkedIn.Profile.Skill as PS
  19. import LinkedIn.Profile.WorkExperience as PWE
  20. import LinkedIn.QueryRunner (runQuery)
  21. import Yoga.Tree (Tree, showTree)
  22. main :: Effect Unit
  23. main = do
  24. dom <- getBrowserDom
  25. artDecoCards <- getArtDecoCards dom
  26. artDecoTabs <- getArtDecoTabs dom
  27. jobsUnifiedTopCard <- getJobsUnifiedTopCard dom
  28. log "[content] starting up"
  29. maybeShowTree artDecoCards >>= log
  30. maybeShowPruned "no card found" artDecoCards >>= log
  31. maybeShowPruned "no tabs found" artDecoTabs >>= log
  32. maybeShowPruned "no top card found" jobsUnifiedTopCard >>= log
  33. case artDecoCards of
  34. Nothing -> log "nothing"
  35. Just l -> do
  36. queried <- (\(LinkedInUIElement _ n) -> runQuery $ queryArtDecoCard n) $ NEL.head l
  37. case queried of
  38. Left l' -> logShow l'
  39. Right p -> do
  40. detached <- traverse toDetached p
  41. logShow detached
  42. logShow $ PWE.fromUI detached
  43. logShow $ PP.fromUI detached
  44. case artDecoTabs of
  45. Nothing -> log "nothing"
  46. Just l -> do
  47. queried <- (\(LinkedInUIElement _ n) -> runQuery $ queryArtDecoTab n) $ NEL.head l
  48. case queried of
  49. Left l' -> logShow l'
  50. Right p -> do
  51. detached <- traverse toDetached p
  52. logShow detached
  53. logShow $ PS.fromUI detached
  54. case jobsUnifiedTopCard of
  55. Nothing -> log "nothing"
  56. Just l -> do
  57. queried <- (\(LinkedInUIElement _ n) -> runQuery $ queryJobsUnifiedTopCardElement n) $ NEL.head l
  58. case queried of
  59. Left l' -> logShow l'
  60. Right p -> do
  61. detached <- traverse toDetached p
  62. log "parsed OK"
  63. logShow detached
  64. maybeShowTree ∷ Maybe (NonEmptyList LinkedInUIElement) → Effect String
  65. maybeShowTree Nothing = pure "nope"
  66. maybeShowTree (Just nel) = do
  67. tree <- asTree $ NEL.head nel
  68. pure $ showTree tree
  69. maybeShowPruned ∷ String → Maybe (NonEmptyList LinkedInUIElement) → Effect String
  70. maybeShowPruned errorMsg els = do
  71. trees <- asPrunedTrees els
  72. case trees of
  73. Nothing -> pure errorMsg
  74. Just ts -> do
  75. pure $ showTree $ NEL.head ts
  76. --pure $ showMaybeTree $ zipperTest $ head ts
  77. showMaybeTree ∷ ∀ (a ∷ Type). Show a ⇒ Maybe (Tree a) → String
  78. showMaybeTree Nothing = "No tree"
  79. showMaybeTree (Just t) = showTree t