| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- module LinkedIn.Page.Projects 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.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
- import LinkedIn.DetachedNode (toDetached)
- import LinkedIn.Profile.Project (Project)
- import LinkedIn.Profile.Project as PP
- import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
- import Web.DOM (Document, Node)
- data ProjectsPage a = ProjectsPage (NonEmptyList (ArtDecoCardElement a))
- derive instance Generic (ProjectsPage a) _
- derive instance Eq a => Eq (ProjectsPage a)
- instance Show a => Show (ProjectsPage a) where
- show = genericShow
- derive instance Functor ProjectsPage
- instance Foldable ProjectsPage where
- foldMap f (ProjectsPage cards) = foldMap (foldMap f) cards
- foldl = \x -> foldlDefault x
- foldr = \x -> foldrDefault x
- instance Traversable ProjectsPage where
- sequence (ProjectsPage cards) = ado
- ts <- sequence (map sequence cards)
- in ProjectsPage ts
- traverse = \x -> traverseDefault x
- query :: QueryRunner' Document (ProjectsPage Node)
- query n = do
- cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
- pure $ ProjectsPage cards
- extract ∷ ProjectsPage Node → Effect (Either String (NonEmptyList Project))
- extract p = do
- detached <- traverse toDetached p
- let
- ProjectsPage cards = detached
- pure $ traverse PP.fromUI cards
|