From 055d3f9180f405090f65121e7539a51531adc143 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Fri, 8 Nov 2024 00:08:05 +0500 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20feat:=20Copy=20to=20clipboard?= =?UTF-8?q?=20by=20button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addon/src/main.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/addon/src/main.js b/addon/src/main.js index 1965495..a026d20 100644 --- a/addon/src/main.js +++ b/addon/src/main.js @@ -44,6 +44,12 @@ function acknowledgeUser(bestMatchSection) { } function showCoverLetter(coverLetter) { + const copyButton = document.createElement("button"); + copyButton.innerHTML = "Copy to Clipboard"; + copyButton.classList.add("btn", "btn-primary", "mt-2"); + copyButton.onclick = function () { + copyToClipboard(coverLetter); + }; const div = document.createElement("div"); div.innerHTML = `

Cover Letter:

@@ -51,6 +57,7 @@ function showCoverLetter(coverLetter) {
`; const mainDiv = document.getElementById("popup"); mainDiv.appendChild(div); + mainDiv.appendChild(copyButton); } generateCLButton.addEventListener("click", async function () { @@ -83,10 +90,8 @@ generateCLButton.addEventListener("click", async function () { loader.hidden = true; if (response.ok) { const data = await response.json(); - // COPY TO CLIPBOARD acknowledgeUser(data.bestMatchSection); showCoverLetter(data.coverLetter); - copyToClipboard(data.coverLetter); } else { console.error("Network response was not ok."); } From 742744159b27bb3e7cb59c532bf275031eda9c50 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Fri, 8 Nov 2024 00:30:03 +0500 Subject: [PATCH 2/3] =?UTF-8?q?=E2=9C=A8=20feat:=20add=20support=20for=20p?= =?UTF-8?q?ython=20scrapping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/app.py | 4 +++- python/main.py | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/python/app.py b/python/app.py index e849cc5..0988fc7 100644 --- a/python/app.py +++ b/python/app.py @@ -2,7 +2,7 @@ from dotenv import load_dotenv from flask_cors import CORS -from main import fetch_job_details_from_greenhouse +from main import fetch_job_details_from_greenhouse, fetch_job_details_from_lever from services.openai import generate_cover_letter from services.resume_best_match import get_best_match_from_resume from services.resume_vectorizor import vectorize_resume @@ -33,6 +33,8 @@ def get_job_details(job_board): match job_board: case "greenhouse": job_details = fetch_job_details_from_greenhouse(job_url) + case "lever": + job_details = fetch_job_details_from_lever(job_url) resume_vectors, resume_segments = vectorize_resume() best_match_section = get_best_match_from_resume(job_details, resume_vectors, resume_segments) diff --git a/python/main.py b/python/main.py index f2d93c6..2451e5a 100644 --- a/python/main.py +++ b/python/main.py @@ -13,3 +13,16 @@ def fetch_job_details_from_greenhouse(url): text = text[:text.find("Apply for this job")] return text + + +def fetch_job_details_from_lever(url): + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' + } + response = requests.get(url, headers=headers) + soup = BeautifulSoup(response.content, 'html.parser') + + text = soup.get_text() + text = text[:text.find("Apply for this job")] + + return text From c08bd271ec0f49479d48c3edb2f0bb5caa1b5fc7 Mon Sep 17 00:00:00 2001 From: Umair Jibran Date: Fri, 8 Nov 2024 00:30:18 +0500 Subject: [PATCH 3/3] =?UTF-8?q?=E2=9C=A8=20feat:=20allow=20requesting=20fr?= =?UTF-8?q?om=20lever=20sites?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addon/src/main.js | 1 + 1 file changed, 1 insertion(+) diff --git a/addon/src/main.js b/addon/src/main.js index a026d20..5256e17 100644 --- a/addon/src/main.js +++ b/addon/src/main.js @@ -67,6 +67,7 @@ generateCLButton.addEventListener("click", async function () { const baseUrl = [savedHost, "job-details"].join("/"); let jobBoard = ""; if (currentTab.url.includes("greenhouse")) jobBoard = "greenhouse"; + if (currentTab.url.includes("lever")) jobBoard = "lever"; if (!jobBoard) { notSupported(currentTab.title, currentTab.url);