ソースを参照

Add a "getContext" function

jherve 1 年間 前
コミット
61b064e3e3
3 ファイル変更19 行追加4 行削除
  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"
   , "transformers"
   , "tuples"
   , "tuples"
   , "web-dom"
   , "web-dom"
+  , "web-url"
   , "yoga-tree"
   , "yoga-tree"
   ]
   ]
 , packages = ./packages.dhall
 , packages = ./packages.dhall

+ 3 - 3
src/Content.purs

@@ -6,7 +6,7 @@ import Browser.DOM (getBrowserDom)
 import Effect (Effect)
 import Effect (Effect)
 import Effect.Class.Console (logShow)
 import Effect.Class.Console (logShow)
 import Effect.Console (log)
 import Effect.Console (log)
-import LinkedIn (run, runToDetached)
+import LinkedIn (getContext, run)
 import LinkedIn.Page.JobOffer (JobOfferPage)
 import LinkedIn.Page.JobOffer (JobOfferPage)
 import LinkedIn.Page.Projects (ProjectsPage)
 import LinkedIn.Page.Projects (ProjectsPage)
 import LinkedIn.Page.Skills (SkillsPage)
 import LinkedIn.Page.Skills (SkillsPage)
@@ -19,9 +19,9 @@ main = do
 
 
   dom <- getBrowserDom
   dom <- getBrowserDom
 
 
+  getContext dom >>= logShow
+
   run (Proxy :: Proxy WorkExperiencesPage) dom >>= logShow
   run (Proxy :: Proxy WorkExperiencesPage) dom >>= logShow
   run (Proxy :: Proxy SkillsPage) dom >>= logShow
   run (Proxy :: Proxy SkillsPage) dom >>= logShow
   run (Proxy :: Proxy ProjectsPage) dom >>= logShow
   run (Proxy :: Proxy ProjectsPage) dom >>= logShow
   run (Proxy :: Proxy JobOfferPage) 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 Prelude
 
 
 import Data.Either (Either(..))
 import Data.Either (Either(..))
+import Data.Maybe (Maybe(..))
 import Data.Traversable (class Traversable, traverse)
 import Data.Traversable (class Traversable, traverse)
 import Effect (Effect)
 import Effect (Effect)
 import LinkedIn.DetachedNode (DetachedNode, toDetached)
 import LinkedIn.DetachedNode (DetachedNode, toDetached)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible (class Extractible)
 import LinkedIn.Extractible as LE
 import LinkedIn.Extractible as LE
+import LinkedIn.PageUrl (PageUrl, pageUrlP)
 import LinkedIn.QueryRunner (QueryError, QueryRunner', runQuery)
 import LinkedIn.QueryRunner (QueryError, QueryRunner', runQuery)
 import LinkedIn.UI.Elements.Parser (fromDetachedToUI)
 import LinkedIn.UI.Elements.Parser (fromDetachedToUI)
 import LinkedIn.UI.Elements.Types (UIElement)
 import LinkedIn.UI.Elements.Types (UIElement)
+import Parsing (runParser)
 import Type.Proxy (Proxy)
 import Type.Proxy (Proxy)
 import Web.DOM (Document, Node)
 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.
 run :: forall a t.
   Traversable t
   Traversable t