|
|
@@ -2,12 +2,17 @@ module LinkedIn.Page.Skills where
|
|
|
|
|
|
import Prelude
|
|
|
|
|
|
+import Data.Either (Either)
|
|
|
import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
|
|
|
import Data.Generic.Rep (class Generic)
|
|
|
import Data.List.Types (NonEmptyList)
|
|
|
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.DetachedNode (toDetached)
|
|
|
+import LinkedIn.Profile.Skill (Skill)
|
|
|
+import LinkedIn.Profile.Skill as PS
|
|
|
import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
|
|
|
import Web.DOM (Document, Node)
|
|
|
|
|
|
@@ -36,3 +41,10 @@ querySkillsPage :: QueryRunner' Document (SkillsPage Node)
|
|
|
querySkillsPage n = do
|
|
|
tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
|
|
|
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
|