Sfoglia il codice sorgente

Factorize out common ArtDeco code

jherve 1 anno fa
parent
commit
d719c1855c

+ 100 - 0
src/LinkedIn/ArtDeco.purs

@@ -0,0 +1,100 @@
+module LinkedIn.ArtDeco where
+
+import Prelude
+
+import Data.Either (Either(..), hush)
+import Data.Generic.Rep (class Generic)
+import Data.List.NonEmpty (NonEmptyList)
+import Data.Maybe (Maybe)
+import Data.Show.Generic (genericShow)
+import LinkedIn (DetachedNode)
+import LinkedIn.Types (Parser)
+import LinkedIn.Utils (queryAndDetachMany, queryAndDetachOne, queryManyAndParse, queryOneAndParse)
+
+
+data ArtDecoPvsEntity = ArtDecoPvsEntity {
+  side :: Unit,
+  center :: ArtDecoCenter
+}
+
+data ArtDecoCenter = ArtDecoCenter {
+  header :: ArtDecoCenterHeader,
+  content :: ArtDecoCenterContent
+}
+
+data ArtDecoCenterHeader = ArtDecoCenterHeader {
+  bold :: DetachedNode,
+  normal :: Maybe DetachedNode,
+  light :: Maybe (NonEmptyList DetachedNode)
+}
+
+data ArtDecoCenterContent = ArtDecoCenterContent (NonEmptyList ArtDecoPvsEntitySubComponent)
+
+data ArtDecoPvsEntitySubComponent = ArtDecoPvsEntitySubComponent (Maybe DetachedNode)
+
+
+derive instance Generic ArtDecoPvsEntitySubComponent _
+derive instance Eq ArtDecoPvsEntitySubComponent
+instance Show ArtDecoPvsEntitySubComponent where
+  show = genericShow
+
+derive instance Generic ArtDecoCenterContent _
+derive instance Eq ArtDecoCenterContent
+instance Show ArtDecoCenterContent where
+  show = genericShow
+
+derive instance Generic ArtDecoCenterHeader _
+derive instance Eq ArtDecoCenterHeader
+instance Show ArtDecoCenterHeader where
+  show = genericShow
+
+derive instance Generic ArtDecoCenter _
+derive instance Eq ArtDecoCenter
+instance Show ArtDecoCenter where
+  show = genericShow
+
+derive instance Generic ArtDecoPvsEntity _
+derive instance Eq ArtDecoPvsEntity
+instance Show ArtDecoPvsEntity where
+  show = genericShow
+
+
+parseArtDecoPvsEntitySubComponent ∷ Parser ArtDecoPvsEntitySubComponent
+parseArtDecoPvsEntitySubComponent n = do
+  content <- queryAndDetachOne "span[aria-hidden=true]" n
+  pure $ Right $ ArtDecoPvsEntitySubComponent $ hush content
+
+parseArtDecoCenterContent ∷ Parser ArtDecoCenterContent
+parseArtDecoCenterContent n = do
+  list <- queryManyAndParse ":scope > ul > li" parseArtDecoPvsEntitySubComponent n
+  pure $ ado
+    l <- list
+  in ArtDecoCenterContent l
+
+parseArtDecoCenterHeader :: Parser ArtDecoCenterHeader
+parseArtDecoCenterHeader n = do
+  bold <- queryAndDetachOne ":scope div.t-bold > span[aria-hidden=true]" n
+  normal <- queryAndDetachOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" n
+  light <- queryAndDetachMany ":scope span.t-black--light > span[aria-hidden=true]" n
+
+  pure $ ado
+    b <- bold
+  in ArtDecoCenterHeader {bold: b, normal: hush normal, light: hush light}
+
+parseArtDecoCenter :: Parser ArtDecoCenter
+parseArtDecoCenter n = do
+  header <- queryOneAndParse ":scope > div" parseArtDecoCenterHeader n
+  content <- queryOneAndParse ":scope > div.pvs-entity__sub-components" parseArtDecoCenterContent n
+
+  pure $ ado
+    h <- header
+    c <- content
+  in ArtDecoCenter {header: h, content: c}
+
+parseArtDecoPvsEntity :: Parser ArtDecoPvsEntity
+parseArtDecoPvsEntity n = do
+  center <- queryOneAndParse ":scope > div.display-flex" parseArtDecoCenter n
+
+  pure $ ado
+    c <- center
+  in ArtDecoPvsEntity {side: unit, center: c}

+ 2 - 92
src/LinkedIn/ArtDecoCard.purs

@@ -2,112 +2,22 @@ module LinkedIn.ArtDecoCard where
 
 import Prelude
 
-import Data.Either (Either(..), hush)
 import Data.Generic.Rep (class Generic)
-import Data.List.NonEmpty (NonEmptyList)
-import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
-import LinkedIn (DetachedNode)
 import LinkedIn.Types (Parser)
-import LinkedIn.Utils (queryAndDetachMany, queryAndDetachOne, queryManyAndParse, queryOneAndParse)
+import LinkedIn.Utils (queryOneAndParse)
+import LinkedIn.ArtDeco (ArtDecoPvsEntity, parseArtDecoPvsEntity)
 
 
 data ArtDecoCardElement = ArtDecoCardElement {
   pvs_entity :: ArtDecoPvsEntity
 }
 
-data ArtDecoPvsEntity = ArtDecoPvsEntity {
-  side :: Unit,
-  center :: ArtDecoCenter
-}
-
-data ArtDecoCenter = ArtDecoCenter {
-  header :: ArtDecoCenterHeader,
-  content :: ArtDecoCenterContent
-}
-
-data ArtDecoCenterHeader = ArtDecoCenterHeader {
-  bold :: DetachedNode,
-  normal :: Maybe DetachedNode,
-  light :: Maybe (NonEmptyList DetachedNode)
-}
-
-data ArtDecoCenterContent = ArtDecoCenterContent (NonEmptyList ArtDecoPvsEntitySubComponent)
-
-data ArtDecoPvsEntitySubComponent = ArtDecoPvsEntitySubComponent (Maybe DetachedNode)
-
-
-derive instance Generic ArtDecoPvsEntitySubComponent _
-derive instance Eq ArtDecoPvsEntitySubComponent
-instance Show ArtDecoPvsEntitySubComponent where
-  show = genericShow
-
-derive instance Generic ArtDecoCenterContent _
-derive instance Eq ArtDecoCenterContent
-instance Show ArtDecoCenterContent where
-  show = genericShow
-
-derive instance Generic ArtDecoCenterHeader _
-derive instance Eq ArtDecoCenterHeader
-instance Show ArtDecoCenterHeader where
-  show = genericShow
-
-derive instance Generic ArtDecoCenter _
-derive instance Eq ArtDecoCenter
-instance Show ArtDecoCenter where
-  show = genericShow
-
-derive instance Generic ArtDecoPvsEntity _
-derive instance Eq ArtDecoPvsEntity
-instance Show ArtDecoPvsEntity where
-  show = genericShow
-
 derive instance Generic ArtDecoCardElement _
 derive instance Eq ArtDecoCardElement
 instance Show ArtDecoCardElement where
   show = genericShow
 
-
-parseArtDecoPvsEntitySubComponent ∷ Parser ArtDecoPvsEntitySubComponent
-parseArtDecoPvsEntitySubComponent n = do
-  content <- queryAndDetachOne "span[aria-hidden=true]" n
-  pure $ Right $ ArtDecoPvsEntitySubComponent $ hush content
-
-parseArtDecoCenterContent ∷ Parser ArtDecoCenterContent
-parseArtDecoCenterContent n = do
-  list <- queryManyAndParse ":scope > ul > li" parseArtDecoPvsEntitySubComponent n
-  pure $ ado
-    l <- list
-  in ArtDecoCenterContent l
-
-parseArtDecoCenterHeader :: Parser ArtDecoCenterHeader
-parseArtDecoCenterHeader n = do
-  bold <- queryAndDetachOne ":scope div.t-bold > span[aria-hidden=true]" n
-  normal <- queryAndDetachOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" n
-  light <- queryAndDetachMany ":scope span.t-black--light > span[aria-hidden=true]" n
-
-  pure $ ado
-    b <- bold
-  in ArtDecoCenterHeader {bold: b, normal: hush normal, light: hush light}
-
-parseArtDecoCenter :: Parser ArtDecoCenter
-parseArtDecoCenter n = do
-  header <- queryOneAndParse ":scope > div" parseArtDecoCenterHeader n
-  content <- queryOneAndParse ":scope > div.pvs-entity__sub-components" parseArtDecoCenterContent n
-
-  pure $ ado
-    h <- header
-    c <- content
-  in ArtDecoCenter {header: h, content: c}
-
-parseArtDecoPvsEntity :: Parser ArtDecoPvsEntity
-parseArtDecoPvsEntity n = do
-  center <- queryOneAndParse ":scope > div.display-flex" parseArtDecoCenter n
-
-  pure $ ado
-    c <- center
-  in ArtDecoPvsEntity {side: unit, center: c}
-
 parseArtDecoCard :: Parser ArtDecoCardElement
 parseArtDecoCard n = do
   pvs <- queryOneAndParse ":scope div.pvs-entity--padded" parseArtDecoPvsEntity n

+ 2 - 92
src/LinkedIn/ArtDecoTab.purs

@@ -2,112 +2,22 @@ module LinkedIn.ArtDecoTab where
 
 import Prelude
 
-import Data.Either (Either(..), hush)
 import Data.Generic.Rep (class Generic)
-import Data.List.NonEmpty (NonEmptyList)
-import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
-import LinkedIn (DetachedNode)
 import LinkedIn.Types (Parser)
-import LinkedIn.Utils (queryAndDetachMany, queryAndDetachOne, queryManyAndParse, queryOneAndParse)
+import LinkedIn.Utils (queryOneAndParse)
+import LinkedIn.ArtDeco (ArtDecoPvsEntity, parseArtDecoPvsEntity)
 
 
 data ArtDecoTabElement = ArtDecoTabElement {
   pvs_entity :: ArtDecoPvsEntity
 }
 
-data ArtDecoPvsEntity = ArtDecoPvsEntity {
-  side :: Unit,
-  center :: ArtDecoCenter
-}
-
-data ArtDecoCenter = ArtDecoCenter {
-  header :: ArtDecoCenterHeader,
-  content :: ArtDecoCenterContent
-}
-
-data ArtDecoCenterHeader = ArtDecoCenterHeader {
-  bold :: DetachedNode,
-  normal :: Maybe DetachedNode,
-  light :: Maybe (NonEmptyList DetachedNode)
-}
-
-data ArtDecoCenterContent = ArtDecoCenterContent (NonEmptyList ArtDecoPvsEntitySubComponent)
-
-data ArtDecoPvsEntitySubComponent = ArtDecoPvsEntitySubComponent (Maybe DetachedNode)
-
-
-derive instance Generic ArtDecoPvsEntitySubComponent _
-derive instance Eq ArtDecoPvsEntitySubComponent
-instance Show ArtDecoPvsEntitySubComponent where
-  show = genericShow
-
-derive instance Generic ArtDecoCenterContent _
-derive instance Eq ArtDecoCenterContent
-instance Show ArtDecoCenterContent where
-  show = genericShow
-
-derive instance Generic ArtDecoCenterHeader _
-derive instance Eq ArtDecoCenterHeader
-instance Show ArtDecoCenterHeader where
-  show = genericShow
-
-derive instance Generic ArtDecoCenter _
-derive instance Eq ArtDecoCenter
-instance Show ArtDecoCenter where
-  show = genericShow
-
-derive instance Generic ArtDecoPvsEntity _
-derive instance Eq ArtDecoPvsEntity
-instance Show ArtDecoPvsEntity where
-  show = genericShow
-
 derive instance Generic ArtDecoTabElement _
 derive instance Eq ArtDecoTabElement
 instance Show ArtDecoTabElement where
   show = genericShow
 
-
-parseArtDecoPvsEntitySubComponent ∷ Parser ArtDecoPvsEntitySubComponent
-parseArtDecoPvsEntitySubComponent n = do
-  content <- queryAndDetachOne "span[aria-hidden=true]" n
-  pure $ Right $ ArtDecoPvsEntitySubComponent $ hush content
-
-parseArtDecoCenterContent ∷ Parser ArtDecoCenterContent
-parseArtDecoCenterContent n = do
-  list <- queryManyAndParse ":scope > ul > li" parseArtDecoPvsEntitySubComponent n
-  pure $ ado
-    l <- list
-  in ArtDecoCenterContent l
-
-parseArtDecoCenterHeader :: Parser ArtDecoCenterHeader
-parseArtDecoCenterHeader n = do
-  bold <- queryAndDetachOne ":scope div.t-bold > span[aria-hidden=true]" n
-  normal <- queryAndDetachOne ":scope span.t-normal:not(t-black--light) > span[aria-hidden=true]" n
-  light <- queryAndDetachMany ":scope span.t-black--light > span[aria-hidden=true]" n
-
-  pure $ ado
-    b <- bold
-  in ArtDecoCenterHeader {bold: b, normal: hush normal, light: hush light}
-
-parseArtDecoCenter :: Parser ArtDecoCenter
-parseArtDecoCenter n = do
-  header <- queryOneAndParse ":scope > div" parseArtDecoCenterHeader n
-  content <- queryOneAndParse ":scope > div.pvs-entity__sub-components" parseArtDecoCenterContent n
-
-  pure $ ado
-    h <- header
-    c <- content
-  in ArtDecoCenter {header: h, content: c}
-
-parseArtDecoPvsEntity :: Parser ArtDecoPvsEntity
-parseArtDecoPvsEntity n = do
-  center <- queryOneAndParse ":scope > div.display-flex" parseArtDecoCenter n
-
-  pure $ ado
-    c <- center
-  in ArtDecoPvsEntity {side: unit, center: c}
-
 parseArtDecoTab :: Parser ArtDecoTabElement
 parseArtDecoTab n = do
   pvs <- queryOneAndParse ":scope div.pvs-entity--padded" parseArtDecoPvsEntity n

+ 3 - 3
src/LinkedIn/Profile/Project.purs

@@ -12,10 +12,10 @@ import Data.List.NonEmpty (NonEmptyList)
 import Data.List.NonEmpty as NEL
 import Data.Maybe (Maybe(..))
 import Data.Show.Generic (genericShow)
-import Debug (trace)
 import LinkedIn (DetachedNode)
-import LinkedIn.ArtDecoCard (ArtDecoCardElement(..), ArtDecoCenter(..), ArtDecoCenterContent(..), ArtDecoCenterHeader(..), ArtDecoPvsEntity(..), ArtDecoPvsEntitySubComponent(..))
-import LinkedIn.UIElements.Types (Duration, TimeSpan, UIElement(..))
+import LinkedIn.ArtDecoCard (ArtDecoCardElement(..))
+import LinkedIn.ArtDeco (ArtDecoCenter(..), ArtDecoCenterContent(..), ArtDecoCenterHeader(..), ArtDecoPvsEntity(..), ArtDecoPvsEntitySubComponent(..))
+import LinkedIn.UIElements.Types (TimeSpan, UIElement(..))
 import Parsing (ParseError)
 
 data Project = Project {

+ 2 - 1
src/LinkedIn/Profile/Skill.purs

@@ -9,7 +9,8 @@ import Data.Foldable (findMap)
 import Data.Generic.Rep (class Generic)
 import Data.Maybe (Maybe(..))
 import Data.Show.Generic (genericShow)
-import LinkedIn.ArtDecoTab (ArtDecoTabElement(..), ArtDecoCenter(..), ArtDecoCenterHeader(..), ArtDecoPvsEntity(..))
+import LinkedIn.ArtDecoTab (ArtDecoTabElement(..))
+import LinkedIn.ArtDeco (ArtDecoCenter(..), ArtDecoCenterHeader(..), ArtDecoPvsEntity(..))
 import LinkedIn.UIElements.Types (UIElement(..))
 
 data Skill = Skill {

+ 2 - 1
src/LinkedIn/Profile/WorkExperience.purs

@@ -12,7 +12,8 @@ import Data.List.NonEmpty as NEL
 import Data.Maybe (Maybe(..))
 import Data.Show.Generic (genericShow)
 import LinkedIn (DetachedNode)
-import LinkedIn.ArtDecoCard (ArtDecoCardElement(..), ArtDecoCenter(..), ArtDecoCenterContent(..), ArtDecoCenterHeader(..), ArtDecoPvsEntity(..), ArtDecoPvsEntitySubComponent(..))
+import LinkedIn.ArtDecoCard (ArtDecoCardElement(..))
+import LinkedIn.ArtDeco (ArtDecoCenter(..), ArtDecoCenterContent(..), ArtDecoCenterHeader(..), ArtDecoPvsEntity(..), ArtDecoPvsEntitySubComponent(..))
 import LinkedIn.UIElements.Types (Duration, TimeSpan, UIElement(..))
 import LinkedIn.Profile.Utils
 import Parsing (ParseError)

+ 1 - 0
test/ArtDecoCard.purs

@@ -1,5 +1,6 @@
 module Test.ArtDecoCard where
 
+import LinkedIn.ArtDeco
 import LinkedIn.ArtDecoCard
 import Prelude