diff --git a/js/background.js b/js/background.js index 3aeca39f..51e5fb51 100644 --- a/js/background.js +++ b/js/background.js @@ -11,12 +11,12 @@ chrome.runtime.onMessage.addListener(function (request, sender, response) { isSingleConflict(request.dtarr, request.unique, response); } else if (request.command == "checkConflicts") { checkConflicts(response); - } - else if(request.command == "updateStatus"){ + } else if (request.command == "updateStatus") { updateStatus(); - } - else if (request.command == "alreadyContains") { + } else if (request.command == "alreadyContains") { alreadyContains(request.unique, response); + } else if (request.command == "updateTabs") { + updateTabs(); } else { const xhr = new XMLHttpRequest(); const method = request.method ? request.method.toUpperCase() : "GET"; @@ -123,11 +123,13 @@ function isConflict(adtarr, bdtarr) { function add(request, sender, sendResponse) { chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; - courses.push(request.course) - console.log(courses); - chrome.storage.sync.set({ - savedCourses: courses - }); + if (!contains(courses, request.course.unique)) { + courses.push(request.course) + console.log(courses); + chrome.storage.sync.set({ + savedCourses: courses + }); + } sendResponse({ done: "Added: (" + request.course.unique + ") " + request.course.coursename, label: "Remove Course -" @@ -159,34 +161,47 @@ function remove(request, sender, sendResponse) { function alreadyContains(unique, sendResponse) { chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; - var contains = false; - var i = 0; - while (i < courses.length && !contains) { - if (courses[i].unique == unique) { - contains = true; - } - i++; - } sendResponse({ - alreadyContains: contains + alreadyContains: contains(courses, unique) }); }); } -function updateStatus(){ +function contains(courses, unique) { + var i = 0; + while (i < courses.length) { + if (courses[i].unique == unique) { + return true; + } + i++; + } + return false; +} + +function updateTabs() { + chrome.tabs.query({}, function (tabs) { + for (var i = 0; i < tabs.length; i++) { + chrome.tabs.sendMessage(tabs[i].id, { + command: "updateCourseList" + }); + } + }); +} + +function updateStatus() { chrome.storage.sync.get('savedCourses', function (data) { console.log(data.savedCourses); - for(let i = 0; iImport into UT Reg Plus
"); $("#import").prepend("
defaultmessage..
"); - $("#import").click(function(){ - $(".tbg").last().find(".tbon>td:first-child").each(function(){ + $("#import").click(function () { + $(".tbg").last().find(".tbon>td:first-child").each(function () { let unique = $(this).text().replace(/\s/g, ''); link = `https://utdirect.utexas.edu/apps/registrar/course_schedule/${sem}/${unique}/`; getInfo(); }); + $("#import").text("Courses Saved!").css("background-color", "#4CAF50"); + setTimeout(function () { + $("#import").html("Import into UT Reg Plus").css("background-color", "#FF9800"); + }, 1000); }); }); @@ -26,30 +30,26 @@ function Course(coursename, unique, profname, datetimearr, status, link, registe } -function getInfo(classurl){ - chrome.runtime.sendMessage({ - method: "GET", - action: "xhttp", - url: link, - data: "" - }, function (response) { - if (response) { - var output = ""; - var object = $('
').html(response).contents(); - var c = getCourseObject(object); +function getInfo(classurl) { + var xhr = new XMLHttpRequest(); + xhr.open("GET", link, false); + xhr.send(); + var response = xhr.responseText; + if (response) { + var output = ""; + var object = $('
').html(response).contents(); + var c = getCourseObject(object); + console.log(c); + chrome.runtime.sendMessage({ + command: "courseStorage", + course: c, + action: "add" + }, function () { chrome.runtime.sendMessage({ - command: "alreadyContains", - unique: c.unique - }, function (response) { - if (!response.alreadyContains) { - saveCourse(c); - } + command: "updateTabs" }); - // var first = object.find('td[data-th="Instructor"]').text(); - } else { - + }); } -}); } @@ -65,7 +65,7 @@ function getCourseObject(object) { let status = object.find('td[data-th="Status"]').text(); let indlink = link; let registerlink = object.find('td[data-th="Add"] a').prop('href'); - return new Course(coursename,uniquenum,profname,datetimearr,status,indlink,registerlink); + return new Course(coursename, uniquenum, profname, datetimearr, status, indlink, registerlink); } /* For a row, get the date-time-array for checking conflicts*/ @@ -98,21 +98,4 @@ function convertTime(time) { converted[i] = moment(converted[i], ["h:mm A"]).format("HH:mm"); } return converted; -} - -function saveCourse(course){ - chrome.runtime.sendMessage({ - command: "courseStorage", - course: course, - action: "add" - }, function (response) { - $("#import").text("Courses Saved!").css("background-color","#4CAF50"); - setTimeout(function () { - $("#import").html("Import into UT Reg Plus").css("background-color","#FF9800"); - }, 1000); - chrome.runtime.sendMessage({ - command: "updateCourseList" - }); - }); -} - +} \ No newline at end of file diff --git a/manifest.json b/manifest.json index 1d75e935..5eddbaa2 100644 --- a/manifest.json +++ b/manifest.json @@ -5,25 +5,26 @@ "version": "0.1.4", "options_page": "options.html", "description": "Improves the course registration process at the University of Texas at Austin!", - "permissions": [ "tabs", - "declarativeContent", - "storage", - "*://*.utdirect.utexas.edu/apps/registrar/course_schedule/*", - "*://*.catalog.utexas.edu/ribbit/" - ], + "permissions": ["tabs", + "declarativeContent", + "storage", + "*://*.utdirect.utexas.edu/apps/registrar/course_schedule/*", + "*://*.catalog.utexas.edu/ribbit/" + ], "content_scripts": [{ - "css": ["css/styles.css"], - "js": ["js/moment.min.js","js/sql-memory-growth.js","js/highcharts.js","js/jquery-3.3.1.min.js","js/content.js"], - "matches": ["https://utdirect.utexas.edu/apps/registrar/course_schedule/*"] - },{ - "css": ["css/styles.css"], - "js": ["js/moment.min.js","js/sql-memory-growth.js","js/highcharts.js","js/jquery-3.3.1.min.js","js/import.js"], - "matches": ["https://utdirect.utexas.edu/registrar/waitlist/wl_see_my_waitlists.WBX"] - } + "css": ["css/styles.css"], + "js": ["js/moment.min.js", "js/sql-memory-growth.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/content.js"], + "matches": ["https://utdirect.utexas.edu/apps/registrar/course_schedule/*"] + }, { + "css": ["css/styles.css"], + "js": ["js/moment.min.js", "js/sql-memory-growth.js", "js/highcharts.js", "js/jquery-3.3.1.min.js", "js/import.js"], + "matches": ["https://utdirect.utexas.edu/registrar/waitlist/wl_see_my_waitlists.WBX"] + } -], + ], "web_accessible_resources": [ - "grades.db","images/disticon.png"], + "grades.db", "images/disticon.png" + ], "background": { "scripts": ["js/background.js"], "persistent": true @@ -38,9 +39,9 @@ } }, "icons": { - "16": "icons/icon16.png", - "32": "icons/icon32.png", - "48": "icons/icon48.png", - "128": "icons/icon128.png" - } + "16": "icons/icon16.png", + "32": "icons/icon32.png", + "48": "icons/icon48.png", + "128": "icons/icon128.png" + } } \ No newline at end of file