Bladeren bron

Add a sidebar to keep track of still pending job offers

jherve 1 jaar geleden
bovenliggende
commit
c09c7415f4
5 gewijzigde bestanden met toevoegingen van 70 en 0 verwijderingen
  1. 5 0
      manifest.json
  2. 2 0
      src/Background.purs
  3. 2 0
      src/NativeMessage.purs
  4. 15 0
      src/sidebar.html
  5. 46 0
      src/sidebar.js

+ 5 - 0
manifest.json

@@ -28,5 +28,10 @@
   "options_ui": {
     "page": "src/settings.html"
   },
+  "sidebar_action": {
+    "default_icon": "assets/job-promotion.png",
+    "default_title": "Job helper",
+    "default_panel": "src/sidebar.html"
+  },
   "permissions": ["activeTab", "tabs", "storage", "nativeMessaging"]
 }

+ 2 - 0
src/Background.purs

@@ -61,8 +61,10 @@ contentScriptMessageHandler
         origin: "linked_in",
         title: jo.title,
         url,
+        alternate_url: Nothing,
         company: jo.companyName,
         location: jo.location,
+        comment: Nothing,
         company_domain: jo.companyDomain,
         company_url: Just jo.companyLink,
         flexibility: jo.flexibility,

+ 2 - 0
src/NativeMessage.purs

@@ -59,11 +59,13 @@ type NativePythonJobOffer = {
   origin :: String,
   title :: String,
   url :: String,
+  alternate_url :: Maybe String,
   company :: String,
   location :: Maybe String,
   company_domain :: Maybe String,
   company_url :: Maybe String,
   flexibility :: Maybe JobFlexibility,
+  comment :: Maybe String,
   application_process :: Maybe ApplicationProcess,
   application_considered :: Maybe Boolean,
   application_date :: Maybe String,

+ 15 - 0
src/sidebar.html

@@ -0,0 +1,15 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+    <meta charset="utf-8" />
+</head>
+
+<body>
+    <div id="content">
+
+    </div>
+    <script src="sidebar.js"></script>
+</body>
+
+</html>

+ 46 - 0
src/sidebar.js

@@ -0,0 +1,46 @@
+function elWithText (tag, text) {
+    const el = document.createElement(tag);
+    el.textContent = text;
+    return el;
+}
+
+function link (text, url) {
+    const div = document.createElement("div");
+    const el = document.createElement("a");
+    el.textContent = text;
+    el.href = url;
+    div.appendChild(el);
+    return div;
+}
+
+function createJob (job) {
+    const li = document.createElement("li");
+
+    li.appendChild(elWithText("h2", job.title));
+    li.appendChild(elWithText("h3", job.company));
+    li.appendChild(link("linkedIn Url", job.url));
+
+    if (job.alternate_url)
+        li.appendChild(link("URL to company's site", job.alternate_url));
+
+    if (job.comment)
+        li.appendChild(elWithText("p", job.comment));
+
+        return li;
+}
+
+function createListOfJobs (jobs) {
+    const ul = document.createElement("ul");
+    for (const j of jobs) {
+        ul.appendChild(createJob(j));
+    }
+    return ul;
+}
+
+(async () => {
+    const content = document.querySelector("#content");
+    const allJobs = Object.entries(await browser.storage.local.get()).map(a => a[1]);
+    const stillToApplyJobs = allJobs.filter(j => j.application_date === null && j.application_considered);
+
+    content.innerHTML = createListOfJobs(stillToApplyJobs).innerHTML;
+})();