Переглянути джерело

Replace queryX by query almost everywhere

jherve 1 рік тому
батько
коміт
30b758a0e4

+ 5 - 9
src/LinkedIn/Page/Projects.purs

@@ -2,21 +2,18 @@ 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 LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Output.Types (Output(..))
-import LinkedIn.Profile.Project (Project)
 import LinkedIn.Profile.Project as PP
-import LinkedIn.QueryRunner (QueryRunner', subQueryMany)
-import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
-import LinkedIn.UI.Elements.Types (UIElement)
-import Web.DOM (Document, Node)
+import LinkedIn.QueryRunner (subQueryMany)
+import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement)
+import Web.DOM (Document)
 
 data ProjectsPage a = ProjectsPage (NonEmptyList (ArtDecoCardElement a))
 
@@ -39,10 +36,9 @@ instance Traversable ProjectsPage where
 
   traverse = \x -> traverseDefault x
 
-
 instance CanBeQueried Document ProjectsPage where
   query n = do
-    cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
+    cards <- subQueryMany query "section.artdeco-card > div ~ div > div > div > ul > li" n
     pure $ ProjectsPage cards
 
 instance Extractible ProjectsPage where

+ 3 - 3
src/LinkedIn/Page/Skills.purs

@@ -7,12 +7,12 @@ 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 LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.QueryRunner (subQueryMany)
-import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
+import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement)
 import Web.DOM (Document)
 
 data SkillsPage a = SkillsPage (NonEmptyList (ArtDecoTabElement a))
@@ -38,7 +38,7 @@ instance Traversable SkillsPage where
 
 instance CanBeQueried Document SkillsPage where
   query n = do
-    tabs <- subQueryMany queryArtDecoTab "div.artdeco-tabs > div > div > div > div > ul > li" n
+    tabs <- subQueryMany query "div.artdeco-tabs > div > div > div > div > ul > li" n
     pure $ SkillsPage tabs
 
 instance Extractible SkillsPage where

+ 3 - 3
src/LinkedIn/Page/WorkExperiences.purs

@@ -7,12 +7,12 @@ 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 LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (subQueryMany)
-import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
+import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement)
 import Web.DOM (Document)
 
 data WorkExperiencesPage a = WorkExperiencesPage (NonEmptyList (ArtDecoCardElement a))
@@ -38,7 +38,7 @@ instance Traversable WorkExperiencesPage where
 
 instance CanBeQueried Document WorkExperiencesPage where
   query n = do
-    cards <- subQueryMany queryArtDecoCard "section.artdeco-card > div ~ div > div > div > ul > li" n
+    cards <- subQueryMany query "section.artdeco-card > div ~ div > div > div > ul > li" n
     pure $ WorkExperiencesPage cards
 
 instance Extractible WorkExperiencesPage where

+ 25 - 40
src/LinkedIn/UI/Components/ArtDeco.purs

@@ -11,7 +11,7 @@ import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Tuple (Tuple(..))
-import LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.QueryRunner (QueryRunner', ignoreNotFound, queryAll, queryOne, subQueryMany, subQueryOne)
 import LinkedIn.Queryable (class Queryable)
 import Type.Proxy (Proxy(..))
@@ -59,7 +59,9 @@ instance Traversable ArtDecoPvsEntitySubComponent where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoPvsEntitySubComponent where
-  query = queryArtDecoPvsEntitySubComponent
+  query n = do
+    content <- ignoreNotFound $ queryOne "span[aria-hidden=true]" n
+    pure $ ArtDecoPvsEntitySubComponent content
 
 derive instance Generic (ArtDecoCenterContent a) _
 derive instance Eq a => Eq(ArtDecoCenterContent a)
@@ -81,7 +83,9 @@ instance Traversable ArtDecoCenterContent where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoCenterContent where
-  query = queryArtDecoCenterContent
+  query n = do
+    sc <- subQueryMany query ":scope > ul > li" n
+    pure $ ArtDecoCenterContent sc
 
 derive instance Generic (ArtDecoCenterHeader a) _
 derive instance Eq a => Eq(ArtDecoCenterHeader a)
@@ -105,7 +109,16 @@ instance Traversable ArtDecoCenterHeader where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoCenterHeader where
-  query = queryArtDecoCenterHeader
+  query 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}
 
 derive instance Generic (ArtDecoCenter a) _
 derive instance Eq a => Eq(ArtDecoCenter a)
@@ -128,7 +141,11 @@ instance Traversable ArtDecoCenter where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoCenter where
-  query = queryArtDecoCenter
+  query n = do
+    header <- subQueryOne query ":scope > div" n
+    content <- subQueryOne query ":scope > div.pvs-entity__sub-components" n
+
+    pure $ ArtDecoCenter {header, content}
 
 derive instance Generic (ArtDecoPvsEntity a) _
 derive instance Eq a => Eq(ArtDecoPvsEntity a)
@@ -151,41 +168,9 @@ instance Traversable ArtDecoPvsEntity where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoPvsEntity where
-  query = queryArtDecoPvsEntity
-
-queryArtDecoPvsEntitySubComponent ∷ forall q. Queryable q=> QueryRunner' q (ArtDecoPvsEntitySubComponent Node)
-queryArtDecoPvsEntitySubComponent n = do
-  content <- ignoreNotFound $ queryOne "span[aria-hidden=true]" n
-  pure $ ArtDecoPvsEntitySubComponent content
-
-queryArtDecoCenterContent :: forall q. Queryable q => QueryRunner' q (ArtDecoCenterContent Node)
-queryArtDecoCenterContent n = do
-  sc <- subQueryMany queryArtDecoPvsEntitySubComponent ":scope > ul > li" n
-  pure $ ArtDecoCenterContent sc
-
-queryArtDecoCenterHeader :: forall q. Queryable q => QueryRunner' q (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}
-
-queryArtDecoCenter :: forall q. Queryable q => QueryRunner' q (ArtDecoCenter Node)
-queryArtDecoCenter n = do
-  header <- subQueryOne queryArtDecoCenterHeader ":scope > div" n
-  content <- subQueryOne queryArtDecoCenterContent ":scope > div.pvs-entity__sub-components" n
-
-  pure $ ArtDecoCenter {header, content}
-
-queryArtDecoPvsEntity :: forall q. Queryable q => QueryRunner' q (ArtDecoPvsEntity Node)
-queryArtDecoPvsEntity n = do
-  center <- subQueryOne queryArtDecoCenter ":scope > div.display-flex" n
-  pure $ ArtDecoPvsEntity {side: unit, center}
+  query n = do
+    center <- subQueryOne query ":scope > div.display-flex" n
+    pure $ ArtDecoPvsEntity {side: unit, center}
 
 _pvs_entity :: forall a. Lens' (ArtDecoPvsEntity a) { center ∷ ArtDecoCenter a , side ∷ Unit }
 _pvs_entity = lens'

+ 4 - 7
src/LinkedIn/UI/Components/ArtDecoCard.purs

@@ -13,7 +13,7 @@ import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Tuple (Tuple(..))
-import LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
 import LinkedIn.Queryable (class Queryable)
 import LinkedIn.UI.Components.ArtDeco (ArtDecoPvsEntity, _pvs_to_header_bold, _pvs_to_header_light, _pvs_to_header_normal, _pvs_to_subcomponents, queryArtDecoPvsEntity)
@@ -45,12 +45,9 @@ instance Traversable ArtDecoCardElement where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoCardElement where
-  query = queryArtDecoCard
-
-queryArtDecoCard :: forall q. Queryable q => QueryRunner' q (ArtDecoCardElement Node)
-queryArtDecoCard n = do
-  pvs_entity <- subQueryOne queryArtDecoPvsEntity ":scope div.pvs-entity--padded" n
-  pure $ ArtDecoCardElement {pvs_entity}
+  query n = do
+    pvs_entity <- subQueryOne query ":scope div.pvs-entity--padded" n
+    pure $ ArtDecoCardElement {pvs_entity}
 
 toHeaderBold ∷ ∀ a. ArtDecoCardElement a → a
 toHeaderBold = view $ _card_to_pvs_entity <<< _pvs_to_header_bold

+ 4 - 7
src/LinkedIn/UI/Components/ArtDecoTab.purs

@@ -13,7 +13,7 @@ import Data.Maybe (Maybe)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Tuple (Tuple(..))
-import LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
 import LinkedIn.Queryable (class Queryable)
 import LinkedIn.UI.Components.ArtDeco (ArtDecoPvsEntity, _pvs_to_header_bold, _pvs_to_header_light, _pvs_to_header_normal, _pvs_to_subcomponents, queryArtDecoPvsEntity)
@@ -45,12 +45,9 @@ instance Traversable ArtDecoTabElement where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q ArtDecoTabElement where
-  query = queryArtDecoTab
-
-queryArtDecoTab :: forall q. Queryable q => QueryRunner' q (ArtDecoTabElement Node)
-queryArtDecoTab n = do
-  pvs_entity <- subQueryOne queryArtDecoPvsEntity ":scope div.pvs-entity--padded" n
-  pure $ ArtDecoTabElement {pvs_entity}
+  query n = do
+    pvs_entity <- subQueryOne query ":scope div.pvs-entity--padded" n
+    pure $ ArtDecoTabElement {pvs_entity}
 
 toHeaderBold ∷ ∀ a. ArtDecoTabElement a → a
 toHeaderBold = view $ _tab_to_pvs_entity <<< _pvs_to_header_bold

+ 27 - 43
src/LinkedIn/UI/Components/JobsUnifiedTopCard.purs

@@ -13,7 +13,7 @@ import Data.Maybe (Maybe(..))
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import Data.Tuple (Tuple(..))
-import LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.QueryRunner (QueryError(..), QueryRunner', ignoreNotFound, queryAll, queryOne, querySelf, queryText)
 import LinkedIn.Queryable (class Queryable, toNode)
 import Type.Proxy (Proxy(..))
@@ -106,7 +106,12 @@ instance Traversable TopCardPrimaryDescription where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q TopCardPrimaryDescription where
-  query = queryTopCardPrimaryDescription
+  query n = do
+    link <- queryOne ":scope > a" n
+    text <- queryText 1 n
+    tvmText <- ignoreNotFound $ queryAll "span.tvm__text" n
+
+    pure $ TopCardPrimaryDescription {link, text, tvmText: tvmText}
 
 derive instance Generic (TopCardInsight a) _
 derive instance Eq a => Eq (TopCardInsight a)
@@ -129,7 +134,14 @@ instance Traversable TopCardInsight where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q TopCardInsight where
-  query = queryTopCardInsight
+  query n = do
+    icon <- queryOne ":scope li-icon" n <|> queryOne ":scope svg" n
+    content <- query =<< getContentNode n
+
+    pure $ TopCardInsight {icon, content}
+
+    where
+      getContentNode n' = queryOne ":scope > span" n' <|> queryOne ":scope > button" n'
 
 derive instance Generic (TopCardInsightContent a) _
 derive instance Eq a => Eq (TopCardInsightContent a)
@@ -156,7 +168,10 @@ instance Traversable TopCardInsightContent where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q TopCardInsightContent where
-  query = queryTopCardInsightContent
+  query n =
+    queryTopCardInsightContentSecondary n
+    <|> queryTopCardInsightContentButton n
+    <|> queryTopCardInsightContentSingle n
 
 derive instance Generic (TopCardSecondaryInsight a) _
 derive instance Eq a => Eq (TopCardSecondaryInsight a)
@@ -178,7 +193,7 @@ instance Traversable TopCardSecondaryInsight where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q TopCardSecondaryInsight where
-  query = queryTopCardSecondaryInsight
+  query n = queryTopCardSecondaryInsightNested n <|> queryTopCardSecondaryInsightPlain n
 
 derive instance Generic (TopCardAction a) _
 derive instance Eq a => Eq (TopCardAction a)
@@ -200,12 +215,9 @@ instance Traversable TopCardAction where
   traverse = \x -> traverseDefault x
 
 instance Queryable q => CanBeQueried q TopCardAction where
-  query = queryTopCardAction
-
-queryTopCardAction :: forall q. Queryable q => QueryRunner' q (TopCardAction Node)
-queryTopCardAction n = do
-  n' <- querySelf n
-  pure $ TopCardActionButton n'
+  query n = do
+    n' <- querySelf n
+    pure $ TopCardActionButton n'
 
 queryTopCardSecondaryInsightNested :: forall q. Queryable q => QueryRunner' q (TopCardSecondaryInsight Node)
 queryTopCardSecondaryInsightNested n = do
@@ -217,10 +229,6 @@ queryTopCardSecondaryInsightPlain n = do
   n' <- querySelf n
   pure $ TopCardSecondaryInsightPlain n'
 
-queryTopCardSecondaryInsight :: forall q. Queryable q => QueryRunner' q (TopCardSecondaryInsight Node)
-queryTopCardSecondaryInsight n =
-  queryTopCardSecondaryInsightNested n <|> queryTopCardSecondaryInsightPlain n
-
 queryTopCardInsightContentSingle :: forall q. Queryable q => QueryRunner' q (TopCardInsightContent Node)
 queryTopCardInsightContentSingle n = do
   n' <- querySelf n
@@ -239,43 +247,19 @@ queryTopCardInsightContentButton n =
 queryTopCardInsightContentSecondary :: forall q. Queryable q => QueryRunner' q (TopCardInsightContent Node)
 queryTopCardInsightContentSecondary n = do
   primary <- queryOne ":scope > span:first-child span[aria-hidden=true]" n
-  secondary <- traverse queryTopCardSecondaryInsight
+  secondary <- traverse query
                 =<< queryAll ":scope > span.job-details-jobs-unified-top-card__job-insight-view-model-secondary" n
   pure $ TopCardInsightContentSecondary {primary, secondary}
 
-queryTopCardInsightContent :: forall q. Queryable q => QueryRunner' q (TopCardInsightContent Node)
-queryTopCardInsightContent n =
-  queryTopCardInsightContentSecondary n
-  <|> queryTopCardInsightContentButton n
-  <|> queryTopCardInsightContentSingle n
-
-queryTopCardInsight :: forall q. Queryable q => QueryRunner' q (TopCardInsight Node)
-queryTopCardInsight n = do
-  icon <- queryOne ":scope li-icon" n <|> queryOne ":scope svg" n
-  content <- queryTopCardInsightContent =<< getContentNode n
-
-  pure $ TopCardInsight {icon, content}
-
-  where
-    getContentNode n' = queryOne ":scope > span" n' <|> queryOne ":scope > button" n'
-
-queryTopCardPrimaryDescription :: forall q. Queryable q => QueryRunner' q (TopCardPrimaryDescription Node)
-queryTopCardPrimaryDescription n = do
-  link <- queryOne ":scope > a" n
-  text <- queryText 1 n
-  tvmText <- ignoreNotFound $ queryAll "span.tvm__text" n
-
-  pure $ TopCardPrimaryDescription {link, text, tvmText: tvmText}
-
 queryJobsUnifiedTopCardElement :: forall q. Queryable q => QueryRunner' q (JobsUnifiedTopCardElement Node)
 queryJobsUnifiedTopCardElement n = do
   header <- queryOne "h1.job-details-jobs-unified-top-card__job-title" n
-  primaryDescription <- queryTopCardPrimaryDescription
+  primaryDescription <- query
                           =<< queryOne "div.job-details-jobs-unified-top-card__primary-description-container > div" n
   insights <- ignoreNotFound
-                <<< traverse queryTopCardInsight
+                <<< traverse query
                 =<< queryAll "li.job-details-jobs-unified-top-card__job-insight" n
-  actions <- ignoreNotFound <<< traverse queryTopCardAction =<< queryAll ".mt5 button" n
+  actions <- ignoreNotFound <<< traverse query =<< queryAll ".mt5 button" n
 
   pure $ JobsUnifiedTopCardElement {
     header,