| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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, 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)
- data SkillsPage a = SkillsPage (NonEmptyList (ArtDecoTabElement a))
- derive instance Generic (SkillsPage a) _
- derive instance Eq a => Eq (SkillsPage a)
- instance Show a => Show (SkillsPage a) where
- show = genericShow
- derive instance Functor SkillsPage
- instance Foldable SkillsPage where
- foldMap f (SkillsPage tabs) = foldMap (foldMap f) tabs
- foldl = \x -> foldlDefault x
- foldr = \x -> foldrDefault x
- instance Traversable SkillsPage where
- sequence (SkillsPage tabs) = ado
- ts <- sequence (map sequence tabs)
- in SkillsPage ts
- traverse = \x -> traverseDefault x
- 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
|