Explorar o código

Replace queryX by query almost everywhere

jherve hai 1 ano
pai
achega
680e42f4ea

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

@@ -2,21 +2,18 @@ module LinkedIn.Page.Projects where
 
 
 import Prelude
 import Prelude
 
 
-import Data.Either (Either)
 import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
 import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
 import Data.Generic.Rep (class Generic)
 import Data.Generic.Rep (class Generic)
 import Data.List.Types (NonEmptyList)
 import Data.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 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.Extractible (class Extractible)
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Output.Types (Output(..))
-import LinkedIn.Profile.Project (Project)
 import LinkedIn.Profile.Project as PP
 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))
 data ProjectsPage a = ProjectsPage (NonEmptyList (ArtDecoCardElement a))
 
 
@@ -39,10 +36,9 @@ instance Traversable ProjectsPage where
 
 
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
-
 instance CanBeQueried Document ProjectsPage where
 instance CanBeQueried Document ProjectsPage where
   query n = do
   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
     pure $ ProjectsPage cards
 
 
 instance Extractible ProjectsPage where
 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.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 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.Extractible (class Extractible)
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.Profile.Skill as PS
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.QueryRunner (subQueryMany)
-import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement, queryArtDecoTab)
+import LinkedIn.UI.Components.ArtDecoTab (ArtDecoTabElement)
 import Web.DOM (Document)
 import Web.DOM (Document)
 
 
 data SkillsPage a = SkillsPage (NonEmptyList (ArtDecoTabElement a))
 data SkillsPage a = SkillsPage (NonEmptyList (ArtDecoTabElement a))
@@ -38,7 +38,7 @@ instance Traversable SkillsPage where
 
 
 instance CanBeQueried Document SkillsPage where
 instance CanBeQueried Document SkillsPage where
   query n = do
   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
     pure $ SkillsPage tabs
 
 
 instance Extractible SkillsPage where
 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.List.Types (NonEmptyList)
 import Data.Show.Generic (genericShow)
 import Data.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 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.Extractible (class Extractible)
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Output.Types (Output(..))
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.Profile.WorkExperience as PWE
 import LinkedIn.QueryRunner (subQueryMany)
 import LinkedIn.QueryRunner (subQueryMany)
-import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement, queryArtDecoCard)
+import LinkedIn.UI.Components.ArtDecoCard (ArtDecoCardElement)
 import Web.DOM (Document)
 import Web.DOM (Document)
 
 
 data WorkExperiencesPage a = WorkExperiencesPage (NonEmptyList (ArtDecoCardElement a))
 data WorkExperiencesPage a = WorkExperiencesPage (NonEmptyList (ArtDecoCardElement a))
@@ -38,7 +38,7 @@ instance Traversable WorkExperiencesPage where
 
 
 instance CanBeQueried Document WorkExperiencesPage where
 instance CanBeQueried Document WorkExperiencesPage where
   query n = do
   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
     pure $ WorkExperiencesPage cards
 
 
 instance Extractible WorkExperiencesPage where
 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.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Tuple (Tuple(..))
 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.QueryRunner (QueryRunner', ignoreNotFound, queryAll, queryOne, subQueryMany, subQueryOne)
 import LinkedIn.Queryable (class Queryable)
 import LinkedIn.Queryable (class Queryable)
 import Type.Proxy (Proxy(..))
 import Type.Proxy (Proxy(..))
@@ -59,7 +59,9 @@ instance Traversable ArtDecoPvsEntitySubComponent where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoPvsEntitySubComponent where
 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 Generic (ArtDecoCenterContent a) _
 derive instance Eq a => Eq(ArtDecoCenterContent a)
 derive instance Eq a => Eq(ArtDecoCenterContent a)
@@ -81,7 +83,9 @@ instance Traversable ArtDecoCenterContent where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoCenterContent where
 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 Generic (ArtDecoCenterHeader a) _
 derive instance Eq a => Eq(ArtDecoCenterHeader a)
 derive instance Eq a => Eq(ArtDecoCenterHeader a)
@@ -105,7 +109,16 @@ instance Traversable ArtDecoCenterHeader where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoCenterHeader where
 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 Generic (ArtDecoCenter a) _
 derive instance Eq a => Eq(ArtDecoCenter a)
 derive instance Eq a => Eq(ArtDecoCenter a)
@@ -128,7 +141,11 @@ instance Traversable ArtDecoCenter where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoCenter where
 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 Generic (ArtDecoPvsEntity a) _
 derive instance Eq a => Eq(ArtDecoPvsEntity a)
 derive instance Eq a => Eq(ArtDecoPvsEntity a)
@@ -151,41 +168,9 @@ instance Traversable ArtDecoPvsEntity where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoPvsEntity where
 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 :: forall a. Lens' (ArtDecoPvsEntity a) { center ∷ ArtDecoCenter a , side ∷ Unit }
 _pvs_entity = lens'
 _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.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Tuple (Tuple(..))
 import Data.Tuple (Tuple(..))
-import LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
 import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
 import LinkedIn.Queryable (class Queryable)
 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)
 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
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoCardElement where
 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 ∷ ∀ a. ArtDecoCardElement a → a
 toHeaderBold = view $ _card_to_pvs_entity <<< _pvs_to_header_bold
 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.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverseDefault)
 import Data.Tuple (Tuple(..))
 import Data.Tuple (Tuple(..))
-import LinkedIn.CanBeQueried (class CanBeQueried)
+import LinkedIn.CanBeQueried (class CanBeQueried, query)
 import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
 import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
 import LinkedIn.Queryable (class Queryable)
 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)
 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
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q ArtDecoTabElement where
 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 ∷ ∀ a. ArtDecoTabElement a → a
 toHeaderBold = view $ _tab_to_pvs_entity <<< _pvs_to_header_bold
 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.Show.Generic (genericShow)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import Data.Traversable (class Traversable, sequence, traverse, traverseDefault)
 import Data.Tuple (Tuple(..))
 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.QueryRunner (QueryError(..), QueryRunner', ignoreNotFound, queryAll, queryOne, querySelf, queryText)
 import LinkedIn.Queryable (class Queryable, toNode)
 import LinkedIn.Queryable (class Queryable, toNode)
 import Type.Proxy (Proxy(..))
 import Type.Proxy (Proxy(..))
@@ -106,7 +106,12 @@ instance Traversable TopCardPrimaryDescription where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q TopCardPrimaryDescription where
 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 Generic (TopCardInsight a) _
 derive instance Eq a => Eq (TopCardInsight a)
 derive instance Eq a => Eq (TopCardInsight a)
@@ -129,7 +134,14 @@ instance Traversable TopCardInsight where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q TopCardInsight where
 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 Generic (TopCardInsightContent a) _
 derive instance Eq a => Eq (TopCardInsightContent a)
 derive instance Eq a => Eq (TopCardInsightContent a)
@@ -156,7 +168,10 @@ instance Traversable TopCardInsightContent where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q TopCardInsightContent where
 instance Queryable q => CanBeQueried q TopCardInsightContent where
-  query = queryTopCardInsightContent
+  query n =
+    queryTopCardInsightContentSecondary n
+    <|> queryTopCardInsightContentButton n
+    <|> queryTopCardInsightContentSingle n
 
 
 derive instance Generic (TopCardSecondaryInsight a) _
 derive instance Generic (TopCardSecondaryInsight a) _
 derive instance Eq a => Eq (TopCardSecondaryInsight a)
 derive instance Eq a => Eq (TopCardSecondaryInsight a)
@@ -178,7 +193,7 @@ instance Traversable TopCardSecondaryInsight where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q TopCardSecondaryInsight where
 instance Queryable q => CanBeQueried q TopCardSecondaryInsight where
-  query = queryTopCardSecondaryInsight
+  query n = queryTopCardSecondaryInsightNested n <|> queryTopCardSecondaryInsightPlain n
 
 
 derive instance Generic (TopCardAction a) _
 derive instance Generic (TopCardAction a) _
 derive instance Eq a => Eq (TopCardAction a)
 derive instance Eq a => Eq (TopCardAction a)
@@ -200,12 +215,9 @@ instance Traversable TopCardAction where
   traverse = \x -> traverseDefault x
   traverse = \x -> traverseDefault x
 
 
 instance Queryable q => CanBeQueried q TopCardAction where
 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 :: forall q. Queryable q => QueryRunner' q (TopCardSecondaryInsight Node)
 queryTopCardSecondaryInsightNested n = do
 queryTopCardSecondaryInsightNested n = do
@@ -217,10 +229,6 @@ queryTopCardSecondaryInsightPlain n = do
   n' <- querySelf n
   n' <- querySelf n
   pure $ TopCardSecondaryInsightPlain 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 :: forall q. Queryable q => QueryRunner' q (TopCardInsightContent Node)
 queryTopCardInsightContentSingle n = do
 queryTopCardInsightContentSingle n = do
   n' <- querySelf n
   n' <- querySelf n
@@ -239,43 +247,19 @@ queryTopCardInsightContentButton n =
 queryTopCardInsightContentSecondary :: forall q. Queryable q => QueryRunner' q (TopCardInsightContent Node)
 queryTopCardInsightContentSecondary :: forall q. Queryable q => QueryRunner' q (TopCardInsightContent Node)
 queryTopCardInsightContentSecondary n = do
 queryTopCardInsightContentSecondary n = do
   primary <- queryOne ":scope > span:first-child span[aria-hidden=true]" n
   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
                 =<< queryAll ":scope > span.job-details-jobs-unified-top-card__job-insight-view-model-secondary" n
   pure $ TopCardInsightContentSecondary {primary, secondary}
   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 :: forall q. Queryable q => QueryRunner' q (JobsUnifiedTopCardElement Node)
 queryJobsUnifiedTopCardElement n = do
 queryJobsUnifiedTopCardElement n = do
   header <- queryOne "h1.job-details-jobs-unified-top-card__job-title" n
   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
                           =<< queryOne "div.job-details-jobs-unified-top-card__primary-description-container > div" n
   insights <- ignoreNotFound
   insights <- ignoreNotFound
-                <<< traverse queryTopCardInsight
+                <<< traverse query
                 =<< queryAll "li.job-details-jobs-unified-top-card__job-insight" n
                 =<< 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 {
   pure $ JobsUnifiedTopCardElement {
     header,
     header,