diff --git a/js/popup.js b/js/popup.js index 94e10cca..4075c705 100644 --- a/js/popup.js +++ b/js/popup.js @@ -7,417 +7,416 @@ getDepartments(); var can_remove = true; function setCourseList() { - $("#courseList").empty() - chrome.storage.sync.get('savedCourses', function (data) { - updateConflicts(); - courses = data.savedCourses - handleEmpty(); - let num_hours = 0; - // build and append the course list element - for (var i = 0; i < courses.length; i++) { - let { - coursename, - unique, - profname, - status, - datetimearr - } = courses[i]; - profname = capitalizeString(profname); - let line = buildTimeLines(datetimearr); - let list_tile_color = getStatusColor(status) - let list_sub_color = getStatusColor(status, true); - let { - department, - number - } = seperateCourseNameParts(coursename) - num_hours += parseInt(number.substring(0, 1)); + $("#courseList").empty(); + chrome.storage.sync.get("savedCourses", function (data) { + updateConflicts(); + courses = data.savedCourses; + handleEmpty(); + let num_hours = 0; + // build and append the course list element + for (var i = 0; i < courses.length; i++) { + let { coursename, unique, profname, status, datetimearr } = courses[i]; + profname = capitalizeString(profname); + let line = buildTimeLines(datetimearr); + let list_tile_color = getStatusColor(status); + let list_sub_color = getStatusColor(status, true); + let { department, number } = seperateCourseNameParts(coursename); + num_hours += parseInt(number.substring(0, 1)); - let list_html = Template.Popup.list_item(i, list_tile_color, unique, department, number, profname, list_sub_color, line); - $("#courseList").append(list_html); - } - $("#meta-metric").text(num_hours); - }); + let list_html = Template.Popup.list_item(i, list_tile_color, unique, department, number, profname, list_sub_color, line); + $("#courseList").append(list_html); + } + $("#meta-metric").text(num_hours); + }); } /* convert from the dtarr and maek the time lines*/ function buildTimeLines(datetimearr) { - let lines = convertDateTimeArrToLine(datetimearr); - let output = ""; - if (lines.length == 0) { - output = "This class has no meeting times." - } else { - for (let i = 0; i < lines.length; i++) { - let line = lines[i]; - output += Template.Popup.line(line) - } - } - return output; + let lines = convertDateTimeArrToLine(datetimearr); + let output = ""; + if (lines.length == 0) { + output = "This class has no meeting times."; + } else { + for (let i = 0; i < lines.length; i++) { + let line = lines[i]; + output += Template.Popup.line(line); + } + } + return output; } /* Update the conflict messages */ function updateConflicts() { - chrome.runtime.sendMessage({ - command: "checkConflicts" - }, function (response) { - if (response.isConflict) { - var between = response.between; - let conflict_message = ""; - for (var i = 0; i < between.length; i++) { - let courseA = between[i][0]; - let courseB = between[i][1]; - conflict_message += `CONFLICT: ${formatShortenedCourseName(courseA)} and ${formatShortenedCourseName(courseB)}`; - if (i != between.length - 1) - conflict_message += "
"; - } - $(Template.Popup.conflict_message(conflict_message)).prependTo("#courseList").hide().fadeIn(200); - } - }); + chrome.runtime.sendMessage( + { + command: "checkConflicts", + }, + function (response) { + if (response.isConflict) { + var between = response.between; + let conflict_message = ""; + for (var i = 0; i < between.length; i++) { + let courseA = between[i][0]; + let courseB = between[i][1]; + conflict_message += `CONFLICT: ${formatShortenedCourseName(courseA)} and ${formatShortenedCourseName(courseB)}`; + if (i != between.length - 1) conflict_message += "
"; + } + $(Template.Popup.conflict_message(conflict_message)).prependTo("#courseList").hide().fadeIn(200); + } + } + ); } /* prettify the name for the conflict messages*/ function formatShortenedCourseName(course) { - let { - number, - department - } = seperateCourseNameParts(course.coursename) - return `${department} ${number} (${course.unique})`; + let { number, department } = seperateCourseNameParts(course.coursename); + return `${department} ${number} (${course.unique})`; } $(document).click(function (event) { - $target = $(event.target); + $target = $(event.target); - // If we're not clicking on search button or search popup, and popup is visible, hide it - if (!$target.closest('#search').length && !$target.closest('#search-popup').length && $('#search-popup').is(":visible")) { - hideSearchPopup(); - } + // If we're not clicking on search button or search popup, and popup is visible, hide it + if (!$target.closest("#search").length && !$target.closest("#search-popup").length && $("#search-popup").is(":visible")) { + hideSearchPopup(); + } - // If we're not clicking on import/export button or imp/exp popup, and popup is visible, hide it - if (!$target.closest('#impexp').length && !$target.closest('#import-export-popup').length && $('#import-export-popup').is(":visible")) { - hideImportExportPopup(); - } + // If we're not clicking on import/export button or imp/exp popup, and popup is visible, hide it + if (!$target.closest("#impexp").length && !$target.closest("#import-export-popup").length && $("#import-export-popup").is(":visible")) { + hideImportExportPopup(); + } }); $("#clear").click(function () { - chrome.storage.sync.set({ - savedCourses: [] - }); - $("#courseList").empty(); - updateAllTabsCourseList(); - showEmpty(); + chrome.storage.sync.set({ + savedCourses: [], + }); + $("#courseList").empty(); + updateAllTabsCourseList(); + showEmpty(); }); $("#RIS").click(function () { - chrome.tabs.create({ - 'url': 'https://utdirect.utexas.edu/registrar/ris.WBX' - }); + chrome.tabs.create({ + url: "https://utdirect.utexas.edu/registrar/ris.WBX", + }); }); $("#calendar").click(function () { - chrome.tabs.create({ - 'url': "calendar.html" - }); + chrome.tabs.create({ + url: "calendar.html", + }); }); - $("#impexp").click(function () { - if ($("#impexp>i").text() == 'close') { - hideImportExportPopup(); - } else { - if ($("#search>i").text() == 'close') { - hideSearchPopup(); - } - showImportExportPopup(); - } + if ($("#impexp>i").text() == "close") { + hideImportExportPopup(); + } else { + if ($("#search>i").text() == "close") { + hideSearchPopup(); + } + showImportExportPopup(); + } }); $("#search").click(function () { - if ($("#search>i").text() == 'close') { - hideSearchPopup(); - } else { - if ($("#impexp>i").text() == 'close') { - hideImportExportPopup(); - } - showSearchPopup(); - } + if ($("#search>i").text() == "close") { + hideSearchPopup(); + } else { + if ($("#impexp>i").text() == "close") { + hideImportExportPopup(); + } + showSearchPopup(); + } }); -$('#import-class').click(function () { - $("#import_input").click(); - console.log('back to improting'); +$("#import-class").click(function () { + $("#import_input").click(); + console.log("back to improting"); }); function isImportedValid(imported_courses) { - return imported_courses && imported_courses.length && (imported_courses.length == 0 || validateCourses(imported_courses)) + return imported_courses && imported_courses.length && (imported_courses.length == 0 || validateCourses(imported_courses)); } $("#import_input").change(function (e) { - console.log('hello'); - var files = e.target.files; - var reader = new FileReader(); - reader.onload = function () { - try { - var imported_courses = JSON.parse(this.result); - if (isImportedValid(imported_courses)) { - chrome.storage.sync.set({ - savedCourses: imported_courses - }); - updateAllTabsCourseList(); - setCourseList(); - hideImportExportPopup(); - $("#import_input").val(''); - } else { - Alert('There was an error.'); - } - } catch (err) { - console.log(err); - } - } - reader.readAsText(files[0]); + console.log("hello"); + var files = e.target.files; + var reader = new FileReader(); + reader.onload = function () { + try { + var imported_courses = JSON.parse(this.result); + if (isImportedValid(imported_courses)) { + chrome.storage.sync.set({ + savedCourses: imported_courses, + }); + updateAllTabsCourseList(); + setCourseList(); + hideImportExportPopup(); + $("#import_input").val(""); + } else { + Alert("There was an error."); + } + } catch (err) { + console.log(err); + } + }; + reader.readAsText(files[0]); }); - function exportCourses(url) { - var exportlink = document.createElement('a'); - exportlink.setAttribute('href', url); - exportlink.setAttribute('download', 'my_courses.json'); - exportlink.click(); + var exportlink = document.createElement("a"); + exportlink.setAttribute("href", url); + exportlink.setAttribute("download", "my_courses.json"); + exportlink.click(); } function createBlob(export_courses) { - return new Blob([JSON.stringify(export_courses, null, 4)], { - type: "octet/stream" - }) + return new Blob([JSON.stringify(export_courses, null, 4)], { + type: "octet/stream", + }); } -$('#export-class').click(function () { - chrome.storage.sync.get('savedCourses', function (data) { - let export_courses = data.savedCourses; - if (export_courses.length > 0) { - let url = window.URL.createObjectURL(createBlob(export_courses)); - exportCourses(url); - } else { - alert('No Saved Courses to Export.'); - } - hideImportExportPopup(); - }); +$("#export-class").click(function () { + chrome.storage.sync.get("savedCourses", function (data) { + let export_courses = data.savedCourses; + if (export_courses.length > 0) { + let url = window.URL.createObjectURL(createBlob(export_courses)); + exportCourses(url); + } else { + alert("No Saved Courses to Export."); + } + hideImportExportPopup(); + }); }); function openSearch(semester, department, level, courseCode) { - var link = ""; - if (courseCode) { - link = `https://utdirect.utexas.edu/apps/registrar/course_schedule/${semester}/results/?search_type_main=COURSE&fos_cn=${department}&course_number=${courseCode}` - } else { - link = `https://utdirect.utexas.edu/apps/registrar/course_schedule/${semester}/results/?fos_fl=${department}&level=${level}&search_type_main=FIELD`; - } - chrome.tabs.create({ url: link }); + var link = ""; + if (courseCode) { + link = `https://utdirect.utexas.edu/apps/registrar/course_schedule/${semester}/results/?search_type_main=COURSE&fos_cn=${department}&course_number=${courseCode}`; + } else { + link = `https://utdirect.utexas.edu/apps/registrar/course_schedule/${semester}/results/?fos_fl=${department}&level=${level}&search_type_main=FIELD`; + } + chrome.tabs.create({ url: link }); } $("#search-class").click(() => { - let semester = $("#semesters").find(":selected").val(); - let department = $("#department").find(":selected").val(); - let level = $("#level").find(":selected").val(); - let courseCode = $("#courseCode").val(); - openSearch(semester, department, level, courseCode); + let semester = $("#semesters").find(":selected").val(); + let department = $("#department").find(":selected").val(); + let level = $("#level").find(":selected").val(); + let courseCode = $("#courseCode").val(); + openSearch(semester, department, level, courseCode); }); $("#options_button").click(function () { - chrome.tabs.create({ - 'url': "options.html" - }); + chrome.tabs.create({ + url: "options.html", + }); }); -$("#courseList").on('mouseover', '.copy_button', function () { - $(this).addClass('shadow'); -}).on('mouseleave', '.copy_button', function () { - $(this).removeClass('shadow'); -}); +$("#courseList") + .on("mouseover", ".copy_button", function () { + $(this).addClass("shadow"); + }) + .on("mouseleave", ".copy_button", function () { + $(this).removeClass("shadow"); + }); -$("#courseList").on('click', '.copy_button', function (e) { - e.stopPropagation(); - copyButtonAnimation($(this)); - let unique = $(this).val(); - copyUnique(unique); +$("#courseList").on("click", ".copy_button", function (e) { + e.stopPropagation(); + copyButtonAnimation($(this)); + let unique = $(this).val(); + copyUnique(unique); }); function copyUnique(unique) { - var temp = $(""); - $("body").append(temp); - temp.val(unique).select(); - document.execCommand("copy"); - temp.remove(); + var temp = $(""); + $("body").append(temp); + temp.val(unique).select(); + document.execCommand("copy"); + temp.remove(); } -$("#courseList").on('click', 'li', function () { - let clicked_item = $(this).closest('li'); - let curr_course = courses[$(clicked_item).attr("id")]; - handleMoreInfo(clicked_item, curr_course); - handleRegister(clicked_item, curr_course) - handleRemove(clicked_item, curr_course) - toggleTimeDropdown(clicked_item); +$("#courseList").on("click", "li", function () { + let clicked_item = $(this).closest("li"); + let curr_course = courses[$(clicked_item).attr("id")]; + handleMoreInfo(clicked_item, curr_course); + handleRegister(clicked_item, curr_course); + handleRemove(clicked_item, curr_course); + toggleTimeDropdown(clicked_item); }); - function handleRegister(clicked_item, curr_course) { - let { - status, - registerlink - } = curr_course; - let register_button = $(clicked_item).find("#register"); - let can_not_register = canNotRegister(status, registerlink); - let register_text = can_not_register ? "Can't Register" : - status.includes("waitlisted") ? "Join Waitlist" : "Register"; - let register_color = can_not_register ? Colors.closed : - status.includes("waitlisted") ? Colors.waitlisted : Colors.open; + let { status, registerlink } = curr_course; + let register_button = $(clicked_item).find("#register"); + let can_not_register = canNotRegister(status, registerlink); + let register_text = can_not_register ? "Can't Register" : status.includes("waitlisted") ? "Join Waitlist" : "Register"; + let register_color = can_not_register ? Colors.closed : status.includes("waitlisted") ? Colors.waitlisted : Colors.open; - if (!status) { - register_text = "No Status"; - register_color = Colors.no_status; - } + if (!status) { + register_text = "No Status"; + register_color = Colors.no_status; + } - $(register_button).text(register_text).css('background-color', register_color); + $(register_button).text(register_text).css("background-color", register_color); - if (!can_not_register) { - $(register_button).click(function () { - setCurrentTabUrl(registerlink); - }) - } + if (!can_not_register) { + $(register_button).click(function () { + setCurrentTabUrl(registerlink); + }); + } } function handleRemove(clicked_item, curr_course) { - let list = $(clicked_item).closest("ul"); - $(clicked_item).find("#listRemove").click(function () { - if (can_remove) { - can_remove = false; - $(list).find("#conflict").fadeOut(300, function () { - $(clicked_item).remove(); - }); - subtractHours(curr_course); - chrome.runtime.sendMessage({ - command: "courseStorage", - course: curr_course, - action: "remove" - }, () => { - $(clicked_item).fadeOut(200); - if ($(list).children(':visible').length === 1) - showEmpty(); - can_remove = true; - updateConflicts(); - updateAllTabsCourseList(); - }); - } - }); + let list = $(clicked_item).closest("ul"); + $(clicked_item) + .find("#listRemove") + .click(function () { + if (can_remove) { + can_remove = false; + $(list) + .find("#conflict") + .fadeOut(300, function () { + $(clicked_item).remove(); + }); + subtractHours(curr_course); + chrome.runtime.sendMessage( + { + command: "courseStorage", + course: curr_course, + action: "remove", + }, + () => { + $(clicked_item).fadeOut(200); + if ($(list).children(":visible").length === 1) showEmpty(); + can_remove = true; + updateConflicts(); + updateAllTabsCourseList(); + } + ); + } + }); } - function subtractHours(curr_course) { - let curr_total_hours = parseInt($("#meta-metric").text()); - let curr_course_number = seperateCourseNameParts(curr_course.coursename).number; - let curr_individual_hours = parseInt(curr_course_number.substring(0, 1)); - $("#meta-metric").text(curr_total_hours - curr_individual_hours); - + let curr_total_hours = parseInt($("#meta-metric").text()); + let curr_course_number = seperateCourseNameParts(curr_course.coursename).number; + let curr_individual_hours = parseInt(curr_course_number.substring(0, 1)); + $("#meta-metric").text(curr_total_hours - curr_individual_hours); } function handleMoreInfo(clicked_item, curr_course) { - $(clicked_item).find("#listMoreInfo").click(function () { - openMoreInfoWithOpenModal(curr_course.link); - }); + $(clicked_item) + .find("#listMoreInfo") + .click(function () { + openMoreInfoWithOpenModal(curr_course.link); + }); } function handleEmpty() { - if (courses.length != 0) { - $("#empty").hide(); - $("#courseList").show(); - } else { - showEmpty(); - } + if (courses.length != 0) { + $("#empty").hide(); + $("#courseList").show(); + } else { + showEmpty(); + } } function copyButtonAnimation(copy_button) { - $(copy_button).find('i').text('check'); - $(copy_button).stop(true, false).removeAttr('style').removeClass('shadow', { - duration: 200 - }); - $(copy_button).find('i').delay(400).queue(function (n) { - $(this).text('content_copy'); - $(this).parent().removeClass('shadow'); - if ($(this).parent().is(":hover")) { - $(this).parent().addClass('shadow'); - } - n(); - }) + $(copy_button).find("i").text("check"); + $(copy_button).stop(true, false).removeAttr("style").removeClass("shadow", { + duration: 200, + }); + $(copy_button) + .find("i") + .delay(400) + .queue(function (n) { + $(this).text("content_copy"); + $(this).parent().removeClass("shadow"); + if ($(this).parent().is(":hover")) { + $(this).parent().addClass("shadow"); + } + n(); + }); } function toggleTimeDropdown(clicked_item) { - let more_info_button = $(clicked_item).find('#moreInfo'); - let arrow = $(clicked_item).find("#arrow"); - if ($(more_info_button).is(":hidden")) { - $(more_info_button).fadeIn(200); - $(arrow).css('transform', 'rotate(90deg)'); - } else { - $(more_info_button).fadeOut(200); - $(arrow).css('transform', ''); - } + let more_info_button = $(clicked_item).find("#moreInfo"); + let arrow = $(clicked_item).find("#arrow"); + if ($(more_info_button).is(":hidden")) { + $(more_info_button).fadeIn(200); + $(arrow).css("transform", "rotate(90deg)"); + } else { + $(more_info_button).fadeOut(200); + $(arrow).css("transform", ""); + } } function showEmpty() { - $("#courseList").hide(); - $("#empty").fadeIn(200); - $("#main").html(Text.emptyText()); - $("#meta-metric").text('0'); + $("#courseList").hide(); + $("#empty").fadeIn(200); + $("#main").html(Text.emptyText()); + $("#meta-metric").text("0"); } function hideSearchPopup() { - $("#search>i").text('search'); - $("#semcon").hide(); - $("#depcon").hide(); - $("#semesters").hide(); - $("#levcon").hide(); - $("#search-popup").addClass('hide'); + $("#search>i").text("search"); + $("#semcon").hide(); + $("#depcon").hide(); + $("#semesters").hide(); + $("#levcon").hide(); + $("#search-popup").addClass("hide"); } function showSearchPopup() { - $("#search>i").text('close'); - $("#class_id_input").show(); - $("#semesters").show(); - $("#semcon").show(); - $("#depcon").show(); - $("#levcon").show(); - $("#search-popup").removeClass('hide'); + $("#search>i").text("close"); + $("#class_id_input").show(); + $("#semesters").show(); + $("#semcon").show(); + $("#depcon").show(); + $("#levcon").show(); + $("#search-popup").removeClass("hide"); } function hideImportExportPopup() { - $("#import-export-popup").addClass('hide'); - $("#impexp>i").text('import_export'); + $("#import-export-popup").addClass("hide"); + $("#impexp>i").text("import_export"); } function showImportExportPopup() { - $("#impexp>i").text('close'); - $("#import-export-popup").removeClass('hide'); + $("#impexp>i").text("close"); + $("#import-export-popup").removeClass("hide"); } function getSemesters() { - chrome.runtime.sendMessage({ - command: "currentSemesters" - }, function (response) { - let { semesters } = response; - let semester_names = Object.keys(semesters); - for (let i = 0; i < semester_names.length; i++) { - let name = semester_names[i]; - $("#semesters").append(``); - } - }); + chrome.runtime.sendMessage( + { + command: "currentSemesters", + }, + function (response) { + let { semesters } = response; + let semester_names = Object.keys(semesters); + for (let i = 0; i < semester_names.length; i++) { + let name = semester_names[i]; + $("#semesters").append(``); + } + } + ); } function getDepartments() { - chrome.runtime.sendMessage({ - command: "currentDepartments" - }, function (response) { - let { departments } = response; - console.log(departments); - for (let i = 0; i < departments.length; i++) { - let abv = departments[i]; - $("#department").append(``); - } - $("#department").val('C S'); - }); + chrome.runtime.sendMessage( + { + command: "currentDepartments", + }, + function (response) { + let { departments } = response; + console.log(departments); + for (let i = 0; i < departments.length; i++) { + let abv = departments[i]; + $("#department").append(``); + } + // $("#department").val('C S'); + } + ); }