diff --git a/README.md b/README.md index 6520c93e..3a353d44 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ -# Sriram's Sexy Scheduling Script -[Try it for yourself on the Chrome Web Store](https://chrome.google.com/webstore/detail/hboadpjkoaieogjimneceaahlppnipaa/publish-accepted?authuser=0&hl=en-US) + +# UT Registration Plus +## (or Sriram's Sexy Scheduling Script) +[Try it for yourself on the Chrome Web Store](https://chrome.google.com/webstore/detail/hboadpjkoaieogjimneceaahlppnipaa) + We've all been there. 20 tabs of Rate My Professor, Catalyst, and the UT Course Catalog open and you still don't know what classes to take. This extension tries to streamline most of the unnecessary steps and headaches of registering for classes at UT Austin. @@ -18,20 +21,20 @@ This extension tries to streamline most of the unnecessary steps and headaches o - Display's a weekly schedule based on your saved courses

- +

- +

- +

- +

- +

- +# 2.0 coming soon.... diff --git a/calendar.html b/calendar.html index 9b32b2b9..f65d12cd 100644 --- a/calendar.html +++ b/calendar.html @@ -1,16 +1,42 @@ - + - - - + + + -
+
+
+ +
- - - \ No newline at end of file + + + + + + \ No newline at end of file diff --git a/css/_materialFullCalendar.css b/css/_materialFullCalendar.css index bd918661..3d8f27c7 100644 --- a/css/_materialFullCalendar.css +++ b/css/_materialFullCalendar.css @@ -37,8 +37,6 @@ Colors: Use the following - https://www.google.com/design/spec/style/color.html# */ -/* Remove that awful yellow color and border from today in Schedule */ - .fc-state-highlight { opacity: 0; border: none; @@ -55,6 +53,12 @@ Colors: Use the following - https://www.google.com/design/spec/style/color.html# opacity: 1; } +.html2canvas-container { + width: 3000px !important; + height: 3000px !important; +} + + .fc-time-grid-event.fc-v-event.fc-event:hover { box-shadow: 0 8px 12px 0 rgba(0, 0, 0, 0.3); } @@ -72,11 +76,18 @@ Colors: Use the following - https://www.google.com/design/spec/style/color.html# .fc th { border-style: ridge !important; border-width: 1px !important; - padding: 2px 3px 2px 3px !important; + padding: 4px 3px 0px 3px !important; vertical-align: top !important; + border-left-width: 0; + +} + +.fc-row fc-widget-header { + border-color: transparent; } .fc td { + border-top-width: 0; padding: 3px !important; } @@ -155,10 +166,12 @@ Colors: Use the following - https://www.google.com/design/spec/style/color.html# transform: scale(0, 0); opacity: 1; } + 20% { transform: scale(25, 25); opacity: 1; } + 100% { opacity: 0; transform: scale(40, 40); @@ -279,6 +292,18 @@ body a:visited { font-size: medium; } +.fc td, +.fc th { + border-color: #E7E7E7; + +} + +.fc-time-grid .fc-slats td { + height: 1.5em; + border-bottom: initial; + border-color: #E7E7E7; +} + /* The Close Button */ .close { @@ -306,8 +331,14 @@ body a:visited { box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.2), 0 4px 20px 0 rgba(0, 0, 0, 0.19); } + .cardcontainer { padding: 2px 16px; display: block; transition: width 300ms ease-in-out, height 300ms ease-in-out; +} + + +tbody { + border-width: 0px; } \ No newline at end of file diff --git a/css/options.css b/css/options.css new file mode 100644 index 00000000..95dd4bc7 --- /dev/null +++ b/css/options.css @@ -0,0 +1,81 @@ +.version { + padding: 0px 5px 5px 0px; + text-align: right; +} + +.creator-tag { + margin: 10px 5px 5px 0px; + text-align: center; +} + +.options-card { + width: 400px; + margin-left: auto; + margin-right: auto; + height: auto; + padding-bottom: 5px; +} + +#version-container { + margin-left: auto; + margin-right: auto; + width: 400px; +} + +.options-header { + padding: 16px 16px 0px 16px; + font-size: 20px; +} + +#contributors_container { + text-align: center; + margin-top: 30; + padding: 5px 20px 20px 20px; + width: auto; + margin-right: 20%; + margin-left: 20%; + margin-top: 20px; +} + +#contributor-list { + max-width: 1200px; + margin: 0 auto; + display: grid; + grid-gap: 1rem; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); +} + +.contributor-card { + cursor: pointer; + padding: 5px; + max-width: 1200px; + margin: 0 auto; + text-align: center; + display: grid; + grid-gap: 1rem; +} + +.contributor-card img { + width: 200px; + height: 200px; +} + +.contributor-name { + font-weight: bold; + margin: 0; +} + +.contributor-username { + margin: 0 0 5px 0; + font-style: italic; +} + +.contributor-title { + margin-bottom: 0; + font-size: 15px; +} + +.open-source-tag { + padding: 10px; + font-size: 16px; +} diff --git a/css/popup.css b/css/popup.css index 4507d85b..301ab2a4 100644 --- a/css/popup.css +++ b/css/popup.css @@ -9,7 +9,7 @@ } .container { - padding: 2px 16px; + padding: 3px 16px 3px 12px; } h2 { @@ -23,18 +23,191 @@ li { body { min-width: 370px; min-height: 400px; + position: relative; } -.settingsbut { +.conflict_message{ + font-size:small; + font-weight:bold; + color:red; + margin:5px 5px 5px 10px; +} + +.course_list { + list-style-type: none; + padding: 5px; + margin-bottom: 30px; +} + +.course_list_card { + cursor: pointer; +} + +.course_list_item { + padding: 0px 5px 5px 5px; + overflow-y: auto; + max-height:400px; +} + +.course_list_item_subtext { + font-size:medium; +} + +.empty_message { + font-weight: normal; + font-size: large; + margin: 60px 30px 200px 30px; + text-align: center; +} + +#empty #main { + margin-bottom: 5px; +} + +#empty span { + font-size: small; + display: table; + margin: 0 auto; + font-weight: bold; +} + + +.time_line_days { + display:inline-block; + width: 20%; +} + +.time_line_hours { + margin-left:10px; + display:inline-block; + width: 50%; + text-align:center; +} + +.time_line_location { + float:right; + display:inline-block; + text-align:right; + width: 25%; +} + +.time_line_location_link { + color:#3c87a3; + text-decoration:none; +} + +.more_info_button{ + background: #2196F3; +} + +.remove_button { + background: #F44336; +} + +.register_button { + background: #4CAF50; +} + +.settings_button { + margin-right: 2px; + border: 0px; + border-radius: 50%; + transition: 0.3s; + opacity: 0.5; +} + + +.settings_button:focus { + outline: 0; +} + +.settings_button:hover { + box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.16), 0 4px 15px 0 rgba(0, 0, 0, 0.12); + opacity: 1; +} + +.selected { + box-shadow: 0 0 0 1pt #FF9800; +} + +.settings_button:focus:after:hover { + outline: 0; + transition: 0.3s; +} + +.copy_button { + background-color: transparent; + padding: 0px; + border: none; + font-size: 15px; + cursor: pointer; + border-radius: 50%; + transition: .2s; +} + +.copy_button:focus { + outline: 0; +} + +.shadow { + box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.2), 0 4px 20px 0 rgba(0, 0, 0, 0.16); +} + +i { + padding: 4px 0px; +} + +.copy_button_icon { + color:white; + float:left; + border-radius: 50%; + padding: 3px; + text-shadow: 2px 2px 5px rgba(0, 0, 0, 0.16); + font-size: x-large; +} + +.header_container{ + border-radius: 7px; +} + +.header_buttons { + padding: 5px 10px 5px 10px; + display: flex; + justify-content: space-between; +} + +.header_button { + font-size:15px !important; + margin: 7px !important; +} + + +.clear_button { + background:#4CAF50; +} + +.ris_button { + background:#FF9800; +} + +.schedule_button { + background: #FF0000; +} + +.settings { position: absolute; - bottom: 0; - right: 0; - float: right; - margin-right: 5px; - border: 0px + bottom: 0px; + right: 0px; + display: flex; + vertical-align: middle; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + transition: 0.3s; + padding: 7px 5px 5px 7px; + margin: 0px 5px 0px 0px; + border-radius: 7px; } -.matbut { +.material_button { border: none; outline: none; cursor: pointer; @@ -45,22 +218,74 @@ body { font-size: medium; font-style: bold; box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); - background: #ff9800; -} - -.matbut { position: relative; overflow: hidden; } -.truncate { +.course_name_truncate_box { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 80%; + color:white; + margin:5px; + display:inline-block; + font-size:large; + align-items:center; } -.matbut:after { +.settings_divider { + margin-bottom: 0px; + display:inline-block; +} + +.search_button { + background-color:white; + margin-left: 5px; + margin-right: 3px; +} +.course_list_item_options { + display: none; +} +.import_button { + background-color:white; +} + +.options_button { + background-color:white; + margin-right: 0px; +} + +.settings_icon { + color:#FF9800; +} + +.course_list_item_time_box { + font-weight:bold; + padding:10px; + margin:0px 5px 0px 15px; + font-size:small; +} + +.course_list_item_options_button_container { + border-radius:0px; +} + +.course_list_item_options_buttons{ + float:right; + margin:5px; +} + +.arrow { + float:right; + font-size:small; + display:inline-block; + margin-top:10px; + color:white; + font-family: sans-serif; +} + +.material_button:after { content: ""; position: absolute; top: 50%; @@ -88,6 +313,40 @@ body { transform-origin: 50% 50%; } +.modal { + display: none; + position: fixed; + z-index: 1; + padding-top: 100px; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.4); +} + +.modal-content { + background-color: #fefefe; + margin: auto; + max-height: 85%; + overflow-y: auto; + padding: 20px; + border: 1px solid #888; + width: 50%; +} + +/* The Close Button */ + +.close { + color: #aaaaaa; + float: right; + padding: 5px; + font-size: 28px; + font-weight: bold; +} + + @keyframes ripple { 0% { transform: scale(0, 0); @@ -105,10 +364,200 @@ body { } } -.matbut:focus:not(:active)::after { +.material_button:focus:not(:active)::after { animation: ripple 1s ease-out; } + .card:focus:not(:active)::after { animation: ripple 1s ease-out; +} + + +input { + border-radius: 5px; + color: rgba(0, 0, 45, 0.48) +} + +input:focus { + outline: 0; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +#search-popup { + background: white; + color: #747474; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + position: absolute; + margin: auto; + bottom: 42px; + right: 20px; + padding: 10px; + border-radius: inherit; + width: 120px; +} + + +.flex-container { + display: flex; + flex-direction: column; +} + +.item { + flex: 1 1 auto; +} + +.select-style { + border: 1px solid #979797; + margin: 5px 0px; + border-radius: 5px; + display: none; + background: transparent no-repeat 90% 50%; + position: relative; +} + +.select-style:after { + content: '\e5c5'; + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + color: rgba(0, 0, 45, 0.48); + + position: absolute; + pointer-events: none; + + bottom: 0px; + right: 0px; +} + +.select-style select { + padding: 5px 8px; + border: none; + color: rgba(0, 0, 45, 0.48); + box-shadow: none; + background: transparent; + background-image: none; + -webkit-appearance: none; + appearance: none; + width: 120px; + word-break: normal; + -ms-word-break: normal; + overflow: visible; +} + +.select-style select:focus { + outline: none; +} + +.class_id_input { + display: none; + border: 1px solid #979797; + border-radius: 5px; + margin: 10px 0px; + padding: 5px 8px; +} + +.class_id_input::placeholder { + color: rgba(0, 0, 45, 0.48); +} + +.search-button { + float: right; + font-size: inherit; + padding: 7px 11px; + margin: 8px 0px; + background-color: #FF9800; +} + +#import-export-popup { + background: white; + color: #747474; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + position: absolute; + margin: auto; + bottom: 42px; + right: 10px; + border-radius: inherit; + width: 140px; +} + + +.simple-menu-option { + display: inline-block; + color: rgba(0, 0, 45, 0.48); + border: none; + background-color: white; + font-size: 15px; + overflow: hidden; + vertical-align: middle; + cursor: pointer; + text-align: left; + padding: 10px 0px 5px 5px; + border-radius: 7px; +} + +.simple-menu-option i { + font-size: 19px; + vertical-align: middle; + margin-top: 0px; + margin-left: 0px; + margin-right: 3px; + margin-bottom: 3px; +} + + +.simple-menu-option:hover { + background-color: rgba(177, 175, 175, 0.200); + transition-duration: 0.4s; + /* color: #FF9800; */ +} + +.simple-menu-option:focus { + outline: none; +} + +.hide { + display: none !important; +} + +.meta{ + margin:0; + color:#FF9800; + position: absolute; + bottom: 0px; + left: 0px; + vertical-align: middle; + padding: 7px 5px 5px 7px; + margin: 0px 5px 0px 5px; + font-size: 10px; +} + +.meta-metric{ + font-size: 20px; + font-weight: bold; +} + +.meta-container{ + margin: 5px 5px 10px 5px; +} + +.input-box{ + color: rgba(0, 0, 45, 0.48); + border: 1px solid #8C8C8C; + font-size: 11px; + padding: 5px; + border-radius: 7px; + width: 90%; +} + +.input-box::placeholder { + color: rgba(0, 0, 45, 0.345); } \ No newline at end of file diff --git a/css/styles.css b/css/styles.css index b0755001..ec549bd9 100644 --- a/css/styles.css +++ b/css/styles.css @@ -2,7 +2,7 @@ display: none; position: fixed; z-index: 1; - padding-top: 100px; + padding-top: 75px; left: 0; top: 0; width: 100%; @@ -21,7 +21,26 @@ width: 50%; } -/* The Close Button */ +.loader { + border: 10px solid #f3f3f3; + border-top: 10px solid #FF9800; + border-radius: 50%; + width: 50px; + height: 50px; + display: none; + animation: spin 2s linear infinite; +} + + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} .close { color: #aaaaaa; @@ -35,29 +54,51 @@ font-size: x-large; font-weight: bold; padding-top: 5px; + line-height: 1; padding-left: 5px; margin: 5px 0px 5px 0px; } +.distButton { + vertical-align: bottom; +} + .description { padding: 5px; font-size: 15px; font-weight: normal; } + +.chartloader { + position: absolute; + margin-left: auto; + margin-right: auto; + margin-top: 50px; + left: 0; + right: 0; +} + .profname { margin-left: 5px; padding-bottom: 5px; font-size: medium; - margin-top: 10px; + margin-top: 5px; } .dateTimePlace { margin-left: 5px; + margin-bottom: 0px; + margin-top: 0px; font-size: smaller; font-weight: bold; } +#chartcontainer { + max-width: 100%; + height: 250px; +} + #chart { min-width: auto; max-width: 100%; @@ -92,11 +133,23 @@ cursor: pointer; } -.topbuttons .matbut { +.topbuttons .material-button { display: inline-block; } -.matbut { +.rmp-button { + +} + +.ecis-button { + +} + +.textbook-button{ + +} + +.material-button { border: none; outline: none; cursor: pointer; @@ -108,14 +161,11 @@ font-style: bold; box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4); background: #ff9800; -} - -.matbut { position: relative; overflow: hidden; } -.matbut:after { +.material-button:after { content: ""; position: absolute; top: 50%; @@ -134,17 +184,19 @@ transform: scale(0, 0); opacity: 1; } - 20% { + + 15% { transform: scale(25, 25); opacity: 1; } + 100% { opacity: 0; transform: scale(40, 40); } } -.matbut:focus:not(:active)::after { +.material-button:focus:not(:active)::after { animation: ripple 1s ease-out; } @@ -161,7 +213,8 @@ left: 50%; bottom: 30px; } -.descriptionli{ + +.descriptionli { padding: 0px 5px 5px 5px; } @@ -171,11 +224,47 @@ animation: fadein 0.5s, fadeout 0.5s 2.5s; } +#semesters { + padding: 5px; + margin-right: 10px; + margin-top: 10px; +} + +#semesters:focus { + outline: 0; +} + + +.tooltip { + position: relative; +} + +.tooltip .tooltiptext { + visibility: hidden; + background-color: black; + background:rgba(1,1,1,0.5); + color: #fff; + text-align: left; + border-radius: 6px; + font-size: 10px; + max-width: 100px; + margin-left: 5px; + padding: 5px 10px; + z-index: 2; + position: absolute; +} + +.tooltip:hover .tooltiptext { + visibility: visible; +} + + @-webkit-keyframes fadein { from { bottom: 0; opacity: 0; } + to { bottom: 30px; opacity: 1; @@ -187,6 +276,7 @@ bottom: 0; opacity: 0; } + to { bottom: 30px; opacity: 1; @@ -198,6 +288,7 @@ bottom: 30px; opacity: 1; } + to { bottom: 0; opacity: 0; @@ -209,8 +300,9 @@ bottom: 30px; opacity: 1; } + to { bottom: 0; opacity: 0; } -} \ No newline at end of file +} diff --git a/grades.db b/grades.db index a866f83f..8048327d 100644 Binary files a/grades.db and b/grades.db differ diff --git a/icons/icon128.png b/icons/icon128.png index 2596067a..a875bcb4 100644 Binary files a/icons/icon128.png and b/icons/icon128.png differ diff --git a/icons/icon16.png b/icons/icon16.png index b81e4475..ac603ca6 100644 Binary files a/icons/icon16.png and b/icons/icon16.png differ diff --git a/icons/icon32.png b/icons/icon32.png index ba29380e..5f245778 100644 Binary files a/icons/icon32.png and b/icons/icon32.png differ diff --git a/icons/icon48.png b/icons/icon48.png index fcd2e098..acda2012 100644 Binary files a/icons/icon48.png and b/icons/icon48.png differ diff --git a/js/Template.js b/js/Template.js new file mode 100644 index 00000000..a58f222b --- /dev/null +++ b/js/Template.js @@ -0,0 +1,196 @@ +class Template {} + +Template.Main = class { + static modal() { + return ``; + } + static extension_button() { + return ``; + } +}; +Template.Catalog = class { + static loading() { + return `
+
+
+

Loading Courses

+

Failed to Load Courses

+
+ +
`; + } +}; +Template.UTPlanner = class { + static modal() { + return ``; + } +}; +Template.Calendar = class { + static line(line) { + let { days, start_time, end_time, location_link, location_full } = line; + return `

+ ${days}: + ${start_time} to ${end_time} + + ${location_full} + +

`; + } + static modal() { + return `