|
@@ -10,13 +10,12 @@ import Data.List.NonEmpty (NonEmptyList)
|
|
|
import Data.List.NonEmpty as NEL
|
|
import Data.List.NonEmpty as NEL
|
|
|
import Data.Maybe (Maybe)
|
|
import Data.Maybe (Maybe)
|
|
|
import Data.Show.Generic (genericShow)
|
|
import Data.Show.Generic (genericShow)
|
|
|
-import Data.Traversable (class Traversable, sequence, traverseDefault)
|
|
|
|
|
|
|
+import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
|
|
|
import LinkedIn (DetachedNode)
|
|
import LinkedIn (DetachedNode)
|
|
|
-import LinkedIn.Profile.Utils (toUIElement)
|
|
|
|
|
|
|
+import LinkedIn.QueryRunner (QueryRunner, ignoreNotFound, queryAll, queryOne)
|
|
|
import LinkedIn.Types (Parser)
|
|
import LinkedIn.Types (Parser)
|
|
|
-import LinkedIn.UIElements.Types (UIElement)
|
|
|
|
|
import LinkedIn.Utils (queryAndDetachMany, queryAndDetachOne, queryManyAndParse, queryOneAndParse)
|
|
import LinkedIn.Utils (queryAndDetachMany, queryAndDetachOne, queryManyAndParse, queryOneAndParse)
|
|
|
-import Parsing (ParseError)
|
|
|
|
|
|
|
+import Web.DOM (Node)
|
|
|
|
|
|
|
|
|
|
|
|
|
data ArtDecoPvsEntity a = ArtDecoPvsEntity {
|
|
data ArtDecoPvsEntity a = ArtDecoPvsEntity {
|
|
@@ -144,6 +143,11 @@ parseArtDecoPvsEntitySubComponent n = do
|
|
|
content <- queryAndDetachOne "span[aria-hidden=true]" n
|
|
content <- queryAndDetachOne "span[aria-hidden=true]" n
|
|
|
pure $ Right $ ArtDecoPvsEntitySubComponent $ hush content
|
|
pure $ Right $ ArtDecoPvsEntitySubComponent $ hush content
|
|
|
|
|
|
|
|
|
|
+queryArtDecoPvsEntitySubComponent ∷ QueryRunner (ArtDecoPvsEntitySubComponent Node)
|
|
|
|
|
+queryArtDecoPvsEntitySubComponent n = do
|
|
|
|
|
+ content <- ignoreNotFound $ queryOne "span[aria-hidden=true]" n
|
|
|
|
|
+ pure $ ArtDecoPvsEntitySubComponent content
|
|
|
|
|
+
|
|
|
parseArtDecoCenterContent ∷ Parser (ArtDecoCenterContent DetachedNode)
|
|
parseArtDecoCenterContent ∷ Parser (ArtDecoCenterContent DetachedNode)
|
|
|
parseArtDecoCenterContent n = do
|
|
parseArtDecoCenterContent n = do
|
|
|
list <- queryManyAndParse ":scope > ul > li" parseArtDecoPvsEntitySubComponent n
|
|
list <- queryManyAndParse ":scope > ul > li" parseArtDecoPvsEntitySubComponent n
|
|
@@ -151,6 +155,12 @@ parseArtDecoCenterContent n = do
|
|
|
l <- list
|
|
l <- list
|
|
|
in ArtDecoCenterContent l
|
|
in ArtDecoCenterContent l
|
|
|
|
|
|
|
|
|
|
+queryArtDecoCenterContent ∷ QueryRunner (ArtDecoCenterContent Node)
|
|
|
|
|
+queryArtDecoCenterContent n = do
|
|
|
|
|
+ list <- queryAll ":scope > ul > li" n
|
|
|
|
|
+ sc <- traverse queryArtDecoPvsEntitySubComponent list
|
|
|
|
|
+ pure $ ArtDecoCenterContent sc
|
|
|
|
|
+
|
|
|
parseArtDecoCenterHeader :: Parser (ArtDecoCenterHeader DetachedNode)
|
|
parseArtDecoCenterHeader :: Parser (ArtDecoCenterHeader DetachedNode)
|
|
|
parseArtDecoCenterHeader n = do
|
|
parseArtDecoCenterHeader n = do
|
|
|
bold <- queryAndDetachOne ":scope div.t-bold > span[aria-hidden=true]" n
|
|
bold <- queryAndDetachOne ":scope div.t-bold > span[aria-hidden=true]" n
|
|
@@ -161,6 +171,18 @@ parseArtDecoCenterHeader n = do
|
|
|
b <- bold
|
|
b <- bold
|
|
|
in ArtDecoCenterHeader {bold: b, normal: hush normal, light: hush light}
|
|
in ArtDecoCenterHeader {bold: b, normal: hush normal, light: hush light}
|
|
|
|
|
|
|
|
|
|
+queryArtDecoCenterHeader ∷ QueryRunner (ArtDecoCenterHeader Node)
|
|
|
|
|
+queryArtDecoCenterHeader n = do
|
|
|
|
|
+ bold <- queryOne ":scope div.t-bold > span[aria-hidden=true]" n
|
|
|
|
|
+ normal <-
|
|
|
|
|
+ ignoreNotFound $
|
|
|
|
|
+ queryOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" n
|
|
|
|
|
+ light <-
|
|
|
|
|
+ ignoreNotFound $
|
|
|
|
|
+ queryAll ":scope span.t-black--light > span[aria-hidden=true]" n
|
|
|
|
|
+
|
|
|
|
|
+ pure $ ArtDecoCenterHeader {bold, normal, light}
|
|
|
|
|
+
|
|
|
parseArtDecoCenter :: Parser (ArtDecoCenter DetachedNode)
|
|
parseArtDecoCenter :: Parser (ArtDecoCenter DetachedNode)
|
|
|
parseArtDecoCenter n = do
|
|
parseArtDecoCenter n = do
|
|
|
header <- queryOneAndParse ":scope > div" parseArtDecoCenterHeader n
|
|
header <- queryOneAndParse ":scope > div" parseArtDecoCenterHeader n
|
|
@@ -171,6 +193,15 @@ parseArtDecoCenter n = do
|
|
|
c <- content
|
|
c <- content
|
|
|
in ArtDecoCenter {header: h, content: c}
|
|
in ArtDecoCenter {header: h, content: c}
|
|
|
|
|
|
|
|
|
|
+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
|
|
|
|
|
+
|
|
|
|
|
+ pure $ ArtDecoCenter {header: h, content: c}
|
|
|
|
|
+
|
|
|
parseArtDecoPvsEntity :: Parser (ArtDecoPvsEntity DetachedNode)
|
|
parseArtDecoPvsEntity :: Parser (ArtDecoPvsEntity DetachedNode)
|
|
|
parseArtDecoPvsEntity n = do
|
|
parseArtDecoPvsEntity n = do
|
|
|
center <- queryOneAndParse ":scope > div.display-flex" parseArtDecoCenter n
|
|
center <- queryOneAndParse ":scope > div.display-flex" parseArtDecoCenter n
|
|
@@ -179,6 +210,13 @@ parseArtDecoPvsEntity n = do
|
|
|
c <- center
|
|
c <- center
|
|
|
in ArtDecoPvsEntity {side: unit, center: c}
|
|
in ArtDecoPvsEntity {side: unit, center: c}
|
|
|
|
|
|
|
|
|
|
+queryArtDecoPvsEntity ∷ QueryRunner (ArtDecoPvsEntity Node)
|
|
|
|
|
+queryArtDecoPvsEntity n = do
|
|
|
|
|
+ center <- queryOne ":scope > div.display-flex" n
|
|
|
|
|
+ c <- queryArtDecoCenter center
|
|
|
|
|
+
|
|
|
|
|
+ pure $ ArtDecoPvsEntity {side: unit, center: c}
|
|
|
|
|
+
|
|
|
toHeaderBold ∷ forall a. ArtDecoPvsEntity a → a
|
|
toHeaderBold ∷ forall a. ArtDecoPvsEntity a → a
|
|
|
toHeaderBold (ArtDecoPvsEntity {
|
|
toHeaderBold (ArtDecoPvsEntity {
|
|
|
center: ArtDecoCenter { header: ArtDecoCenterHeader { bold }}
|
|
center: ArtDecoCenter { header: ArtDecoCenterHeader { bold }}
|