Browse Source

Slightly change interface of query functions, adding selector

jherve 1 year ago
parent
commit
a5cd521fe3
3 changed files with 39 additions and 34 deletions
  1. 33 24
      src/LinkedIn/ArtDeco.purs
  2. 3 5
      src/LinkedIn/ArtDecoCard.purs
  3. 3 5
      src/LinkedIn/ArtDecoTab.purs

+ 33 - 24
src/LinkedIn/ArtDeco.purs

@@ -134,42 +134,51 @@ instance Traversable ArtDecoPvsEntity where
 
 
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
-queryArtDecoPvsEntitySubComponent ∷ QueryRunner (ArtDecoPvsEntitySubComponent Node)
-queryArtDecoPvsEntitySubComponent n = do
-  content <- ignoreNotFound $ queryOne "span[aria-hidden=true]" n
-  pure $ ArtDecoPvsEntitySubComponent content
-
-queryArtDecoCenterContent ∷ QueryRunner (ArtDecoCenterContent Node)
-queryArtDecoCenterContent n = do
-  list <- queryAll ":scope > ul > li" n
-  sc <- traverse queryArtDecoPvsEntitySubComponent list
+queryArtDecoPvsEntitySubComponents ∷ String -> QueryRunner (NonEmptyList (ArtDecoPvsEntitySubComponent Node))
+queryArtDecoPvsEntitySubComponents selector n = do
+  roots <- queryAll selector n
+  traverse queryComponent roots
+
+  where
+    queryComponent n' = do
+      content <- ignoreNotFound $ queryOne "span[aria-hidden=true]" n'
+      pure $ ArtDecoPvsEntitySubComponent content
+
+queryArtDecoCenterContent ∷ String -> QueryRunner (ArtDecoCenterContent Node)
+queryArtDecoCenterContent selector n = do
+  content <- queryOne selector n
+
+  sc <- queryArtDecoPvsEntitySubComponents ":scope > ul > li" content
+
   pure $ ArtDecoCenterContent sc
   pure $ ArtDecoCenterContent sc
 
 
-queryArtDecoCenterHeader ∷ QueryRunner (ArtDecoCenterHeader Node)
-queryArtDecoCenterHeader n = do
-  bold <- queryOne ":scope div.t-bold > span[aria-hidden=true]" n
+queryArtDecoCenterHeader ∷ String -> QueryRunner (ArtDecoCenterHeader Node)
+queryArtDecoCenterHeader selector n = do
+  header <- queryOne selector n
+
+  bold <- queryOne ":scope div.t-bold > span[aria-hidden=true]" header
   normal <-
   normal <-
     ignoreNotFound $
     ignoreNotFound $
-    queryOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" n
+    queryOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" header
   light <-
   light <-
     ignoreNotFound $
     ignoreNotFound $
-    queryAll ":scope span.t-black--light > span[aria-hidden=true]" n
+    queryAll ":scope span.t-black--light > span[aria-hidden=true]" header
 
 
   pure $ ArtDecoCenterHeader {bold, normal, light}
   pure $ ArtDecoCenterHeader {bold, normal, light}
 
 
-queryArtDecoCenter ∷ QueryRunner (ArtDecoCenter Node)
-queryArtDecoCenter n = do
-  header <- queryOne ":scope > div" n
-  h <- queryArtDecoCenterHeader header
-  content <- queryOne ":scope > div.pvs-entity__sub-components" n
-  c <- queryArtDecoCenterContent content
+queryArtDecoCenter ∷ String -> QueryRunner (ArtDecoCenter Node)
+queryArtDecoCenter selector n = do
+  root <- queryOne selector n
+
+  h <- queryArtDecoCenterHeader ":scope > div" root
+  c <- queryArtDecoCenterContent ":scope > div.pvs-entity__sub-components" root
 
 
   pure $ ArtDecoCenter {header: h, content: c}
   pure $ ArtDecoCenter {header: h, content: c}
 
 
-queryArtDecoPvsEntity ∷ QueryRunner (ArtDecoPvsEntity Node)
-queryArtDecoPvsEntity n = do
-  center <- queryOne ":scope > div.display-flex" n
-  c <- queryArtDecoCenter center
+queryArtDecoPvsEntity ∷ String -> QueryRunner (ArtDecoPvsEntity Node)
+queryArtDecoPvsEntity selector n = do
+  root <- queryOne selector n
+  c <- queryArtDecoCenter ":scope > div.display-flex" root
 
 
   pure $ ArtDecoPvsEntity {side: unit, center: c}
   pure $ ArtDecoPvsEntity {side: unit, center: c}
 
 

+ 3 - 5
src/LinkedIn/ArtDecoCard.purs

@@ -11,7 +11,7 @@ import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, queryArtDecoPvsEntity)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, queryArtDecoPvsEntity)
 import LinkedIn.ArtDeco as AD
 import LinkedIn.ArtDeco as AD
-import LinkedIn.QueryRunner (QueryRunner, queryOne)
+import LinkedIn.QueryRunner (QueryRunner)
 import Web.DOM (Node)
 import Web.DOM (Node)
 
 
 
 
@@ -40,10 +40,8 @@ instance Traversable ArtDecoCardElement where
 
 
 queryArtDecoCard :: QueryRunner (ArtDecoCardElement Node)
 queryArtDecoCard :: QueryRunner (ArtDecoCardElement Node)
 queryArtDecoCard n = do
 queryArtDecoCard n = do
-  pvs <- queryOne ":scope div.pvs-entity--padded" n
-  p <- queryArtDecoPvsEntity pvs
-
-  pure $ ArtDecoCardElement {pvs_entity: p}
+  pvs <- queryArtDecoPvsEntity ":scope div.pvs-entity--padded" n
+  pure $ ArtDecoCardElement {pvs_entity: pvs}
 
 
 toCenterContent ∷ forall a. ArtDecoCardElement a → List a
 toCenterContent ∷ forall a. ArtDecoCardElement a → List a
 toCenterContent = toPvsEntity >>> AD.toCenterContent
 toCenterContent = toPvsEntity >>> AD.toCenterContent

+ 3 - 5
src/LinkedIn/ArtDecoTab.purs

@@ -11,7 +11,7 @@ import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, queryArtDecoPvsEntity)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, queryArtDecoPvsEntity)
 import LinkedIn.ArtDeco as AD
 import LinkedIn.ArtDeco as AD
-import LinkedIn.QueryRunner (QueryRunner, queryOne)
+import LinkedIn.QueryRunner (QueryRunner)
 import Web.DOM (Node)
 import Web.DOM (Node)
 
 
 
 
@@ -40,10 +40,8 @@ instance Traversable ArtDecoTabElement where
 
 
 queryArtDecoTab :: QueryRunner (ArtDecoTabElement Node)
 queryArtDecoTab :: QueryRunner (ArtDecoTabElement Node)
 queryArtDecoTab n = do
 queryArtDecoTab n = do
-  pvs <- queryOne ":scope div.pvs-entity--padded" n
-  p <- queryArtDecoPvsEntity pvs
-
-  pure $ ArtDecoTabElement {pvs_entity: p}
+  pvs <- queryArtDecoPvsEntity ":scope div.pvs-entity--padded" n
+  pure $ ArtDecoTabElement {pvs_entity: pvs}
 
 
 toCenterContent ∷ forall a. ArtDecoTabElement a → List a
 toCenterContent ∷ forall a. ArtDecoTabElement a → List a
 toCenterContent = toPvsEntity >>> AD.toCenterContent
 toCenterContent = toPvsEntity >>> AD.toCenterContent