From d6a64ff7c28e239095984d0ded690a441728be04 Mon Sep 17 00:00:00 2001 From: jackhuang Date: Wed, 15 Nov 2023 21:09:58 -0600 Subject: [PATCH] 11/15 --- .DS_Store | Bin 6148 -> 6148 bytes Project Progress Report.pdf | Bin 0 -> 29417 bytes background.js | 10 ++++---- content.js | 49 ++++++++++++------------------------ course_explorer.py | 1 + manifest.json | 2 +- popup.html | 24 ++++++------------ popup.js | 18 ++++++------- 8 files changed, 38 insertions(+), 66 deletions(-) create mode 100644 Project Progress Report.pdf diff --git a/.DS_Store b/.DS_Store index a5ba00e088c03555b00fa7e6992d6445db43e83e..6f464c97f5395ea1ad48d3e1836f2aac0a15b1f1 100644 GIT binary patch literal 6148 zcmeHK!HN?>5Pcm-h!J7gld>pt@}Lk5_yObYtl~is173BLad%y3GDBtqdXYiclfNQ} zAF<#Ec=Kc8tLkQ*o@700kS^$c-Cb2()vqSg831N?k&S>Y0DU&WXuxibh+f)?^xVoe z(a0Y8(P%s^i)zI(ECdDu1DnWz{B|P@afG)x^?tv--dS5$lxaH2%L&)|cYf}D|MBVk zk+0AGsIQJ&?}n@LzQGMlaDXY^G5Q=O7MLMpE+?p;=H=8y6H|#aT&jp82J|XveTp~Q zuk-oZ@!3|N1tZn;dd2o06>{z~=XlPz6+ZZJ&F#(}cd>^tVm!nM4~S3beZVYYJSKlL zj&qKm>uFB7>r{1iUeUHz3yGBBuoLTZCsxEA^_0Gya`C0b#f6<$J=}W9{VsIv>T&)4 z`A1hh7o#YDS8tu(s~!@XuzCegGh>#AJZa67Y89j|os6Xt?TiOJf62CB8{(Lr1#;g< znQ!~_J)e~)#0YzB`<+XwAWxcPTeD6tIFd}}n)|w%>~hy{mh0t`<7@QUX9ZF`BMzB& z=I1TdG51>4q0`2Sv6=O+Z)}DkvA{rJ;9oHy?}wO8Fmc#e)K>?)9;c#@1VuR3yPX)j zdE&6KNDakUSE6+_?i0gUcdp0IE^*jcwC*q(nftiN#(kj}jn4I0&0!LYp$`lM27Cst z*y)zs|NEDJ|NBm178nQ&{8tQ^C>^KrspIa}mBYzh8?(J;6A`<{qPnni*Rc-dD!$34 aLR~BaV&br|$Q4TXBcL>dE->&{8TbX!Dd4jJ delta 158 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 literal 0 HcmV?d00001 diff --git a/background.js b/background.js index 1943cab..2c81015 100644 --- a/background.js +++ b/background.js @@ -1,5 +1,5 @@ -chrome.runtime.onInstalled.addListener(function() { - console.log("Extension installed"); - // Perform on install actions, e.g., setting up default values in storage - chrome.tabs.create({ url: 'http://google.com' }); - }); +// chrome.runtime.onInstalled.addListener(function() { +// console.log("Extension installed"); +// // Perform on install actions, e.g., setting up default values in storage +// chrome.tabs.create({ url: 'http://google.com' }); +// }); diff --git a/content.js b/content.js index 4fe1370..d971b75 100644 --- a/content.js +++ b/content.js @@ -1,36 +1,19 @@ // content.js -// This script will change the background color of the Google homepage to lightblue +chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { + if (request.action === "fetchData") { + var courseInfoDiv = document.getElementById('app-course-info'); + if (courseInfoDiv) { + var courseTitle = courseInfoDiv.querySelector('.app-text-engage').textContent; + var courseDescription = courseInfoDiv.querySelectorAll('.col-sm-12')[1].textContent.trim(); -// Check if the current page is Google's homepage -if (window.location.hostname === 'www.google.com' && window.location.pathname === '/') { - // Change the background color to lightblue - document.body.style.backgroundColor = 'lightblue'; - - // Add a custom message to the page - const messageDiv = document.createElement('div'); - messageDiv.textContent = 'This is a message from your Chrome Extension!'; - messageDiv.style.position = 'fixed'; - messageDiv.style.bottom = '10px'; - messageDiv.style.right = '10px'; - messageDiv.style.padding = '10px'; - messageDiv.style.backgroundColor = '#fff'; - messageDiv.style.border = '1px solid #ddd'; - messageDiv.style.borderRadius = '4px'; - messageDiv.style.boxShadow = '0 2px 4px rgba(0,0,0,0.2)'; - document.body.appendChild(messageDiv); - } - - // Listen for messages from the background script or popup - chrome.runtime.onMessage.addListener( - function(request, sender, sendResponse) { - if (request.greeting === "hello") { - console.log("Hello from the background script!"); - // Perform actions based on the message - sendResponse({farewell: "goodbye"}); + // Remove sentences that start with "Credit" or "Prerequisite" + courseDescription = courseDescription.replace(/Credit.*?(\.|\?|!)(?=\s|$)/g, ''); + courseDescription = courseDescription.replace(/Prerequisite.*?(\.|\?|!)(?=\s|$)/g, ''); + + sendResponse({ + courseTitle: courseTitle, + courseDescription: courseDescription.trim() + }); } - } - ); - - // This is just an example and won't necessarily do anything meaningful - // unless it's part of a larger extension that you've configured to work with Google's homepage. - \ No newline at end of file + } +}); diff --git a/course_explorer.py b/course_explorer.py index ddf7a3c..a2be59d 100644 --- a/course_explorer.py +++ b/course_explorer.py @@ -115,3 +115,4 @@ def is_valid_wikipedia_page(title, lang='en'): print("Keywords (SpaCy):", keywords_spacy) print("Wikipedia Links:", wikipedia_links) print("Wikipedia Links (SpaCy):", wikipedia_links_spacy) + diff --git a/manifest.json b/manifest.json index b274798..195843e 100644 --- a/manifest.json +++ b/manifest.json @@ -17,7 +17,7 @@ }, "content_scripts": [ { - "matches": ["http://*/*", "https://*/*"], + "matches": ["https://courses.illinois.edu/schedule/*"], "js": ["content.js"] } ] diff --git a/popup.html b/popup.html index 5f9b98e..d0970b8 100644 --- a/popup.html +++ b/popup.html @@ -1,29 +1,19 @@ - Popup Example + Popup -
Click the button below!
- - +

Course Information

+
+
diff --git a/popup.js b/popup.js index 966c799..972a4b0 100644 --- a/popup.js +++ b/popup.js @@ -1,13 +1,11 @@ // popup.js document.addEventListener('DOMContentLoaded', function() { - var changeColorButton = document.getElementById('changeColor'); - // onClick's logic below: - changeColorButton.addEventListener('click', function() { - chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { - // Send a message to the active tab - chrome.tabs.sendMessage(tabs[0].id, {color: "blue"}, function(response) { - console.log('Color changed to blue'); - }); + chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { + chrome.tabs.sendMessage(tabs[0].id, {action: "fetchData"}, function(response) { + if(response) { + document.getElementById('courseTitle').textContent = response.courseTitle; + document.getElementById('courseDescription').textContent = response.courseDescription; + } }); - }, false); -}, false); + }); +});