Selaa lähdekoodia

Add extract function

jherve 1 vuosi sitten
vanhempi
commit
f533a608d9
2 muutettua tiedostoa jossa 17 lisäystä ja 9 poistoa
  1. 4 8
      src/Content.purs
  2. 13 1
      src/LinkedIn/Page/Skills.purs

+ 4 - 8
src/Content.purs

@@ -16,11 +16,11 @@ import LinkedIn.ArtDecoCard (queryArtDecoCard)
 import LinkedIn.ArtDecoTab (queryArtDecoTab)
 import LinkedIn.ArtDecoTab (queryArtDecoTab)
 import LinkedIn.DetachedNode (toDetached)
 import LinkedIn.DetachedNode (toDetached)
 import LinkedIn.JobsUnifiedTopCard (queryJobsUnifiedTopCardElement)
 import LinkedIn.JobsUnifiedTopCard (queryJobsUnifiedTopCardElement)
+import LinkedIn.Page.Skills as PageS
 import LinkedIn.Profile.Project as PP
 import LinkedIn.Profile.Project as PP
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (runQuery)
 import LinkedIn.QueryRunner (runQuery)
-import LinkedIn.Page.Skills (SkillsPage(..), querySkillsPage)
 import Yoga.Tree (Tree, showTree)
 import Yoga.Tree (Tree, showTree)
 
 
 main :: Effect Unit
 main :: Effect Unit
@@ -72,16 +72,12 @@ main = do
           log "parsed OK"
           log "parsed OK"
           logShow detached
           logShow detached
 
 
-  skillsNode <- runQuery $ querySkillsPage dom
+  skillsNode <- runQuery $ PageS.querySkillsPage dom
   case skillsNode of
   case skillsNode of
     Left l' -> logShow l'
     Left l' -> logShow l'
     Right q -> do
     Right q -> do
-      detached <- traverse toDetached q
-      log "skills OK"
-      logShow detached
-      let
-        SkillsPage tabs = detached
-      logShow $ map PS.fromUI tabs
+      skills <- PageS.extract q
+      logShow skills
 
 
 maybeShowTree ∷ Maybe (NonEmptyList LinkedInUIElement) → Effect String
 maybeShowTree ∷ Maybe (NonEmptyList LinkedInUIElement) → Effect String
 maybeShowTree Nothing = pure "nope"
 maybeShowTree Nothing = pure "nope"

+ 13 - 1
src/LinkedIn/Page/Skills.purs

@@ -2,12 +2,17 @@ module LinkedIn.Page.Skills where
 
 
 import Prelude
 import Prelude
 
 
+import Data.Either (Either)
 import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
 import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
 import Data.Generic.Rep (class Generic)
 import Data.Generic.Rep (class Generic)
 import Data.List.Types (NonEmptyList)
 import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
-import Data.Traversable (class Traversable, sequence, traverseDefault)
+import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
+import Effect (Effect)
 import LinkedIn.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
 import LinkedIn.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
+import LinkedIn.DetachedNode (toDetached)
+import LinkedIn.Profile.Skill (Skill)
+import LinkedIn.Profile.Skill as PS
 import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
 import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
 import Web.DOM (Document, Node)
 import Web.DOM (Document, Node)
 
 
@@ -36,3 +41,10 @@ querySkillsPage :: QueryRunner' Document (SkillsPage Node)
 querySkillsPage n = do
 querySkillsPage n = do
   tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
   tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
   pure $ SkillsPage tabs
   pure $ SkillsPage tabs
+
+extract ∷ SkillsPage Node → Effect (Either String (NonEmptyList Skill))
+extract p = do
+  detached <- traverse toDetached p
+  let
+    SkillsPage tabs = detached
+  pure $ traverse PS.fromUI tabs