ArtDecoTab.purs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. module LinkedIn.ArtDecoTab where
  2. import Prelude
  3. import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
  4. import Data.Generic.Rep (class Generic)
  5. import Data.Lens (Lens', lens', toListOf, view)
  6. import Data.Lens.Record (prop)
  7. import Data.List (List)
  8. import Data.List as L
  9. import Data.List.Types (NonEmptyList)
  10. import Data.Maybe (Maybe)
  11. import Data.Show.Generic (genericShow)
  12. import Data.Traversable (class Traversable, sequence, traverseDefault)
  13. import Data.Tuple (Tuple(..))
  14. import LinkedIn.ArtDeco (ArtDecoPvsEntity, _pvs_to_header_bold, _pvs_to_header_light, _pvs_to_header_normal, _pvs_to_subcomponents, queryArtDecoPvsEntity)
  15. import LinkedIn.QueryRunner (QueryRunner, subQueryOne)
  16. import Type.Proxy (Proxy(..))
  17. import Web.DOM (Node)
  18. data ArtDecoTabElement a = ArtDecoTabElement {
  19. pvs_entity :: ArtDecoPvsEntity a
  20. }
  21. derive instance Generic (ArtDecoTabElement a) _
  22. derive instance Eq a => Eq (ArtDecoTabElement a)
  23. instance Show a => Show (ArtDecoTabElement a) where
  24. show = genericShow
  25. derive instance Functor ArtDecoTabElement
  26. instance Foldable ArtDecoTabElement where
  27. foldMap f (ArtDecoTabElement {pvs_entity}) = foldMap f pvs_entity
  28. foldl = \x -> foldlDefault x
  29. foldr = \x -> foldrDefault x
  30. instance Traversable ArtDecoTabElement where
  31. sequence (ArtDecoTabElement {pvs_entity}) = ado
  32. p <- sequence pvs_entity
  33. in ArtDecoTabElement {pvs_entity: p}
  34. traverse = \x -> traverseDefault x
  35. queryArtDecoTab :: QueryRunner (ArtDecoTabElement Node)
  36. queryArtDecoTab n = do
  37. pvs_entity <- subQueryOne queryArtDecoPvsEntity ":scope div.pvs-entity--padded" n
  38. pure $ ArtDecoTabElement {pvs_entity}
  39. toHeaderBold ∷ ∀ a. ArtDecoTabElement a → a
  40. toHeaderBold = view $ _tab_to_pvs_entity <<< _pvs_to_header_bold
  41. toHeaderNormal ∷ ∀ a. ArtDecoTabElement a → Maybe a
  42. toHeaderNormal = view $ _tab_to_pvs_entity <<< _pvs_to_header_normal
  43. toHeaderLight ∷ ∀ a. ArtDecoTabElement a → Maybe (NonEmptyList a)
  44. toHeaderLight = view $ _tab_to_pvs_entity <<< _pvs_to_header_light
  45. toCenterContent ∷ ∀ a. ArtDecoTabElement a → List a
  46. toCenterContent c = L.catMaybes $ toContent c
  47. where
  48. toContent = toListOf $ _tab_to_pvs_entity <<< _pvs_to_subcomponents
  49. _tab :: forall a. Lens' (ArtDecoTabElement a) { pvs_entity ∷ ArtDecoPvsEntity a }
  50. _tab = lens' \(ArtDecoTabElement t) -> Tuple t \t' -> ArtDecoTabElement t'
  51. _tab_to_pvs_entity :: forall a. Lens' (ArtDecoTabElement a) (ArtDecoPvsEntity a)
  52. _tab_to_pvs_entity = _tab <<< prop (Proxy :: Proxy "pvs_entity")