ソースを参照

Slightly change interface of query functions, adding selector

jherve 1 年間 前
コミット
a5cd521fe3
3 ファイル変更39 行追加34 行削除
  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
 
-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
 
-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 <-
     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 <-
     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}
 
-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}
 
-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}
 

+ 3 - 5
src/LinkedIn/ArtDecoCard.purs

@@ -11,7 +11,7 @@ import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import LinkedIn.ArtDeco (ArtDecoPvsEntity, queryArtDecoPvsEntity)
 import LinkedIn.ArtDeco as AD
-import LinkedIn.QueryRunner (QueryRunner, queryOne)
+import LinkedIn.QueryRunner (QueryRunner)
 import Web.DOM (Node)
 
 
@@ -40,10 +40,8 @@ instance Traversable ArtDecoCardElement where
 
 queryArtDecoCard :: QueryRunner (ArtDecoCardElement Node)
 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 = 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 LinkedIn.ArtDeco (ArtDecoPvsEntity, queryArtDecoPvsEntity)
 import LinkedIn.ArtDeco as AD
-import LinkedIn.QueryRunner (QueryRunner, queryOne)
+import LinkedIn.QueryRunner (QueryRunner)
 import Web.DOM (Node)
 
 
@@ -40,10 +40,8 @@ instance Traversable ArtDecoTabElement where
 
 queryArtDecoTab :: QueryRunner (ArtDecoTabElement Node)
 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 = toPvsEntity >>> AD.toCenterContent