Kaynağa Gözat

Add a "getContext" function

jherve 1 yıl önce
ebeveyn
işleme
61b064e3e3
3 değiştirilmiş dosya ile 19 ekleme ve 4 silme
  1. 1 0
      spago.dhall
  2. 3 3
      src/Content.purs
  3. 15 1
      src/LinkedIn.purs

+ 1 - 0
spago.dhall

@@ -30,6 +30,7 @@ You can edit this file as you like.
   , "transformers"
   , "tuples"
   , "web-dom"
+  , "web-url"
   , "yoga-tree"
   ]
 , packages = ./packages.dhall

+ 3 - 3
src/Content.purs

@@ -6,7 +6,7 @@ import Browser.DOM (getBrowserDom)
 import Effect (Effect)
 import Effect.Class.Console (logShow)
 import Effect.Console (log)
-import LinkedIn (run, runToDetached)
+import LinkedIn (getContext, run)
 import LinkedIn.Page.JobOffer (JobOfferPage)
 import LinkedIn.Page.Projects (ProjectsPage)
 import LinkedIn.Page.Skills (SkillsPage)
@@ -19,9 +19,9 @@ main = do
 
   dom <- getBrowserDom
 
+  getContext dom >>= logShow
+
   run (Proxy :: Proxy WorkExperiencesPage) dom >>= logShow
   run (Proxy :: Proxy SkillsPage) dom >>= logShow
   run (Proxy :: Proxy ProjectsPage) dom >>= logShow
   run (Proxy :: Proxy JobOfferPage) dom >>= logShow
-
-  runToDetached (Proxy :: Proxy JobOfferPage) dom >>= logShow

+ 15 - 1
src/LinkedIn.purs

@@ -1,18 +1,32 @@
-module LinkedIn (run, runToDetached) where
+module LinkedIn (run, runToDetached, getContext) where
 
 import Prelude
 
 import Data.Either (Either(..))
+import Data.Maybe (Maybe(..))
 import Data.Traversable (class Traversable, traverse)
 import Effect (Effect)
 import LinkedIn.DetachedNode (DetachedNode, toDetached)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible as LE
+import LinkedIn.PageUrl (PageUrl, pageUrlP)
 import LinkedIn.QueryRunner (QueryError, QueryRunner', runQuery)
 import LinkedIn.UI.Elements.Parser (fromDetachedToUI)
 import LinkedIn.UI.Elements.Types (UIElement)
+import Parsing (runParser)
 import Type.Proxy (Proxy)
 import Web.DOM (Document, Node)
+import Web.DOM.Document (url)
+import Web.URL as U
+
+getContext ∷ Document → Effect (Either String PageUrl)
+getContext dom = do
+  u <- url dom
+  pure $ case U.fromAbsolute u of
+    Nothing -> Left "No URL found"
+    Just u' -> case runParser (U.pathname u') pageUrlP of
+      Left _ -> Left "Unexpected URL"
+      Right page -> Right page
 
 run :: forall a t.
   Traversable t