diff --git a/css/styles.css b/css/styles.css index 2ecf1619..fe83cfa0 100644 --- a/css/styles.css +++ b/css/styles.css @@ -31,6 +31,7 @@ animation: spin 2s linear infinite; } + @keyframes spin { 0% { transform: rotate(0deg); @@ -73,10 +74,16 @@ .dateTimePlace { margin-left: 5px; + margin-bottom: 0px; font-size: smaller; font-weight: bold; } +#chartcontainer { + max-width: 100%; + height: 250px; +} + #chart { min-width: auto; max-width: 100%; diff --git a/js/background.js b/js/background.js index 0953cab1..31abec64 100644 --- a/js/background.js +++ b/js/background.js @@ -1,6 +1,8 @@ updateBadge(true); +var grades; +loadDataBase() /* Handle messages and their commands from content and popup scripts*/ -chrome.runtime.onMessage.addListener(function(request, sender, response) { +chrome.runtime.onMessage.addListener(function (request, sender, response) { switch (request.command) { case "courseStorage": if (request.action == "add") { @@ -31,6 +33,8 @@ chrome.runtime.onMessage.addListener(function(request, sender, response) { case "updateCourseList": updateTabs(); break; + case "gradesQuery": + executeQuery(request.query, response); default: const xhr = new XMLHttpRequest(); const method = request.method ? request.method.toUpperCase() : "GET"; @@ -51,35 +55,35 @@ chrome.runtime.onMessage.addListener(function(request, sender, response) { }); /* Initially set the course data in storage */ -chrome.runtime.onInstalled.addListener(function(details) { +chrome.runtime.onInstalled.addListener(function (details) { if (details.reason == "install") { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { if (!data.savedCourses) { var arr = new Array(); chrome.storage.sync.set({ savedCourses: arr - }, function() { + }, function () { console.log('initial course list'); }); chrome.storage.sync.set({ courseConflictHighlight: true - }, function() { + }, function () { console.log('initial highlighting: true'); }); chrome.storage.sync.set({ loadAll: true - }, function() { + }, function () { console.log('initial loadAll: true'); }); } }); } else if (details.reason == "update") { console.log("updated"); - chrome.storage.sync.get('loadAll', function(data) { + chrome.storage.sync.get('loadAll', function (data) { if (data.loadAll == undefined) { chrome.storage.sync.set({ loadAll: true - }, function() { + }, function () { console.log('initial loadAll: true'); }); } @@ -88,8 +92,39 @@ chrome.runtime.onInstalled.addListener(function(details) { }); +function executeQuery(query, sendResponse) { + console.log(grades) + var res = grades.exec(query)[0]; + sendResponse({ + data: res, + }); +} + + +/* Load the database*/ +function loadDataBase() { + sql = window.SQL; + loadBinaryFile('grades.db', function (data) { + var sqldb = new SQL.Database(data); + grades = sqldb; + }); +} +/* load the database from file */ +function loadBinaryFile(path, success) { + var xhr = new XMLHttpRequest(); + xhr.open("GET", chrome.extension.getURL(path), true); + xhr.responseType = "arraybuffer"; + xhr.onload = function () { + var data = new Uint8Array(xhr.response); + var arr = new Array(); + for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); + success(arr.join("")); + }; + xhr.send(); +}; + function updateBadge(first) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { if (data.savedCourses) { let text = ""; if (data.savedCourses.length > 0) { @@ -105,7 +140,7 @@ function updateBadge(first) { }); timeout = 200; } - setTimeout(function() { + setTimeout(function () { chrome.browserAction.setBadgeBackgroundColor({ color: '#bf5700' }); @@ -117,7 +152,7 @@ function updateBadge(first) { /* Find all the conflicts in the courses and send them out/ if there is even a conflict*/ function checkConflicts(sendResponse) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { var conflicts = []; var courses = data.savedCourses; for (var i = 0; i < courses.length; i++) { @@ -144,7 +179,7 @@ function checkConflicts(sendResponse) { /* Find if the course at unique and with currdatearr is contained in the saved courses and if it conflicts with any other courses*/ function isSingleConflict(currdatearr, unique, sendResponse) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; var conflict = false; for (var i = 0; i < courses.length; i++) { @@ -188,7 +223,7 @@ function isConflict(adtarr, bdtarr) { /* Add the requested course to the storage*/ function add(request, sender, sendResponse) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; if (!contains(courses, request.course.unique)) { courses.push(request.course) @@ -206,7 +241,7 @@ function add(request, sender, sendResponse) { } /* Find and Remove the requested course from the storage*/ function remove(request, sender, sendResponse) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; console.log(courses); var index = 0; @@ -227,7 +262,7 @@ function remove(request, sender, sendResponse) { /* Find if the unique is already contained within the storage*/ function alreadyContains(unique, sendResponse) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; sendResponse({ alreadyContains: contains(courses, unique) @@ -247,7 +282,7 @@ function contains(courses, unique) { } function updateTabs() { - chrome.tabs.query({}, function(tabs) { + chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { chrome.tabs.sendMessage(tabs[i].id, { command: "updateCourseList" @@ -260,7 +295,7 @@ const UPDATE_INTERVAL = 1000 * 60 * 16; setInterval(updateStatus, UPDATE_INTERVAL); // updateStatus(); function updateStatus(sendResponse) { - chrome.storage.sync.get('savedCourses', function(data) { + chrome.storage.sync.get('savedCourses', function (data) { var courses = data.savedCourses; var nochange = true; for (let i = 0; i < courses.length; i++) { @@ -268,25 +303,29 @@ function updateStatus(sendResponse) { let c = courses[i]; let oldstatus = c.status; let oldlink = c.link; - $.ajax({url: oldlink, success: function(result){ - if(result){ - console.log(result); - var object = $('
').html(result).contents(); - let newstatus = object.find('[data-th="Status"]').text(); - let registerlink = object.find('td[data-th="Add"] a'); - if (registerlink) { - registerlink = registerlink.attr('href'); + $.ajax({ + url: oldlink, + success: function (result) { + if (result) { + console.log(result); + var object = $('').html(result).contents(); + let newstatus = object.find('[data-th="Status"]').text(); + let registerlink = object.find('td[data-th="Add"] a'); + if (registerlink) { + registerlink = registerlink.attr('href'); + } + var haschanged = (newstatus == oldstatus && registerlink == oldlink); + if (!haschanged) { + console.log(c.unique + ' updated from ' + oldstatus + " to " + newstatus + " and " + oldlink + " to " + registerlink); + } + nochange &= haschanged; + c.registerlink = registerlink; + c.status = newstatus; } - var haschanged = (newstatus == oldstatus && registerlink == oldlink); - if (!haschanged) { - console.log(c.unique + ' updated from ' + oldstatus + " to " + newstatus + " and " + oldlink + " to " + registerlink); - } - nochange &= haschanged; - c.registerlink = registerlink; - c.status = newstatus; - }}}); - - + } + }); + + } catch (e) { console.log(e); console.log('Not logged into UT Coursebook. Could not update class statuses.'); diff --git a/js/config.js b/js/config.js new file mode 100644 index 00000000..a592cccd --- /dev/null +++ b/js/config.js @@ -0,0 +1,2 @@ +const fadetime = 150; +const butdelay = 75; \ No newline at end of file diff --git a/js/content.js b/js/content.js index e3e71f30..849f97af 100644 --- a/js/content.js +++ b/js/content.js @@ -1,4 +1,3 @@ -var grades; var rmpLink; var next; var bottom; @@ -20,18 +19,11 @@ var semesterCode; var isIndividual = false; var done = true; -const days = new Map([ - ["M", "Monday"], - ["T", "Tuesday"], - ["W", "Wednesday"], - ["TH", "Thursday"], - ["F", "Friday"] -]); -const fadetime = 150; -const butdelay = 75; + //This extension may be super lit, but you know what's even more lit? //Matthew Tran's twitter and insta: @MATTHEWTRANN and @matthew.trann +console.log('UT Registration Plus is running on this page.'); if (document.querySelector('#fos_fl')) { let params = (new URL(document.location)).searchParams; @@ -44,14 +36,17 @@ if (document.querySelector('#fos_fl')) { } } } -next = $("#next_nav_link"); -chrome.storage.sync.get('loadAll', function (data) { - if (data.loadAll) { - $('[title*="next listing"]').remove(); - } -}); -loadDataBase(); + +next = $("#next_nav_link"); +if (next) { + chrome.storage.sync.get('loadAll', function (data) { + if (data.loadAll) { + $('[title*="next listing"]').remove(); + } + }); +} + //make heading and modal if (!$("#kw_results_table").length) { $("table thead th:last-child").after('| {point.y:.0f} Students | ', - footerFormat: '
There was an error. Please refresh the page and/or log back in using your UT EID and password.
" + } + $("#description").animate({ + 'opacity': 0 + }, 200, function () { + $(this).html(description).animate({ + 'opacity': 1 + }, 200); + }); + var first = object.find('td[data-th="Instructor"]').text(); + first = first.substring(first.indexOf(", "), first.indexOf(" ", first.indexOf(", ") + 2)); + first = first.substring(2); + rmpLink = `http://www.ratemyprofessors.com/search.jsp?queryBy=teacherName&schoolName=university+of+texas+at+austin&queryoption=HEADER&query=${first} ${profname};&facetSearch=true`; + if (profname == "") { + eCISLink = `http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?s_in_action_sw=S&s_in_search_type_sw=C&s_in_max_nbr_return=10&s_in_search_course_dept=${department}&s_in_search_course_num=${course_nbr}`; + } else { + eCISLink = `http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?&s_in_action_sw=S&s_in_search_type_sw=N&s_in_search_name=${profname.substring(0, 1) + profname.substring(1).toLowerCase()}%2C%20${first.substring(0, 1) + first.substring(1).toLowerCase()}`; } - output += sentence; - }); - description = output; - console.log(response); - if (!description) { - description = "You have been logged out. Please refresh the page and log back in using your UT EID and password.
" - } - $("#description").animate({ - 'opacity': 0 - }, 200, function () { - $(this).html(description).animate({ - 'opacity': 1 - }, 200); - }); - var first = object.find('td[data-th="Instructor"]').text(); - first = first.substring(first.indexOf(", "), first.indexOf(" ", first.indexOf(", ") + 2)); - first = first.substring(2); - rmpLink = `http://www.ratemyprofessors.com/search.jsp?queryBy=teacherName&schoolName=university+of+texas+at+austin&queryoption=HEADER&query=${first} ${profname};&facetSearch=true`; - if (profname == "") { - eCISLink = `http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?s_in_action_sw=S&s_in_search_type_sw=C&s_in_max_nbr_return=10&s_in_search_course_dept=${department}&s_in_search_course_num=${course_nbr}`; } else { - eCISLink = `http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?&s_in_action_sw=S&s_in_search_type_sw=N&s_in_search_name=${profname.substring(0, 1) + profname.substring(1).toLowerCase()}%2C%20${first.substring(0, 1) + first.substring(1).toLowerCase()}`; + description = "You have been logged out. Please refresh the page and log back in using your UT EID and password.
" + $("#description").animate({ + 'opacity': 0 + }, 200, function () { + $(this).html(description).animate({ + 'opacity': 1 + }, 200); + }); + rmpLink = "http://www.ratemyprofessors.com/campusRatings.jsp?sid=1255"; + eCISLink = "http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?"; } - } else { - description = "You have been logged out. Please refresh the page and log back in using your UT EID and password.
" - $("#description").animate({ - 'opacity': 0 - }, 200, function () { - $(this).html(description).animate({ - 'opacity': 1 - }, 200); - }); - rmpLink = "http://www.ratemyprofessors.com/campusRatings.jsp?sid=1255"; - eCISLink = "http://utdirect.utexas.edu/ctl/ecis/results/index.WBX?"; } - }}); -} -/* Load the database*/ -function loadDataBase() { - sql = window.SQL; - loadBinaryFile('grades.db', function (data) { - var sqldb = new SQL.Database(data); - grades = sqldb; }); -} -/* load the database from file */ -function loadBinaryFile(path, success) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", chrome.extension.getURL(path), true); - xhr.responseType = "arraybuffer"; - xhr.onload = function () { - var data = new Uint8Array(xhr.response); - var arr = new Array(); - for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); - success(arr.join("")); - }; - xhr.send(); -}; \ No newline at end of file +} \ No newline at end of file diff --git a/js/jquery.initialize.min.js b/js/jquery.initialize.min.js new file mode 100644 index 00000000..9ea59e98 --- /dev/null +++ b/js/jquery.initialize.min.js @@ -0,0 +1 @@ +(function($){"use strict";var combinators=[" ",">","+","~"];var fraternisers=["+","~"];var complexTypes=["ATTR","PSEUDO","ID","CLASS"];function grok(msobserver){if(!$.find.tokenize){msobserver.isCombinatorial=true;msobserver.isFraternal=true;msobserver.isComplex=true;return}msobserver.isCombinatorial=false;msobserver.isFraternal=false;msobserver.isComplex=false;var token=$.find.tokenize(msobserver.selector);for(var i=0;i| {point.y:.0f} Students | ', + footerFormat: '